R-CNN
目录
- 摘要
- Abstract
- 1. 引言
- 2. VOC数据集
- 3. 选择性搜索
- 3.1 相似度指标
- 3.1.1 颜色相似度
- 3.1.2 纹理相似度
- 3.1.3 尺度相似度
- 3.1.4 填充相似度
- 3.2 算法过程
- 4. 提取特征向量
- 5. 训练支持向量机
- 6. 边界框回归
- 参考
- 总结
摘要
R-CNN是一种经典的目标检测模型,主要通过四个步骤实现目标检测:生成候选区域、提取特征向量、训练支持向量机进行分类和边界框回归来修正候选区域。首先,选择性搜索算法生成图片的候选区域,使得模型能捕捉到不同对象的位置和大小。然后,使用卷积神经网络提取每个候选区域的特征向量,这些特征向量为支持向量机提供数据,用于区分不同类别和背景。接着,支持向量机进一步细化分类结果,并通过Hard Negative Mining提高模型的精度。最后,通过边界框回归修正候选区域,使其更接近真实的目标区域。R-CNN的优势在于其高效的特征提取和精确的边界框回归。相比于传统方法,R-CNN不仅提高了目标检测的准确性,还减少了漏检率。此外,R-CNN还在大规模数据集上进行训练,能够泛化到各种复杂的图像场景中,表现出良好的稳定性和鲁棒性。因此,R-CNN在目标检测领域中已成为一种重要的基准模型,对后续目标检测方法的研究和发展产生了深远的影响。未来可以对候选区域生成耗时长的问题进行改进。
Abstract
R-CNN is a classic object detection model that achieves object detection through four main steps: generating candidate regions, extracting feature vectors, training a Support Vector Machine (SVM) for classification, and performing bounding box regression to refine the candidate regions. First, the selective search algorithm generates candidate regions from the image, enabling the model to capture the positions and sizes of various objects. Then, a convolutional neural network is used to extract feature vectors for each candidate region. These feature vectors provide data for the SVM to distinguish between different classes and the background. Next, the SVM further refines the classification results, with the use of hard negative mining to improve model precision. Finally, bounding box regression is employed to refine the candidate regions, making them closer to the actual target regions. R-CNN’s strengths lie in its efficient feature extraction and precise bounding box regression. Compared to traditional methods, R-CNN not only improves the accuracy of object detection but also reduces the missed detection rate. Additionally, R-CNN is trained on large-scale datasets, allowing it to generalize to a wide variety of complex image scenarios, demonstrating excellent stability and robustness. As a result, R-CNN has become a significant benchmark model in the field of object detection, exerting a profound influence on the research and development of subsequent object detection methods. In the future, improvements can be made to address the time-consuming nature of candidate region generation.
1. 引言
R-CNN模型实现目标检测的过程可分为四步:1. 利用选择性搜索算法生成图片的候选区域。2. 利用CNN模型提取每个候选区域的特征向量。3. 训练支持向量机对每个特征向量进行分类。4. 利用边界框回归修正候选区域。
2. VOC数据集
PASCAL VOC 2012是计算机视觉领域的经典数据集,广泛用于目标分类、目标检测、语义分割和行为识别任务。该数据集包括以下20个类别。
大类 | 包含的类 |
---|---|
Person | person |
Animal | bird, cat, cow, dog, horse, sheep |
Vehicle | aeroplane, bicycle, boat, bus, car, motorbike, train |
Indoor Objects | bottle, chair, dining table, potted plant, sofa, tv monitor |
文件夹构成如下:
一级目录 | 二级目录 | 二级目录内容 | 三级目录 | 三级目录内容 |
---|---|---|---|---|
VOC2012 | ||||
Annotations | 包含XML格式的标注文件(目标检测边界框和类别) | |||
ImageSets | ||||
Main | 分类与检测任务的划分 | |||
Layout | 布局识别任务划分 | |||
Segmentation | 语义分割任务划分 | |||
JPEGImages | 原始图像文件 | |||
SegmentationClass | 语义分割的类别标注(像素级) | |||
SegmentationObject | 语义分割的实例标注(像素级) |
3. 选择性搜索
选择性搜索是目标检测领域中生成候选区域的方法之一。
3.1 相似度指标
3.1.1 颜色相似度
对于每个区域,可以得到每个颜色通道上像素值划分成25个区间的颜色直方图。通道数为3,最终能得到一个含有75个值的颜色直方图 C = { c 1 , c 2 , ⋯ , c 75 } C=\{c^1,c^2,\cdots,c^{75}\} C={c1,c2,⋯,c75}并对颜色直方图使用 L 1 L^1 L1范数进行归一化。
对于区域 r i r_i ri和 r j r_j rj,先计算各自归一化后的颜色直方图 C i C_i Ci和 C j C_j Cj,然后再根据如下公式计算颜色相似度:
s c o l o u r ( r i , r j ) = ∑ k = 1 75 min ( c i k , c j k ) . \Large \displaystyle s_{colour}(r_i, r_j)=\sum_{k=1}^{75}\min(c_i^k,c_j^k). scolour(ri,rj)=k=1∑75min(cik,cjk).
如果 r i r_i ri和 r j r_j rj要合并成一个区域,则合并后区域 r t r_t rt的颜色直方图 C t C_t Ct可以通过 r i r_i ri和 r j r_j rj的颜色直方图计算得到:
C t = s i z e ( r i ) C i + s i z e ( r j ) C j s i z e ( r i ) + s i z e ( r j ) . \Large \displaystyle C_t=\frac{size(r_i)C_i+size(r_j)C_j}{size(r_i)+size(r_j)}. Ct=size(ri)+size(rj)size(ri)Ci+size(rj)Cj.
3.1.2 纹理相似度
对于每个区域,可以通过使用SIFT算法得到每个颜色通道上8个方向划分成10个区间的纹理直方图。通道数为3,最终可以得到一个含有240个值的纹理直方图 T = { t 1 , t 2 , ⋯ , t 240 } T=\{t^1, t^2, \cdots, t^{240}\} T={t1,t2,⋯,t240}并对纹理直方图使用 L 1 L^1 L1范数进行归一化。
对于区域 r i r_i ri和 r j r_j rj,先计算各自归一化后的纹理直方图 T i T_i Ti和 T j T_j Tj,然后根据如下公式计算纹理相似度:
s t e x t u r e ( r i , r j ) = ∑ k = 1 240 min ( t i k , t j k ) . \Large \displaystyle s_{texture}(r_i, r_j)=\sum_{k=1}^{240}\min(t_i^k, t_j^k). stexture(ri,rj)=k=1∑240min(tik,tjk).
如果 r i r_i ri和 r j r_j rj要合并成一个区域,则合并后区域 r t r_t rt的纹理直方图 T t T_t Tt可以通过 r i r_i ri和 r j r_j rj的纹理直方图计算得到:
T t = s i z e ( r i ) T i + s i z e ( r j ) T j s i z e ( r i ) + s i z e ( r j ) . \Large \displaystyle T_t=\frac{size(r_i)T_i+size(r_j)T_j}{size(r_i)+size(r_j)}. Tt=size(ri)+size(rj)size(ri)Ti+size(rj)Tj.
3.1.3 尺度相似度
尺度相似度能促使小区域尽早融合,防止单个区域融合所有其他区域。区域 r i r_i ri和 r j r_j rj的尺度相似度计算公式如下:
s s i z e ( r i , r j ) = 1 − s i z e ( r i ) + s i z e ( r j ) s i z e ( i m ) . \Large \displaystyle s_{size}(r_i, r_j)=1-\frac{size(r_i)+size(r_j)}{size(im)}. ssize(ri,rj)=1−size(im)size(ri)+size(rj).
其中 s i z e ( i m ) size(im) size(im)是整个图片以像素为单位的尺寸。
3.1.4 填充相似度
填充相似度能衡量两个区域 r i r_i ri和 r j r_j rj融合后的效果。如果 r i r_i ri在 r j r_j rj内部,两者应该尽早合并以避免任何空洞;如果 r i r_i ri和 r j r_j rj不相邻,两者不应该融合以避免形成奇怪的形状。
区域 r i r_i ri和 r j r_j rj的填充相似度计算公式如下:
s f i l l = 1 − s i z e ( B B i j ) − s i z e ( r i ) − s i z e ( r j ) s i z e ( i m ) . \Large \displaystyle s_{fill}=1-\frac{size(BB_{ij})-size(r_i)-size(r_j)}{size(im)}. sfill=1−size(im)size(BBij)−size(ri)−size(rj).
其中 B B i j BB_{ij} BBij是包含 r i r_i ri和 r j r_j rj的最小边界框, s i z e ( i m ) size(im) size(im)和上面的定义一致。
3.2 算法过程
选择性搜索算法的过程:
1. 首先使用Felzenszwalb-Huttenlocher算法生成初始的候选区域集合 R R R,初始化一个空的相似度集合 S S S。
2. 对 R R R中所有相邻的候选区域 r i r_i ri和 r j r_j rj计算相似度 s ( r i , r j ) = s c o l o u r ( r i , r j ) + s t e x t u r e ( r i , r j ) + s s i z e ( r i , r j ) + s f i l l ( r i , r j ) \displaystyle s(r_i, r_j)=s_{colour}(r_i, r_j)+s_{texture}(r_i, r_j)+s_{size}(r_i, r_j)+s_{fill}(r_i, r_j) s(ri,rj)=scolour(ri,rj)+stexture(ri,rj)+ssize(ri,rj)+sfill(ri,rj),把相似度 s ( r i , r j ) s(r_i, r_j) s(ri,rj)放入相似度集合 S S S。
3. 在相似度集合 S S S中取出最大相似度对应的两个区域 r i r_i ri和 r j r_j rj。
4. 合并 r i r_i ri和 r j r_j rj,得到 r t r_t rt,在相似度集合中去除 r i r_i ri和 r j r_j rj参与的相似度。
5. 计算区域 r t r_t rt和它相邻区域的相似度集合 S t S_t St, S t S_t St与 S S S合并成全新的 S S S。
6. 把 r t r_t rt放入 R R R中,如果 S S S为空集,算法结束;否则回到3。
下图展示了图片使用选择性搜索产生的二十个候选区域。
下面是使用OpenCV进行选择性搜索的代码。
import cv2
import cv2
from matplotlib import pyplot as plt
from cv2.ximgproc.segmentation import createSelectiveSearchSegmentationimage = cv2.imread(r"VOC2012/JPEGImages/2007_000027.jpg")
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
ss = createSelectiveSearchSegmentation()
ss.setBaseImage(image)
ss.switchToSelectiveSearchQuality()rects = ss.process()
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
ax.imshow(image_rgb)
for rect in rects[:40]:x, y, w, h = rectax.add_patch(plt.Rectangle((x, y), w, h, fill=False, edgecolor='r', linewidth=2))plt.show()
4. 提取特征向量
在通过CNN提取每个候选区域的特征向量之前,需要对每个候选区域打标签。判断一个候选区域标签的方法是计算候选区域和真实区域的交并比 I O U IOU IOU, I O U = 两个区域相交的面积 两个区域结合的面积 \displaystyle IOU=\frac{两个区域相交的面积}{两个区域结合的面积} IOU=两个区域结合的面积两个区域相交的面积,如果 I O U ≥ 0.5 IOU\ge0.5 IOU≥0.5,这个候选区域的标签应与和它相交的真实区域的标签一致,否则候选区域的标签应该设置为background。
由于候选区域的大小都不一样,在输入到CNN中提取特征向量之前需要统一缩放到CNN要求的输入尺寸。R-CNN使用的CNN模型是AlexNet,输入尺寸要求为 227 × 227 227\times227 227×227。AlexNet模型先在大型图片数据集ImageNet上对分类任务进行预训练,然后该把模型的输出层中神经元的数量改为目标检测数据集中总类别+1(这个多出来的加1是背景),最后在目标检测数据集上对分类任务进行微调。
AlexNet模型结构如下。
层次 | 类型 | 输入尺寸(H, W, C) | 卷积核/池化核/线性层神经元个数 | 输出尺寸(H, W, C) | 激活函数 |
---|---|---|---|---|---|
输入层 | 227 × 227 × 3 227\times227\times3 227×227×3 | 227 × 227 × 3 227\times227\times3 227×227×3 | |||
C1 | 卷积层 | 227 × 227 × 3 227\times227\times3 227×227×3 | 64个 11 × 11 11\times11 11×11卷积核,步长为4,填充为2 | 56 × 56 × 64 56\times56\times64 56×56×64 | ReLU |
S2 | 池化层 | 56 × 56 × 64 56\times56\times64 56×56×64 | 3 × 3 3\times3 3×3最大池化,步长为2 | 27 × 27 × 64 27\times27\times64 27×27×64 | |
C3 | 卷积层 | 27 × 27 × 64 27\times27\times64 27×27×64 | 192个 5 × 5 5\times5 5×5卷积核,步长为1,填充为2 | 27 × 27 × 192 27\times27\times192 27×27×192 | ReLU |
S4 | 池化层 | 27 × 27 × 192 27\times27\times192 27×27×192 | 3 × 3 3\times3 3×3最大池化,步长为2 | 13 × 13 × 192 13\times13\times192 13×13×192 | |
C5 | 卷积层 | 13 × 13 × 192 13\times13\times192 13×13×192 | 384个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 | 13 × 13 × 384 13\times13\times384 13×13×384 | ReLU |
C6 | 卷积层 | 13 × 13 × 384 13\times13\times384 13×13×384 | 256个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 | 13 × 13 × 256 13\times13\times256 13×13×256 | ReLU |
C7 | 卷积层 | 13 × 13 × 256 13\times13\times256 13×13×256 | 256个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 | 13 × 13 × 256 13\times13\times256 13×13×256 | ReLU |
S8 | 池化层 | 13 × 13 × 256 13\times13\times256 13×13×256 | 3 × 3 3\times3 3×3最大池化,步长为2 | 6 × 6 × 256 6\times6\times256 6×6×256 | |
F9 | 全连接层 | 9216 | 4096个全连接神经元 | 4096 | ReLU |
F10 | 全连接层 | 4096 | 4096个全连接神经元 | 4096 | ReLU |
输出层 | 全连接层 | 4096 | 21个全连接层神经元 | 21 |
微调后的Alexnet使用其前10层架构来提取每个缩放成 224 × 224 224\times224 224×224的候选区域的特征向量,特征向量的维度为4096。
5. 训练支持向量机
针对目标检测数据集中的每个类别训练一个支持向量机,来区分该类别和背景。候选区域和真实区域的交并比 I O U < 0.3 IOU\lt0.3 IOU<0.3作为每个支持向量机训练集中的负例,而每个类的真实区域作为每个支持向量机训练集中的正例。无论是候选区域还是真实区域都需要提取出4096维的特征向量,最终支持向量机使用每个类别训练集中的特征向量和标签来训练。
由于正例和负例的占比不均衡,需要使用Hard Negative Mining。Hard Negative Mining的过程:
1. 使用所有的负例和正例对支持向量机进行训练,计算分类损失。
2. 根据损失值对负例排序,按照正负例的比例选取负样本。
3. 使用新的训练集更新支持向量机的参数,重复2直至支持向量机的分类性能不再提升。
在预测阶段时,将每个图片生成的2000个候选区域提取出特征向量组成 2000 × 4096 2000\times4096 2000×4096的特征矩阵,再把20个支持向量机的权重组成 4096 × 20 4096\times20 4096×20的权重矩阵,两个矩阵相乘就能得到每个候选区域属于这20个类的概率,概率矩阵的形状为 2000 × 20 2000\times20 2000×20。对概率矩阵的每一列进行非极大值抑制来剔除重复的候选区域,非极大值抑制的过程如下:
1. 找出每一列中的最大值,计算该候选区域和其他区域的交并比IOU。
2. 如果某个区域和这个最大值对应的候选区域有较高的IOU,则删除这个区域。
最后对每个类剩下的候选区域按概率从高到低排列。
6. 边界框回归
边界框回归的目的是学习候选区域到真实区域的映射,进一步修正候选区域。
无论是候选区域还是真实区域,都可以用四元组 ( x , y , w , h ) (x, y, w, h) (x,y,w,h)来表示,其中 x , y x, y x,y是区域左下角的坐标, w w w是区域的宽度, h h h是区域的高度。假设 P P P是一个候选区域, G G G是真实区域, d x ( P ) d_x(P) dx(P)是候选区域的水平移动, d y ( P ) d_y(P) dy(P)是候选区域的垂直移动, d w ( P ) d_w(P) dw(P)是候选区域在宽度上的对数变换, d h ( P ) d_h(P) dh(P)是候选区域在高度上的对数变换,那么由 P P P产生的预测真实区域为:
G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P y G ^ w = P w e x p ( d w ( P ) ) G ^ h = P h e x p ( d h ( P ) ) . \begin{aligned} &\hat{G}_x=P_wd_x(P)+P_x\\ &\hat{G}_y=P_hd_y(P)+P_y\\ &\hat{G}_w=P_wexp(d_w(P))\\ &\hat{G}_h=P_hexp(d_h(P)). \end{aligned} G^x=Pwdx(P)+PxG^y=Phdy(P)+PyG^w=Pwexp(dw(P))G^h=Phexp(dh(P)).
对于候选区域 P P P,可以得到它经过Alexnet前8层的特征图拉直得到 ϕ 5 ( P ) \phi_5(P) ϕ5(P),由 ϕ 5 ( P ) \phi_5(P) ϕ5(P)可以得到 d x ( P ) d_x(P) dx(P), d y ( P ) d_y(P) dy(P), d w ( P ) d_w(P) dw(P)和 d h ( P ) d_h(P) dh(P):
d x ( P ) = w x T ϕ 5 ( P ) d y ( P ) = w y T ϕ 5 ( P ) d w ( P ) = w w T ϕ 5 ( P ) d h ( P ) = w h T ϕ 5 ( P ) . \begin{aligned} &d_x(P)=w_x^T\phi_5(P)\\ &d_y(P)=w_y^T\phi_5(P)\\ &d_w(P)=w_w^T\phi_5(P)\\ &d_h(P)=w_h^T\phi_5(P). \end{aligned} dx(P)=wxTϕ5(P)dy(P)=wyTϕ5(P)dw(P)=wwTϕ5(P)dh(P)=whTϕ5(P).
其中 w x w_x wx, w y w_y wy, w w w_w ww, w h w_h wh是可学习的向量,可以通过优化如下代价函数进行学习:
w x = arg min w ^ x ∑ i = 1 N ( G x − P x i P w i − w ^ x T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ x ∥ 2 w y = arg min w ^ y ∑ i = 1 N ( G y − P y i P h i − w ^ y T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ y ∥ 2 w w = arg min w ^ w ∑ i = 1 N ( l o g ( G w P w i ) − w ^ w T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ w ∥ 2 w h = arg min w ^ h ∑ i = 1 N ( l o g ( G h P h i ) − w ^ h T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ h ∥ 2 . \begin{aligned} &w_x=\argmin_{\hat{w}_x}\sum_{i=1}^N(\frac{G_x-P_x^i}{P_w^i}-\hat{w}_x^T\phi_5(P^i))^2+\lambda\|\hat{w}_x\|^2\\ &w_y=\argmin_{\hat{w}_y}\sum_{i=1}^N(\frac{G_y-P_y^i}{P_h^i}-\hat{w}_y^T\phi_5(P^i))^2+\lambda\|\hat{w}_y\|^2\\ &w_w=\argmin_{\hat{w}_w}\sum_{i=1}^N(log(\frac{G_w}{P_w^i})-\hat{w}_w^T\phi_5(P^i))^2+\lambda\|\hat{w}_w\|^2\\ &w_h=\argmin_{\hat{w}_h}\sum_{i=1}^N(log(\frac{G_h}{P_h^i})-\hat{w}_h^T\phi_5(P^i))^2+\lambda\|\hat{w}_h\|^2. \end{aligned} wx=w^xargmini=1∑N(PwiGx−Pxi−w^xTϕ5(Pi))2+λ∥w^x∥2wy=w^yargmini=1∑N(PhiGy−Pyi−w^yTϕ5(Pi))2+λ∥w^y∥2ww=w^wargmini=1∑N(log(PwiGw)−w^wTϕ5(Pi))2+λ∥w^w∥2wh=w^hargmini=1∑N(log(PhiGh)−w^hTϕ5(Pi))2+λ∥w^h∥2.
其中 N N N是候选区域的个数。
此外,在候选区域的选择上要尽量选择离真实区域近的候选区域,否则学习到的候选区域到真实区域的变换效果不佳。
在训练阶段,针对20个不同的类别,训练20个边界框回归器。而在预测阶段,利用学到的 w x w_x wx, w y w_y wy, w w w_w ww和 w h w_h wh计算 d x ( P ) d_x(P) dx(P), d y ( P ) d_y(P) dy(P), d w ( P ) d_w(P) dw(P)和 d h ( P ) d_h(P) dh(P)(这里经过非极大值抑制后留下的候选区域),利用本小节一开始的四个公式得到修正后的 G ^ x \hat{G}_x G^x, G ^ y \hat{G}_y G^y, G ^ w \hat{G}_w G^w, G ^ h \hat{G}_h G^h。
参考
J. R. R. Uijlings, K. E. A. van de Sande, T. Gevers, et al. Selective Search for Object Recognition.
Ross Girshick, Jeff Donahue, Trevor Darrell, et al. Rich feature hierarchies for accurate object detection and semantic segmentation.
总结
R-CNN的优势在于其高效的特征提取和精确的边界框回归。相比于传统方法,R-CNN不仅提高了目标检测的准确性,还减少了漏检率。通过选择性搜索算法和卷积神经网络的组合,R-CNN不仅能够处理复杂目标的检测,还能处理大尺寸的图像数据集。这种组合提高了模型在多尺度和多对象场景中的表现。边界框回归的引入进一步提升了检测精度,使得模型能够更加精确地定位目标区域。此外,R-CNN还在大规模数据集上进行训练,能够泛化到各种复杂的图像场景中,表现出良好的稳定性和鲁棒性。因此,R-CNN在目标检测领域中已成为一种重要的基准模型,对后续目标检测方法的研究和发展产生了深远的影响。