- Fast-R-CNN
- loss由两部分组成,分类loss是预测的分类向量p在真实类别u上的值的log loss, 回归loss是当真实类别非背景时真实的bbox和预测的bbox的(x, y, h, w)的loss,当真实类别为背景时不计算bbox的loss,即为0,注意这里的xywh并不是bbox的左上角xy和长宽hw,而是对ROI的大小和位置的调整,λ文中设为1
- loss由两部分组成,分类loss是预测的分类向量p在真实类别u上的值的log loss, 回归loss是当真实类别非背景时真实的bbox和预测的bbox的(x, y, h, w)的loss,当真实类别为背景时不计算bbox的loss,即为0,注意这里的xywh并不是bbox的左上角xy和长宽hw,而是对ROI的大小和位置的调整,λ文中设为1
- Faster-R-CNN
- Faster-R-CNN其实就是RPN+Fast-R-CNN,前提是你把FastRCNN仅当作detector而将其于前面Region Proposal的部分分开的话。Fast-RCNN不是unified的,因为需要selective search作为网络前面的处理部分,而Faster-R-CNN就是完全unified的,以图片为输入,以分类结果和bbox为输出的end2end网络
- 具有平移不变性(translation-invariant)
- RPN部分和fastrcnn部分是分开训练的
- RPN的loss function是这样的,RPN是一个二分类detection,有物体和没有物体(背景),而不管物体是什么类别,anchor只要满足两种情况之一
- 在输出的所有proposal中,与label的某个proposal有最高的IOU值
- 与proposal的IOU值大于0.7
- 标签即为正例,而不满足以上条件且与proposal的iou值小于0.3为负例
- 不满足正例和负例的anchor,对loss没有贡献,被抛弃
- loss是这样的
- 其中pi是输出的分类概率,0为no-object,1为object,ti是输出的bbox的参量,i表示第i个anchor
- Lcls(pi,pi*)采取的是FastRCNN中的loss
- Lreg采取下列形式:
其中 x x_a x* 分别表示预测结果的x, anchor的x, groundtruth的x,即目标是希望对anchor的proposal的修正能尽量精确
- 每个anchor对应了k个不同scale和ratio的bbox,也就对应了k个regressor,这k个regressor是不共享参数的,但是用于这k个regressor的feature是从同一个featrue map上框出来的一样大小的sub feature map
- 训练过程中,anchor只取positive或negative的,但是不是全都取,因为negative(背景)anchor明显比较多,所以只随机sample256个anchor且尽量取128个positive的,如果positive的不足128个,就取全部的positive,剩下的用negative来填
- 权重初始化为0均值0.01方差的高斯分布
- 总的来说RPN网络先在每个像素点都设置k个anchor(也可以说1个anchor,k个region),然后送入二分类器和regressor,但是计算loss的时候只选择其中一部分来计算loss
- RPN的loss function是这样的,RPN是一个二分类detection,有物体和没有物体(背景),而不管物体是什么类别,anchor只要满足两种情况之一
- RPN和fastRCNN的训练组合方式有三种:
文章采取的是第一种,所以后两种就不说了: - 由于FastRCNN和RPN是共享最前面得到feature map 的convolution,所以这一层的训练是最难的,采取这样的策略:
- 先train RPN,这时这一层用pretrained 的 vgg 来初始化并且在训练RPN 的过程中也fine-tune它
- 然后train fast-RCNN,这时这一层依然是用pretrained 的vgg来初始化并且fine-tune,而使用RPN去掉这一层的剩下部分来对feature map 提取proposal,而且RPN的参数是fixed的
- 第三步,拿fast-RCNN fine-tune的vgg层来给RPN使用并fix,而train RPN后面的参数
- 最后,第二步和第三步train得的FastRCNN和RPN就是共享最前面feature extraction层的unified的了,直接组合起来就行了
- 最后,上述步骤可以iter地重复,但是论文说实验发现iter并没有太大的性能提高
- training中anchor boxes超出边界的抛弃
testing中anchor boxes超出边界的clip
重叠的用阈值为0.7的NMS来筛除
最后一张1000*600的图片大概产生2000个anchor,而FastRCNN只取其中topN个 - 关于RPN的其它细节,以下blog讲得很详细:
https://blog.csdn.net/JNingWei/article/details/78847696 - ROIpooling对小物体的检测可能出现偏差,可更换为ROI Align:
关于ROI Align的详解这篇blog讲得还不错:https://blog.csdn.net/bruce_0712/article/details/80287385
关于ROI pooling 的详解也在这篇blog里有
- Faster-R-CNN其实就是RPN+Fast-R-CNN,前提是你把FastRCNN仅当作detector而将其于前面Region Proposal的部分分开的话。Fast-RCNN不是unified的,因为需要selective search作为网络前面的处理部分,而Faster-R-CNN就是完全unified的,以图片为输入,以分类结果和bbox为输出的end2end网络
Fast-R-CNN、Faster-R-CNN阅读笔记
最新推荐文章于 2020-08-09 10:31:33 发布