前言
写完 CV领域经典backbone模型小抄(1) 之后,我们知道,backbone加上分类头就可以做分类任务了,那么如果backbone加上一些目标检测和实例分割头,其实也可以做实例分割任务。
该文用来记录一些常见的目标检测方法。
CV领域经典backbone模型小抄(1)
CV目标检测模型小抄(1)
Transformer系列目标检测模型小抄(1)
下一篇: CV目标检测模型小抄(2)
卷积操作后大小计算 卷积与转置卷积——pytorch
标注工具: 一篇博文 太全了!计算机视觉2D/3D标注工具汇总,超好用!
其他数据增强: 《混合数据增强》最新综述
一文看尽深度学习中的各种数据增强
模型
Faster RCNN合集
Two stage的算法,需要先生成anchor/proposal, 然后预测出目标。
RCNN
Ross Girshick的作品
论文: Rich feature hierarchies for accurate object detection and semantic segmentation
有篇知乎文章也讲得不错 RCNN- 将CNN引入目标检测的开山之作
截图来自: Faster RCNN理论合集_RCNN_霹雳吧啦Wz 2:40时刻
RCNN 利用 Selective Search 算法得到两千个候选区域, 然后将它们缩放到227227,然后讲候选区域输入到AlexNet中获得4096维特征。(2000各区域就有20004096个特征),然后交给svm分类器,有多少个类别就有多少个分类器。
由于候选区域很多,因此需要采用 非极大值抑制 的方法,具体就是,寻找得分最大的目标,计算与其他区域的(A∩B / A∪B)IOU值,若大于阈值则删除。 最后一步是使用回归器去修正候选框的位置,有多少个类别就有多少个回归器,回归器利用的也是上述提到的4096维度的输出特征。
截图来自: Faster RCNN理论合集_RCNN_霹雳吧啦Wz 13:37时刻
不过该网络输出很慢,一张图片需要1分钟左右,训练过程繁琐,需要较大内存。
Fast RCNN
同样是Ross Girshick的作品
论文: Fast R-CNN, ICCV 2015
有篇知乎帖子也不错 目标检测之Fast RCNN
使用VGG16作为backbone
通过Selective Search的2000个区域,然后再采样正样本和负样本。
Faster RCNN
依然是Ross Girshick的作品
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, 有一个讲Faster RCNN的帖子 【论文解读】精读Faster RCNN
代码: torchvision/models/detection/faster_rcnn.py,
也有一个知乎帖子讲Faster RCNN的代码 捋一捋pytorch官方FasterRCNN代码
另外还有一个大佬的代码 deep-learning-for-image-processing/pytorch_object_detection/faster_rcnn/, 他还录制了6个小时的讲解视频…Faster RCNN源码解析(pytorch)
从标题我们也可以看出,作者用 Region Proposal Networks 替代了 Selective Search算法(因为它处理一张图需要2s左右)

原始论文也是使用VGG16作为backbone
截图: Faster RCNN理论合集_FasterRCNN_霹雳吧啦Wz 15:32时刻
anchor是靠人工先验定义的,通过RPN输出候选区域,然后再去采样。
原文是RPN+Fast RCNN分步骤训练的,不过现在大多是联合训练(例如pytorch官方)。
另外,如果Faster RCNN后半段换成FPN, 在pascal和coco的AP可以提两三个点。关于 FPN可查看: FPN结构详解_霹雳吧啦Wz, 十几分钟的讲解视频, 原论文Feature Pyramid Networks for Object Detection, CVPR 2017

预测头预测个数:
- 类别: k × ( c + 1 ) k \times (c+1) k×(c+1)
- 位置: k × 4 × ( c + 1 ) k \times 4 \times (c+1) k×4×(c+1)
其中k为proposal数目,c为预测的类别数目, 这里通常会加上背景类, 故加1
SSD

ECCV 2016, one stage.
论文: SSD: Single Shot MultiBox Detector
讲解视频: SSD算法理论_霹雳吧啦Wz
代码: deep-learning-for-image-processing/pytorch_object_detection/ssd/, 配对的代码讲解视频 SSD源码解析(Pytorch)_霹雳吧啦Wz
预测头预测个数:
- 类别: k × ( c + 1 ) k \times (c+1) k×(c+1)
- 位置: k × 4 k \times 4 k×4
其中k为default Box(类似于Faster RCNN总的proposal)数目,c为预测的类别数目, 这里通常会加上背景类, 故加1
RetinaNet

one-stage首次超过two-stage, 大神何恺明的作品(Tsung-Yi Lin,Priya Goyal Ross,Girshick,Kaiming He ,Piotr Dollar)
- 论文: Focal Loss for Dense Object Detection
- 代码: facebookresearch/Detectron, 包括Mask RCNN在内的很多模型的优秀仓库, 另一个大佬的代码 deep-learning-for-image-processing/pytorch_object_detection/retinaNet/
- 模型讲解: RetinaNet网络结构详解
可惜与yolov3对比,速度太慢了…
截图来自: RetinaNet网络结构详解 2:15时刻

预测头预测个数:
- 类别: c × A c \times A c×A
- 位置: 4 × A 4 \times A 4×A
其中,A 是default box的个数, c是要分辨的类别个数(不包括背景)
与FastRCNN和SSD不同的是,RetinaNet使用所有的正负样本而不进行正负样本采样。
Yolo
YoloV1
2016 CVPR

将图像分成 S × S S \times S S×S的网格, 如果目标的中心点落在某个网格中, 则由这个网格生成的Bounding Box负责预测该目标。
截图来自: YOLO系列理论合集(YOLOv1~v3)_霹雳吧啦Wz yolov1, 10:28时刻

yolov1无 anchor概念,是直接预测出bounding box
对群体性的小目标检测效果不理想。
Yolov2
2017 CVPR
- 论文: YOLO9000: Better, Faster, Stronger
作者做的一个website, 至于为什么叫YOLO9000,是因为检测类别超过9000




截图来自: YOLO系列理论合集(YOLOv1~v3)_霹雳吧啦Wz yolov2, 17:36时刻
backbone: Darknet-19, 每一个卷积块由 2d卷积层+BN层+LeakyRelu构成。
预测头的输出是
5
×
(
5
+
c
)
5 \times (5+c)
5×(5+c), 其中外面的5是因为每个网格预测5个bounding box, 里面的5是x, y, w, h, 和置信度confidence, 另外c代表预测类别数目(不包括背景类)。
截图来自: YOLO系列理论合集(YOLOv1~v3)_霹雳吧啦Wz yolov3, 16:19时刻
yolov2一些问题: 算法面试干货:Yolo系列的8个高频提问(yolov2)
YoloV3
2018 CVPR
没有引入独创的模块或创新点,整合了当前一些主流的结构而已,比如FPN,不过FPN是讲两个特征图在相同维度进行更相加,yolov3是在channel方向上进行concat。
backbone: Darknet-53


作者通过聚类, 得到(10×13),(16×30),(33×23),(30×61),(62×45),(59×
119),(116 × 90),(156 × 198),(373 × 326)这9个bounding box priors(其实和anchor差不多)
预测头(yoloV3有三个预测头, 每个预测头有不同尺度的特征图)输出个数是
N
×
N
×
[
3
×
(
4
+
1
+
c
)
]
N \times N \times [3 \times (4+1+c)]
N×N×[3×(4+1+c)], 其中N代表特征图的尺度(如13*13),小括号之外中括号的3是因为每个grid网格预测三个bounding box, 括号内的4是预测的x,y, w,h, 1是confidence score(objectness prediction), c代表预测类别(不包括背景类), 原作者说过这么一句话
“for the 4 bounding box offsets,1 objectness prediction, and 80 class predictions.”, 这里用的是coco数据集,有80各类,故此时的c等于80。
yolo-spp模块加了一些trick,比如Mosaic数据增强, spp模块。
关于yolo系列网络结构配置文件.cfg的解读可看 YOLOv3 SPP源码解析(Pytorch版), 配置文件解析
yoloV4
2020 CVPR
Alexey Bochkovskiy
- 论文: YOLOv4: Optimal Speed and Accuracy of Object Detection
- AB大神论文中的代码: AlexeyAB/darknet c版
backbone: CSPdarknet
截图来自 YOLOv4网络详解_霹雳吧啦Wz 7:36时刻

截图来自 YOLOv4网络详解_霹雳吧啦Wz 9:52时刻

预测头输出的结果和yolov3同, 都是 3 × ( 4 + 1 + c c l s ) 3 \times (4+1+c_{cls}) 3×(4+1+ccls)
yoloV5
非官方也非Alexey Bochkovskiy大神版,是ultralytics版。
github: ultralytics/yolov5
截止2022.07.21还无论文。
backbone: new csp-darknet53
Neck: SPPF, new csp-PAN
head: yolov3 head
截图来自:YOLOv5网络详解_霹雳吧啦Wz 9:23时刻
预测头输出的结果和yolov3,v4同, 都是 3 × ( 4 + 1 + c c l s ) 3 \times (4+1+c_{cls}) 3×(4+1+ccls)

yoloX
当前(2022.7.22)只有640*640分辨率尺度的模型,暂无1280的,需要1280的请转移到yolov5,或者大佬可以自行修改。
YOLOX is a high-performance anchor-free YOLO, exceeding yolov3~v5
非官方版本, 2021 CVPR, 旷视的作品
- 论文: YOLOX: Exceeding YOLO Series in 2021
- 代码: Megvii-BaseDetection/YOLOX, torch版本
该模型是在U版yolov5 v5.0的版本进行修改得到。
anchor-free
decoupled detection head

截图来自: YOLOX模型讲解_霹雳吧啦Wz 6:59时刻

截图来自: YOLOX模型讲解_霹雳吧啦Wz 10:28时刻

正负样本匹配SimOTA策略, 将匹配正负样本匹配的过程看成最优传输问题。
yolov6
yolov6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。
代码: meituan/YOLOv6
但是感觉名气不大?2022.7.21日还没有看到相应的论文
yoloV7
Chien-Yao Wang, Alexey Bochkovskiy and Hong-Yuan Mark Liao
- 论文: YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object
detectors - 代码: WongKinYiu/yolov7