点击上方“机器学习与生成对抗网络”,关注"星标"
获取有趣、好玩的前沿干货!
https://zhuanlan.zhihu.com/p/158854758 编辑 机器学习AI算法工程
无论我们喜欢Keras还是Pytorch,我们都可以使用丰富的资料库来有效地增广我们的图像。但是如果遇到特殊情况:
我们的数据集结构复杂(例如3个输入图像和1-2个分段输出)。
我们需要完全的自由和透明度。
我们希望进行这些库未提供的扩充方法。
对于这些情况以及其他特殊情况,我们必须能够掌握我们自己的图像增广函数。而且,我每次都使用自己的函数。因此,在本文中,我将介绍并提供执行图像增广的功能。
我将使用朋友的照片来提醒我在加拿大度过的美好时光作为示例。希望您喜欢这张照片,因为这是您在本文中看到的唯一一张照片。
我将增广过程细分为一个实际的案例,将我们的函数与图像和目标图像一起使用。这将使您对将要描述的方法的灵活性有所了解:
翻转
裁剪
过滤和锐化
模糊
旋转,平移,剪切,缩放
剪下
色彩
亮度
对比
均匀和高斯噪声
渐变
镜头变形
本文的目的不是为了证明增广技术是如何设计的,而是理解它们的用法。
一些有用的函数
在开始之前,我想解释每种方法具有的通用结构。它实际上是一个要初始化的对象。该对象将以我们的样本作为参数调用,并将返回我们的扩充样本。这就是全部?是的,仅此而已!然后,让我们从增广功能之前的一些有用函数开始。
Resize
第一个有用的函数允许我们使用(宽度,高度)形状调整图像大小。这个类使我们看到了所有其他的初始化方式。我们实例化一个对象,该对象的大小被参数化。在我们的例子中,所有样本(图像和目标)将以相同的尺寸返回。使用此类型的功能,我们可以轻松地以所需方式处理图像和目标。
Clip
剪辑函数是一项非常有用的函数,尤其是当您需要从一种颜色空间切换到另一种颜色空间或在0和1或0和255之间重置图像时。
Normalize or Standardize
在传递模型中的输入之前,我们通常希望对数据进行标准化或规范化。当然,这些操作可以在特定的轴上完成。
默认情况下,对整个图像执行标准化和规范化。
ToTensor
最后,如果您使用的是Pytorch,则需要将图像转换为Torch.Tensor。唯一需要注意的是,使用Pytorch,我们的图像维度中首先是通道,而不是最后是通道。最后,我们还可以选择张量的输出类型。
怎么使用?
我们要做的就是定义我们要在样本中进行的转换的列表,仅此而已。之后我们什么也别碰。请注意,转换顺序很重要。而且由你决定。
现在,我们可以深入研究本文的目的,并查看图像增广技术。
旋转
第一个,也是最简单的一个,包括在图像的水平和垂直轴上随机执行翻转。换句话说,执行垂直翻转的机会为50/100,执行水平翻转的机会为50/100。
裁剪
要进行图像增广,通常会随机裁剪图像。换句话说,我们在随机区域上裁剪了一部分随机大小的图像。
可以从尺寸的比例(高度,宽度)中选择裁剪图像的尺寸。如果未指定裁剪的比例最大大小,则默认情况下,我们将认为它是图像的大小。
过滤器
一般情况
我们将开始一些有趣的事情。过滤器是很棒的方法,但我认为能够轻松创建我们自己的卷积过滤器非常重要。
所以我想做一个通用的函数,以便能够使用我们自己的过滤器。
锐化
就过滤器而言,可以通过选择上游过滤器并以随机权重应用过滤器来进行进一步处理。例如,我向您介绍用于锐化图像的过滤器。
中心值从0到65。
模糊
可以用最流行的滤镜来随机模糊我们的图像。有很多方法可以模糊我们的图像。最著名的是平均值,中值,高斯或双边滤波器。
平均模糊
内核大小从1到35
关于平均滤波器。顾名思义,它使我们可以对给定中心的值取平均值。这是由内核完成的。可以指定其大小以增加或减少模糊。要使用平均滤波器增广图像,我们只需要使用随机大小的内核对输入图像进行滤波。
高斯模糊
内核大小从1到35
高斯模糊不使用平均滤波器,而是使用高斯滤波器,因此这些值对应于从中心开始的高斯曲线。请注意,内核维数只能包含奇数。
透视变换
迄今为止,最广泛使用的图像增广技术是透视变换。有旋转,平移,剪切和缩放。这些转换可以在3D维度中执行。通常,它们仅在2D中使用。让我们利用我们拥有的一切。
翻转
平移
剪切
缩放
结合
我不会在2D图像的3D转换上花费更多的时间,因为我写了有关这方面的整篇文章。因此,我选择了本文结尾处提供的函数。
应该注意的是,该函数允许我们根据所提出的4个矩阵随机执行变换。 顺序很重要。这里我们有剪切,然后是旋转,然后是比例缩放,最后是平移。注意,平移是通过图像尺寸的比例完成的。
结合随机旋转平移剪切和比例缩放
镜头变形
最后,这是一种非常好的方法。我很惊讶它不经常被使用。但是它可以模仿相机镜头的失真。就像透过圆形玻璃看。在我们看来,由于透镜(玻璃)是圆形的,因此失真了。因此,如果我们的图像是从带镜头的相机拍摄的,为什么不模拟它们。默认情况下,应将其用于图像。至少我是这样认为的。
因此,我建议在最后一个函数中,通过播放径向系数k1,k2,k3和切向系数p1,p2,可以随机模拟我们的镜头失真。在该方法中,系数的顺序如下:k1,k2,p1,p2,k3。