RCNN
1. 目标检测
目标检测是分类任务(bounding box
中物体的类别)和回归任务(bounding box
的大小及位置)的组合。
2. RCNN的贡献
- 根据
Selective Search
算法提取Region proposal
候选区域 - 将每个
Region proposal
缩放到统一大小后,通过 C N N CNN CNN提取固定大小的特征 - 将提取出的特征通过 S V M SVM SVM进行分类
- 训练一个回归器,对
bounding box
边界框进行调整,使其接近ground truth
真实边界框
3. Region proposals
本文采用的Selective Search
算法来提取候选区域Region proposals
Selective Search 算法:
- 使用一种过分割手段,将图像分割成小区域
- 查看现有小区域,按照合并规则合并可能性最高的相邻两个区域。重复直到整张图像合并成一个区域位置
- 输出所有候选区域
Selective Search 合并规则:
- 颜色相近:颜色直方图
- 纹理相近:梯度直方图
- 合并后总面积小的:重合度高
正负样本选取:
如果某个Region proposal
和当前图像上的所有Ground truth
中重叠面积最大的那个的IOU
大于等于0.5,则该Region proposal
作为这个Ground truth
类别的正样本,否则作为负样本。另外正样本还包括了Ground Truth
。
IOU
是计算矩形框
A
、
B
A、B
A、B的重合度的公式:
I
O
U
=
A
∩
B
A
∪
B
IOU = \frac {A \cap B} {A \cup B}
IOU=A∪BA∩B
4. Feature extraction
将生成的Region proposal
减去像素平均值后,使用各向异性的缩放方式(直接缩放),将图片缩放到
227
×
227
227 \times 227
227×227大小,随后对每个Region proposal
提取特征,对每个proposal
经过五层卷积层以及两层全连接层,在cf7
层得到提取出的4096维特征。 提取特征使用了pre-training的AlexNet网络
5. Object category classifier
本文在fc7
层提取出特征后,未直接通过最后一层softmax
层进行分类,而是将fc7
层提取出的特征用于训练SVM
分类器。因为SVM得到的效果要更好,原因如下:
- 我们对于正样本的定义没有强调精确定位,即
IOU
大于0.5的region proposal
便认定为正样本 softmax
分类器是根据随机抽样的负样本进行训练的,而SVM
是利用hard negative
的子集来作为负样本训练
对每一个类别训练一个二分类器,我们用IoU重叠阈值来解决正负样本的问题,在0.3阈值以下的区域被定义为负样本,0.3-0.7阈值的样本被忽略,0.7-1.0的样本被定义为正样本。PS:这里负样本的选定和前面的有所不同。
6. Bounding-box regression
6.1 问题定义
对于Bounding Box
一般使用四维向量
(
x
,
y
,
w
,
h
)
(x, y, w, h)
(x,y,w,h)来表示,分别表示窗口的中心点坐标和宽高。
对于下图,红色框 P P P代表原始的 P r o p o s a l Proposal Proposal,绿色框 G G G代表 G r o u n d Ground Ground T r u t h Truth Truth,我们的目标是寻找一个映射使得输入的原始框 P P P经过该映射得到一个跟真实框 G G G更接近的回归窗口 G ^ \hat G G^。
即:给定
(
P
x
,
P
y
,
P
w
,
P
h
)
(P_x,P_y,P_w,P_h)
(Px,Py,Pw,Ph),寻找一种映射
f
f
f,使得
f
(
P
x
,
P
y
,
P
w
,
P
h
)
=
(
G
^
x
,
G
^
y
,
G
^
w
,
G
^
h
)
f(P_x,P_y,P_w,P_h)=(\hat G_x, \hat G_y, \hat G_w, \hat G_h)
f(Px,Py,Pw,Ph)=(G^x,G^y,G^w,G^h),并且
(
G
^
x
,
G
^
y
,
G
^
w
,
G
^
h
)
≈
(
G
x
,
G
y
,
G
w
,
G
h
)
(\hat G_x, \hat G_y, \hat G_w, \hat G_h) \approx (G_x, G_y, G_w, G_h)
(G^x,G^y,G^w,G^h)≈(Gx,Gy,Gw,Gh)
6.2 解决方案——平移+缩放
- 先做平移变换
(
Δ
x
,
Δ
y
)
,
Δ
x
=
P
w
d
x
(
P
)
,
Δ
y
=
P
h
d
y
(
P
)
(\Delta x, \Delta y), \Delta x=P_wd_x(P),\Delta y=P_hd_y(P)
(Δx,Δy),Δx=Pwdx(P),Δy=Phdy(P),则:
G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P y \hat G_x=P_wd_x(P)+P_x \\ \hat G_y=P_hd_y(P)+P_y G^x=Pwdx(P)+PxG^y=Phdy(P)+Py - 再做缩放变换
(
S
w
,
S
h
)
,
S
w
=
e
x
p
(
d
w
(
P
)
)
,
S
h
=
e
x
p
(
d
h
(
P
)
)
(S_w, S_h), S_w=exp(d_w(P)), S_h=exp(d_h(P))
(Sw,Sh),Sw=exp(dw(P)),Sh=exp(dh(P)),则:
G ^ w = P w e x p ( d w ( P ) ) G ^ h = P h e x p ( d h ( P ) ) \hat G_w = P_wexp(d_w(P)) \\ \hat G_h=P_hexp(d_h(P)) G^w=Pwexp(dw(P))G^h=Phexp(dh(P))
Bounding-box regression就是学习 d x ( P ) , d y ( P ) , d w ( P ) , d h ( P ) d_x(P), d_y(P), d_w(P), d_h(P) dx(P),dy(P),dw(P),dh(P)这四个参数
算法流程:
输入: R e g i o n P r o p o s a l → P = ( P x , P y , P w , P h ) ; G r o u n d T r u t h → G = ( G x , G y , G w , G h ) 输入:RegionProposal \rightarrow P=(P_x,P_y,P_w,P_h);GroundTruth \rightarrow G=(G_x,G_y,G_w,G_h) 输入:RegionProposal→P=(Px,Py,Pw,Ph);GroundTruth→G=(Gx,Gy,Gw,Gh)
输出: D ∗ = ( d x ( P ) , d y ( P ) , d w ( P ) , d h ( P ) ) 输出:D_*=(d_x(P), d_y(P), d_w(P), d_h(P)) 输出:D∗=(dx(P),dy(P),dw(P),dh(P))
-
计算真正需要的平移量 ( t x , t y ) (t_x,t_y) (tx,ty)和缩放量 ( t w , t h ) (t_w,t_h) (tw,th)
t x = ( G x − P x ) / P w t y = ( G y − P y ) / P h t w = l o g ( G w / P w ) t h = l o g ( G h / P h ) t_x=(G_x-P_x)/P_w \\ t_y = (G_y - P_y)/P_h \\ t_w=log(G_w/P_w) \\ t_h=log(G_h/P_h) tx=(Gx−Px)/Pwty=(Gy−Py)/Phtw=log(Gw/Pw)th=log(Gh/Ph) -
构建损失函数: d ∗ ( P ) = ( d x ( P ) , d y ( P ) , d w ( P ) , d h ( P ) ) d_*(P)=(d_x(P),d_y(P),d_w(P), d_h(P)) d∗(P)=(dx(P),dy(P),dw(P),dh(P))是预测值,真实值 t ∗ = ( t x , t y , t w , t h ) t_*=(t_x,t_y,t_w,t_h) t∗=(tx,ty,tw,th),我们要让预测值与真实值差距最小,定义均方误差函数:
L o s s = ∑ i N ( t ∗ i − d ∗ i ) 2 Loss=\sum_{i}^N(t_*^i-d_*^i)^2 Loss=i∑N(t∗i−d∗i)2
函数的优化目标为:
D ∗ = a r g min d ∗ ∑ i N ( t ∗ i − d ∗ i ) 2 + λ ∣ ∣ d ∗ i ∣ ∣ 2 D_*=arg\min_{d_*}\sum_{i}^N(t_*^i-d_*^i)^2+\lambda||d_*^i||^2 D∗=argd∗mini∑N(t∗i−d∗i)2+λ∣∣d∗i∣∣2 -
利用梯度下降法或最小二乘法得到 D ∗ D_* D∗
7. Non-maximum suppression
RCNN
网络会对一个目标标定了多个标定框,使用非极大值抑制算法NMS
滤掉多余的标定框
算法流程:
输入: B = { b 1 , . . . , b N } ; S = { s 1 , . . . , s N } ; N t 。 输入:B=\{b_1, ..., b_N\}; S = \{s_1, ..., s_N\}; N_t。 输入:B={b1,...,bN};S={s1,...,sN};Nt。
- B 表示候选框集合, S 表示每个候选框的置信度得分, N t 表示 N M S 阈值 B表示候选框集合,S表示每个候选框的置信度得分,N_t表示NMS阈值 B表示候选框集合,S表示每个候选框的置信度得分,Nt表示NMS阈值
输出: D :筛选后的候选框 , S :筛选后的候选框的置信度得分 输出:D:筛选后的候选框, S:筛选后的候选框的置信度得分 输出:D:筛选后的候选框,S:筛选后的候选框的置信度得分
D = {}
while B not empty:
# 选取置信度得分最高的 proposal
m = argmax(S)
M = b_m
# 将置信度得分最高的 proposal加入到集合D中
D = D union M
# 从集合B中删除置信度得分最高的 proposal
B = B - M
# 遍历其他proposal
for b_i in B:
# 如果其他proposal与置信度得分最大的proposal的交并比大于给定的阈值,便从集合B中删除,并删除对应的置信度得分
if IOU(M, b_i) >= N_t:
B = B - b_i
S = S - s_i
return D, S
8. RCNN网络结构图
参考资料: