fast-rcnn

这篇很好:https://blog.csdn.net/wonder233/article/details/53671018

Test过程:

1. 用selective search方法提取图片的2000个proposal,并保存到文件

2. 将图片输入到已经训好的CNN 网络,在ROI pooling Layer的地方,对每一个proposal,提取到其对应的ROI

3. 对每一个ROI, 将其划分成固定大小的网格,并且在每一个小网格中,对该网格中所有的值取最大,得到固定大小的feture map,并将其输入到后续的fc层,最后一层输出201类别相关信息和4个boundinf box的修正偏移量

4. 对bounding box 按照上述得到的位置偏移量进行修正,再根据nms对所有的proposal进行筛选,即可得到对该张图片的bounding box预测值以及每个bounding box对应的类和score

Training过程:

1. 对训练集中所有的图片,用selective search提取出各图片对应的2000个proposal,并保存。(图片路径+bounding box信息)

2. 对每张图片,根据图片中bounding box的ground truth信息,给该图片的2000个proposal赋类标签,并保存。(这2000个proposal,如果跟ground truth中的proposal的IoU值超过了阈值(IOU>=0.5),则把ground truth中的proposal对应的类标签赋给原始产生的这个proposal,其余的proposal(IOU [0.1, 0.5))都标为background)

3. 使用mini-batch=128,25%来自有非背景标签的proposal,其余来自标记为背景的proposal(最开始的理解:具体在这个过程中,mini-batch有两个层次,一个是对于同一张图片,64个proposal组成的mini-batch,另一个是完成单张图片的导数计算后,两张图片是一个mini-batch,更新的时候对两张图片求得的值取平均来更新权重),其实,就是ROI pooling layer以前,batch size=2,ROI pooling layer之后,batch size=128

4. 训练CNN,最后一层的结果包含类信息和位置修正信息,所以用多任务的loss,一个是分类的损失函数,一个是位置的损失函数

补充:

1. mini-batch的问题:ROI pooling layer前后,batch size发生了变化

2. 为什么一开始要resize到一个确定的值:为了控制显存,防止在训练过程中,因为某张图片特别大导致显存不够,程序崩了

3. 为什么比R-CNN快?(1)避免了overlap部分的多次重复计算,虽然引入了一些bounding box之外的计算。Fast R-CNN是在一张图上做的,如果图片很大,proposal很小,而且少,极少有overlap,那么R-CNN更快。(2)另一方面,R-CNN在SVM之前,需要把所有的图片再跑一次得到fc7 feature,而Fast R-CNN不需要。


 

总结自:
链接:https://www.jianshu.com/p/38bed2b9f49a 

https://blog.csdn.net/wonder233/article/details/53671018

猜你喜欢

转载自blog.csdn.net/weixin_31866177/article/details/81142708