一、参考资料
华为ModelArts Notebook训练yolov3模型
二、相关介绍
在ModelArts的 训练任务 中运行ModelZoo中模型,以yolov3为例,训练集为 COCO2014。
运行环境
运行环境:ModelArts notebook
模型:ModelZoo,yolov3
数据集:COCO2014
AI引擎:Ascend-Powered-Engine | tensorflow_1.15-cann_5.0.3-py_3.7-euler_2.8.3-aarch64
规格:Ascend: 1*Ascend-910(32GB) | ARM: 24 核 96GB
三、关键步骤
关键步骤,请参考官方教程:YOLOv3。
博主复现的过程中,仅记录一些容易出错的步骤。
3.1 下载源代码
官方仓库:YOLOv3
博主的仓库:modelarts-yolov3
![在这里插入图片描述](https://img-blog.csdnimg.cn/f286396fa739483cbc7b8c7368f991f5.png#pic_center)
3.2 准备数据集
-
下载COCO2014数据集,下载地址:
链接:https://pan.baidu.com/s/16sxIpFs-hd-6FzN2rSHgqA
提取码:1234
-
数据集上传到obs;
用obs-browser客户端上传COCO2014数据集到OBS。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fce4f7df0adf4e9abdf19a75e78c47cb.png#pic_center)
3.3 准备预训练模型
![在这里插入图片描述](https://img-blog.csdnimg.cn/7bf1bdb01cea4290848323e49a25fc76.png#pic_center)
预训练模型下载之后,放入 YoloV3_for_TensorFlow_1.6_code/data/darknet_weights
路径。
+--- data
| +--- coco2014_minival.txt
| +--- coco2014_trainval.txt
| +--- darknet_weights # 预训练模型所在路径
| | +--- checkpoint
| | +--- darknet53.ckpt.data-00000-of-00001
| | +--- darknet53.ckpt.index
| | +--- darknet53.ckpt.meta
| | +--- readme
3.4 准备源码
准备txt标注文件
根据COCO2014数据集的实际路径使用 coco_trainval_anns.py
和 coco_minival_anns.py
分别生成 训练和验证样本标注文件 coco2014_trainval.txt
和 coco2014_minival.txt
,并放置于 YoloV3_for_TensorFlow_1.6_code/data
录下。
# 1. 修改源码中的路径
# 2. 执行 coco_trainval_anns.py
python coco_trainval_anns.py
# 3. 执行 coco_minival_anns.py
python coco_minival_anns.py
train.py
参数基本上默认即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/3986e120ab7a4b09b1a061c629dcb2d7.png#pic_center)
args_modelarts_single.py
参数基本上默认即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1c89cebbd32e4ed28a74f14a593273e9.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d3b85a369c5e44f98762bff60d553499.png#pic_center)
上传源码
准备好源码之后,上传到obs中。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7aeb7d0148674c0081de79c2374ab2c4.png#pic_center)
3.5 创建算法
算法管理 ---》创建
名称:自定义
描述:自定义
创建方式:自定义脚本
---》AI引擎:Ascend-Powered-Engine,tensorflow_1.15-cann_5.0.3-py_3.7-euler_2.8.3-aarch64
---》代码目录:liulingjun-demo/yolov3/code
启动文件:liulingjun-demo/yolov3/code/train.py
输入数据配置:data_url
输出数据配置:train_url
超参:
---》model,String,
---》batch_size,Integer
---》total_epoches,Integer
代码目录
![在这里插入图片描述](https://img-blog.csdnimg.cn/3e8e726f19384e93a46e20e2212c096e.png#pic_center)
输入输出数据配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/809b6936402f4d0aa1af02c9e38b4aa7.png#pic_center)
超参
![在这里插入图片描述](https://img-blog.csdnimg.cn/cbb58f92602745caa7137729f403bd93.png#pic_center)
创建算法
![在这里插入图片描述](https://img-blog.csdnimg.cn/0e3e02e56ea543a988ed2468adf47c4a.png#pic_center)
3.6 创建训练作业
训练管理 ---》训练作业
名称:自定义
描述:自定义
算法:刚创建的算法
训练输入:/liulingjun-demo/yolov3/dataset/
训练输出:/liulingjun-demo/yolov3/output/
超参:默认即可
资源池:公共资源池、专属资源池
规格:根据实际情况选择
计算节点个数:根据实际情况选择
作业日志路径:/liulingjun-demo/yolov3/logs/
其他参数:默认即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/04d14952c43c4400a502c584c257541f.png#pic_center)
增加超参数
单击“增加超参”,手动增加超参。配置 代码中的命令行参数值,请根据您编写的算法代码逻辑进行填写,确保参数名称和代码的参数名称保持一致。可填写多个参数。
![在这里插入图片描述](https://img-blog.csdnimg.cn/246b1514f4c7438bb665b80f7785d705.png#pic_center)
参数名称 |
类型 |
默认值 |
是否必填 |
描述 |
mode |
String |
modelarts_single |
是 |
YOLOv3训练场景分为单尺度和多尺度。单尺度为modelarts_single多尺度为modelarts_multi |
batch_size |
Integer |
32 |
否 |
一次训练所抓取的数据样本数量。单尺度训练建议值为32,多尺度训练建议值为16。 |
total_epoches |
Integer |
200 |
否 |
训练总轮数。 |
设置mode模式为:modelarts_single
![在这里插入图片描述](https://img-blog.csdnimg.cn/5b5a3c76b8c94790a62afb2f089f4f04.png#pic_center)
提交训练作业
训练作业一般需要运行一段时间,根据您选择的数据量和资源不同,训练时间将耗时几分钟到几十分钟不等。在ModelArts中创建训练任务,训练脚本会自动将obs中的数据集拷贝到ModelArts容器中,数据集越大耗费时间越长。
训练作业的状态
训练作业的状态有:等待中,运行中,运行失败,已完成,终止中,已终止。
![在这里插入图片描述](https://img-blog.csdnimg.cn/052d86e98b084f669edc750f5c65dd68.png#pic_center)
3.7 资源占用情况
npu资源占用情况
![在这里插入图片描述](https://img-blog.csdnimg.cn/935912057c60431d8162cfae33f5ff1e.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/251d9800ade4492182354bd1b996cb71.png#pic_center)
资源监控
![在这里插入图片描述](https://img-blog.csdnimg.cn/e1b156f8e17a44a09e34e206980140c1.png#pic_center)
3.8 yolov4与yolov5
yolov4、yolov5与yolov3操作步骤类似,结合ModelZoo的操作说明进行复现。
yolov4
官方仓库:YOLOv4
博主的仓库:modelarts-yolov4
![在这里插入图片描述](https://img-blog.csdnimg.cn/afff5e0df1434a268469732f77e23f85.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/96c243ea38cf4df487be9ba0da352546.png#pic_center)
yolov5
官方仓库:YOLOv5
博主的仓库:modelarts-yolov5
![在这里插入图片描述](https://img-blog.csdnimg.cn/87796819ea17499492692c424d3fa24e.png#pic_center)
四、FAQ
Q:数据集路径错误
2022-07-28 16:09:09.053230: W tensorflow/core/framework/op_kernel.cc:1639] Unknown: AttributeError: 'NoneType' object has no attribute 'shape'
Traceback (most recent call last):
File "/home/ma-user/anaconda/lib/python3.7/site-packages/tensorflow_core/python/ops/script_ops.py", line 235, in __call__
ret = func(*args)
File "/home/ma-user/modelarts/user-job-dir/code/utils/data_utils.py", line 306, in get_batch_data
multi_scale)
File "/home/ma-user/modelarts/user-job-dir/code/utils/data_utils.py", line 216, in parse_data
img, boxes = random_resize(img, boxes, min_ratio=0.25, max_ratio=2, jitter=0.3)
File "/home/ma-user/modelarts/user-job-dir/code/utils/data_aug.py", line 429, in random_resize
h,w,c = img.shape
AttributeError: 'NoneType' object has no attribute 'shape'
2022-07-28 16:09:09.053445: W tensorflow/core/framework/op_kernel.cc:1639] Unknown: AttributeError: 'NoneType' object has no attribute 'shape'
错误原因:
以下两个标注文件中的数据集路径不正确,找不到图片路径,导致opencv读取图片失败
coco2014_trainval_modelarts.txt
coco2014_minival_modelarts.txt
解决办法:
根据数据集的真实路径,修改txt文件中的路径
Q: 容量不足,训练作业终止
![在这里插入图片描述](https://img-blog.csdnimg.cn/8b59ed6e7a9a485bb56436b3a2b1e767.png#pic_center)
Q:训练作业一直等待中
![在这里插入图片描述](https://img-blog.csdnimg.cn/c116e2582b314407a89f5797194e0915.png#pic_center)
错误原因:
资源不够
解决办法:
停止不用的notebook,重新启动
Q: 找不到txt标注文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/5bdef9d1998c4fc9938bfcf8a1346750.png#pic_center)
错误原因:
找不到txt标注文件
解决办法:
准备txt标注文件,参考上文【准备源码】
Q: 找不到darknet53.ckpt
![在这里插入图片描述](https://img-blog.csdnimg.cn/67543336b1854da989107292f3589b82.png#pic_center)
错误原因:
找不到预训练模型
解决办法:
参考上文【准备预训练模型】
将 `YOLOv3_TensorFlow_1.6_model/single/ckpt` 路径下的模型文件拷贝到 `YoloV3_for_TensorFlow_1.6_code/data/darknet_weights`,并重命名为 `darknet53.ckpt`;