【论文速度】Fast RCNN
https://blog.****.net/wopawn/article/details/52463853
https://blog.****.net/u011718701/article/details/53748724
翻译:https://alvinzhu.xyz/2017/10/10/fast-r-cnn/
创新点(相较于R-CNN)
1)共享计算结果:ROIpooling(前向、后向)——附带好处:对输入图片的大小不限制
ROI层:
a)将原image中的区域映射到convfeature map的对应区域
由image到conv feature map是卷积、下采样的操作,其中卷积主要是步长控制了输出
b)将上述区域对应的conv featuremap中的特征用max-pooling转换成一个固定大小H×W的feature map。
为什么?
前向:原先1个图片有2000个候选区域,每个候选区域需要做1次的前向计算(在Alexnet中),得到每个候选区域的特征图——》对输入图片做一次前向计算输出整个图形的特征图,根据每个图形的特征图分别提取2000个候选区的特征图(sppnet解决了)
后向:通过改变了采样策略(提高速度、精度)来解决后向传播问题(sppnet没解决需要重新计算不同图片的proposal卷积值)
2)multi-task:一个模型搞定上述2、3、4(end- end)(提高精度)
SVM:在CNN输出层用softmax函数
LR:在CNN输出层加入了用来输出边界框坐标的线性回归层。
【训练阶段】
A:训练集中所有的图像
(1)selective search提取出图像的2000个边框坐标
B:区域建议(建议框)region proposal(2000个边框坐标)+图片
(2)使用数据【对训练集标记的2000个区域和实际区域做比较,确定为前景(IOU>0.5的建议框)、背景(0.1<IOU<0.5建议框);使用mini-batch=128,25%前景样本75%背景样本(数据增广:50%概率水平翻转)】,用模型finetune,获取整幅图像的特征conv5,得到特征图
(3)对每一个区域建议,使用ROI层,从特征图中提取出区域建议所映射的候选区域的固定长度特征
C:区域建议所映射的候选区域的固定长度特征
(4)fc层
(4.1)使用softmax确认分类结果(k+1)
(4.2)使用lr层修正四个实值【只能产生一个分类结果+一个边框?】
基础模型 | 3种(Alexnet、VGG16、VGG19) | ||||||||||||||
模型改进 |
1最后一层max-pooling层变成Rol池化层,H*W设置为第一个FC层要求的大小 2输入变成两种输入(图片+ROI) 3输出变成两种输出(FC+分类softmax/fc+坐标细化) | ||||||||||||||
训练方式 |
1)使用SGD mini-batch 2)hierarchical sampling(采样N=2个图片,从每个图片采样64(R=128/N=2)个ROI区域,在前向、后向传播中ROI共享计算和内存),ROI pooling layer前后batch size从2到128 3)具体样本分布: 25%(正样本,前景,u>=1)的ROIs从候选框中(与真实图片的某类的IOU>=0.5)选取 75%(负样本,背景,u=0)的ROIs从候选框(0.5>与真实图片的20类的最大IOU>=0.1)选取 图像以0.5的概率水平翻转 | ||||||||||||||
输出 |
(1)discrete probability distribution (per RoI), p = (p0, . . . , pK) p is computed by a softmax over the K+1 outputs of a fully connected layer. (2)bounding-box regression offsets, for each of the K object classes, indexed by k. We use the parameterization for tk which specifies a scale-invariant translation and log-space height/width shift relative to an object proposal. 【训练时】 Each training RoI is labeled with a ground-truth class u and a ground-truth bounding-box regression target v. | ||||||||||||||
Loss |
Loss: [u ≥ 1] evaluates to 1 when u ≥ 1 and 0 otherwise. (catch-all background class is labeled u = 0)
【使用L1的原因】 a robust L1 loss that is less sensitive to outliers than the L2 loss used in R-CNN and SPPnet. When the regression targets are unbounded, training with L2 loss can require careful tuning of learning rates in order to prevent exploding gradients. Eq. 3 eliminates this sensitivity.
【λ的选择】 The hyper-parameter λ in Eq. 1 controls the balance between the two task losses. We normalize the ground-truth regression targets vi to have zero mean and unit variance. All experiments use λ = 1. | ||||||||||||||
Back-propagation through RoI pooling layers |
【ROI层】 ROI定义(region of interested):RoI是卷积特征图中的一个矩形窗口,由(r, c, h,w) 表示(左上角坐标 (r, c)高度,宽度(h,w)) 【怎么做?】 将ROI区域(h*w)的特征,变成固定大小H*W(例如7*7)的特征图(使用最大池化,每个pooling的大小子窗口大小约为h/H×w/W)RoI Pooling层将每个候选区域均匀分成M×N块,对每块进行max pooling(将feature map上大小不一的候选区域转变为了大小统一的特征向量),然后送入下一层。 【ROI与pooling的区别?】 尽管ROI Pooling可以看做是针对ROI区域的feature map的Pooling操作,但因为不是固定尺寸的输入,因此每次的pooling网格大小得手动计算。 【后向传播】 | ||||||||||||||
SGD |
解决尺度不变性: 多尺度brute force数据集统一大小(each imageis processed at a pre-definedpixel size during both trainingand testing. Thenetwork must directly learn scale-invariantobject detection from the trainingdata)
单尺度image pyramids数据集缩放(providesapproximatescale-invariance tothe network through an imagepyramid:Attest-time, the image pyramid is used to approximatelyscale-normalize each objectproposal.)
当ROI较多时,减少svd用来减少全连接层的计算
效果 - 更多候选窗不能提升性能 - 多尺度比单尺度效果略好,时间更长 -SVD好 -Finetune(conv3_1及以上(13个卷积层中的9个)的层) -多任务好 |
【测试阶段】约等于训练阶段的前向过程
A:输入一张测试集的图像
1) selective search提取出图像的2000个边框坐标
B:区域建议(建议框)regionproposal(2000个边框坐标)+图片(image pyramids)
(2)使用训练好的模型,获取整幅图像的特征,得到特征图(fc?)
(3)对每一个区域建议,使用ROI层,从特征图中提取出区域建议所映射的候选区域的固定长度特征
C:区域建议所映射的候选区域的固定长度特征
(4)fc层
(4.1)使用softmax确认分类结果(k+1)
(4.2)使用lr层修正四个实值
D:分类结果+对应的四个实值(边框信息)
(5)检测置信度
(6)使用非极大值抑制,保留最有可能的候选区域(一个区域,可能会有多个框框),可得到该张图片的boundingbox 预测值以及该box对应的类和score