感谢b站up【霹雳吧啦Wz】
文章目录
一、RCNN
1.RCNN的流程
- 候选区域的生成:
利用selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。 - 对每个候选区域,使用深度网络提取特征
将2000候选区域缩放到227x227像素,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵(注:最后输出20006464,拉平变成2000*4096)。 - 特征送入每一类的SVM分类器,判定类别
将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。(注意,会有2000*20个候选框,每个类别2000个) - 使用回归器精细修正候选框位置
对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作(回归给出了(中心点x的偏移量,中心点y的偏移量,w的缩放系数,h的缩放系数)),最终得到每个类别的修正后的得分最高的bounding box。
如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。
2.RCNN的缺点
- 测试速度慢(ss提取还会有很多冗余操作)
- 训练速度慢
- 训练所需空间大
二、Fast-RCNN
1.Fast RCNN流程
- 生成候选区域(同rcnn)
- 一次性计算整张图的图像特征
对于rcnn:每个候选区输入一个神经网络(2000个就2000次)
对于fast rcnn:一张图直接输入一个神经网络得到特征图,然后取出对应候选区域的特征,注意,此时随机采样了ss候选区域一部分作为样本输入。 - roi pooling:
3.训练时正负样本的判断
正样本:预测框与GT的iou>0.5
负样本:0.1<预测框与GT的iou<0.4
4.损失函数:
分类损失:log损失,
L
c
l
s
(
p
,
u
)
=
−
l
o
g
(
p
u
)
L_{cls}(p,u)=-log(p_u)
Lcls(p,u)=−log(pu),其中,p:预测的概率分布,u,真实类别标签
边界框回归损失:
L
l
o
c
(
t
u
,
v
)
=
∑
i
∈
(
x
,
y
,
w
,
h
)
s
m
o
o
t
h
L
1
(
t
u
−
v
i
)
L_{loc}(t^{u},v)=\sum_{i\in(x,y,w,h)} smooth_{L_{1}}(t^{u}-v_i)
Lloc(tu,v)=∑i∈(x,y,w,h)smoothL1(tu−vi),
其中,
s
m
o
o
t
h
L
1
=
{
0.5
x
2
,
i
f
∣
x
∣
<
1
∣
x
∣
−
0.5
,
其
他
smooth_{L_{1}}=\left\{\begin{matrix} 0.5x^2,if \left | x \right | <1\\ \left |x \right | -0.5 ,其他 \end{matrix}\right.
smoothL1={0.5x2,if∣x∣<1∣x∣−0.5,其他,其中,
t
u
t^{u}
tu对应边界框回归器预测的对应类别u的回归参数
(
t
x
u
,
t
y
u
,
t
w
u
,
t
h
u
)
(t_{x}^{u},t_{y}^{u},t_{w}^{u},t_{h}^{u})
(txu,tyu,twu,thu),v对应真实目标的边界框回归参数
(
v
x
,
v
y
,
v
w
,
v
h
)
(v_{x},v_{y},v_{w},v_{h})
(vx,vy,vw,vh)
对于v是用G往回归器代,例如对于
v
x
,
v
x
=
(
G
x
−
P
x
)
/
P
h
v^{x},v^{x}=(G_{x}-P_{x})/P_h
vx,vx=(Gx−Px)/Ph
其他:
[
μ
≥
1
]
[\mu\ge1]
[μ≥1]为艾弗森括号,表示
μ
≥
1
\mu\ge1
μ≥1时为1,其他为0。
λ
\lambda
λ为边界框损失系数
三、Faster-RCNN(RPN+fast-rcnn)
1.Faster-RCNN流程
Faster R一CNN算法流程可分为3个步骤:
- 将图像输入网络得到相应的特征图
- 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
- 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
2.RPN
step 1:用anchor滑动生成候选框
对于特征图,使用k个anchor在特征图上进行滑动,每个anchor生成2组(一组为类别以区分前后景,不区分类别,参数量为2;一组为回归,参数量为4),256为backbone的输出通道数。
faster rcnn的anchor:3种尺寸:
12
8
2
,
25
6
2
,
51
2
2
128^2 , 256^2,512^2
1282,2562,5122 3种比例:{1:1,1:2,2:1},故而有9种anchor
问:为什么小的感受野的可以预测大物体?(如512*512的anchor为什么可以预测更大的物体?)
答:通过一个小的感受野去预测一个比它大的目标边界框是有可能的,比如通过经验去看物体的一部分,就能大概的猜出这个目标完整的位置区域了。而且在实际使用过程中,这个方法也确实是有效的。
step 2 :忽略跨边界的anchor ,对剩下的候选框进行基于候选框 c l s cls cls得分进行NMS,iou设为0.7,得到最后的候选框
step 3:对于剩下的候选框,选取128个正样本,128个负样本,当正样本数<128时,负样本数为256-正样本数
3.RPN正负样本的判断
1)候选框与真值进行iou,大于0.7的即为正样本
2)当1)获取的正样本数少于128时,取剩余与GT相交的iou最大的作为正样本
4.RPN损失函数:
4.1分类损失
分类损失:原文使用log损失 L c l s = − l o g ( p i ) L_{cls}=-log(p_i) Lcls=−log(pi), p i p_i pi表示第i个anchor预测为真实值的概率,有些地方改进为二值交叉熵损失,此时输出为k个score,loss为: L c l s = − [ p i ∗ l o g ( p i ) + ( 1 − p i ∗ ) l o g ( 1 − p i ) ] L_{cls}=-[p_{i}^{*}log(p_i)+(1-p_{i}^{*})log(1-p_i)] Lcls=−[pi∗log(pi)+(1−pi∗)log(1−pi)],当 p ∗ p^* p∗为正样本时为1,负样本为0.