您现在的位置是:首页 >学无止境 >HNU人工智能实验四-基于YOLOV3-DarkNet50的篮球检测模型网站首页学无止境
HNU人工智能实验四-基于YOLOV3-DarkNet50的篮球检测模型
实验四:深度学习算法及应用-基于YOLOV3-DarkNet50的篮球检测模型
项目文档工程:https://github.com/mindspore-ai/mindspore-21-days-tutorials/tree/main/
前言
这个实验要求做一个深度学习项目,做头歌的或者自己在华为云找一个都行,然后在华为云一眼就相中了这个篮球检测模型的项目(篮球爱好者狂喜),通过这次实验也学习到了许多东西,了解了一些课上没有讲到的内容,但是因为源码的代码量太多而且接口也很多,所以对源码并不是很熟悉
一、实验目的
-
了解深度学习的基本原理;
-
能够使用深度学习开源工具;
-
应用深度学习算法求解实际问题。
二、实验要求
-
解释深度学习原理;
-
采用深度学习框架完成课程综合实验,并对实验结果进行分析;
-
回答思考题。
三、实验平台
华为云平台(推荐使用昇腾 910、ModelArts、OCR 识别、图像识别等完成综合实验)
https://www.huaweicloud.com/
四、实验内容与步骤
1.问题描述
主要内容是使用yolo算法对一张篮球比赛的图片进行推理,分析出图片中的篮球队员及其动作(可能是进攻、防守、走路、跑步、盖帽、摔跤等等),并给出对应的概率
2.算法原理
主要流程如下:
- 准备篮球比赛相关的数据集
- 选择YOLOv3模型
- 调用MindSpore API执行流程
即通过给定的数据集和开发好的网络模型,通过Model API进行一次封装,通过train和predict接口进行训练和推理的功能,最终模型会预测出一个结果。
此次实验的算法原理如下,主要分为三个步骤:
1)数据准备
首先从网络中获取mp4视频,通过OpenCV逐帧获取图片并保存起来。
获取原始图片后,还需要进行加工。即进行数据集标注。
接着再对图片进行预处理:
- 对图片随机进行裁剪,生成十个候选框
- 筛选纠正候选框输出唯一值
- 对输出值进行图片随机裁剪
- 对图片进行随机翻转操作(50%)
- 色彩扰动,对图片的对比度和曝光度进行处理,提高图片鲁棒性
- Normalize归一化操作,将不均匀的区域均匀化
- HWC2CHW操作,对图片尺寸进行转换
2)模型开发
目标检测
目标检测 = 图像分类 + 位置检测
目标检测分类:
Two-stage目标检测:
One-stage目标检测:
对于特征提取一般使用Backbone网络,对于目标定位和目标分类一般使用head网络
此次实验使用的YOLOv3算法就是一个One-stage目标检测算法,其特点是检测精度较低,检测速度较快
使用YOLOv3如何提升小目标检测准确率?
原因分析:随着Backbone网络层数越来越多,输出特征图的尺寸越小,更适合大目标检测的场景。
解决思路:
- 引入多尺度预测,将大尺寸特征图用于小目标检测,使用小尺寸特征图进行大目标检测;
- 为解决大尺寸特征图识别率低的问题,通过FPN算法实现特征融合,同时支持大、中、小目标的检测场景。
如图将小尺寸的特征融合到大尺寸的特征中,使得大尺寸的特征信息更丰富,从而解决大尺寸特征图识别率低的问题
新问题:如何在增加YOLOv3 Backbone网络层数的同时,仍不影响网络的精度?(过拟合问题)
答:引入残差块
YOLOv3算法检测流程:
步骤1:提取图像特征
首先是经过预处理的图片
接着做一次卷积运算,通道量会从3个变成32个
再进行卷积运算,特征量进一次增加,但图像尺寸降低
接着不断进行卷积操作,最后依次得到三种尺寸的特征图,用于后续的特征融合
-
一个256个特征,尺寸为52*52的大特征图
-
一个512个特征,尺寸为26*26的中特征图
-
一个1024个特征,尺寸为13*13的小特征图
步骤2:输出特征图预处理
对于10可分为三种:
- 位置偏移量(4维),用于Bounding box检测
- 检测置信度(1维),用于Bounding box筛选
- 类别(5维)
步骤3:基于Anchor box预测Bounding box
Anchor box:预设的一组边框集合,提升Bounding box预测准确率。
选择合适的Anchor box:
- 尺寸:不同于Faster-RCNN手动设置的方式,YOLOv3使用K-means聚类算法自动生成
- 数量:均衡检测精度和网络复杂度因素,选用9个Anchor box。
接着基于Anchor box求得Bounding box位置
步骤4:筛选Bounding box输出预测结果
统计Bounding box个数:
13
∗
13
∗
3
+
26
∗
26
∗
3
+
52
∗
52
∗
3
=
10674
13*13*3+26*26*3+52*52*3=10674
13∗13∗3+26∗26∗3+52∗52∗3=10674
置信度筛选:
- 置信度<0.01:丢弃
- 置信度>=0.01:进入候选
进行NMS算法:
- 结果大于等于0.5,说明重合过多,丢弃
- 结果小于0.5,输出结果
注意事项:
- 置信度和NMS的阈值都是人为设置的,比较依赖用户经验
- 首先执行置信度筛选操作,可大幅减少NMS计算过程的运算复杂度
3)训练/推理
Ascend环境信息:
- 硬件环境:ModelArts云服务(Ascend 910单卡)
- 框架版本:MindSpore v0.5
GPU环境信息:
- 硬件环境:GPU (Nvidia Tesla V100单卡)
- 框架版本:MindSpore v1.0
具体流程见看下面的实验步骤
3.实验步骤
1)上传测试数据集和运行脚本到OBS服务
进入华为云的OBS服务平台后,点击桶列表,再点击右上角创建桶
只需填写桶名称,将存储策略改成单AZ存储即可
上传篮球比赛图片、ckpt文件和源代码到新建的 obs 桶中,将提前给好的文件夹中的所有文件到新建的 obs 桶中:
上传全部完成之后如下:
- ckpt_files存放预训练模型
- log存放日志
- yolov3存放python程序
- basketball-dataset存放数据集
- output存放推理的结果图片
2)在ModelArts服务上执行模型推理任务
进入 ModelArts 界面之后,点击左侧“训练管理”,在下拉菜单中点击“训练作业”,进入训练作业界面后,点击中上方的“创建”按钮
创建任务的参数配置参考如下:
创建任务成功后会进行训练
训练完成后:
检测的原图为(今年NBA总决赛的截图):