计算机系统应用教程网站

网站首页 > 技术文章 正文

美团yolov6新鲜出炉 浅尝过程(精度超过yolov5 yolox)

btikc 2024-09-14 01:03:38 技术文章 30 ℃ 0 评论

导读

为了解决工业应用落地时所遇到的实际问题,美团视觉智能部针对 YOLO 系列框架,在训练策略、主干网络、多尺度特征融合、检测头等方面进行了思考和优化,目前,项目已开源至Github,传送门:YOLOv6链接:https://github.com/meituan/YOLOv6

精度与速度远超 YOLOv5 和 YOLOX 的新框架

目标检测作为计算机视觉领域的一项基础性技术,在工业界得到了广泛的应用,其中 YOLO 系列算法因其较好的综合性能,逐渐成为大多数工业应用时的首选框架。至今,业界已衍生出许多 YOLO 检测框架,其中以 YOLOv5、YOLOX 和 PP-YOLOE 最具代表性。美团视觉智能部在实际使用中发现上述框架还有提升空间在 COCO 数据集上,YOLOv6 在精度和速度方面均超越其他同体量算法,相关结果如下图所示:



实际操作(以下操作使用的是yolov6s)

  • 准备数据集
  • 修改coco.yaml
  • 修改yolov6.py
  • 修改train.py

实际操作的数据集一共429张图片,以8:2的比例划分训练集和验证集。先看一下评估结果。

Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.500
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.961
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.477
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.348
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.508
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.443
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.554
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.554
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.400
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.561

IOU=0.5时,准确率为96%,比较同样数据集做训练的ppyoloe,IOU=0.5时的准确率为91%。使用86张图片做测试发现,meituan-yolov6将86张图片全部检测出来,ppyoloe在86张测试图片中漏检了4张,两个模型都没有错检。

代码工程中需要准备的地方:

要训练自己的数据时,首先要准备好meituan-yolov6适用的格式,在标注工具上(如cvat)下载coco数据集的格式,每张图片对应一个标签,每一行代表一个标注框。标签格式如下。

# class_id center_x center_y bbox_width bbox_height
 0 0.300926 0.617063 0.601852  0.765873

接下来就是,按照下面的文件位置,将下载好的coco数据集格式的img和txt分成训练集和验证集放到对应的文件夹下。

data/
   |---images/(放图片,分为train目录和val目录)
	|---train/
		---1.img
		---2.img
	|---val/
		---3.img
   | ---labels/(放标签文件,分为train目录和val目录)
	|---train
		---1.txt
		---2.txt
	|---val
		---3.txt

下一步需要修改coco.yaml

# 这个anno_path是运行train.py以后,根据我们的txt和jpg生成的json文件路径,这里根据原始代码的路径简单修改一下就行。

train: YOLOv6-main/data/images/train 
val: YOLOv6-main/data/images/val
test: YOLOv6-main/data/images/val
anno_path: YOLOv6-main-original/YOLOv6-main/data/annotations/instances_val.json
# number of classes
nc: 1
# class names
names: [ 'crack' ]

接下来修改configs/yolov6.py,这里是网络结构文件,大部分不需要修改,这里可以改一下预训练模型的路径,pretained原先是None.这里需要的预训练模型可在Release YOLOv6 0.1.0 · meituan/YOLOv6 · GitHub,这里找到。

model = dict(
type='YOLOv6s',
pretrained='YOLOv6-main/weights/yolov6s.pt',
depth_multiple=0.33,
width_multiple=0.50,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
)
  .........

运行 python tools/train.py,当然你可以不更改上面一些文件内容,使用python tools/train.py --batch 32 --conf configs/yolov6s_finetune.py --data data/person_ebike.yaml --device 0 来训练。

我们使用340多张图片,训练了300个epoch,最后对比结果在前文提到过,个人感觉效果比ppyoloe要好,一些yolov5,ppyoloe漏检的物体,使用yolov6都检测出来了。而且,yolov6是上周才开源,他们还在更新,期待更好的效果。

总结

本文使用个人数据集(物体裂纹图片)进行训练,数据集数量不多,但是感觉效果很好,个人测试比yolov5和ppyoloe的实际检测精度要高,目前还没有对比和其他模型的速度差异。在训练中会遇到一些问题。大部分是mAP=0的问题,这是官方的bug,可以下载最新的代码重新训练,另外推荐数据集命名时尽量不要出现" . ", 代码处理时会出现问题,当然也可以自己更改一下train代码。在 COCO 数据集上的实验结果显示,YOLOv6 在检测精度和速度方面都属于佼佼者。接下来美团会继续完善yolov6生态,期待接下来的更新。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表