11bd4fe43Sopenharmony_ci### 4.2.3 分类网 21bd4fe43Sopenharmony_ci 31bd4fe43Sopenharmony_ci#### 4.2.3.1 训练思路 41bd4fe43Sopenharmony_ci 51bd4fe43Sopenharmony_ci一般来讲,训练出一个神经网络模型,做成端到端模型并可视化需要经过视频录制、数据集制作和标注、模型训练(本地)、模型转换(模型-caffe)、模型量化、仿真、板端推理可视化。本章节以垃圾分类为例,重点介绍分类网(resnet18),从视频录制、数据集制作和标注、模型训练、模型转换来展开论述。 61bd4fe43Sopenharmony_ci 71bd4fe43Sopenharmony_ci训练流程图如下: 81bd4fe43Sopenharmony_ci 91bd4fe43Sopenharmony_ci 101bd4fe43Sopenharmony_ci 111bd4fe43Sopenharmony_ci#### 4.2.3.2 视频录制 121bd4fe43Sopenharmony_ci 131bd4fe43Sopenharmony_ci* 参考[store_sample操作指导](../store_sample/README.md)的步骤进行视频的录制。 141bd4fe43Sopenharmony_ci* 将录制好的视频按类整理(这里自行创建目录即可),可参考下图: 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci 本文档以垃圾分类训练图片为例进行指导和说明。本文录制了20种垃圾样例视频,具体垃圾样本如下表所示: 171bd4fe43Sopenharmony_ci 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ci 201bd4fe43Sopenharmony_ci| **垃圾性质** | **种类** | **具体样本** | 211bd4fe43Sopenharmony_ci| ------------ | -------- | ---------------------------------------------- | 221bd4fe43Sopenharmony_ci| 厨余垃圾 | 6 | 蘑菇、葱、茄子、西瓜皮、蛋壳、鱼骨 | 231bd4fe43Sopenharmony_ci| 有害垃圾 | 4 | 废旧电池、过期化妆品、医用纱布、创可贴 | 241bd4fe43Sopenharmony_ci| 可回收垃圾 | 6 | 易拉罐、旧手提包、牛奶盒、牙刷、旧架子、旧玩偶 | 251bd4fe43Sopenharmony_ci| 其他垃圾 | 4 | 盘子、砖块、坏马桶、烟蒂 | 261bd4fe43Sopenharmony_ci 271bd4fe43Sopenharmony_ci* 视频录制注意事项: 281bd4fe43Sopenharmony_ci 291bd4fe43Sopenharmony_ci * 录制视频时保证训练的可靠性,素材全部在镜头之内,防止素材跑出镜头的情况 301bd4fe43Sopenharmony_ci 311bd4fe43Sopenharmony_ci * 可以选不同的背景色来录制,如白色、绿色等,本次示例选择白色和绿色背景色来录制 321bd4fe43Sopenharmony_ci 331bd4fe43Sopenharmony_ci * 对垃圾分类样本进行视频码流采集,采集过程中可通过镜头平移和旋转的方法来录制,增加样本的多样性 341bd4fe43Sopenharmony_ci 351bd4fe43Sopenharmony_ci* 处理录制好的视频: 361bd4fe43Sopenharmony_ci 371bd4fe43Sopenharmony_ci 本次录制的样例视频为.h264格式,分辨率为1920*1080,实际使用时,建议将h264格式转成通用mp4格式的视频,可使用格式工厂或者其他工具进行格式转换。格式工厂的具体转换步骤可参考《[使用格式工厂将H264文件转成mp4文件](https://blog.csdn.net/Wu_GuiMing/article/details/123717780)》。 381bd4fe43Sopenharmony_ci 391bd4fe43Sopenharmony_ci#### 4.2.3.3 数据集制作和标注 401bd4fe43Sopenharmony_ci 411bd4fe43Sopenharmony_ci**步骤1:搭建FFmpeg环境:** 421bd4fe43Sopenharmony_ci 431bd4fe43Sopenharmony_ci* 进入[FFmpeg网站](https://ffmpeg.org/download.html),选择windows版本,直接下载exe文件即可,本文的FFmpeg版本仅做参考,开发者可参考下图选择最新版本即可。 441bd4fe43Sopenharmony_ci 451bd4fe43Sopenharmony_ci 461bd4fe43Sopenharmony_ci 471bd4fe43Sopenharmony_ci 481bd4fe43Sopenharmony_ci 491bd4fe43Sopenharmony_ci* 下载完成后解压该文件,本示例解压在D盘,这里自行解压即可,如下图所示: 501bd4fe43Sopenharmony_ci 511bd4fe43Sopenharmony_ci 521bd4fe43Sopenharmony_ci 531bd4fe43Sopenharmony_ci 541bd4fe43Sopenharmony_ci 551bd4fe43Sopenharmony_ci* 复制\bin文件夹的目录 561bd4fe43Sopenharmony_ci 571bd4fe43Sopenharmony_ci 581bd4fe43Sopenharmony_ci 591bd4fe43Sopenharmony_ci* 在“此电脑”上 右键-属性-高级系统设置,在高级选项卡点击环境变量,如下图所示: 601bd4fe43Sopenharmony_ci 611bd4fe43Sopenharmony_ci 621bd4fe43Sopenharmony_ci 631bd4fe43Sopenharmony_ci* 在系统变量下找到path,然后点击编辑,再点新建,将刚才复制的\bin\地址粘贴进去,如下图所示: 641bd4fe43Sopenharmony_ci 651bd4fe43Sopenharmony_ci 661bd4fe43Sopenharmony_ci 671bd4fe43Sopenharmony_ci* windows+R键,运行cmd,输入ffmpeg,若显示如下,则表示安装成功。 681bd4fe43Sopenharmony_ci 691bd4fe43Sopenharmony_ci 701bd4fe43Sopenharmony_ci 711bd4fe43Sopenharmony_ci**步骤2:制作数据集** 721bd4fe43Sopenharmony_ci 731bd4fe43Sopenharmony_ci* 在dos窗口下,将路径切换到存储视频的目录下,本示例路径如下图所示: 741bd4fe43Sopenharmony_ci 751bd4fe43Sopenharmony_ci 761bd4fe43Sopenharmony_ci 771bd4fe43Sopenharmony_ci* 输入下面的命令,即可实现素材的制作,本实例每一秒截取一张。以如下图所示: 781bd4fe43Sopenharmony_ci 791bd4fe43Sopenharmony_ci``` 801bd4fe43Sopenharmony_ciffmpeg –i xxx.mp4 –r 1 –y xxx_%06d.png # xxx为你视频文件的名字 811bd4fe43Sopenharmony_ci``` 821bd4fe43Sopenharmony_ci 831bd4fe43Sopenharmony_ci 841bd4fe43Sopenharmony_ci 851bd4fe43Sopenharmony_ci* 截取成功后,即可在路径下显示png格式的素材,如下图所示: 861bd4fe43Sopenharmony_ci 871bd4fe43Sopenharmony_ci 881bd4fe43Sopenharmony_ci 891bd4fe43Sopenharmony_ci**步骤3:数据清洗** 901bd4fe43Sopenharmony_ci 911bd4fe43Sopenharmony_ci* 数据获取成功之后,需要对数据进行清洗,即对数据进行重新审查和校验的过程,目的在于删除不完整的数据、错误的数据、重复的数据,以便更好的进行数据标注,保证最终模型训练的效果。 921bd4fe43Sopenharmony_ci 931bd4fe43Sopenharmony_ci**步骤4:数据标注** 941bd4fe43Sopenharmony_ci 951bd4fe43Sopenharmony_ci* 本次示例以分类网制作素材集,首先制作分类目录,建议按照 标号_垃圾性质_垃圾名称来分类,可参考下图: 961bd4fe43Sopenharmony_ci 971bd4fe43Sopenharmony_ci 981bd4fe43Sopenharmony_ci 991bd4fe43Sopenharmony_ci**分类网除正常的分类目标外,最后还需添加一类作为背景集,背景集选择常用背景,防止误报,上图21_Other_background为背景集。** 1001bd4fe43Sopenharmony_ci 1011bd4fe43Sopenharmony_ci* 将制作好的垃圾素材放置该目录下,素材命名需遵循分类规则,最好数据标注前缀跟上一层folder同名,如下图所示: 1021bd4fe43Sopenharmony_ci 1031bd4fe43Sopenharmony_ci 1041bd4fe43Sopenharmony_ci 1051bd4fe43Sopenharmony_ci对垃圾分类样本图片随机分组分别作为训练数据集及验证数据集(注:分组过程中可对图片进行随机采样,也可以对码流样本随机采样,尝试构建多样性验证集以有效评估分类模型),建议对采样数据10%用作验证集即可。 1061bd4fe43Sopenharmony_ci 1071bd4fe43Sopenharmony_ci在模型训练测和后端推理测需要1920*1080进行缩放和裁剪,resize为256*256,crop为224*224。 1081bd4fe43Sopenharmony_ci 1091bd4fe43Sopenharmony_ci#### 4.2.3.4 分类网本地训练 1101bd4fe43Sopenharmony_ci 1111bd4fe43Sopenharmony_ci##### 4.2.3.4.1 本地训练环境搭建 1121bd4fe43Sopenharmony_ci 1131bd4fe43Sopenharmony_ci **本地训练环境搭建须知** 1141bd4fe43Sopenharmony_ci 1151bd4fe43Sopenharmony_ci* 本文环境采用2张NVIDIA GPU服务器环境来做训练,训练环境如下图所示: 1161bd4fe43Sopenharmony_ci 1171bd4fe43Sopenharmony_ci 1181bd4fe43Sopenharmony_ci 1191bd4fe43Sopenharmony_ci**本地环境搭建** 1201bd4fe43Sopenharmony_ci 1211bd4fe43Sopenharmony_ci* 安装需求 1221bd4fe43Sopenharmony_ci 1231bd4fe43Sopenharmony_ci * Python 3.6+ 1241bd4fe43Sopenharmony_ci 1251bd4fe43Sopenharmony_ci * PyTorch 1.3+ 1261bd4fe43Sopenharmony_ci 1271bd4fe43Sopenharmony_ci * MMCV 1281bd4fe43Sopenharmony_ci 1291bd4fe43Sopenharmony_ci * 兼容的MMClassification和MMCV版本如下。请安装正确版本的MMCV,以避免安装问题,如下表所示。 1301bd4fe43Sopenharmony_ci 1311bd4fe43Sopenharmony_ci 1321bd4fe43Sopenharmony_ci 1331bd4fe43Sopenharmony_ci**软件包安装** 1341bd4fe43Sopenharmony_ci 1351bd4fe43Sopenharmony_ci 本文所有的环境都是基于本地linux 服务器版本进行安装。 1361bd4fe43Sopenharmony_ci 1371bd4fe43Sopenharmony_ci* 步骤1:Anaconda安装 1381bd4fe43Sopenharmony_ci 1391bd4fe43Sopenharmony_ci 首先下载anaconda安装脚本,在有GPU环境的服务器下,本文选择Anaconda3-5.2.0-Linux-x86_64,切换到安装目录下,在linux命令端输入: 1401bd4fe43Sopenharmony_ci 1411bd4fe43Sopenharmony_ci ```sh 1421bd4fe43Sopenharmony_ci wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh 1431bd4fe43Sopenharmony_ci ``` 1441bd4fe43Sopenharmony_ci 1451bd4fe43Sopenharmony_ci 如下图所示: 1461bd4fe43Sopenharmony_ci 1471bd4fe43Sopenharmony_ci 1481bd4fe43Sopenharmony_ci 1491bd4fe43Sopenharmony_ci 由于**Anaconda3-5.2.0-Linux-x86_64.sh**文件较大,下载过程需要耐心等待,下载成功后,在下载目录下即可看到该文件,如下图所示: 1501bd4fe43Sopenharmony_ci 1511bd4fe43Sopenharmony_ci 1521bd4fe43Sopenharmony_ci 1531bd4fe43Sopenharmony_ci下载成功后,安装Anaconda,在命令行输入下面的命令,如下图所示: 1541bd4fe43Sopenharmony_ci 1551bd4fe43Sopenharmony_ci```shell 1561bd4fe43Sopenharmony_cibash Anaconda3-5.2.0-Linux-x86_64.sh 1571bd4fe43Sopenharmony_ci``` 1581bd4fe43Sopenharmony_ci 1591bd4fe43Sopenharmony_ci 1601bd4fe43Sopenharmony_ci 1611bd4fe43Sopenharmony_ci按enter键,即可开始安装,如下图所示: 1621bd4fe43Sopenharmony_ci 1631bd4fe43Sopenharmony_ci 1641bd4fe43Sopenharmony_ci 1651bd4fe43Sopenharmony_ci在Do you accept the license terms? [yes|no],输入yes 1661bd4fe43Sopenharmony_ci 1671bd4fe43Sopenharmony_ci 1681bd4fe43Sopenharmony_ci 1691bd4fe43Sopenharmony_ci稍等片刻等待安装完成。若安装成功,输入conda --version,即可显示版本号,如下图所示: 1701bd4fe43Sopenharmony_ci 1711bd4fe43Sopenharmony_ci 1721bd4fe43Sopenharmony_ci 1731bd4fe43Sopenharmony_ci若运行过程中出现:conda command not found类似字样,需配置下环境,输入: 1741bd4fe43Sopenharmony_ci 1751bd4fe43Sopenharmony_ci``` shell 1761bd4fe43Sopenharmony_ciexport PATH="/home/xxx/anaconda3/bin:$PATH" 1771bd4fe43Sopenharmony_ci# /home/xxx/anaconda3/ 需根据开发者服务器实际路径进行替换,替换成功后,退出terminal并再次打开terminal即可。 1781bd4fe43Sopenharmony_ci``` 1791bd4fe43Sopenharmony_ci 1801bd4fe43Sopenharmony_ci创建conda虚拟环境,并激活,由于安装包较大,在安装之前先配置下清华源,加速下载,输入: 1811bd4fe43Sopenharmony_ci 1821bd4fe43Sopenharmony_ci```sh 1831bd4fe43Sopenharmony_ciconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 1841bd4fe43Sopenharmony_ciconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 1851bd4fe43Sopenharmony_ci``` 1861bd4fe43Sopenharmony_ci 1871bd4fe43Sopenharmony_ci 1881bd4fe43Sopenharmony_ci 1891bd4fe43Sopenharmony_ci* 步骤2:安装open-mmlab和python 1901bd4fe43Sopenharmony_ci 1911bd4fe43Sopenharmony_ci在服务器路径下输入``conda create -n open-mmlab python=3.6``,本环境安装的python版本为3.6.13,如下图所示: 1921bd4fe43Sopenharmony_ci 1931bd4fe43Sopenharmony_ci 1941bd4fe43Sopenharmony_ci 1951bd4fe43Sopenharmony_ci在安装开始会提示The following packages will be downloaded,The following NEW packages will be INSTALLED字样,若出现Proceed ([y]/n)? y,选择y,如下图所示: 1961bd4fe43Sopenharmony_ci 1971bd4fe43Sopenharmony_ci 1981bd4fe43Sopenharmony_ci 1991bd4fe43Sopenharmony_ci 2001bd4fe43Sopenharmony_ci 2011bd4fe43Sopenharmony_ci若下载过程中出现CondaError: Downloaded bytes did not match Content-Length,表示某些包没有下载成功,这里与网络速度有关,再次输入``conda create -n open-mmlab python=3.6``下载即可,系统会自动下载没有下载成功的软件,如下图所示: 2021bd4fe43Sopenharmony_ci 2031bd4fe43Sopenharmony_ci 2041bd4fe43Sopenharmony_ci 2051bd4fe43Sopenharmony_ci载成功后,会出现如下字样,如下图所示: 2061bd4fe43Sopenharmony_ci 2071bd4fe43Sopenharmony_ci 2081bd4fe43Sopenharmony_ci 2091bd4fe43Sopenharmony_ci* 步骤3:激活虚拟环境 2101bd4fe43Sopenharmony_ci 2111bd4fe43Sopenharmony_ci输入``conda activate open-mmlab``命令,若出现如下图所示的(open-mmlab) 显示,表示显示成功。 2121bd4fe43Sopenharmony_ci 2131bd4fe43Sopenharmony_ci 2141bd4fe43Sopenharmony_ci 2151bd4fe43Sopenharmony_ci若出现激活击败的情况,按照如下步骤操作即可,如下图所示: 2161bd4fe43Sopenharmony_ci 2171bd4fe43Sopenharmony_ci```shell 2181bd4fe43Sopenharmony_ci# 激活环 2191bd4fe43Sopenharmony_cisource activate 2201bd4fe43Sopenharmony_ci 2211bd4fe43Sopenharmony_ci# 退出环境 2221bd4fe43Sopenharmony_cisource deactivate 2231bd4fe43Sopenharmony_ciconda activate open-mmlab 2241bd4fe43Sopenharmony_ci``` 2251bd4fe43Sopenharmony_ci 2261bd4fe43Sopenharmony_ci 2271bd4fe43Sopenharmony_ci 2281bd4fe43Sopenharmony_ci**注:以下软件包和环境的安装均需要在(open-mmlab)虚拟环境下进行。** 2291bd4fe43Sopenharmony_ci 2301bd4fe43Sopenharmony_ci* 步骤4:安装跟CUDA版本对应的torch 2311bd4fe43Sopenharmony_ci 2321bd4fe43Sopenharmony_ci 例如:本文的CUDA版本为10.0,可通过nvcc --verision查看,如下图所示: 2331bd4fe43Sopenharmony_ci 2341bd4fe43Sopenharmony_ci  2351bd4fe43Sopenharmony_ci 2361bd4fe43Sopenharmony_ciCUDA匹配的torch和torchversion版本,可通过如下链接查看,这里需读者仔细确认,以免安装错误,耽误安装时间和开发效率。 2371bd4fe43Sopenharmony_ci 2381bd4fe43Sopenharmony_ci``` 2391bd4fe43Sopenharmony_cihttps://download.pytorch.org/whl/cu100/torch_stable.html 2401bd4fe43Sopenharmony_ci``` 2411bd4fe43Sopenharmony_ci 2421bd4fe43Sopenharmony_ci本环境CUDA版本为10.0,torch版本为1.4.0,torchvision版本为0.4.0, 安装torch包,输入``pip3 install torch==1.4.0``命令,若安装成功,则出现Successfully installed torch-1.4.0 2431bd4fe43Sopenharmony_ci 2441bd4fe43Sopenharmony_ci 2451bd4fe43Sopenharmony_ci 2461bd4fe43Sopenharmony_ci* 步骤5:安装跟CUDA版本对应torchversion 2471bd4fe43Sopenharmony_ci 2481bd4fe43Sopenharmony_ci输入下面的命令,安装torchvision包,如下图所示: 2491bd4fe43Sopenharmony_ci 2501bd4fe43Sopenharmony_ci``` 2511bd4fe43Sopenharmony_cipip3 install torchvision==0.4.0 2521bd4fe43Sopenharmony_ci``` 2531bd4fe43Sopenharmony_ci 2541bd4fe43Sopenharmony_ci 2551bd4fe43Sopenharmony_ci 2561bd4fe43Sopenharmony_ci* 步骤6:安装mmcv包 2571bd4fe43Sopenharmony_ci 2581bd4fe43Sopenharmony_ci 输入下面的命令,安装mmcv,如下图所示: 2591bd4fe43Sopenharmony_ci 2601bd4fe43Sopenharmony_ci``` 2611bd4fe43Sopenharmony_cipip3 install mmcv 2621bd4fe43Sopenharmony_ci``` 2631bd4fe43Sopenharmony_ci 2641bd4fe43Sopenharmony_ci 2651bd4fe43Sopenharmony_ci 2661bd4fe43Sopenharmony_ci**代码下载** 2671bd4fe43Sopenharmony_ci 2681bd4fe43Sopenharmony_ci* 步骤1:下载mmclassification代码到本地服务器 2691bd4fe43Sopenharmony_ci 2701bd4fe43Sopenharmony_ci在虚拟环境(open-mmlab)下,下载v0.11.0的代码,下载链接如下: 2711bd4fe43Sopenharmony_ci 2721bd4fe43Sopenharmony_cihttps://github.com/open-mmlab/mmclassification/releases/tag/v0.11.0 ,即可将代码下载至相应目录下,本地训练代码文件名为mmclassification,开发者可自行进行命名,如下图所示: 2731bd4fe43Sopenharmony_ci 2741bd4fe43Sopenharmony_ci 2751bd4fe43Sopenharmony_ci 2761bd4fe43Sopenharmony_cicd mmclassification到该目录下,ls查看代码结构,如下图所示: 2771bd4fe43Sopenharmony_ci 2781bd4fe43Sopenharmony_ci 2791bd4fe43Sopenharmony_ci 2801bd4fe43Sopenharmony_ci* 步骤2:安装mmclassfication所需环境和库 2811bd4fe43Sopenharmony_ci 2821bd4fe43Sopenharmony_ci在mmclassification路径下,输入``pip install -e .``,这里需要注意提前安装好mmcv。 2831bd4fe43Sopenharmony_ci 2841bd4fe43Sopenharmony_ci 2851bd4fe43Sopenharmony_ci 2861bd4fe43Sopenharmony_ci至此环境搭建结束。 2871bd4fe43Sopenharmony_ci 2881bd4fe43Sopenharmony_ci##### 4.2.3.4.2 本地环境进行模型训练 2891bd4fe43Sopenharmony_ci 2901bd4fe43Sopenharmony_ci* 步骤1:本地训练素材的准备和代码修改 2911bd4fe43Sopenharmony_ci 2921bd4fe43Sopenharmony_ci * 本地训练素材准备请参考4.2.3分类网(resnet18)章节中的4.2.3.2视频录制和4.2.3.3数据集制作和标注章节中的内容,这里不再详细阐述。 2931bd4fe43Sopenharmony_ci 2941bd4fe43Sopenharmony_ci * 将生成的数据集存放在本地服务器路径下(一般为data区),本文路径如下图所示: 2951bd4fe43Sopenharmony_ci 2961bd4fe43Sopenharmony_ci  2971bd4fe43Sopenharmony_ci 2981bd4fe43Sopenharmony_ci  2991bd4fe43Sopenharmony_ci 3001bd4fe43Sopenharmony_ci * 接下来修改开源代码,需配置数据集路径,该文件路径在/mmclassification/configs/_base_/datasets目录下,这里需替换自己的数据集实际路径,安装下图所示进行修改,包括mean、std、resize、crop、data_prefix确认修改,这个务必配置对,否则影响模型训练的效果。 3011bd4fe43Sopenharmony_ci 3021bd4fe43Sopenharmony_ci  3031bd4fe43Sopenharmony_ci 3041bd4fe43Sopenharmony_ci * 修改/mmclassification/configs/_base_/models目录下resnet18.py,按下图修改即可: 3051bd4fe43Sopenharmony_ci 3061bd4fe43Sopenharmony_ci 3071bd4fe43Sopenharmony_ci 3081bd4fe43Sopenharmony_ci* 步骤2:本地模型训练 3091bd4fe43Sopenharmony_ci 3101bd4fe43Sopenharmony_ci切换到mmclassification目录下,运行下面的命令: 3111bd4fe43Sopenharmony_ci 3121bd4fe43Sopenharmony_ci```shell 3131bd4fe43Sopenharmony_cish ./tools/dist_train.sh configs/resnet/resnet18_b32x8_imagenet.py 2 --work-dir ./ckpt 3141bd4fe43Sopenharmony_ci# 对上述命令阐述如下: 3151bd4fe43Sopenharmony_ci# dist_train.sh – 训练sh脚本 3161bd4fe43Sopenharmony_ci# configs/resnet/resnet18_b32x8_imagenet.py – 训练依赖的配置 3171bd4fe43Sopenharmony_ci# 2 – GPU个数 3181bd4fe43Sopenharmony_ci# --work-dir ./ckp – 模型存放的路径 3191bd4fe43Sopenharmony_ci``` 3201bd4fe43Sopenharmony_ci 3211bd4fe43Sopenharmony_ci若上述配置成功,即可进行训练,如下图所示: 3221bd4fe43Sopenharmony_ci 3231bd4fe43Sopenharmony_ci 3241bd4fe43Sopenharmony_ci 3251bd4fe43Sopenharmony_ci由于训练过程消耗时间较长,请耐心等待,epoch可根据实际情况进行设置,观察训练是否收敛,准确率在一段时间内稳定不再上升时,代表训练结束,如下图所示: 3261bd4fe43Sopenharmony_ci 3271bd4fe43Sopenharmony_ci 3281bd4fe43Sopenharmony_ci 3291bd4fe43Sopenharmony_ci进入ckpt文件夹,即可查看训练出来的pytorch模型,如下图所示: 3301bd4fe43Sopenharmony_ci 3311bd4fe43Sopenharmony_ci 3321bd4fe43Sopenharmony_ci 3331bd4fe43Sopenharmony_ci#### 4.2.3.5 PytorchCaffe 方案 3341bd4fe43Sopenharmony_ci 3351bd4fe43Sopenharmony_ci目前 NNIE 配套软件及工具链仅支持以 Caffe 框架,使用其他框架的网络模型需要转化为Caffe框架下的模型,具体转换过程如下。 3361bd4fe43Sopenharmony_ci 3371bd4fe43Sopenharmony_ci**(1)环境搭建** 3381bd4fe43Sopenharmony_ci 3391bd4fe43Sopenharmony_ci模型转换需要依赖torch和torchvison,我们选择版本为torch为**1.4.0**,torchvision为**0.5.0**,python版本为**3.6.9**,可通过pip或者conda进行安装,若本地训练时已经安装,该步骤可以省略。若没有安装,可参考如下命令进行安装: 3401bd4fe43Sopenharmony_ci 3411bd4fe43Sopenharmony_ci``` 3421bd4fe43Sopenharmony_cipip3 install torch==1.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 3431bd4fe43Sopenharmony_cipip3 install torchvision==0.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 3441bd4fe43Sopenharmony_cipip3 install google -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 3451bd4fe43Sopenharmony_cipip3 install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 3461bd4fe43Sopenharmony_ci``` 3471bd4fe43Sopenharmony_ci 3481bd4fe43Sopenharmony_ci**(2)开源代码的下载** 3491bd4fe43Sopenharmony_ci 3501bd4fe43Sopenharmony_ci* 步骤1:下载pytorch2caffe代码,链接如下: 3511bd4fe43Sopenharmony_ci 3521bd4fe43Sopenharmony_ci``` 3531bd4fe43Sopenharmony_cihttps://codeload.github.com/xxradon/PytorchToCaffe/zip/refs/heads/master 3541bd4fe43Sopenharmony_ci``` 3551bd4fe43Sopenharmony_ci 3561bd4fe43Sopenharmony_ci* 步骤2:下载visionmaster代码,链接如下: 3571bd4fe43Sopenharmony_ci 3581bd4fe43Sopenharmony_ci``` 3591bd4fe43Sopenharmony_cihttps://github.com/pytorch/vision/releases/tag/v0.9.1 3601bd4fe43Sopenharmony_ci``` 3611bd4fe43Sopenharmony_ci 3621bd4fe43Sopenharmony_ci下载成功后,解压该文件,存放在服务器目录下,并将vision-0.9.1拷贝至PytorchToCaffe-master目录下,如下图所示: 3631bd4fe43Sopenharmony_ci 3641bd4fe43Sopenharmony_ci 3651bd4fe43Sopenharmony_ci 3661bd4fe43Sopenharmony_ci可将代码文件自主命名,本文命名为:pytorch_to_caffe_master,如下图所示: 3671bd4fe43Sopenharmony_ci 3681bd4fe43Sopenharmony_ci 3691bd4fe43Sopenharmony_ci 3701bd4fe43Sopenharmony_ci 3711bd4fe43Sopenharmony_ci 3721bd4fe43Sopenharmony_ci**注:本文以基于renet18网络训练出来的垃圾分类模型进行阐述。** 3731bd4fe43Sopenharmony_ci 3741bd4fe43Sopenharmony_ci* 步骤3:接下来对开源代码进行适配,将pytorch_to_caffe_master/Caffe目录下的layer_param.py文件中的class Layer_param()接口进行修改,如下图所示: 3751bd4fe43Sopenharmony_ci 3761bd4fe43Sopenharmony_ci 3771bd4fe43Sopenharmony_ci 3781bd4fe43Sopenharmony_ci* 步骤3:对pytorch_to_caffe_master/example/resnet_pytorch_2_caffe.py进行修改,如下图所示: 3791bd4fe43Sopenharmony_ci 3801bd4fe43Sopenharmony_ci 3811bd4fe43Sopenharmony_ci 3821bd4fe43Sopenharmony_ci**注意:** 3831bd4fe43Sopenharmony_ci 3841bd4fe43Sopenharmony_ci```shell 3851bd4fe43Sopenharmony_ci# 若采用GPU去转模型,只需要将 3861bd4fe43Sopenharmony_cicheckpoint = torch.load('/home/hispark/code/pytorch_to_caffe_master/latest.pth',map_location = 'cpu') 3871bd4fe43Sopenharmony_ci# 改成 3881bd4fe43Sopenharmony_cicheckpoint = torch.load("/home/hispark/code/pytorch_to_caffe_master/latest.pth") 3891bd4fe43Sopenharmony_ci# 其他保持不变即可。 3901bd4fe43Sopenharmony_ci``` 3911bd4fe43Sopenharmony_ci 3921bd4fe43Sopenharmony_ci* 步骤4:修改/visionmaster/torchvision/models/resnet.py,如下图所示: 3931bd4fe43Sopenharmony_ci 3941bd4fe43Sopenharmony_ci 3951bd4fe43Sopenharmony_ci 3961bd4fe43Sopenharmony_ci**(3)模型转换及结果生成** 3971bd4fe43Sopenharmony_ci 3981bd4fe43Sopenharmony_ci* 模型转换时,在服务器输入:**python3.6 example/resnet_pytorch_2_caffe.py**,如下图所示: 3991bd4fe43Sopenharmony_ci 4001bd4fe43Sopenharmony_ci 4011bd4fe43Sopenharmony_ci 4021bd4fe43Sopenharmony_ci* 转换成功后,即可在pytorch_to_caffe_master目录下生成resnet18.caffemodel和resnet18.prototxt文件。 4031bd4fe43Sopenharmony_ci 4041bd4fe43Sopenharmony_ci 4051bd4fe43Sopenharmony_ci 4061bd4fe43Sopenharmony_ci 4071bd4fe43Sopenharmony_ci 4081bd4fe43Sopenharmony_ci至此,模型转换已经完成。 4091bd4fe43Sopenharmony_ci 4101bd4fe43Sopenharmony_ci#### 4.2.3.6 prototxt网络层适配 4111bd4fe43Sopenharmony_ci 4121bd4fe43Sopenharmony_ci##### 4.2.3.6.1 网络层参数对齐及layer检查 4131bd4fe43Sopenharmony_ci 4141bd4fe43Sopenharmony_ci**(1)prototxt网络层适配** 4151bd4fe43Sopenharmony_ci 4161bd4fe43Sopenharmony_ci模型prototxt网络层适配之前,请确保 4.2.3.4和4.2.3.5章节均已完成。 4171bd4fe43Sopenharmony_ci 4181bd4fe43Sopenharmony_ci* 步骤1:网络层对齐及layer检查 4191bd4fe43Sopenharmony_ci 4201bd4fe43Sopenharmony_ci一般来讲,pytorch2caffe自动生成的.prototxt网络需要进行手动修改,以保证量化成正确的wk模型,需要根据特定的网络特定的环境来进行修改。本文以resnet18网络训练垃圾分类生成的prototxt网络进行讲解。 4211bd4fe43Sopenharmony_ci 4221bd4fe43Sopenharmony_ci首先将pytorch2caffe工具自动生成的.prototx网络文件,通过工具打开,这里选用Ultra Edit或者Notepad++均可。 4231bd4fe43Sopenharmony_ci 4241bd4fe43Sopenharmony_ci观察pth转caffe运行日志,若出现pooling参数不对齐的问题,需要先将pooling参数对齐,如下图所示: 4251bd4fe43Sopenharmony_ci 4261bd4fe43Sopenharmony_ci 4271bd4fe43Sopenharmony_ci 4281bd4fe43Sopenharmony_ci* 解决方案: 4291bd4fe43Sopenharmony_ci 4301bd4fe43Sopenharmony_ci * 将resent18网络中的maxpooling layer padding参数修改为0 4311bd4fe43Sopenharmony_ci 4321bd4fe43Sopenharmony_ci  4331bd4fe43Sopenharmony_ci 4341bd4fe43Sopenharmony_ci * 同时将生成的.prototxt文件中ceil_mode参数拿掉,因为后续wk文件时,wk不包含此入参,默认为True。 4351bd4fe43Sopenharmony_ci 4361bd4fe43Sopenharmony_ci  4371bd4fe43Sopenharmony_ci 4381bd4fe43Sopenharmony_ci * prototxt layer描述格式具有一定要求,要求层以layer开头,type以带双引号字符表示,且需将开头input_dim按下图所示更改: 4391bd4fe43Sopenharmony_ci 4401bd4fe43Sopenharmony_ci  4411bd4fe43Sopenharmony_ci 4421bd4fe43Sopenharmony_ci * Pytorch转caffe时,不包含最后一层softmax,须在full-connected layer(fc1)后手动添加。 4431bd4fe43Sopenharmony_ci 4441bd4fe43Sopenharmony_ci  4451bd4fe43Sopenharmony_ci 4461bd4fe43Sopenharmony_ci * 检查下网络,若fc1上一层layer无view1,手工加上该layer,如下图所示: 4471bd4fe43Sopenharmony_ci 4481bd4fe43Sopenharmony_ci  4491bd4fe43Sopenharmony_ci 4501bd4fe43Sopenharmony_ci * 最后核对下layer fc1 num_output是否为实际分类种类数,本文训练5类垃圾,故为5,如下图所示: 4511bd4fe43Sopenharmony_ci 4521bd4fe43Sopenharmony_ci **注:请仔细检查如下layer层中是否有bottom: “view_blob1”,若无参考下图手工加上。** 4531bd4fe43Sopenharmony_ci 4541bd4fe43Sopenharmony_ci 4551bd4fe43Sopenharmony_ci 4561bd4fe43Sopenharmony_ci 至此,.prototxt已经修改完毕,请保证上述每一步都修改正确,否则影响模型量化和推理结果。 4571bd4fe43Sopenharmony_ci 4581bd4fe43Sopenharmony_ci##### 4.2.3.6.2 Netscope网络结构可视化 4591bd4fe43Sopenharmony_ci 4601bd4fe43Sopenharmony_ciNetscope是个支持prototxt格式描述的神经网络结构的在线可视工具,它可以用来可视化Caffe结构里prototxt格式的网络结构,使用起来也较为简单,在google浏览器打开如下网址: 4611bd4fe43Sopenharmony_ci 4621bd4fe43Sopenharmony_cihttp://ethereon.github.io/netscope/#/editor 4631bd4fe43Sopenharmony_ci 4641bd4fe43Sopenharmony_ci 4651bd4fe43Sopenharmony_ci 4661bd4fe43Sopenharmony_ci将适配好的.prototxt代码放到相应位置,按Shift+Enter之后,即可显示网络层级,如下图所示: 4671bd4fe43Sopenharmony_ci 4681bd4fe43Sopenharmony_ci 4691bd4fe43Sopenharmony_ci 4701bd4fe43Sopenharmony_ci 4711bd4fe43Sopenharmony_ci 4721bd4fe43Sopenharmony_ciNetscope可帮助开发着可视化网络层级,判断网络层是否正确。 4731bd4fe43Sopenharmony_ci 4741bd4fe43Sopenharmony_ci#### 4.2.3.7 模型量化 4751bd4fe43Sopenharmony_ci 4761bd4fe43Sopenharmony_ci定义:量化的过程将caffe模型转换成可以在海思芯片上执行的wk文件,同时将float类型数据转换成int8/int16类型的数据。 4771bd4fe43Sopenharmony_ci 4781bd4fe43Sopenharmony_ci相关nnie_mapper配置概念请阅读**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**《HiSVP 开发指南.pdf》3.5.2章节配置文件说明,如下图所示: 4791bd4fe43Sopenharmony_ci 4801bd4fe43Sopenharmony_ci 4811bd4fe43Sopenharmony_ci 4821bd4fe43Sopenharmony_ci接下来以垃圾分类sample为例,通过RuyiStudio工具将转换好的caffemodel和prototxt量化成wk文件。 4831bd4fe43Sopenharmony_ci 4841bd4fe43Sopenharmony_ci**注:以下所有路径建议采用纯英文命名,防止出现编码解析错误,为提高转换速度,加载路径层级越短越好** 4851bd4fe43Sopenharmony_ci 4861bd4fe43Sopenharmony_ci**(1)mean.txt制作** 4871bd4fe43Sopenharmony_ci 4881bd4fe43Sopenharmony_ci* 本文以基于resnet18垃圾分类量化wk模型为例,由于在blob1里面需要加载mean_file,如下图所示: 4891bd4fe43Sopenharmony_ci 4901bd4fe43Sopenharmony_ci 4911bd4fe43Sopenharmony_ci 4921bd4fe43Sopenharmony_ci* 我们需提前制作好mean.txt文件,首先新建一个txt文件修改为mean.txt存放在本地,将里面内容需要跟mmclassification_master/configs/_base_/datasets/imagenet_bs32.py里面的mean值对应,如下图所示: 4931bd4fe43Sopenharmony_ci 4941bd4fe43Sopenharmony_ci 4951bd4fe43Sopenharmony_ci 4961bd4fe43Sopenharmony_ci* mean.txt制作如下,如下图所示: 4971bd4fe43Sopenharmony_ci 4981bd4fe43Sopenharmony_ci 4991bd4fe43Sopenharmony_ci 5001bd4fe43Sopenharmony_ci**(2)imagelist.txt制作** 5011bd4fe43Sopenharmony_ci 5021bd4fe43Sopenharmony_ci由于Ruyi工具量化模型的过程中,blob1中需要加载image_list所需的文件,这里需要提前制作好。 5031bd4fe43Sopenharmony_ci 5041bd4fe43Sopenharmony_ci 5051bd4fe43Sopenharmony_ci 5061bd4fe43Sopenharmony_ci我们在素材集里面截取典型的图片,约10张左右即可,建议宽高大于256*256,如下图sample_photo文件夹所示: 5071bd4fe43Sopenharmony_ci 5081bd4fe43Sopenharmony_ci 5091bd4fe43Sopenharmony_ci 5101bd4fe43Sopenharmony_ciimagelist.txt里面需要添加sample_photo文件加图片的本地绝对路径,如下图所示: 5111bd4fe43Sopenharmony_ci 5121bd4fe43Sopenharmony_ci 5131bd4fe43Sopenharmony_ci 5141bd4fe43Sopenharmony_ci**(3)RuyiStudio量化wk模型** 5151bd4fe43Sopenharmony_ci 5161bd4fe43Sopenharmony_ciNNIE新建工程完成的前提下,右键.cfg文件-Open With-Mapper Configuration Editor打开.cfg文件,如下图所示: 5171bd4fe43Sopenharmony_ci 5181bd4fe43Sopenharmony_ci 5191bd4fe43Sopenharmony_ci 5201bd4fe43Sopenharmony_ci需仔细配置.cfg里面的每一个参数,勾选Relative path。 5211bd4fe43Sopenharmony_ci 5221bd4fe43Sopenharmony_ci* 首先配置Input_Setting 5231bd4fe43Sopenharmony_ci 5241bd4fe43Sopenharmony_ci  5251bd4fe43Sopenharmony_ci 5261bd4fe43Sopenharmony_ci * prototxt:选择适配之后的.prototxt,如:D:\five_trash_classify \five_trash_classify_resnet18.prototxt 5271bd4fe43Sopenharmony_ci * caffemodel:选择转化出来.caffemodel,如:D:\five_trash_classify\five_trash_classify_resnet18.caffemodel 5281bd4fe43Sopenharmony_ci * net_type:本实例选择CNN,需根据自己的网络来选 5291bd4fe43Sopenharmony_ci * is_simulation:量化选择Inst/Chip直接部署到板端,若选择simulation,则表示在pc端仿真后再进行部署 5301bd4fe43Sopenharmony_ci * markd_prototxt:按照默认即可 5311bd4fe43Sopenharmony_ci * output_wk_name:按照默认或者自行命名均可 5321bd4fe43Sopenharmony_ci 5331bd4fe43Sopenharmony_ci* Mapper Setting配置: 5341bd4fe43Sopenharmony_ci 5351bd4fe43Sopenharmony_ci 5361bd4fe43Sopenharmony_ci 5371bd4fe43Sopenharmony_ci本模型为CNN模型,compile_mode选择Low-bandwidth,log_level默认选择Not print,align_bytes选择16,batch_num输入1,sparse_rate输入0即可,gfpq_param_file为空即可,若使用其他模型,需根据模型实际参数进行配置。 5381bd4fe43Sopenharmony_ci 5391bd4fe43Sopenharmony_ci* Dynamic Parameters配置: 5401bd4fe43Sopenharmony_ci 5411bd4fe43Sopenharmony_ci  5421bd4fe43Sopenharmony_ci 5431bd4fe43Sopenharmony_ci * image_typex:需根据实际来选择,本实例为YUV420SP 5441bd4fe43Sopenharmony_ci 5451bd4fe43Sopenharmony_ci * image_list:加载制作生成的imageList.txt,一般十张左右图片,imageList.txt填写图片的绝对路径 5461bd4fe43Sopenharmony_ci 5471bd4fe43Sopenharmony_ci * RGB_order:本实例为RGB,需根据实际来选择 5481bd4fe43Sopenharmony_ci 5491bd4fe43Sopenharmony_ci * nor_type:本实例选择channel mean_value_with_data_scale,其他网络根据实际来选择 5501bd4fe43Sopenharmony_ci 5511bd4fe43Sopenharmony_ci * data_scale=1/(0.5*255)=1/std=0.0078431372549019607843137254902,注:data_scale精度越高越好 5521bd4fe43Sopenharmony_ci 5531bd4fe43Sopenharmony_ci * std来源于mmclassification_master/configs/_base_/datasets/imagenet_bs32.py 5541bd4fe43Sopenharmony_ci 5551bd4fe43Sopenharmony_ci  5561bd4fe43Sopenharmony_ci 5571bd4fe43Sopenharmony_ci * mean_file:加载制作生成的mean.txt即可 5581bd4fe43Sopenharmony_ci 5591bd4fe43Sopenharmony_ci* 所有的参数都配置正确后,接下来进行量化,运行代码,点击如下图所示的标志: 5601bd4fe43Sopenharmony_ci 5611bd4fe43Sopenharmony_ci 5621bd4fe43Sopenharmony_ci 5631bd4fe43Sopenharmony_ci* 稍等片刻,等待转换成功,如下图所示: 5641bd4fe43Sopenharmony_ci 5651bd4fe43Sopenharmony_ci 5661bd4fe43Sopenharmony_ci 5671bd4fe43Sopenharmony_ci* 转换成功后,在output_wk_name下点击Browse,本文即可在D:\RuyiStudio-2.0.41\workspace\five_resnet18_trash_classify目录下查看.wk文件,如下图所示: 5681bd4fe43Sopenharmony_ci 5691bd4fe43Sopenharmony_ci 5701bd4fe43Sopenharmony_ci 5711bd4fe43Sopenharmony_ci至此,模型的量化已经阐述完毕。 5721bd4fe43Sopenharmony_ci 5731bd4fe43Sopenharmony_ci#### 4.2.3.8 模型部署板端和调试 5741bd4fe43Sopenharmony_ci 5751bd4fe43Sopenharmony_ci* [分类网部署及板端推理](4.2.3.8.%E5%88%86%E7%B1%BB%E7%BD%91%E9%83%A8%E7%BD%B2%E5%8F%8A%E6%9D%BF%E7%AB%AF%E6%8E%A8%E7%90%86.md) 5761bd4fe43Sopenharmony_ci 577