一. 图像增强的方法
一直以来,图像识别这一计算机视觉的核心问题都面临很多挑战,同一个物体在不同情况下都会得出不同的结论。对于一张图片,我们看到的是一些物体,而计算机看到的是一些像素点。
如果拍摄照片的照相机位置发生了改变,那么拍得的图片对于我们而言,变化很小,但是对于计算机而言,图片得像素变化是很大得。拍照时得光照条件也是很重要的一个影响因素:光照太弱,照片里的物体会和背景融为一体,它们的像素点就会很接近,计算机就无法正确识别出物体。除此之外,物体本身的变形也会对计算机识别造成障碍,比如一只猫是趴着的,计算机能够识别它,但如果猫换个姿势,变成躺着的状态,那么计算机就无法识别了。最后,物体本身会隐藏在一些遮蔽物中,这样物体只呈现出局部的信息,计算机也难以识别。
针对这些问题,我们希望可以对原始图片进行增强,在一定程度上解决部分问题。在PyTorch中已经内置了一些图像增强的方法,不需要再繁琐地去实现,只需要简单的调用。
torchvision.transforms包括所有图像增强的方法:
- 第一个函数是 Scale,对图片的尺寸进行缩小或者放大;
- 第二个函数是 CenterCrop,对图像正中心进行给定大小的裁剪;
- 第三个函数是 RandomCrop,对图片进行给定大小的随机裁剪;
- 第四个函数是 RandomHorizaontalFlip,对图片进行概率为0.5的随机水平翻转;
- 第五个函数是 RandomSizedCrop,首先对图片进行随机尺寸的裁剪,然后再对裁剪的图片进行一个随机比例的缩放,最后将图片变成给定的大小,这在InceptionNet中比较流行;
- 最后一个是 pad,对图片进行边界零填充;
上面介绍了PyTorch内置的一些图像增强的方法,还有更多的增强方法,可以使用OpenCV或者PIL等第三方图形库实现。在网络的训练的过程中图形增强是一种常见、默认的做法,对多任务进行图像增强之后能够在一定程度上提升任务的准确率。
二. 实现 CIFAR-10 分类
cifar 10数据集有60000张图片,每张图片都是 32x32 的三通道的彩色图,一共是10个类别,每种类别有6000张图片。下面实现ResNet来处