"笨方法"学习CNN图像识别(一)—— 图片预处理

— 全文阅读5分钟 —

在本文中,你将学习到以下内容:


  • 通过数据增强增加样本量
  • 调整图片大小便于网络训练

前言

图像识别的准备工作就是要对我们拿到手的样本图片进行预处理,具体就是数据增强和调整图片大小,这些准备工作都是为训练网络做准备。图片预处理一定要合理有效,符合机器学习的要求。

数据增强(data augmentation)

当我们拿到一套图片数据准备进行机器学习的时候,样本量往往不够多,因此需要对现有的图片进行数据增强。一方面是为了增加样本量,另一方面能够提高模型的泛化能力。
假设我们有一组商标图片,如下:

《
商标图片

当我们进行100类的机器学习时,显然这一类的样本量不够多,在这里我们通过keras库进行数据增强。以商标图片中的第一张图片为例:

首先导入keras库,建立图片路径和数据增强保存路径,接下来定义ImageDataGenerator,告诉他通过哪些操作产生新的图片。

在这里根据当前的图片需求,选择了旋转、平移、缩放、边缘填充的操作,其他操作详见。有些操作的设置要符合实际情况,比如旋转操作,不能把图片完全倒立了,这样的数据增强反而不利机器学习。

加载图片的地址,转变成array格式给ImageDataGeneratorsave_prefix表示新图片的名字前缀,save_format表示新图片保存的格式。需要注意的是,在这里根据我们定义的操作,从这些操作中随机选择几种生成6张图片。
最终在data_augmentation文件夹中生成6张新的商标图片:

《
新的商标图片

在实际操作中,应该多去尝试数据增强的各种操作。好的样本扩充能够增加模型的泛化能力,提高准确率。数据增强完整代码如下:

图片大小调整(resize)

统一调整图片的大小,便于后面进行机器学习。我们以调整data_augmentation文件夹生成的新图片为例:

使用PIL库改变图片大小,使用os库读取文件路径,将resize后的图片放到resize_image文件夹中。resize后的大小为224*224(这个大小是为了后面ResNet使用)。resize后的图片效果如下:

《
resize后的图片

当你完成这一步的时候,图像识别的准备工作就完成一半了,剩下的就是将这些图片制成tfrecord格式,方便训练网络读取。

点赞