RCNN, fastRCNN, fasterRCNN
RCNN, fastRCNN, fasterRCNN
参考目录:
RCNN,fast-RCNN,faster-RCNN:https://zhuanlan.zhihu.com/p/64694855
RCNN
参考目录:
RCNN详解:https://blog.csdn.net/weixin_44338712/article/details/107343260
IoU,NMS和bbox回归:https://zhuanlan.zhihu.com/p/60794316
任务
输入:image
输出:1. 类别标签;2. 位置(Bounding box)
解决方法
- 模块一:提取物体区域(Region proposal)
- 模块二:对区域进行分类识别(Classification)
传统方法一般是在图片上穷举出所有问题可能出现的区域,然后对这些区域进行分类。对于能分类的区域,使用非极大值抑制(Non-maximumsuppression)去除冗余的区域,在输出结果。
RCNN使用的四个步骤:
- 设置提取框
- 对每个框提取特征
- 图像分类
- NMS
1. Region
RCNN采用Selective Search生成候选框并合并候选区。算法的主要流程如下:
输入:图片image
输出:物体可能的位置集合L
——————————————————————————————————————————————
使用图像分割算法获得初始区域R={r1,r2,...,rn}
定义相似度集合S={}
for each (ri,rj) in R: # ri,rj互为相邻区域
计算相似度s(ri,rj)
S = S ∪ s(ri,rj)
end for
while S ≠ 空:
s_max(ri,rj) = amax(S)
合并:rt = ri ∪ rj
删除所有与ri、rj有关的相似度s(ri,r*),s(rj,r*)
计算所有与rt相邻区域的相似度,并添加到集合S,S = S ∪ s(rt,r*)
更新R,R = R ∪ rt
end while
从选区R中获取所有可能的bounding boxes集合L
return L
——————————————————————————————————————————————
2. 特征提取
使用CNN获取各个region proposal的特征。由于不同的region proposal的大小是不一样的,所以需要对图片进行缩放。两种缩放方法:
-
各向异性缩放
即按照尺寸直接强行缩放,图像可能会发生扭曲。
-
各向同性缩放
- 扩充bounding box:在原图上将bounding box扩充到需要的尺寸。
- 扩充region:用bounding box中颜色的均值对图片的尺寸缺失区域进行填0.
然后使用pretrain后的CNN网络在目标数据集上fine tune。训练过程中会产生一些候选的bounding box,我们将候选框与人工标注的框进行IoU计算,大于0.5记为正样本,否则为负样本。随后通过这些样本进行训练。
3. 训练任务
训练任务主要包括两个:SVM分类和bounding box回归。
3.1 SVM分类
由于训练数据集的数据量很小,所以不适用CNN最后的softmax层进行分类,而是将提取出的特征送入SVM分类器进行分类。SVM适用于小样本训练:IoU<0.3为负例,IoU大于0.7为正例,其余的丢弃。
3.2 bounding box regression
现在设Ground truth的bounding box为,模型预测的bounding box为,则bounding boxregression的目标时找到一种映射关系,使得 ,是一个和接近的框。
我们可以发现,该映射关系可以表示为平移加缩放:
-
平移:
其中,
-
缩放:
其中,
因此,我们所需要的缩放关系即为, , , ,接下来我们可以针对这四个两设计算法。
设计回归
输入:region proposal对应的pool 5层的特征。
输出:平移和缩放的尺度, , ,
真实的平移和缩放量用表示如下:
MSE下的损失函数可以定义为:
加上L2正则化项后的损失函数:
4. 测试过程
- Region proposal的确定
- RP的特征提取
- SVM分类
- BBox回归
- NMS
RCNN的缺点
- 每一个region proposal需要单独计算feature map导致整体的时间变长,且占用空间大;
- 每个模块是相互独立的,导致整体精度不高;
- 测试时间长。
fastRCNN
参考目录:
ROI pooling:https://blog.csdn.net/fenglepeng/article/details/117885129
fast RCNN:https://blog.csdn.net/weixin_43702653/article/details/124002054?spm=1001.2014.3001.5501
0. 相对于RCNN的改进
- 不再对每个region proposal进行卷积,而是对整长图像进行卷积,减少重复计算;
- 使用ROI pooling对特征进行尺寸变换,因为全连接层的输入要求尺寸大小一样。
- 删除单独的bbox regressor,将regressor放入网络一起进行训练,每个类别对应一个regressor,并用softmax代替原先的SVM分类器。
1. ROI pooling
ROI的全称为region of interest,ROI pooling是池化层的一种,整个过程可以看作将region proposal拼成统一大小的feature map。
输入:
- 从具有多个卷积池化的深度网络获得的固定大小的feature map;
- 一个N*5矩阵,其中N为ROI的数目。5列中,一列为image index,其余四列代表左上角和右下角的坐标。
输出:
batch个vector,batch=roi的个数,vector的大小为channel*w*h
实质:将若干个不同大小的box矩形框映射成大小为w*h的矩形框。
具体操作:
- 根据输入image,将ROI映射到feature map对应位置;
- 将映射后的区域划分为相同大小的section;
- 对每个section进行max pooling操作。
例如在下图中,我们在一个的feature map,一个ROI,同时我们需要得到的输出。
设我们取得了一个region proposal的位置(左上角和右下角的坐标)为和,则我们按照下图示意进行划分,将区域不均等地划分为,再取max pooling。
ROI pooling的好处:
- 不需要进行warp才做,有效避免了物体被扭曲;
- 不需要对每个proposal提取特征,只需要用映射的方法从整张图片的feature map上获取ROI feature区域。
2. 模型结构
和RCNN进行对比,有两点主要不同:
- 最后一个卷积层后加了一个ROI pooling layer;
- 损失函数使用了multi-task loss,将边框回归bounding box regression直接加入了CNN网络的训练。
损失函数
分类器损失:
回归器损失:
where
多任务损失函数:
fasterRCNN
参考目录:
faster-RCNN:https://blog.csdn.net/weixin_43702653/article/details/124045469?spm=1001.2014.3001.5501
详解faster-RCNN:https://blog.csdn.net/weixin_42310154/article/details/119889682
RPN:https://zhuanlan.zhihu.com/p/106192020
联合训练:https://blog.csdn.net/Friedrichor/article/details/123943381
fast-RCNN的局限性:依旧使用selective search方法确定region proposal。faster-RCNN改为使用RPN网络提取region proposal。
fast-RCNN的三大模块:
-
Conv layers
勇于提取输入图像的特征,输出feature map。
-
region proposal networks(RPN)
最重要的模块,用于提取RP。
-
ROI head
通过RPN模块确定RP后,后续的结构和fast-RCNN相似。
1. Conv layers
还有三种层,包括13个conv层,13个relu层和4个pooling层。
- conv: kernel_size=3, pad=1, stride=1
- pooling: kernel_size=2, pad=0, stride=2
假设输入为图像为大小的输入图像,经过网络后会变为的feature map。
2. Region Proposal Networks
RPN包括以下部分:
- 生成anchor boxes
- 判断每个anchor box为foreground(前景,包含物体)或者background(背景)(二分类任务)
- bbox regression对锚框进行微调,让positive anchor和ground truth更加接近
2.1 anchors:
在feature map上,对于每个像素点,预设九个anchor,作为初始的检测框,如下图所示。后面会通过两次bounding box regression来修正检测框的位置。
2.2 cls layer(分类)
在分类任务中,feature map通过sfotmax得到两个值,分别对应目标为前景和背景的概率。RPN并不关心最终分类是什么,它只关心是前景还是背景。
2.3 reg layer (回归)
生成每一个anchor相对于ground truth的坐标偏移量。计算偏移量和缩放量的公式和前文提到的bounding box regression相同。
为什么不直接预测修正后的anchor坐标,而是要预测偏移量?
因为直接预测坐标的数量级较大,难以训练;同时坐标偏移具有较好的数学公式,方便求导。
2.4 生成proposal
proposal层的输入有三个:
- cls层生成的向量
- reg层生成的向量
修正偏移量的要点:
- 利用 reg layer的值对原始的anchor进行修正;
- 边界处理:把超出图像边界的positive anchor超出的部分收俩到图像边界处,防止ROI pooling的过程中超出边界;
- 剔除尺寸非常小的positive anchor;
- 利用cls layer的score对positive layers进行排序;然后使用NMS;
- 输出一堆RP的左上角和右下角的坐标值。
3. fasterRCNN的训练方法
3.1 四步交替迭代训练
- 训练RPN,使用大型预训练模型共享卷积核权重,端到端训练RPN;
- 训练fastRCNN,冻结第一步训练好的RPN,使用和第一步中相同的大型预训练模型共享卷积,训练从RP到最终输出的网络;
- 冻结共享卷积,调优RPN;
- 冻结RPN和共享卷积,调优fastRCNN;
- 重复3,4进行迭代训练。
3.2 联合训练
将四个部分融合到一个网络中,实现端到端的训练过程。
本文作者:PaB式乌龙茶
本文链接:https://www.cnblogs.com/pab-oolongtea/p/17829297.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步