YOLO系列输入尺寸和格子选取
yolo | 输入 | 画格子(grid) |
yolov1 | train:224x224xx3 test:448x448x3 | 7x7x((4+1)x2+20) |
yolov2 | train:224x224xx3X160+448x448x3X10 test:多尺度图片 | 13x13x5x((4+1)+20) |
yolov3 | train:416x416x3 test:多尺度图片 | (13x13+26x26+52x52)x3x((4+1)+80) |
yolov4 | train:416x416x3 test:多尺度图片 | (13x13+26x26+52x52)x3x((4+1)+80) |
yolov5 | train:640x640x3 or 1280x1280x3 test:多尺度图片 | (20x20+40x40+80x80)x3x((4+1)+80) |
yolov6 | 同上 | 同上 |
yolov7 | 同上 | 同上 |
yolov8 | 同上 | (20x20+40x40+80x80)x(4(x16)+80) |
YOLO系列网络层区别
yolo | backbone | neck | head |
yolov1 | 类似于GoogleNet的darknet19 | 全连接(FC) | |
yolov2 | DarkNet19、加入BN | passthrough layer | 1x1卷积 |
yolov3 | DarkNet53、加入了残差 | FPN | 三个头 卷积 |
yolov4 | CSPDarkNet53 | SPP+PAN | 同上 |
yolov5 | New CSPDarkNet53(C3) | SPPF+NewCSP-PAN | 同上 |
yolov6 | EfficientRep CSP-Block修改为RepBlock | SimSPPF+ 基于Rep和PAN构建了Rep-PAN | 解耦头 (分开了目标检测中的边框回归过程、类别分类过程和置信度) |
yolov7 | 加入ELAN模块 | SPPCSPC+基于E-ELAN和PAN构建了ELAN-PAN | 和yolov5一样,未使用解耦头 |
yolov8 | New CSPDarkNet53(C2F) | SPPF+NewCSP-PAN | 解耦头 (分开了目标检测中的边框回归过程和类别分类过程(r融合置信度)) |
YOLO系列茅框类型损失和正样本选择策略
yolo | Anchor | Loss(回归、class分类、object分类) | 正样本选择(和GTBox进行损失运算的Bbox) |
yolov1 | MSE | GTBox中心点所在的格子预测出的两个Bbox中IOU较大的为正样本 | |
yolov2 | 用K-means⽣成5个Anchor Box的尺度 | MSE | GTBox中心点所在的格子生成的5个Anchorbox中IOU较大的为正样本,一个GT对应一个AnchorBox |
yolov3 | 用K-means⽣成大中小三种尺寸的3个Anchor Box的尺度 | MSE+BCE | 所有框Max_IOU(Gtbox,AnchorBox) |
yolov4 | 给定了与yolov3不同的大中小三种尺寸的3个Anchor Box的尺度 | BCE+CIOU | 所有的的AnchorBox的IOU>阈值 |
yolov5 | AnchorTemp | BCE+CIOU | GTBox中心点所在的格子和离中心点最近的两个格子所产生的AnchorBox的宽高比小于Anchor_t(Anchor_t=4) |
yolov6 | AnchorPoint | 分类损失最终采用VAriFocal Loss,回归用SIOU/GIOU,分类用二元交叉熵 | TAL : ①在各个特征层计算gt与预测框IoU及与分类得分乘积作为score,进行分类检测任务对齐 ②对于每个gt选择top-k个最大的score对应bbox ③选取bbox所使用anchor的中心落在gt内的为正样本 ④若一个anchor box对应多个gt,则选择gt与预测框IoU最大那个预测框对应anchor负责该gt |
yolov7 | 用K-means⽣成大中小三种尺寸的3个Anchor Box的尺度 | 回归损失用CIOU, 置信度用交叉熵,分类用二元交叉熵 | 正样本选择: 1)选出与GT中心点相近的3个graid_cell对应的3个anchor_Temp。anchor_Temper的 宽高在1/4至4之间时能包含整个GT,该anchor_Temper为预选正样本(Bbox)。 OTA算法: 2)动态确认真正需要的正样本数量:计算GT与上述Anchor_Temp的IOU,IOU从大到小排序,前10个IOU的值求和,得到的值就为正样本数量K。 3)取GT_box 与预选正样本的的iou的交叉熵损失 A(pre 置信度 * pre 分类)和GT_box置信度的交叉熵损失B计算cost = B + 3 * A,将每个预选框按照cost从小到大排序,取前K个,该K个Bbox就为最终的正样本 4)如果存在1个Bbox被多个GT选中,选择cost最小的GT。 |
yolov8 | AnchorPoint | 分类采用BCE Loss, 回归采用了DFL + CIoU | GTBox框住格子的中心点的Anchor point作为候选,用候选框和GTBox进行IOU,用IOU和置信度计算align_metric(对齐指数),再选取top10,如果有一个Bbox对应多个GTBox,选取IOU最大的 |
YOLO系列编解码方式、时间和作者
yolo | 解码(tbox->Bbox) | 发布时间 | 作者 |
yolov1 | bx=tx+Gx by=ty+Gy bw=tw bh=th | 2015\6\8 | Joseph Redmon(小马哥) |
yolov2 | b:Bbox S:sigmod t:偏移 G:Grid A:AnchorBox bx=S(tx)+Gx by=S(ty)+Gy bw=Aw*e^tw bh=Ah*e^th | 2016\12\15 | Joseph Redmon(小马哥) |
yolov3 | 同上 | 2018\4\28 | Joseph Redmon(小马哥) |
yolov4 | bx=(2*S(tx)-0.5)+Gx by=(2*S(ty)-0.5)+Gy bw=Aw*e^tw bh=Ah*e^th | 2020\4\24 | Alexey Bochkovskiy(俄罗斯) |
yolov5 | bx=(2*S(tx)-0.5)+Gx by=(2*S(ty)-0.5)+Gy bw=Aw*(2*S(tw))^2 bh=Ah*(2*S(th))^2 | 2020\5\27 | Glenn Jocher(没论文、ultralytics团队) |
yolov6 | bx=(2*S(tx)-0.5)+Gx by=(2*S(ty)-0.5)+Gy bw=Aw*e^tw bh=Ah*e^th | 2023\1\13 (论文时间) | Chuyi Li(美团) |
yolov7 | bx=(2*S(tx)-0.5)+Gx by=(2*S(ty)-0.5)+Gy bw=Aw*e^tw bh=Ah*e^th | 2022\7\7 | Alexey Bochkovskiy(俄罗斯,和yolov4是同一人) |
yolov8 | bx=(2*S(tx)-0.5)+Gx by=(2*S(ty)-0.5)+Gy bw=Aw*(2*S(tw))^2 bh=Ah*(2*S(th))^2 | 2023\1\10 | Glenn Jocher(没论文、ultralytics团队,和yolov5是同一人) |
YOLO系列优势和不足
yolo | 优势与不足 | 问题 |
yolov1 | 优势:与二阶段检测算法相比,利用直接回归的方式,大大缩小了计算量,提升了运行速度。 不足:每一个网格仅2个预测框,当存在多物体密集挨着的时候或者小目标的时候,检测效果不好。 | |
yolov2 | 优势:利用passthrough操作对高低层语义信息进行融合,在一定程度上增强了小目标的检测能力。采用小卷积核替代7x7大卷积核,降低了计算量。同时改进的位置偏移的策略降低了检测目标框的难度。 不足:尚未采用残差网络结构。且当存在多物体密集挨着的时候或者小目标的时候,检测效果有待提升。 | 1、为什么加⼊了BN层后,就不再需要再使⽤drop out? 答:因为BN层是将每⼀个神经元转换为均值为0偏差为1的数字,所以其⽅差较⼩,⽽ drop out会丢弃⼀部分神经元,导致⽅差过⼤,造成信息丢失,所以不能两者同时使⽤. |
yolov3 | 优势:基本解决了小目标检测的问题,在速度和精度上实现了较好的平衡。 | IOU-->GIOU-->DIOU-->CIOU:CIOU在DIOU(面积+中心点的距离)的基础上增加了宽高比 Focal Loss |
yolov4 | 优势:对比v3和v4版本,在COCO数据集上,同样的FPS等于83左右时,Yolov4的AP是43,而Yolov3是33,直接上涨了10个百分点。 | |
yolov5 | 集大成者 | 数据增强: 七分数据、三分算法 样本越多,多样性越好,平衡性,模型训练会越好 |
yolov6 | 对耗时做了进一步的优化,进一步提升YOLO检测算法性能。 | |
yolov7 | 参数量和计算量大幅度减少,但性能仍能保持少量的提升。 | 使用重参数化 |
yolov8 |