# pytorch安卓部署图像识别 **Repository Path**: taritaris/pytorchImgStud ## Basic Information - **Project Name**: pytorch安卓部署图像识别 - **Description**: pytorch安卓部署图像识别 包括模型转换,安卓端处理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-10-31 - **Last Updated**: 2023-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Pytorch PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。 ### 首先是使用pytorch #### cuda 和 cudnn cuDNN是NVIDIA专门针对深度神经网络中的基础操作而设计的基于GPU的加速库。cuDNN为深度神经网络中的标准流程提供了高度优化的实现方式,例如卷积、池化、归一化以及激活层的前向以及后向过程。当开发者们需要用到深度学习GPU加速时,才安装cuDNN库,工作速度相较CPU快很多。 需要安装cuda 和 cudnn 库的卸载与安装,可以参考以下教程: [cuda和cudnn安装](https://zhuanlan.zhihu.com/p/102966512) 安装完成后,可按照下面教程安装pytorch: 此处需要用到anaconda:Anaconda是一个安装、管理Python相关包的软件,其包含了conda、Python等180多个科学包及其依赖项,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换。 [pytorch安装](http://t.csdnimg.cn/j539b) 另外,如需在pycharm进行操作,可安装以下教程配置虚拟环境: [pycharm配置讯环境](http://t.csdnimg.cn/E8JR8)(此步需要完成pytorch环境的安装,有anaconda环境) 所有环境准备好以后,查看配置是否完成: ```python import torch # 查看版本 print(torch.__version__) # 查看gup是否可用 print(torch.cuda.is_available()) # 返回gpu个数 print(torch.cuda.device_count()) # 查看对应cuda版本号 print(torch.backends.cudnn.version()) print(torch.version.cuda) ``` 现在就开始准备移植所需的文件吧。 ### pt模型和pth模型的不同 PT模型是一种完整的模型文件,不仅包含了模型的参数,还包括了模型的结构,可以直接被加载到模型中,开始进行训练和预测。而pth文件则只保存了模型的参数,因此在加载模型时需要重新定义模型结构。 所以,需要一个安卓端的pt模型 这里我们使用到图像识别的resnet101模型,新建一个py文件,运行以下代码: ### 模型转换 ```python import torch import torchvision model = torchvision.models.resnet101(pretrained=True) model.eval() example = torch.rand(1, 3, 224, 224) traced_script_module = torch.jit.trace(model, example) traced_script_module.save("model101.pt") ``` import torch 和 import torchvision 是导入PyTorch和PyTorch的计算机视觉库。 - model = torchvision.models.resnet101(pretrained=True) 加载一个预训练的ResNet-101模型。pretrained=True表示使用预训练的权重,这些权重是在ImageNet数据集上训练得到的。 - model.eval() 将模型设置为评估模式。这在推理时使用,例如在测试集或生产环境中。 - example = torch.rand(1, 3, 224, 224) 创建一个随机输入张量,大小为[1, 3, 224, 224],模拟一个输入图像。 - traced_script_module = torch.jit.trace(model, example) 使用torch.jit.trace将模型转换为一个TorchScript模型。TorchScript是一种可以优化PyTorch模型的方式,使其在没有Python运行环境的情况下运行。 - traced_script_module.save("model101.pt") 将转换后的模型保存为"model101.pt"。 ### 标签获取 这样,我们就获得了一个图像识别的pt模型。 然后,需要找到该模型的标签文件,我们从以下项目中获取 [https://github.com/ethereon/caffe-tensorflow/blob/master/examples/imagenet/imagenet-classes.txt](https://github.com/ethereon/caffe-tensorflow/blob/master/examples/imagenet/imagenet-classes.txt) 拿到txt标签文件以后,我们需要转换成java中String[]的形式,所以稍微处理一下, ```python import re with open('imagenet-classes.txt','r',encoding='utf-8') as f: text = f.read() text = re.sub(r'^', '"', text, flags=re.M) text = re.sub(r'$', '",', text, flags=re.M) with open('imagenet-classes.txt','w',encoding='utf-8') as f: f.write(text) ``` 这里是给开头和结尾都加上了"(双引号)以及结尾用,(逗号)分隔。 具体代码逻辑如下: 1. TakePicturesActivity: 主Activity,用于打开相机或相册,获取图片并显示。 2. initView(): 初始化视图控件,如ImageView、TextView和Button。 3. startCamera(): 打开系统相册,调用startActivityForResult获取图片。 4. onActivityResult(): 接收选择的图片,将图片显示在ImageView上。 5. imgClassify(): 使用PyTorch模型对图片进行图像分类,将结果显示在TextView上。 6. Module: PyTorch的模型类,用于加载pt模型并进行推理。 7. Tensor: PyTorch的张量类,用于转换Bitmap为模型输入张量。 8. TensorImageUtils: PyTorch的图片工具类,用于图像数据的预处理。 9. ImageNetClasses: 包含ImageNet数据集的所有类别名称。 主要步骤是: 1. 初始化视图控件 2. 打开相册,获取图片uri 3. 将图片解码为Bitmap 4. 用TensorImageUtils处理为模型输入张量 5. 加载PyTorch模型并进行推理 6. 处理输出结果,显示分类类别名称