目标检测yolov5,基于yolov3的目标检测
这篇前言博文将简单总结一下YOLOv6的原理,并用YOLOv6训练VisDrone数据集。
背景YOLOv6是美团视觉智能部门开发的目标检测框架,致力于工业应用。
根据官方提供的测试结果[1],YOLOv6的综合性能效果超越YOLOv5和YOLOX。如下图,YOLOv6s在COCO验证集上的mAP值最高。
网络结构优化由于YOLOv6中没有相关论文,以下对创新点的描述均参考官方介绍博文[1]
高效Rep Backbone YOLOV5/YOLOX使用的主干和颈部都是建立在CSPNet之上,采用多分支和剩余结构。对于GPU等硬件来说,这种结构会在一定程度上增加延迟,同时降低内存带宽的利用率。所以YOLOv6对脊柱和颈部都进行了重新设计。
在主干部分,提出了一种称为EfficientRep主干的结构,结构图如下:
图中的RepConv、RepBlock、SimSPPF都是全新的结构,这里就不详细探究了。
Rep-PAN在琴颈设计方面,YOLOv6提出了一种结构,命名为Rep-PAN,结构示意图如下:
解耦头在检测头方面,YOLOv6借鉴了YOLOX的思想,采用了解耦检测头的结构,并进行了精简。两者对比图如下:
其他优化策略,Anchor-freeAnchor-free也借鉴了YOLOX,即从YOLOv2一直取消锚机制,直接返回目标的位置信息。价格不稳定,好处是计算可以更快。
SimOTASimOTA是一种正负样本匹配策略,也是YOLOX提出的一种策略方法。我之前的博文【目标检测】从YOLOv1到YOLOX(理论梳理)也有提到。
简单来说,判断正负样本要解决的问题就是在预测帧过多的情况下,如何去除低质量帧,保留高质量帧(正样本)参与运算。
SimOTA定义的计算公式如下:
对于每个预测帧,分别计算真实帧的IOU和类别损失,然后加权得到总损失。然后对每一帧的借据和真实帧进行排序,将所有帧的借据相加并四舍五入,得到正样本的类别数。
比如下图[2]中,四舍五入的结果是2,那么选择前两个作为正样本。
SIoU之前的边界框回归损失包括IoU、GIoU、CIoU和欧弟。YOLOv6引入的SIoU损失函数通过引入所需回归之间的矢量角度来重新定义距离损失。
相关论文可参考:https://arxiv.org/abs/2205.12740
理论上,YOLOv6并没有太多新的东西。我们来实践一下,看看效果如何。
总的来说,YOLOv6和YOLOv5的代码在实践中是相似的,只是做了一些小的改动。
例如,模型的训练、测试和检测功能隐藏在工具的文件夹中,这导致了笨拙的输入文件路径。比如在inferer.py中,路径少了一步,需要手动修改。
数据集的变换YOLOv6还对数据集的输入进行了变换,使得正文“YOLOv5贯穿VisDrone数据集”中的VisDrone数据集无法直接使用,因此需要进行以下变换。
图片和标签需要建在单个大文件夹里,下面建三个小文件夹,名字固定为train,test,val。
具体原因可以在下面几行加载数据的代码中看到。
我处理过的VisDrone数据集也编译在这里,读者可以直接下载:
https://pan.baidu.com/s/1u0OZ05r48Yi6Wwi7TcqI_g?密码=8888
注意:默认情况下,VisDrone中只有xml标签,txt标签由我的脚本生成。具体可以参考我上一篇博文【目标探测】。YOLOv5贯穿VisDrone数据集。
处理完这个之后,像YOLOv5一样,需要在data文件夹下创建一个新的mydata.yaml。
输入以下内容:
训练:D:/Dataset/vis drone _ for _ yolov 6/images/train #训练图像
瓦尔:D:/Dataset/vis drone _ for _ yolov 6/images/val # val images
测试:D:/Dataset/vis drone _ for _ yolov 6/images/test #测试图像
is_coco:假的
nc: 10 #班数
名称:[行人,人,自行车,汽车,面包车,卡车,三轮车,篷式三轮车,公共汽车,马达]把这里的路径改成你自己的。
测试YOLOv6的效果有三种型号:yolov6s、yolov6n、yolov6t。我用yolov6s在VisDrone数据集上训练了100个epoch,总共用了13个小时(RTX 2060显卡)。相比YOLOV V5,训练速度提升了不少。
经测试,其IoU=0.50 AP为32.5%,IoU=0.50:0.95 AP为17.4%,还不如前两个版本的YOLOv5(之前的数据在我上一篇博文【目标探测】TPH-YOLOv5:基于变压器的无人机目标探测)
我们来测试一下视频。
结果中的错误:
将模型切换到部署模式。查官方发行。原来目前推理只支持图片,不支持视频。
然后在VisDrone测试集上输入图片进行测试,效果如下:
第一幅图像检测效果较好,大部分目标都被识别出来。
第二张图的结果令人惊讶,只检测到三个目标,其他自行车目标全部错过!
我的感觉是YOLOv6侧重于模型的部署。在项目文件中,支持导出ONNX、TensorRT等格式的文件。根据官方实验的对比,实验环境基本是nano的嵌入式设备。YOLOv6在真实生产环境下可能更有优势,但在纯算法效果上优势并不明显。而且很多内容都是借用YOLOX的,被戏称为“YOLOX PLUS”也不为过。
目前YOLOv4的作者团队已经推出了YOLOv7,而YOLOv6是一个过渡作品,整体上看起来推出的有点仓促。很明显,还没完善就推出来了。但作为国人推出的研究成果,还是期待其后续的发展和完善。
代码备份注意,这篇博文的观点只是我用yolov6s.pt训练100 epoch后得到的结论,具体性能有待后期测试。下面是代码备份(包括3个型号的训练前重量):
https://pan.baidu.com/s/1GIOZq3EgzzVDjs3zZP_dKQ?密码=8888
版权归作者所有:原创作品来自博主zstar_,转载请联系作者获得授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。