Yolov1
1.1 yolov1网络结构:
1.2 yolov1和RCNN比较
YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。从网络设计上,YOLO与rcnn、fast rcnn及faster rcnn的区别如下:
[1] YOLO训练和检测,特征提取和分类回归均是在一个单独网络中进行。YOLO没有显示地求取region proposal的过程。而rcnn/fast rcnn 采用分离的模块(独立于网络之外的selective search方法)求取候选框(可能会包含物体的矩形区域),训练过程因此也是分成多个模块进行。Faster rcnn使用RPN(region proposal network)卷积网络替代rcnn/fast rcnn的selective search模块,将RPN集成到fast rcnn检测网络中,得到一个统一的检测网络。尽管RPN与fast rcnn共享卷积层,但是在模型训练过程中,需要反复训练RPN网络和fast rcnn网络(注意这两个网络核心卷积层是参数共享的)。
[2] YOLO将物体检测作为一个回归问题进行求解,输入图像经过一次inference,便能得到图像中所有物体的位置和其所属类别及相应的置信概率。而rcnn/fast rcnn/faster rcnn将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题)。
1.3 缺点
(1)全连接层:
检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。
直接学习到bbox坐标和大小,相比v2用offset位置准确率低。
(2)4个pooling层:
学到的特征不精细,影响准确率。
(3)cell&bbox策略:
I.虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。
II.模型训练依赖于物体识别标注数据,对于非常规的物体形状或比例的检测效果并不理想。
III.召回率低。
(4)Lost函数:
大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(采用求平方根
方式)。对于小物体,小的IOU误差降低了物体检测的定位准确性。
YOLOv2
[1] Batch Normalization
CNN在训练过程中网络每层输入的分布一直在改变, 会使训练过程难度加大, YOLO2网络在每一个卷积层后添加batch normalization, mAP获得了2%的提升。
[2] High Resolution Classifier
先拿darknet19在Imagenet上以448*448分辨率finetune10个epoch,再拿得到的网络去finetune产生用于detect的网络。这样通过提升输入的分辨率,mAP获得了4%的提升。
[3] Convolutional With Anchor Boxes
Yolov1全连接层丢失空间信息,借鉴FasterRCNN,去全连接层,用卷积层预测offset而不是coordinates,所以YOLOv2的输入可以不限于416x416大小的图片,适用于不同大小尺寸输入的image。
具体实现:
首先去出一个pooling层保证高分辨率。然后缩减网络,让图片输入分辨率为416 * 416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。因为较大的物体在最后一般都落在feature map 中心cell,偶数则落在中心4个cell。
最后,YOLOv2使用了卷积层降采样(factor 为32),使得输入卷积网络的416 * 416图片最终得到13 * 13的卷积特征图(416/32=13)。
ps:每个anchor box都预测物体而不是yolov1中每个grid cell只负责中心在
[4] Dimension Clusters
用K-means聚类方法在训练集的bounding boxes上,自动找到更好的boxes宽高维度初值。
[5] Direct location prediction(预测时box部分初值由上一步聚类给出)
RPN中:直接用相对于cell center的offset,这个offset大小不受约束,所以bbox中心可能在cell之外,导致随机初始化后需要很长时间找到敏感位置。
Yolov2改进:把offset用sigmoid函数约束在0-1,则bbox中心不会超出cell。
具体实现:每个cell有5个聚类得到的BBox prior,每个box有5个坐标参数:
tx,ty,tw,th,to。(pw、ph 是聚类得到的初值)
[6] Fine-Grained Features
Passthrough layer转移层也就是把高低两种分辨率的特征图做了一次连结,连接方式是叠加特征到不同的通道而不是空间位置,类似于Resnet中的identity mappings。这个方法把26 * 26 * 512的特征图连接到了13 * 13 * 1024的特征图,这个特征图与原来的特征相连接。YOLO的检测器使用的就是经过扩张的特征图,它可以拥有更好的细粒度特征,使得模型的性能获得了1%的提升。
YOLOv3
分类器-类别预测:
YOLOv3不使用Softmax对每个框进行分类,主要考虑因素有两个:Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此Softmax不适用于多标签分类。Softmax可被独立的多个logistic分类器替代,且准确率不会下降。分类损失采用BCE loss.
多尺度预测:
每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3种尺度.
尺度1: 在基础网络之后添加一些卷积层再输出box信息.
尺度2: 从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍.
尺度3: 与尺度2类似,使用了32x32大小的特征图.
YOLOv4
作者设计YOLO的目的之初就是设计一个快速而高效的目标检测器,论文使用了大量的技巧,具体的解读之后的博客详细梳理,这里进行简单归纳。
- Backbone:CSPDarkNet53
- Neck:SPP,PAN
- Head:YOLOv3
- Tricks(backbone):CutMix、Mosaic、DropBlock、Label Smoothing
- Modified(backbone): Mish、CSP、MiWRC
- Tricks(detector):CIoU、CMBN、DropBlock、Mosaic、SAT、Eliminate grid sensitivity、Multiple Anchor、Cosine Annealing scheduler、Random training shape
- odified(tector):Mish、SPP、SAM、PAN、DIoU-NMS