1发展历程
如下图所示,来自李沐-论文精度link
1 先有RCNN系列,对输入的图片提取出很多候选框,然后对候选框进行分类以及微调。
2 yolo系列,不需要提取候选框,而是将原图分成一个grid,每个grid进行一个预测,可以理解为多任务的拟合问题,端到端。
3 Centernet,创新性工作!anchor-free的,基于热力图检测工作!
4 DETR, 讲transformer引入
检测任务的难点,在于样本如何制作,loss如何计算,知道了这两点,算法大体框架就懂了。
如果让我们从头开始做,我要怎么做检测的任务呢?
需要考虑类别,考虑检测框个数。
不同的图片检测框数量不一致?如何固定网络输出的尺度?
我一个图片可能有多个物体,怎么办?
基于anchor的思想本质上是遍历,生成数量非常庞大的框,然后根据自身置信度以及iou删除一些框,计算这些框的结果。
yolo的思想,是把图片分割成小网格,每个网格生成一定数量的检测框,实现了固定输出尺度。
centernet:类别个数是可以固定的,每个类别的数量让热力图的中心自适应。
detr:类别个数固定,匈牙利匹配!
2 RCNN系列
2.1 RCNN 开山之作
说到rcnn,常见的是下面一张图
测试过程:
1 对输入图片使用SS方法(一种聚类方法)提取出2000个候选框
2 对候选框进行wrap,尺寸变为一致
3 输入到cnn中提出特征,每个框对应一个特征向量
4 将特征向量输入svm(20个),得到一个分类,根据分类的分数,剔除一部分。
5 分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
训练过程:
1 训练过程在于标签如何制作!将SS选出的候选框与gt进行iou计算,大于指定阈值的是正样本,小于指定阈值的是负样本。
2 分类的loss,使用交叉熵。
3 回归的loss如何计算?移动不会超过一个框的位置
a
n
c
h
o
r
:
[
x
,
y
,
w
,
h
]
g
t
:
[
x
∗
,
y
∗
,
w
∗
,
h
∗
]
p
r
e
d
i
c
t
e
d
:
x
1
=
x
+
d
x
∗
w
移
动
量
不
超
过
一
个
w
(
1
)
y
1
=
y
+
d
y
∗
h
移
动
量
不
超
过
一
个
h
(
2
)
w
1
=
w
∗
e
x
p
(
d
w
)
指
数
扩
大
,
h
类
似
。
(
3
,
4
)
[
d
x
,
d
y
,
d
w
,
d
h
]
是
需
要
学
习
的
参
数
根
据
(
1
,
2
,
3
,
4
)
计
算
出
[
d
x
,
d
y
,
d
w
,
d
h
]
的
目
标
值
,
使
用
s
m
o
o
t
h
−
L
1
l
o
s
s
!
anchor:[x,y,w,h]\\ gt:[x^*,y^*,w^*,h^*]\\ predicted:\\ x_1=x+d_x*w 移动量不超过一个w(1)\\ y_1=y+d_y*h 移动量不超过一个h (2)\\ w_1=w*exp(d_w) 指数扩大,h类似。(3,4)\\ [d_x,d_y,d_w,d_h]是需要学习的参数\\ 根据(1,2,3,4)计算出[d_x,d_y,d_w,d_h]的目标值,使用smooth-L1 loss!
anchor:[x,y,w,h]gt:[x∗,y∗,w∗,h∗]predicted:x1=x+dx∗w移动量不超过一个w(1)y1=y+dy∗h移动量不超过一个h(2)w1=w∗exp(dw)指数扩大,h类似。(3,4)[dx,dy,dw,dh]是需要学习的参数根据(1,2,3,4)计算出[dx,dy,dw,dh]的目标值,使用smooth−L1loss!
2.2 Fast rcnn
1 根据SS方法选出一定数量的候选框,根据iou设定阈值!多目标选择iou最大的作为类别。这里直接是多分类,不是二分类。
2 将整个图片输入CNN进行特征提取。
3 使用投影的方法,将提取出的候选框映射到特征图上,抠出特征图,resize
4 传入fc层,进行分类以为框位置的微调。
2.3 Faster Rcnn
从此开始不再使用SS方法提取候选框。
0 预先设定anchor的scale以及ratio
1 将图片输入CNN,得到特征图。
2 特征图每一个像素对应k个anchor!以该像素为中心,长宽根据scale以及ratio设置。即每个特征图上的像素点根据其自身位置以及长和宽对应一些特征图。标签根据iou计算标签。需要判断该位置对应的框的类别以及偏移量。
3 proposal 根据anchor的位置找到特征图的对应位置,为了尺寸一致进行pooling,输入到后面的网络中得到结果
3 Yolo系列
1 认为设置一些对应关系,讲图片分成77的网格,每个网格size不确定。
2 每个网格负责自己的任务。
得到77*30,30对应每个网格的分类以及微调结果。
YOLOv2:取消了fc层使用全卷积,多分辨率输入
YOLOv3:FPN
YOLOv4:FPN+PAN
YOLOv5:GIOULOSS
4 Centernet
先降采样,然后上采样,输出三个值。
1 输入 N3MN,输出入NCM/RN/R (每个像素代表一个分类,一共C类 ),以及 N2M/RN/R(每个像素代表偏置值), N2M/RN/R(每个像素代表长宽值)。
2 Loss计算:热力图标签制作。知乎
二维的误差!为了平衡loss
2 偏置误差
3 长宽误差