我想向一些朋友提一个简单的问题。我做过一些图像分类教程,只是一些简单的,像是MNIST数据集。然后我注意到他们这样做
train_images = train_images / 255.0
现在我知道矩阵(即图像)中的每个值都被255.0除掉了。如果我没记错的话,这被称为归一化,对吗?(如果我错了,请纠正我,否则告诉我我是对的)。
我只是很好奇,是否有“更好的方法”、“另一种方法”或“最佳方法”来预处理或清理图像,然后将这些清理后的图像输入网络进行训练。
如果你愿意提供一些示例源代码,请随意。我很乐意查看代码示例。
谢谢!
回答:
在图像分类之前预处理图像可以包括以下内容:
- 归一化:你已经提到过了
- 重塑为统一分辨率(图像高度 x 图像宽度):更高的分辨率有助于更好的学习,而较小的分辨率可能丢失重要特征。有些模型有默认的输入尺寸可供参考。也可以使用所有图像的平均尺寸。
- 颜色通道:1表示灰度,3表示RGB色度。根据你的应用,你可以设置这个参数。
- 数据增强:如果你的模型过拟合或你的数据集很小,你可以通过改变原始图像(翻转、旋转、裁剪、缩放等)来复制数据集,从而增加数据集的大小
- 图像分割:可以执行分割来突出显示可能有益于你的应用的区域或边界。例如,在医学图像分类中,身体的某些部分可能会被遮罩以增强分类性能。
例如,我最近处理了肺部CT扫描图像的分类。对于预处理,我调整了图像的尺寸并将其转换为灰度。然后,我执行了图像分割以在图像中突出显示肺部。最后,我对图像像素进行了归一化处理,以便输入我的分类模型。根据你的应用,可能还会有其他更多的预处理技术需要考虑。