物体检测Yolov3_训练与Ascend310推理

一、概念介绍

    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训练集。1.jpg

    点击“下载”进入下一步。

2.jpg

    下载方式可以选择“对象存储服务(OBS)”和“ModelArts数据集”两种方式,都是将训练集下载到OBS桶内,所以目标位置都需要填写到OBS桶内的文件夹。当选择“ModelArts数据集”时可以给数据集命名,后面训练可以通过名称选择数据集。

3.jpg

    下载好的数据集是默认训练验证集切分比例为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。

    模型导出成功后,选择在线服务来进行部署,选择模型后就能上传本地文件来进行预测。

(完)