3.5 YOLO入门教程:YOLOv3(5)

您所在的位置:网站首页 yolov3官方权重 3.5 YOLO入门教程:YOLOv3(5)

3.5 YOLO入门教程:YOLOv3(5)

2023-01-22 03:30| 来源: 网络整理| 查看: 265

一、训练YOLOv3

这一届节,我们就可以训练我们的YOLOv3网络了。读者可以打开项目的train.py文件来查看训练代码的详细内容。训练代码与先前的YOLOv2+几乎是一样的,包括数据预处理等,都没有做改动,因此不再赘述。

读者可以使用下面一行代码来开始训练。

python train.py --cuda -ms -d coco

这里我们调用COCO数据集来训练,而不再是VOC数据集了。相信通过前几章的学习,想必读者已经对VOC数据集十分了解了。另外,YOLOv3官方并未提供VOC的训练结果,只有COCO数据集,所以,这里我们只使用COCO数据集,也是为了方便和官方的YOLOv3对比。

还是那句话,不要尝试使用CPU进行训练。切记。

二、可视化检测结果

训练完毕后,模型都默认保存在了weights/coco/yolov3/文件夹下。当然,笔者也提供了已训练好的模型权重文件,读者可以在项目中的README文件中找到相关的下载链接。

有了模型权重后,读者可以输入下面一行的命令来运行项目中的test.py文件,在COCO val数据集上进行测试。

python test.py --cuda -d coco-val --trained_model 权重文件路径

测试代码的运行方式和YOLOv1+与YOLOv2+都是一样的。运行此代码,我们即可看到模型在COCO-val验证集上的检测结果的可视化图像。图7-5直观地展示了我们的YOLOv3和YOLOv2+的性能对比,其中右图是我们的YOLOv3的检测结果。这里只展示得分高于0.3的边界框的预测结果。这里,我们特意挑选了小目标较多的图像,以便突出YOLOv3的优势。

图1 YOLOv3与YOLOv2+在COCO-val验证集上的对比

很显然,在小目标的检测上,我们的YOLOv3表现出了更好的性能,这主要归功于多级检测方法,引入降采样倍数更小的C3特征图,相较于降采样倍数较大的C5特征图,C3特征图保留了更多的小目标信息。另外,在FPN的加强下,不同尺度的特征图包含的信息更加丰富,这也对提升模型的性能。

三、计算AP

在上一节,通过将我们的YOLOv3的检测结果可视化出来,并与先前的YOLOv2+做对比,比较直观地证明了YOLOv3具有更强的检测性能,尤其是在小目标的检测结果上,YOLOv3表现更佳。

这一节,我们再从数据的角度上来证明这一点。并且,我们直接和官方的YOLOv3进行对比。为了达到此目的,我们需要在COCO test-dev2017测试集上去计算AP指标(此操作需要前往COCO官网来完成)。请读者运行项目中的eval.py代码,运行命令如下所示。

python eval.py --cuda -d coco-test --trained_model 权重文件路径 -size 输入图像尺寸

我们可以通过调整-size参数来改变输入图像的尺寸,如320、416、512和608等常用的尺寸。最终,我们会获得一个名为yolov3.json的文件,然后按照COCO官网所要求的格式将其重命名为:

[detections]_[test-dev2017]_[yolov3]_results.json

然后将其添加至同名的zip文件中:

[detections]_[test-dev2017]_[yolov3]_results.zip

将此压缩包上传至官网的测试界面,然后等待测试结果即可。

最后,测试结果如表1所示,我们用O表示官方的YOLOv3,R表示由我们自己实现的YOLOv3。

模型输入尺寸APAP50AP75APsAPmAPlO32028.251.5O41631.055.3O60833.057.034.418.335.441.9R32033.154.134.512.134.549.6R41636.057.437.016.337.551.1R60837.659.439.920.439.948.2

简而言之,由我们自己实现的YOLOv3要优于官方实现的YOLOv3。

多说一句,在上一节我们说到过,对于objectness的损失函数,官方的YOLOv3使用的是BCE,而我们使用的是MSE,若是将我们也采用BCE的话,则性能便会和官方的实现持平,但是用MSE,反而性能更高,也就是上表的结果,对于这一点,笔者目前还没有想明白为什么MSE的表现会比BCE好。

至此,YOLOv3也就讲完了,相信读者已经掌握了入门目标检测所必需的基础知识和基本技巧。可以说,到这一步,整个YOLO系列的核心内容也就都讲完了,至于后续的YOLOv4等新的YOLO工作,其实并没有改变YOLOv3的宏观框架,仅仅是在细节上做了很多改进去进一步提升性能。

在本章的最后一节,我们会提供新的一版YOLOv3,主要的改动在于加入DilatedEncoder结构,和使用更好的损失函数GIoU损失。敬请期待。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3