发布时间:2024-08-15 16:01
1.解决SS模型的瓶颈
2.如何将模型做到端到端
3.滑窗分类的改进
4.faster RCNN的前向计算和反向传播过程
1.finetune的思路:要想把某个算法融合到CNN网络里面,只需要先设计一个前向计算过程模拟这个算法,代替算法的输出,然后再用finetune的思路去训练即可。
2.由于不打算再用SS算法,所以就没有ROI可以选择或修正,只考虑用检测的方法来做,这时候又回到了滑窗检测。通过滑窗分类产生感兴趣区域,在滑完整张图片后,类似于一个卷积层。因此每个卷积层都可以看作是一个滑窗分类。
之前使用的滑窗是要遍历各种尺寸遍历各种位置,这会使得得到的目标区域的数量过多,使用的滑窗数量也过多,计算量复杂。采用卷积层代替滑窗后,这个问题就很好解决,可以通过调整stride遍历各种位置,通过增加卷积层层数遍历各种尺寸。
采用2个11的卷积遍历图像每一个像素,不改变原图大小,区分前景/背景,再采用4个 11 的卷积对BBox进行修正,计算tx,ty,tw,th 。这6个滑窗(6个channel)就对应1个anchor(锚点框),1个anchor对应一组分类回归头,接几组分类回归头(几个不同尺度的anchor),就代表有多少个尺度的滑窗。
由于待检测目标的形状不一定是正方形,因此还需要添加其他形状的anchor。三个尺度三个形状一共需要9个anchor,每个像素点对应9个框。例如,原图大小是400400,anchor大小是1616,像素点一共有25*25个(400/16),一共生成5625个区域,把分类为前景的区域代替SS生成的2000个区域。(anchor个数与区域个数相对应,而不是滑窗个数)
训练过程: 训练backbone(VGG)[imagenet1000类]——backbone+RPN[从滑窗里挑选前景框并修正滑窗位置]——backbone+RPN+检测头[挑选每类目标的框并修正框]——backbone(lr=0)+RPN+检测头——backbone+RPN+检测头
rpn训练:损失函数依然是两部分,分类损失和回归损失。
分类损失计算的是softmax probability,当anchor与Ground True box间IOU>0.7则认为该anchor属于正类,p=1;当anchor与Ground True box间IOU<0.3,则认为该anchor属于负类,p=0;0.3和0.7之间的anchor不参与训练。
回归损失采用的是smooth L1loss函数,同时也只关心正类的回归。
参考《开课吧》相关课程