老铁们,今天我们将继续配置YOLO-v3目标检测与识别深度学习框架,基于COCO数据集进行训练,并测试模型的效果,最后,我们将通过YOLO-v3进行摄像头实时目标物体检测与识别应用。
首先,我们先了解一下COCO数据集。
一. COCO数据集简介
1. 官网数据集下载地址:
https://cocodataset.org/#download
COCO的 全称是Common Objects in COntext,是微软团队提供的一个可以用来进行图像识别的数据集。MS COCO数据集中的图像分为训练、验证和测试集。COCO通过在Flickr上搜索80个对象类别和各种场景类型来收集图像。
2. COCO2014数据集下载:
在darkent框架内,执行一个script脚本可以下载所有数据集。
① 首先,进入到darknet文件夹下;
② 进入script文件夹下;
③ 查看get_coco_dataset.sh脚本,命令:vim get_coco_dataset.sh
显示内容如下:
执行这个get_coco_dataset.sh 脚本后,自动下载数据集,并解压。此过程非常漫长,建议各位朋友直接拷贝其中的数据集下载链接到迅雷加速下载,能节省大量时间。
④ 执行下载命令如下,注意保存数据集路径,如果这里设置不对,后面会报错。【同志们,一定要注意路径,不然就会陷入无穷无尽的报错之中。。。】
请注意我的路径,如果输入命令后,出现如下信息,恭喜你,操作正确,已经远离苦海。【建议用迅雷下载,再自行解压,注意解压路径即可。我就是这么干,速度快的飞起。。。】
二. 安装COCO API
具体步骤如下:
1. 由于在第一步骤中,你已经执行了脚本get_coco_dataset.sh,在你的darknet/data文件夹下已经有了coco文件夹,那么可以接着执行后续操作,安装COCO API;
2. cd coco/PythonAPI
3. 修改Makefile,命令如下:vim Makefile,需要将其中的python全部改为python3,保存退出;保存和退出命令:① 先按键盘上的ESC;②再输入命令 :wq 【注意,有冒号】
将python全部替换为python3
4. 编译一下,命令如下:make -j8
如果输出以下一坨信息,那么编译成功啦,奥利给 :)))
三. 案例实操环节
1. 进入darknet项目下:
2. 进入cfg下查看配置文件,命令如下:
注意文件 yolov3.cfg ,我们在训练前需要修改里面的一些内容。
3. 修改yolov3.cfg,命令如下:vim yolov3.cfg
进入到如下界面:
这些参数啥意思呢?这里稍作解释:
① batch : 批处理的大小,如果你的GPU显存够大,这里可以设置为64;
② subdivisions : 将batch分组,假设batch=64, 那么可以设置subdivision=8,即分成8组,8 x 8 = 64,减少显存的压力,再分批处理;
③ width : 图片的宽度;
④ height : 图片的高度;
⑤ channels : 图片通道;
⑥ momentum : 动量,加速梯度下降;
⑦ decay : 权重衰减的正则项,防止过拟合;
【以下四个参数用于数据增强】
⑧ angle : 角度;
⑨ saturation : 饱和度;
⑩ exposure : 曝光度;
(11) hue : 色调;
(12) learning_rate : 学习率;
(13) burn_in : 门槛,如果大于burn_in,采用下面的steps参数值;
(14) max_batches : 训练次数的上限,达到则停止学习;
(15) policy ,steps,scales : 如果训练超过400000次,学习率下调10倍,超过450000次,再下调10倍;
【重点讲解:yolo参数设置部分,见下图】
① mask : 0, 1, 2 代表选取anchors的前三个,分别是:10,13 , 16,30 , 33,23
② classes : 类别的数量;
③ num : 指定每一个anchor需要预测的BoundingBox的数量;
④ jitter : 指定数据增强部分,随机调整图片宽高比的范围;
⑤ ignore_thresh : 针对IOU设置的参数,当模型预测的检测框与物体真实框匹配的时候,如果IOU大于这里设置的阈值(0.5 - 0.7之间),则不参与损失的计算。目的是控制参与损失计算的检测框的规模。
⑥ random : 训练过程中是否采用随机多尺度,1 :是(多尺度),0 :否(固定尺度);
4. 修改COCO数据路径的配置,命令如下:
vim coco.data
默认的参数值界面:
根据在你电脑上COCO数据集的路径,修改里面的路径。【注意:不要用他的或我的路径,而是用你自己的路径。】
以下是我的数据集存放路径,观察一下:
coco文件夹下的内容:
5. 模型开始训练
输入命令:./darknet detector train cfg/coco.data cfg/yolov3.cfg
回车后开始训练:
当出现以下非常多的计算信息时,恭喜你,老铁,一切都顺利啦。。。泡杯咖啡去休息一下吧
6. 老铁,喝完咖啡后再继续死磕,咱们继续用预训练模型继续训练,那怎么引入呢?
① 去YOLO官网下载预训练模型;https://pjreddie.com/media/files/yolov3.weights
【福利:所有有关YOLO的配置教材、数据集、代码,我都会在百度云盘分享出来,不用担心下载不到数据集或文件。 鲜花、掌声在哪里???】
② 我把预训练模型存放在backup文件夹下,如图所示:
③ 执行以下命令训练:
./darknet detector train cfg/coco.data cfg/yolov3.cfg backup/yolov3.weights
如果继续输出以下信息,恭喜你,又成功啦。。。
7. 测试一张图片的检测与识别效果:
① 输入命令:
./darknet detect cfg/yolov3.cfg backup/yolov3.weights data/dog.jpg
输出信息:
这个预训练模型的参数权重比较差,框基本上没有把狗和自行车框进去。【说来也奇怪:我用的是官网的预训练模型文件,为啥这么差?可是,官网的测试效果很好。】
② 我们现在用预训练模型 yolov3-tiny.weiths 测试,输入命令如下:
./darknet detect cfg/yolov3-tiny.cfg backup/yolov3-tiny.weights data/dog.jpg
输出结果:
输出检测效果:
8. 通过摄像头测试(注意:你的台式机或笔记本必须有摄像头)
① 输入命令如下:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg backup/yolov3.weights
② 摄像头实时检测效果图:
备注:我的整个学习过程,参考的官网网站:https://pjreddie.com/darknet/yolo/ ,不过,我写的更加详细啦
更多AI相关课程,请在网易云课堂和B站关注账号:唐国梁Tommy
网易云课堂:
https://study.163.com/instructor/1028614893.htm?_trace_c_p_k2_=a8d2f7653bf94cd5a821036a432179e4
B站:
https://space.bilibili.com/474347248