使用深度学习进行图像类任务时,通常网络的输入大小是固定的,最近在进行涉及到文字检测的工作中,由于预处理resize缩小了原图,导致字体变模糊,从而检测失败,后来想到使用overlap来对图像进行缩放裁剪,即先将原图缩放到一定尺寸,再裁剪得到网络的输入。
好了,来说正题,使用yolov3,网络的输入是352x352x3,而输入图像大小为几百上千不等,因此需对原图进行resize,起初直接进行缩放 + 填充,检测的map很低,后来分析发现有些352x352的输入图像中的文字已经很模糊,因此直接缩放的方案不可行,改进后方案如下:
- 原图最大尺寸大于1000,则resize到800x800,再裁剪为9个352x352,overlap为128个像素
- 原图最大尺寸大小500且小于1000,则resize到600x600,再裁剪为4个352x352,overlap为96个像素
- 原图最大尺寸小于500,则resize到352x352。
python实现代码如下,使用了PIL、opencv库,将整个目录下的图像全部做缩放裁剪处理,代码包含如下功能:
- 遍历某一目录的文件
- opencv进行图像载入及保存
- opencv进行缩放裁剪
- PIL进行图像显示
import
执行python脚本,结果如下:
输入图片如下,分辨率为719x1280,裁剪后输出9幅352x352的子图,这样就完成了图像的预处理。