一、概念介绍
Yolo是一种目标检测算法,将目标区域预测和目标类别预测整合于单个神经网络模型中,实现在准确率较高的情况下快速目标检测与识别。Yolov3是在v1和v2的基础上融合了一些好的方案,在保持速度优势的同时,提升了预测精度,尤其加强了对小物体的识别能力,更加适合现场应用环境。
二、网络结构
Yolov3相对于v1和v2的主要改进是使用了新的网络结构Darknet-53,改进了模板框的预测。
上图红框标出了Darknet-53(含有53个卷积层),借鉴了残差网络做法,在一些层之间使用了shourtcut,如下图就是一个残差组件。
随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。Yolov2已经开始采用K-means聚类得到先验框的尺寸,Yolov3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。先验框针对大、中和小物体有不同尺寸,适合检验不同大小的物体。
ModelArts的Yolov3_ResNet18没有对原版的Yolov3没有做精度和速度的优化,使用的主干网络是resnet18,比原版的darknet53提起特征的能力更弱点,只是适配了Ascend310的推理。
三、Yolov3实践
可以订阅ModelArts的Yolov3算法来入门和熟悉Yolov3在目标检测中的使用流程并能部署到Ascend310推理。
3.1 准备数据集
在AI Gallery的数据中搜索“检测”,就能搜索到适合目标检测算法的训练集,可以点击helmet训练集。
点击“下载”进入下一步。
下载方式可以选择“对象存储服务(OBS)”和“ModelArts数据集”两种方式,都是将训练集下载到OBS桶内,所以目标位置都需要填写到OBS桶内的文件夹。当选择“ModelArts数据集”时可以给数据集命名,后面训练可以通过名称选择数据集。
下载好的数据集是默认训练验证集切分比例为1.00,输入到Yolov3算法中将做纯训练场景,我们可以进行数据切分再输入,可以自动地边做训练边验证。在“数据管理”的“数据集”中选择对应数据名称的“发布”。
可以选择切分比例为0.8。
3.2 订阅Yolov3算法
在算法中选择物体检测-YOLOv3_ResNet18,订阅后前往控制台。
进入控制台后会有不同版本的Yolov3,可以选择当前最新版本并创建训练作业。
3.3 训练Yolov3模型
创建训练作业后只需要填写刚才创建的数据集为数据输入,模型输出train_url,超参数据可以选择默认值,也可以根据实际情况修改,创建完毕后点击“提交”,超参数修改可见链接:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=948196c8-3e7a-4729-850b-069101d6e95c。
训练完毕后可看训练作业的评估结果,以及精度评估和敏感度分析。
3.4 Ascend在线推理部署
选择“模型管理”中的“压缩/转换”,点击“创建任务”。
输入框架选择“TensorFlow”,转换输入目录选择输出路径下的"frozen_graph"文件夹,输出框架选择“MindSpore”,转换输出目录选择输出路径下的"om/model"文件夹,当使用Ascend310时将转换模板选择“TF-FrozenGraph-To-Ascend-C32”,还需要填写输出张量形状“images:2,352,640,3”,不填写转换输出节点,其余可按默认。
在“模型管理”的“模型”中点击“导入”。
选择“从模板中选择”-“MindSpore”-“ARM-Ascend模板”,模板目录选择训练输出路径下的"om/model",选择“预制图像处理模式”。
在“部署上线”的“在线服务”中点击“部署”。
选择“我的模型”,模型选择刚才导入的模型,计算节点规格选择1*Ascend-D310。
模型导出成功后,选择在线服务来进行部署,选择模型后就能上传本地文件来进行预测。