PaddleDetection/configs/smalldet at release/2.5 · PaddlePaddle/PaddleDetection (github.com)
将训练数据,按照网络输入的固定尺度进行切图,例如,网络输入是640x640,就按照从上到下,从左到右的方法,切割出一个个的640x640的子图(相互之间有交叉),然后基于子图做训练。
这样做的好处,就是相当远放大了小目标在图中的相对尺寸,从而可以提供更多的特征,否则,按照原始尺寸去学习,做一次resize后,本来就很小的目标就会变得更小,甚至在特征图中的激活几乎没有响应,因此难以学习。
基于子图训练好的模型,在预测的时候,将待测试的图片,按照相同的切图方法切分成多个子图,然后对多个子图做预测,然后,将多个子图的结果用nms的方法做过滤,nms计算时使用ios,也就是交小比来判断是否重合,去除掉重复的部分检测框。
优点:
缺点:
对于类似yololo系列的多尺度特征融合做检测的网络来说,大部分为了兼顾速度和精度,基本都使用的是下采样1/8,1/16,1/32后的三个特征层来做特征融合和预测,
而从感受野的角度来考虑,越是底层的特征图上的感受野越小,底层特征也就越局部,尺寸较大的目标,因为感受野较小,根本学习不到大目标应该有的全局特征,
而尺寸较小的目标正好在底层的特征图上可以很好的保留和学习到,越往上层,小目标的特征越来越小,特征图上的响应越来越弱,甚至消失,
而高层特征图中能够响应的,也正好是经过多次下采样后留下来的尺度较大的目标,因此:
所以,在检测小目标时,应该将尺度最大的底层特征也加进来一起学习和预测,对应图中的160x160的这一层,命名为P2。
再实际测试ppyoloe的模型效果后,得出结论:
PaddleDetection/README_cn.md at release/2.5 · PaddlePaddle/PaddleDetection (github.com)