经典的目标检测

Object Detection (OD)

📄paper: [1905.05055v2] Object Detection in 20 Years: A Survey (arxiv.org)

CVHub带你聊一聊目标检测发展的这22年[4]

object detection milestones

目标检测任务是找出图像或视频中人们感兴趣的物体,并同时检测出它们的位置和大小。——分类+定位

three section

Three different boxes

  1. bounding box(bbox)
  2. anchor box
  3. ground truth box(gt box)
  1. Bounding Box (Bbox):
    • 定义: 边界框,用于描述物体在图像中的位置和范围。通常由两个点表示,即左上角和右下角的坐标。
    • 用途: 目标检测任务中,模型通过预测边界框来确定图像中目标的位置。
  2. Anchor Box:
    • 定义: 锚框,是一组预定义的边界框,具有不同的尺寸和宽高比。这些框在图像中均匀分布,用于捕捉不同尺寸和形状的目标。
    • 用途: 在目标检测的多尺度处理中,锚框用于生成候选框,模型会根据这些框进行预测。锚框提供了对不同尺度目标的适应性。
  3. Ground Truth Box (GT Box):
    • 定义: 真实边界框,是手动标注或从数据集中获得的目标真实位置的边界框。
    • 用途: 在训练目标检测模型时,与预测的边界框进行比较,用于计算模型的损失。模型通过比较其预测的边界框与真实的边界框来学习目标的位置。

backbone _ extracting the useful information

VGG, ResNet… + ImageNet Pretrained

何恺明的一篇关于pretrarined的论文

[1811.08883] Rethinking ImageNet Pre-training (arxiv.org)

一个模型并不是必须使用pretrarined,通过随机初始化所有的参数,只要训练的足够久,其实也是可以有很高的性能的。

常用的backbone[3]

大型网络:

1.VGG:***”Very Deep Convolutional Networks for Large-Scale Image Recognition”***。其中最常用的就是VGG-16.

2.ResNet:***”Deep Residual Learning for Image Recognition”。其中最常用的就是ResNet50*和ResNet101。当任务需求很小的时候,也可以用ResNet18.

3.ResNeXT:***”Aggregated residual transformations for deep neural networks”,这个我没有用过,但很多sota工作中都会使用,刷榜*的小伙伴不妨考虑一下。

4.ResNet+DCN:这一网络主要是将DCN工作应用在ResNet网络上,DCN来源于这篇文章:***”Deformable Convolutional Networks”。DCN是常用的涨点神器,不过似乎在实际部署的时候要复杂一些,刷榜*的时候还是很值得一用。

5.DarkNet:常用的包括darknet19darknet53,这两个网络分别来源于YOLOv2和YOLOv3两个工作中。其中darknet19对标的是vgg19darknet53对标的是resnet101,但由于darknet本身是个很小众的深度学习框架,不受学术界关注,且这两个网络均是由darknet框架实现的,因此也就很少会在其他工作中看到这两个backbone。不过,笔者更偏爱darknet,也对其进行了复现,因为结构简洁,便于理解。

6.CSPResNet:出自于***”CSPNet: A New Backbone that can Enhance Learning Capability of CNN”***。CSP是一种很好用的结构,在减少参数量的同时,还能够提升模型性能,是不可多得的性价比极高的模块之一。Scaled-YOLOv4就借鉴了这一工作的思想大幅度提升了YOLOv4的性能。不过,目前似乎也不是主流,仍旧无法撼动ResNet101和ResNet+DCN的刷榜地位。

轻量型网络:

1.MobileNet:谷歌的工作,一共出了v1,v2,v3三个版本了,相较于上面那些以GPU为主要应用平台的大型网络,MobileNet则着眼于低性能的移动端平台,如手机、嵌入式设备等。

2.ShuffleNet:旷视的工作,一共出了v1和v2两个版本,同样是针对于低性能的移动端平台。

Neck _ making full use of the extracted feature

FPN
spatial pyramid pooling layer
YOLOv3-SPP3
  • FPN

  • SPP

YOLOv3-spp 参考了spatial pyramid pooling的设计。

  • RFB:***”Receptive Field Block Net for Accurate and Fast Object Detection”***

  • ASPP:***”DeepLab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected CRFs”***

  • SAM:***”CBAM: Convolutional block attention module”***

  • PAN:***”Path aggregation network for instance segmentation”***。PAN是一个非常好用的特征融合方式,在FPN的bottom-up基础上又引入了top-down二次融合,有效地提升了模型性能。

detection head _ detection & location

Detection head这一部分通常就是普通的卷积。

Traditional

HOG

HOG (Histogram of Oriented Gradients):

  • 特征提取方法: HOG是一种用于图像特征提取的方法,常用于目标检测。它通过计算图像局部区域的梯度方向直方图来描述图像的外观和纹理信息。
  • 工作原理: HOG将图像划分为小的局部区域(cells),然后对每个局部区域计算梯度的方向直方图。这些直方图被串联成一个向量,形成整个图像的特征表示。HOG特征在目标检测中常用于支持向量机(SVM)等分类器,尤其在行人检测等领域取得了良好的效果。

DPM

Deformable Parts Model[1][2]

📄paper:

The Deformable Parts Model (DPM) (Felzenszwalb et al., 2010) recognizes objects with a mixture graphical model (Markov random fields) of deformable parts. The model consists of three major components:

  1. A coarse root filter defines a detection window that approximately covers an entire object. A filter specifies weights for a region feature vector.
  2. Multiple part filters that cover smaller parts of the object. Parts filters are learned at twice resolution of the root filter.
  3. A spatial model for scoring the locations of part filters relative to the root.

DPM (Deformable Part Models):

  • 模型框架: DPM是一种用于目标检测的模型框架,最初由P. Felzenszwalb等人提出。它建模目标的不同部分,并允许这些部分之间的形状变化,以更灵活地适应目标的形状和姿态。
  • 工作原理: DPM将目标表示为由若干部分组成的模型,每个部分用一个局部的HOG特征描述。这些部分被组织成一个图结构,可以灵活地适应不同的目标形状。通过训练,DPM学习如何组合这些部分以准确地定位目标。DPM在目标检测任务中取得了显著的成果,特别是在多尺度和复杂姿态的情况下。

Anchor Based

二阶段目标检测算法一般比一阶段精度要高,但一阶段检测算法速度会更快.

基于Anchor的目标检测算法主要有以下四大缺点:

  1. Anchor的大小,数量,长宽比对于检测性能的影响很大(通过改变这些超参数Retinanet在COCO benchmark上面提升了4%的AP),因此Anchor based的检测性能对于anchor的大小、数量和长宽比都非常敏感。
  2. 这些固定的Anchor极大地损害了检测器的普适性,导致对于不同任务,其Anchor都必须重新设置大小和长宽比。
  3. 为了去匹配真实框,需要生成大量的Anchor,但是大部分的Anchor在训练时标记为负样本,所以就造成了样本极度不均衡问题(没有充分利用fore-ground)。
  4. 在训练中,网络需要计算所有Anchor与真实框的IOU,这样就会消耗大量内存和时间。

Two-Stage

Stage1:从图像中生成region proposals
Stage2:从region proposals生成最终的物体边框。

任务流程:特征提取 –> 生成 RP –> 分类/定位回归。 常见 Two-stage 目标检测算法有:R-CNN、Fast R-CNN、Faster R-CNN、SPP-Net 和 R-FCN 等。

R-CNN (CVPR 2014) ✅

R-CNN将CNN方法引入目标检测领域, 大大提高了目标检测效果

📄paper:

💻code: rbgirshick/rcnn: R-CNN: Regions with Convolutional Neural Network Features (github.com)

选择性搜索算法Selective Search

📄paper: UijlingsIJCV2013.pdf (uva.nl)

💻code: AlpacaTechJP/selectivesearch: Selective Search Implementation for Python (github.com)

R-CNN

  1. 候选区域生成: 一张图像生成~2K个候选区域 (采用Selective Search 方法)

    缺点:重叠框(一张图像生成~2K个候选区域)特征的冗余计算使得整个网络的检测速度变得很慢

  2. 特征提取: 对每个候选区域,使用深度卷积网络提取特征 (CNN)

  3. 类别判断: 特征送入每一类的SVM 分类器,判别是否属于该类

  4. 位置精修: 使用回归器精细修正候选框位置

SPP-net (TPAMI 2015)

SPP-net

📄paper:

💻code: yifanjiang19/sppnet-pytorch: A simple Spatial Pyramid Pooling layer which could be added in CNN (github.com)

SPP-net提出了一种**空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP)**。

spatial pyramid pooling layer

它的主要思路是对于一副图像分成若干尺度的图像块(比如一副图像分成1份,4份,8份等),然后对每一块提取的特征融合在一起,从而兼顾多个尺度的特征。SPP使得网络在全连接层之前能生成固定尺度的特征表示,而不管输入图片尺寸如何。当使用SPPNet网络用于目标检测时,整个图像只需计算一次即可生成相应特征图,不管候选框尺寸如何,经过SPP之后,都能生成固定尺寸的特征表示图,这避免了卷积特征图的重复计算。

Fast R-CNN (ICCV 2015)✅

Fast R-CNN

📄paper:

💻code: rbgirshick/fast-rcnn: Fast R-CNN (github.com)

Fast R-CNN

Fast R-CNN网络是RCNN和SPPNet的改进版,该网路使得我们可以在相同的网络配置下同时训练一个检测器和边框回归器。该网络首先输入图像,图像被传递到CNN中提取特征,并返回感兴趣的区域ROI,之后再ROI上运用ROI池化层以保证每个区域的尺寸相同,最后这些区域的特征被传递到全连接层的网络中进行分类,并用Softmax和线性回归层同时返回边界框。

Faster R-CNN (2015)✅

Faster R-CNN

📄paper: [1506.01497] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (arxiv.org)

💻code: ShaoqingRen/faster_rcnn: Faster R-CNN (github.com)

Faster R-CNN

Faster RCNN提出了**区域选择网络(RPN)**用于生成候选框,能极大提升检测框的生成速度。

  1. 输入图像使用CNN生成该图像的feature maps。
  2. 在feature maps上应用**Region Proposal Network(RPN)**,返回object proposals和相应分数。
  3. 应用Rol池化层,将所有proposals修正到同样尺寸。
  4. 将proposals传递到完全连接层,生成目标物体的边界框。

FPN (CVPR 2017)✅

📄papaer:

💻code: jwyang/fpn.pytorch: Pytorch implementation of Feature Pyramid Network (FPN) for Object Detection (github.com)

FPN

在FPN技术出现之前,大多数检测算法的检测头都位于网络的最顶层(最深层),虽说最深层的特征具备更丰富的语义信息,更有利于物体分类,但更深层的特征图由于空间信息的缺乏不利于物体定位,这大大影响了目标检测的定位精度。

为了解决这一矛盾,FPN提出了一种具有横向连接的自上而下的网络架构,用于在所有具有不同尺度的高底层都构筑出高级语义信息。FPN的提出极大促进了检测网络精度的提高(尤其是对于一些待检测物体尺度变化大的数据集有非常明显的效果)。

Mask R-CNN (2018)

📄paper: [1703.06870] Mask R-CNN (arxiv.org)

💻code: facebookresearch/Detectron: FAIR’s research platform for object detection research, implementing popular algorithms like Mask R-CNN and RetinaNet. (github.com)

Cascade R-CNN (CVPR 2018)

📄paper:

💻code: zhaoweicai/cascade-rcnn: Caffe implementation of multiple popular object detection frameworks (github.com)

Faster RCNN完成了对目标候选框的两次预测,其中RPN一次,后面的检测器一次,而Cascade RCNN[9]则更进一步将后面检测器部分堆叠了几个级联模块,并采用不同的IOU阈值训练,这种级联版的Faster RCNN就是Cascade RCNN。通过提升IoU阈值训练级联检测器,可以使得检测器的定位精度更高,在更为严格的IoU阈值评估下,Cascade R-CNN带来的性能提升更为明显。Cascade RCNN将二阶段目标检测算法的精度提升到了新的高度。

Libra R-CNN

📄paper:

💻code:

Grid R-CNN

📄paper:

💻code:

One-Stage

一阶段目标检测算法不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,经过一个阶段即可直接得到最终的检测结果,因此有着更快的检测速度。

One-stage:直接用网络提取图像特征来预测物体位置和分类,因此不需要 RP。

任务流程:特征提取–> 分类/定位回归。

常见的 One-stage 目标检测算法有:YOLO 系列、SSD 和 RetinaNet 等。不过,为了得到最终目标的定位和分类,往往需要后处理。

SSD (ECCV 2016)✅

📄paper: [1512.02325] SSD: Single Shot MultiBox Detector (arxiv.org)

💻code: amdegroot/ssd.pytorch: A PyTorch Implementation of Single Shot MultiBox Detector (github.com)

eliminating bounding box proposals and the subsequent pixel or feature resampling stage.

提出了Multi-reference和Multi-resolution的检测技术。

SSD算法和先前的一些检测算法的区别在于:先前的一些检测算法只是在网络最深层的分支进行检测,而SSD有多个不同的检测分支,不同的检测分支可以检测多个尺度的目标,所以SSD在多尺度目标检测的精度上有了很大的提高,对小目标检测效果要好很多。

RFBNet (ECCV 2018)

📄paper: [1711.07767] Receptive Field Block Net for Accurate and Fast Object Detection (arxiv.org)

💻code:

2018年的ECCV上的RFBNet,是在SSD基础上,设计了RFB模块插进Neck部分,从而显著提升了模型性能。

YOLO v1 (CVPR 2016)✅

📄paper:

💻code:

该算法的思想就是将图像划分成多个网格,然后为每一个网格同时预测边界框并给出相应概率。例如某个待检测目标的中心落在图像中所划分的一个单元格内,那么该单元格负责预测该目标位置和类别。

  • current detection system repurpose classifer to perform detection.
  • yolo: resize image -> run convolutional network -> None-max suppression
  • regression problem: straight from image pixels to bounding box coordinates and class probabilities
  • fast; global; generalizable representation; struggle to precisely localize some objects, especially small ones.

🚩Network design

YOLOv1 architecture(论文中的网络结构)

仅使用了一个卷积神经网络实现了端到端的目标检测。卷积网络中使用了大量的1×1和3×3大小的卷积核。

orignal design: 24 Convs + 2 FC

code reference: YOLOv1/YOLO_V1_Model.py at main · ProgrammerZhujinming/YOLOv1 · GitHub

1
2
3
4
5
6
# FC section
self.Fc = nn.Sequential(
nn.Linear(7*7*1024,4096),
nn.LeakyReLU(inplace=True, negative_slope=1e-1),
nn.Linear(4096,7 * 7 * (B*5 + classes_num)),
)

🚩Detection principle

  1. S×S grid
  2. each grid cell predicts B bounding box(bbox); each bbox consists of 5 predictions: (x,y,w,h) & confidence score
  3. each grid cell also predicts C conditions class probabilities

YOLO居然也有Ross Girshick大神的参与,这也太强了吧!

YOLO v2 (CVPR 2017)✅

YOLO9000

📄paper:

💻code: longcw/yolo2-pytorch: YOLOv2 in PyTorch (github.com)

  • YOLO v2使用DarkNet19作为特征提取网络,该网络比YOLO v1所使用的VGG-16要更快。

  • YOLO v2使用目标分类和检测的联合训练技巧,结合Word Tree等方法,使得YOLO v2的检测种类扩充到了上千种。

RetinaNet (ICCV 2017)

📄paper:

💻code: yhenon/pytorch-retinanet: Pytorch implementation of RetinaNet object detection. (github.com)

  • 提出能根据Loss大小自动调节权重的Focal loss,代替了标准的交叉熵损失函数,使得模型的训练更专注于困难样本;
  • 基于FPN设计了RetinaNet;

YOLO v3 (CVPR 2018)✅

1
<p class="note note-light">YOLO v1~v3都是出自Joseph Redmon小哥之手。小哥的论文写得非常好,不按照套路来,一点都不古板,给人一种活泼的感觉。但非英语母语的人或者英文不好的人读起来,其实是有点吃力的。</p>

📄paper:

💻code:

🔗reference:

  • 相比于YOLO v2,YOLO v3将特征提取网络换成了DarkNet53,对象分类用Logistic取代了Softmax;
  • 借鉴了FPN思想采用三条分支(三个不同尺度/不同感受野的特征图)去检测具有不同尺寸的对象;
  • DarkNet53中没有MaxPooling, 而是使用卷积层来实现下采样;
  • 卷积核个数少->速度快
darknet35
darknet35-1
yolov3-spp

YOLO v4 (2020)

📄paper: [2004.10934] YOLOv4: Optimal Speed and Accuracy of Object Detection (arxiv.org)

💻code: AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet ) (github.com)

  • YOLO v4在输入端,引入了Mosaic数据增强、cmBN、SAT自对抗训练;

  • 在特征提取网络上,YOLO v4将各种新的方式结合起来,包括CSPDarknet53Mish激活函数,Dropblock

  • 在检测头中,引入了SPP模块,借鉴了FPN+PAN结构;

  • 在预测阶段,采用了CIOU作为网络的边界框损失函数,同时将NMS换成了DIOU_NMS等等。

YOLO v5 (2020)

📄paper: 目前YOLO V5公布了源代码,但尚未发表论文;

💻code: ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite (github.com)

YOLO X (2021)

📄paper: [2107.08430] YOLOX: Exceeding YOLO Series in 2021 (arxiv.org)

💻code: Megvii-BaseDetection/YOLOX: YOLOX is a high-performance anchor-free YOLO, exceeding yolov3~v5 with MegEngine, ONNX, TensorRT, ncnn, and OpenVINO supported. Documentation: https://yolox.readthedocs.io/ (github.com)

yolox是以yolov3(更准确来说是yolov3-spp)为基础进行改进。

YOLO v6 (2022)

📄paper: [2209.02976] YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications (arxiv.org)

YOLO v7 (2022)

📄paper: [2207.02696] YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (arxiv.org)

YOLO v8 (2023)

💻code:

YOLO review (2023)

📄paper:

Anchor Free

基于Anchor的物体检测问题通常被建模成对一些候选区域进行分类和回归的问题,

在一阶段检测器中,这些候选区域就是通过滑窗方式产生Anchor box,而在二阶段检测器中,候选区域是RPN生成的Proposal,但是RPN本身仍然是对滑窗方式产生的Anchor进行分类和回归。基于Anchor的检测算法由于Anchor太多导致计算复杂,及其所带来的大量超参数都会影响模型性能。

近年的Anchor free技术则摒弃Anchor,通过确定关键点的方式来完成检测,大大减少了网络超参数的数量。

CornerNet

📄paper: openaccess.thecvf.com/content_ECCV_2018/papers/Hei_Law_CornerNet_Detecting_Objects_ECCV_2018_paper.pdf
💻code: princeton-vl/CornerNet (github.com)

CornerNet是Anchor free技术路线的开创之作,该网络提出了一种新的对象检测方法,将网络对目标边界框的检测转化为一对关键点的检测(即左上角和右下角),通过将对象检测为成对的关键点,而无需设计Anchor box作为先验框。

CenterNet

📄paper:openaccess.thecvf.com/content_ICCV_2019/papers/Duan_CenterNet_Keypoint_Triplets_for_Object_Detection_ICCV_2019_paper.pdf
💻code: Duankaiwen/CenterNet: Codes for our paper “CenterNet: Keypoint Triplets for Object Detection” . (github.com)

FCOS

📄paper:FCOS: Fully Convolutional One-Stage Object Detection (thecvf.com)
💻code: https://github.com/tianzhi0549/FCOS

FCOS[19]网络是一种基于FCN的逐像素目标检测算法,实现了无锚点(Anchor free),无提议(Proposal free)的解决方案,并且提出了中心度Center ness的思想。该算法通过去除Anchor,完全避免了Anchor的复杂运算,节省了训练过程中大量的内存占用,将总训练内存占用空间减少了2倍左右。

FSAF

📄paper:Feature Selective Anchor-Free Module for Single-Shot Object Detection (thecvf.com)
💻code: hdjang/Feature-Selective-Anchor-Free-Module-for-Single-Shot-Object-Detection: A PyTorch Implementation of Feature Selective Anchor-Free Module for Single-Shot Object Detection (CVPR’19) (github.com)

FSAF[18]网络提出了一种FSAF模块用于训练特征金字塔中的Anchor free分支,让每一个对象都自动选择最合适的特征。在该模块中,Anchor box的大小不再决定选择哪些特征进行预测,使得Anchor的尺寸成为了一种无关变量,实现了模型自动化学习选择特征。

CPNDet

SAPD

📄paper: [1911.12448] Soft Anchor-Point Object Detection (arxiv.org)
💻code: xuannianz/SAPD: SAPD (Soft Anchor-Point Object Detection) implementation in Keras and Tensorflow (github.com)

SAPD[20]论文作者认为Anchor point的方法性能不高主要还是在于训练的不充分,主要是注意力偏差和特征选择。因而作者提出了两种策略:1)Soft-weighted anchor points对不同位置的样本进行权重分配 2)Soft-selected pyramid levels,将样本分配到多个分辨率,并进行权重加权。而在训练阶段,作者前6个epoch采用FSAF的方式,而后6个epoch会将特征选择的预测网络加入进行联合训练。

Datasets

Pascal VOC

MS COCO

ILSVRC

OID

📄paper: [1905.05055v2] Object Detection in 20 Years: A Survey (arxiv.org)

行人检测常用数据集
脸部检测常用数据集
文本检测常用数据集
交通标注检测常用数据集
遥感图像目标检测常用数据集

evaluation

目标检测常用的评价指标有:交并比准确率精度召回率FPRF1-ScorePR曲线-AP值ROC曲线-AUC值,和mAP值FPS

交并比(IOU)

IOU = 两个矩形交集的面积 / 两个矩形并集的面积

Accuracy/Precission/Recall/F1-score/FPR

True positives (TP,真正): 预测为正,实际为正
True negatives (TN,真负): 预测为负,实际为负
False positives(FP,假正): 预测为正,实际为负
False negatives(FN,假负): 预测为负,实际为正

image-20230530163634505

PR曲线-AP值

ROC曲线-AUC值

mAP

FPS

Reference

目标检测论文总结-YOLO系列 - 知乎 (zhihu.com)

YOLO之父宣布退出CV界,坦言无法忽视自己工作带来的负面影响 (qq.com)

童心未泯的 YOLO 之父,小马哥 Joseph Redmon 笑傲 CV 江湖记-技术圈 (proginn.com)

【Make YOLO Great Again】YOLOv1-v7全系列大解析(Tricks篇) - mdnice 墨滴

YOLO系列深度解读 | 严鸿昌的个人博客 (luckmoonlight.github.io)

yolo系列模型 - 掘金 (juejin.cn)

YOLOv1-v7全系列大解析(汇总篇) - 简书 (jianshu.com)

目标检测-YOLO系列 | citisy的炼丹房

深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解 - 知乎 (zhihu.com)

深入浅出Yolo系列之Yolov5核心基础知识完整讲解 - 知乎 (zhihu.com)

深入浅出Yolo系列之Yolox核心基础完整讲解 - 知乎 (zhihu.com)

写给小白的YOLO介绍 - 知乎 (zhihu.com)

你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读 (上) - 知乎 (zhihu.com)

目标检测|YOLO原理与实现 - 知乎 (zhihu.com)

one-yolov5 特点解析 - oneflow-yolo-doc

综述:目标检测二十年(2001-2021)-极市开发者社区 (cvmart.net)

第二卷-基于YOLO的目标检测入门教程 - 知乎 (zhihu.com)

第一卷-目标检测入门科普教程 - 知乎 (zhihu.com)

Object Detection - handong1587

amusi/awesome-object-detection: Awesome Object Detection based on handong1587 github: https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html


经典的目标检测
https://cosmicdusty.cc/post/Paper/ClassicObjectDetection/
作者
Murphy
发布于
2023年5月16日
许可协议