关注公众号,发现CV技术之美
本篇文章来自知乎,作者:迪迦奥特曼,原地址:https://zhuanlan.zhihu.com/p/566469003
前两天看到了美团微信公众号上的宣传,更新发布了新版YOLOv6,还放出了arxiv论文。更新了之前的N/T/S小模型,也放出了M和L版本的大模型,论文实验表格多达十几个,看打出来是很用心的做了,个人觉得也算对得起这个名字了(官方认不认暂且不说)。
之前本人写了一个YOLO合集的文章《迪迦奥特曼:从百度飞桨YOLOSeries库看各个YOLO模型 》,对YOLOv6介绍的不多,毕竟那时候YOLOv6还是第一版被全网黑的时候,现在还是先重新来具体具体分析下这个全新版YOLOv6。此外想聊聊关于怎么选YOLO模型去训业务数据集的一些感想。
YOLOv6模块分析
YOLOv6结构图镇楼:
Backbone:
图虽然直观但是不全,具体还是看代码好理解。可以看出两个backbone差别只在于基础模块block用的不同,一个 是RepBlock一个是BepC3,此外还有一个通道划分因子csp_e区别。
核心模块还是RepVGG,今年的yoloe、yolov6、yolov7都相继使用了,只是使用范围幅度不一。
有意思的是v6做了实验对比RepBlock和CSPStackRepBlock,CSP形式确实大大的减少了参数量FLOPs。也难怪要新设计CSPStackRep,v6-M上看原先RepBlock结构参数量计算量简直大到爆炸。CSP形式在小模型上表现不太行,但是v6-M的2/3设置又有点诡异。
Neck:
基于YOLOv5 YOLOX的PAFPN结构也进行了改进:
同样也是一个是RepBlock一个是BepC3,此外还有一个通道划分因子csp_e区别。
Head和loss:
新版使用的是像TDDO Head那样的形式,使用ATSS assign作为warmup,后期使用TAL assign,相比第一版几乎就YOLOX的head算好的了。然而之前瞄到了 [yoloseries](https://github.com/nemonameless/PaddleDetection_YOLOSeries) 库里的paddle yolov6的复现,简直和PPYOLOE head是一模一样,包括assign过程和loss过程甚至还有各种命名。怀疑yoloseries作者就是复制PPYOLOE head过来再改成v6 head的哈哈哈。
本来看v6原版代码的时候就感觉很像yoloe,不过v6 head区别在于没有用到PPYOLOE里的ESEAttn注意力,分类回归v6也有公用stem,而PPYOLOE里是分离的stem。估计各家为什么这么设计也是实验证明过的吧,都有自己的道理。此外v6 head还有distill的部分loss,算是自己的特色trick刷点来看还是很有用的。
-
原版v6 head:https://github.com/meituan/YOLOv6/blob/main/yolov6/models/effidehead.py
-
库里的v6 head的实现,包括loss:https://github.com/nemonameless/PaddleDetection_YOLOSeries/blob/release/2.5/ppdet/modeling/heads/effide_head.pyyoloseries
-
PaddleDetection的ppyoloe head的实现,包括loss:https://github.com/PaddlePaddle/PaddleDetection/blob/develop/ppdet/modeling/heads/ppyoloe_head.py
-
原版v6 head loss:https://github.com/meituan/YOLOv6/blob/main/yolov6/models/loss.py
YOLOv6总体设计
看总体设计还是看代码配置文件。但其实v6的配置很不统一,包括之前v7也是不统一,都像是每个模型单独调优。看到yoloseries库的作者的总结:
-
YOLOv6 n t s 模型使用EfficientRep和RepPAN,YOLOv6 m l 模型使用CSPBepBackbone和CSPRepPAN,Params(M)和FLOPs(G)均为训练时所测;
-
YOLOv6 m l 模型训练默认使用蒸馏自监督辅助训练,且使用dfl_loss和设置reg_max=16,其余n t s 模型则未使用;
-
YOLOv6 l 模型原文默认激活函数为silu,其余n t s m模型则默认为relu;
-
YOLOv6 n t 模型原文训练默认会使用到siou loss,其余s m l模型则默认使用到giou loss;
此外还有优化器一些参数的不同吧太琐碎了。以前用习惯了yolov5 yolox的配置,大模型和小模型差别就改个width depth参数,yoloe也是这样,就很方便和统一。虽然有实验证明大模型小模型用哪个好,但是这样的设置每个模型单独调优就只为了争0.几的mAP也位面太麻烦了,而且只是COCO数据集的mAP,模型原模原样重训两遍0.3以内的mAP波动都还算正常的。
自监督蒸馏是一个v6的特色,涨点很多如下表,之前yolov7的1280 P6大尺度模型也使用了辅助头蒸馏,是个不错的trick。总的来看,自监督至少有1.0+ mAP的增益。
指标分析:
精度上看,v6确实足够高了,但这其中也包含一些猫腻。比如L版本默认换成了silu,不和N/T/S/M的relu统一了,虽然单列了一个L-relu,估计是速度够快了为了再加强些精度再训的silu版本,乍一看Model Zoo还以为所有模型都是silu只是L单独训了一个relu的。。速度上看relu真的测速度会更快的多!在第一版发布的时候早有大佬说过,论文中也证明了。
此外还有很多表格对比实验验证,这也是各个模型配置文件不统一的主要原因。小模型可能siou更适合,tiny第一版是depth=0.25 width=0.50,现在改成了depth=0.33 width=0.375正常配置,掉了点精度换的了参数量更小速度更快。
此外大模型M和L的自监督蒸馏提了不少点,其中M的depth是0.6而不是常用的0.67,而最诡异的是调个通道划分因子csp_e就能涨0.8之多。最后没有像v7 v5那样有大模型X版本和1280尺度有点遗憾,可能参数量flops过大,精度性价比不高了。
根据上述表格,本人抽空整理了下的最常用的S和L版本的几个YOLO模型的数据,按发布时间顺序,供大家参考:
注意:速度由于各个YOLO的平台环境不同,甚至版本和框架不同都会有影响,实际还是得自己实测,也要注意几次测波动不同也是正常的。
怎么选模型:
今年堪称YOLO内卷元年,先是yolov5 yolox yoloe神仙打架,各大用户用的正欢,一看美团v6出来了哇新yolo马上就换v6,再一看v7出来了立马再换v7,再一看v6又更新了精度更高再重新换v6,很多时候就是在来回折腾,数据量少重训一遍还好,数据量大简直就像扛着炸药包折返跑,训完了新的精度搞不好还低了。
所以在这样的内卷期,作为普通用户我们应该怎么选择模型呢?个人发表一点拙见。首先需要明确自己项目的要求和标准,精度和速度一般是最重要的两个指标,另外还有模型参数量、计算量等等,注意这些还都必须在自己项目的设备上为前提。
1.首先是精度,
一看各家YOLO首页的折线图就知道了,都是恨不得自己一条最高全面压住所有对手,当然这也是各家的主要卖点。这个复现也是最有保证的。但是我想说的是,虽然各家都会刷权威的COCO精度,但真到业务数据集上的时候,效果哪个高就不一定了,尤其是COCO精度差距在1.0以内的模型,其实选哪个都行,再说也不能纯看mAP,还有ap50 ap75 recall等指标呢。
训业务数据要高精度,最重要是一点是加载超强的pretrain权重!!!这个恐怕还是很多新手不知道的。COCO预训练可以极快收敛并达到比imagenet-pretrain训更高的精度,一个超强pretrain顶过绝大多数小修小改的tricks。之前yoloe也更新了一版yoloe plus也叫yoloe+,放出了objects 365预训练,这个简直是超级外挂,全量coco只训80epoch刷的超高,我用了之后自己数据集相比加载原先coco预训练涨了5个点mAP!还是缩短一半训练epoch的情况下。
之后还要训一个20万张图的数据集,比coco量级还大的时候coco预训练就不够用了,训300epoch甚至80epoch都和蜗牛一样慢,而obj365预训练正好派上用场估计训30epoch就行。此外自监督半监督等策略,确实是可以提精度,作为大厂自己PR还是可以的,但是就用户使用而言可能会有点鸡肋麻烦,有点耗时耗资源。
2.其次是第二卖点速度
,这个不像精度很快就能跑复现证明的,鉴于各大YOLO发布的测速环境也不同,还是得自己实测过才知道。另外各大YOLO发布的速度只是去NMS去预处理的纯模型速度,真正使用还是需要加上NMS和预处理的,NMS的参数对速度影响极大,尤其是score threshold还有top k keep k。
score threshold一般为了拉高recall都会设置0.001 0.01之类的,这种范围的低分框其实没什么用,NMS阶段会极大的浪费时间。但是调成0.1 0.2速度就飙升了,不过代价是掉一些mAP。而调top k keep k也会影响速度,尤其top k,但是都对mAP影响较小,具体可以自己实践。总之实际应用需要自己实践不能只看论文速度,并且是算上NMS的耗时的,而NMS耗时又是自己可控的。
3.然后是计算量参数量
,这个一般不会着重考虑,但也不能太离谱毕竟有些设备还是有限制,堆模块改成原版两倍3倍级别换来一点点mAP的提升是AI竞赛常用的套路,而且一般会牺牲些速度,意义不大。另外还有些特殊模块,比如ConvNeXt 参数量极大但是FLOPs很小,会掉速度,可以刷点但也意义不大。csp形式的设计极大的降低了参数量FLOPs,也许以后新模块都可以设计个csp_xxx去使用哈哈
总之,YOLO内卷时期要保持平常心,针对自己的需求,选准适合自己的模型。
相关引用链接:
-
YOLOv6论文:https://arxiv.org/abs/2209.02976
-
YOLOv6代码:https://github.com/meituan/YOLOv6
-
YOLOSeries代码:https://github.com/nemonameless/PaddleDetection_YOLOSeries
-
PPYOLOE论文:https://arxiv.org/abs/2203.16250
-
PaddleDetection代码:https://github.com/PaddlePaddle/PaddleDetection
欢迎加入「目标检测
」
交流群👇备注:
OD
本文来自于csdn,文章介绍了数据集、
模型
训练中读取训练数据以及
模型
检测可视化等相关内容。在这个
Yolo
v3发布的大好日子。
Deeplearning4j终于迎来了新的版本更新1.0.0-alpha,在zoomodel中引入Tiny
Yolo
模型
可以训练自己的数据用于目标检测。
不得不说,在
Yolo
v3这种性能和准确率上面都有大幅度提升的情况下,dl4j才引入Tiny
Yolo
总有一种49年加入国军的感觉
数据来源自
点击上方“小白学视觉”,
选
择加"星标"或“置顶”重磅干货,第一时间送达0 前言本文目的是用尽量浅显易懂的语言让零基础小白能够理解什么是
YOLO
系列
模型
,以及他们的设计思想和改进思路分别是什...
输出都是13X13X2046,和原始的拼接起来,最后的shape为13X13X2046。CSP是可以增强CNN学习能力的新型结构,CSPNet将底层的特征映射分为两部分,一部分经过密集块和过渡层,另一部分与传输的特征映射结合到下一阶段。(3)网络实质上是看不见anchor box的,在anchor box的基础上进行边界回归更像是一种在范围比较小时候的强行记忆。降低易分样本的loss贡献,让网络专注于学习难分的样本,达到平衡样本的目的,因为负样本数量巨多,就会有很多的易分样本。附:卷积和的计算公式。
One-stage 目标检测器基本上是将目标检测建模成了一个密集分类和定位的任务。
分类任务一般使用 Focal Loss 来进行优化,定位任务一般是学习 Dirac delta 分布。
如 FCOS 中就提出了一个估计定位质量的量:IoU score 或 centerness score,然后 NMS 排序的时候,将分类得分和框质量得分相乘。.........
但是这种办法解决了【box_loss、cls_loss、dfl_loss为nan】的问题,并未解决【Box(P R mAP50 mAP50-95)为0】的问题。另外我在
yolo
v8上使用devide=cpu训练时,不会出现nan和0的问题,但是速度很慢。
yolo
v5 版本是v7.0
yolo
v8的版本是8.0.66。用命令行训练时,可以添加一个设置
选
项 amp=False。,出现的问题跟下边这个链接中提到的问题一模一样,修改amp和model.half.float即可。
YOLO
模型
是用来目标检测的,也就是在一副图像中检测到物体并识别出物体在图像中所在的位置,
YOLO
相比于以往的带有建议框的神经网络,速度大有提升,下边详细介绍
YOLO
网络
YOLO
网络层
网络还是比较简单的,从448*448*3的图像依次经过途中所有卷积层与池化层得出了7*7*1024的特征图,再经过两层全连接层得到7*7*30的输出结果
下边解释一下为什么输出层数是30,当我们得到7*7*1024的特征图时,对每一个网格都做一次预测,也就...
作者|小书童 编辑| 集智书童点击下方卡片,关注“自动驾驶之心”公众号ADAS巨卷干货,即可获取点击进入→自动驾驶之心【目标检测】技术交流群「首先恭喜
YOLO
v7登录CVPR2023的顶会列车!!!」
YOLO
v7-u6分支的实现是基于
Yolo
v5和
Yolo
v6进行的。并在此基础上开发了Anchor-Free方法。所有安装、数据准备和使用与
Yolo
v5相同,大家可以酌情尝试,如果电费不要钱...
点击上方“视学算法”,
选
择加"星标"或“置顶”重磅干货,第一时间送达作者丨叶润源来源丨https://www.yuque.com/yerunyuan/ar9831/tsm0id#Kfi4w...