大图片小目标检测
YOLOv5 小目标检测、无人机视角小目标检测
1、图片分割、标签生成
因为我们要检测的图像分辨率很大,比如无人机拍摄的图片尺寸为5630x4314,但又有些目标很小,如果直接把图像缩放到640x640训练的话,效果不好,很多小目标就检测不到了。
因为:yolov5使用了5次下采样,最后输出的特征图大小是20 * 20, 40 * 40, 80 * 80。
80* 80 负责检测小目标的,对应到640 * 640 上,每格特征图对应的感受野大小是 640/80=8 * 8。再对应到原图中,以长边为例,5630/640 * 8 = 71,即原图中目标小于71像素的目标,是无法学习到有效特征的。
所以要对原图分割成多个小图再进行检测,我这里把图像分割成 2行3列,即6个小图。
有一点值得注意的是,有一些目标正好位于两个小图中间,正好被截断了,这就可能导致检测不到目标。为了避免这种情况,我们在两个小图之间设置一个overlap重叠区域,这里我设置的重叠区域面积占总面积的20%。
4.推理合并
在模型推理的时候,输入的是一张无人机拍下是原始图像,我们同样也需要把原图切割成多个小图来推理,再把小图的推理的结果合并到原图,然后再统一做nms操作。
步骤:
(1)小图跑模型推理,得到推理结果pred;
(2)对pred的结果中boxes位置进行坐标转换,转换为对应于原图中的位置;
(3)把各个小图推理的结果用 torch.cat 来进行合并;
(4)使用nms非极大值抑制 过滤掉重复的框。