目录
1,常见的变换
2,从模型本身获取不变性
2.1 从网络结构获取不变性
2.2 学习数据变换
2.2.1 为什么提出空间变换网络STN(Why)
2.2.2 STN是什么(What)
2.2.3 STN是怎么做的(How)
2.2.4 STN小结
3 从数据中学习不变性
3.1 空间转换 (随机尺寸,裁剪,翻转,旋转任意角度...)
3.2 像素内容变换(亮度,色度,饱和度,颜色扰动等)
3.3 多样本合成数据增强(SMOTE,SamplePairing...)
3.4 信息丢弃(随机 擦除,cutout...)
3.5 图像融合及拼接(Mixup...)
目标变换常见的可以分为刚性运动和非刚性运动,刚性运动即目标的位置和方向发生变化,非刚性运动则是指目标的形状发生变化,包括尺度变换,缩放变换,透视变换。
CNN网络本身对目标的平移,旋转,尺度变化具有一定的尺度不变性。除了丰富的卷积模式本身包含了不变特征提取,还有一些技术专门被用于获取不变性。
CNN网络结构本身拥有一定的不变性,如池化可以改变输入的大小,具有一定的平移不变性和旋转不变性和尺度不变性。如下三个例子,可以深入明白池化为什么具备平移不变性和旋转不变性和尺度不变性。
(1) translation invariance(平移不变性):
这里举一个直观的例子(数字识别),假设有一个16x16的图片,里面有个数字1,我们需要识别出来,这个数字1可能写的偏左一点(图1),这个数字1可能偏右一点(图2),图1到图2相当于向右平移了一个单位,但是图1和图2经过max pooling之后它们都变成了相同的8x8特征矩阵,主要的特征我们捕获到了,同时又将问题的规模从16x16降到了8x8,而且具有平移不变性的特点。图中的a(或b)表示,在原始图片中的这些a(或b)位置,最终都会映射到相同的位置。
图1 平移池化的结果 (2)rotation invariance(旋转不变性):
下图表示汉字“一”的识别,第一张相对于x轴有倾斜角,第二张是平行于x轴,两张图片相当于做了旋转,经过多次max pooling后具有相同的特征。
图2 旋转池化结果
(3)scale invariance(尺度不变性):
下图表示数字“0”的识别,第一张的“0”比较大,第二张的“0”进行了较小,相当于作了缩放,同样地,经过多次max pooling后具有相同的特征。
图3 尺度池化结果
图像的平移,缩放,旋转本质上是对图像的空间坐标变换,如果首先对输入的图像首先完成平移,缩放,旋转的变换,再将其输入网络,那么将大大降低学习的难度。Google提出的空间变换网络(STN Spatial transform network)本文提出了一种叫做空间变换网络(Spatial Transform Networks, STN)的网络模型,该网络不需要关键点的标定,能够根据分类或者其它任务自适应地将数据进行空间变换和对齐(包括平移、缩放、旋转以及其它几何变换等)。在输入数据空间差异较大的情况下,这个网络可以加在现有的卷积网络中,提高分类的准确性。
图4 空间变换不变性图像说明
下面针对每个模块阐述一下
(1) Localisation net
这个模块就是输入U,输出一个变化参数Θ,那么这个Θ具体是指什么呢?
我们知道线性代数里,图像的平移,旋转和缩放都可以用矩阵运算来做
举例来说,如果想放大图像中的目标,可以这么运算,把(x,y)中的像素值填充到(x',y')上去,比如把原来(2,2)上的像素点,填充到(4,4)上去。
如果想旋转图像中的目标,可以这么运算:
这些都是属于仿射变换(affine transformation)
在仿射变换中,变换的参数是6个变量:
这6个变量就是用来映射输入图和输出图之间的坐标点的关系的,我们在第二步grid generator就要根据这个变化参数,来获取原图的坐标点。
旋转的矩阵运算方法如下图所示:
(2) Grid generator
有了第一步的变化参数,这一步是做个矩阵运算,这个运算是以目标图V的所有坐标点为自变量,以Θ为参数做一个矩阵运算,得到输入图U的坐标点。
这里的i是从V中对应过来的,表示V中的第i的坐标点映射的U中坐标,i跟U没有关系
(3) Sampler
由于在第二步计算出了V中每个点对应到U的坐标点,在这一步就可以直接根据V的坐标点取得对应到U中坐标点的像素值来进行填充,而不需要经过矩阵运算。需要注意的是,填充并不是直接填充,首先计算出来的坐标可能是小数,要处理一下,其次填充的时候往往要考虑周围的其它像素值。填充根据的公式如下。
其中n和m会遍历原图U的所有坐标点,Unm指原图U中某个点的像素值,k()为取样核,两个ϕ为参数,(xsi,ysi)表示V中第i个点要到U图中找的对应点的坐标,表示的坐标是U图上的,k表示使用不同的方法来填充,通常会使用双线性插值,则会得到下面的公式
举例来说,我要填充目标图V中的(2,2)这个点的像素值,经过以下计算得到(1.6,2.4)
如果四舍五入后直接填充,则难以做梯度下降。
我们知道做梯度下降时,梯度的表现就是权重发生一点点变化的时候,输出的变化会如何。
如果用四舍五入后直接填充,那么(1.6,2.4)四舍五入后变成(2,2)
当Θ(我们求导的时候是需要对Θ求导的)有一点点变化的时候,(1.6,2.4)可能变成了(1.9,2.1)四舍五入后还是变成(2,2),输出并没有变化,对Θ的梯度没有改变,这个时候没法用梯度下降来优化Θ
如果采用上面双线性插值的公式来填充,在这个例子里就会考虑(2,2)周围的四个点来填充,这样子,当Θ有一点点变化的时,式子的输出就会有变化,因为(x_{i}{s},y_{i}{s}) 的变化会引起V的变化。注意下式中U的下标,第一个下标是纵坐标,第二个下标才是横坐标。
V=U21(1−0.6)(1−0.4)+U22(1−0.4)(1−0.4)+U31(1−0.6)(1−0.6)+U32(1−0.4)(1−0.6)
这样就是在做计算的时候,考虑了相应的4个像素;
简单总结一下,如下图所示
具体仿射变换过程,也可以结合下图进行理解:
上图中由Localisation Net生成仿射变换系数后,仿射变换的过程是依次执行步骤1,2,3,4。
STN以上内容参考博文:
论文笔记:空间变换网络(Spatial Transformer Networks) - PilgrimHui - 博客园
为了让模型更加鲁棒,需要大量的训练数据,以使得模型从中学习到各种不变性,除了直接使用收集更多的数据,还可以采用各种不同的数据增强方法,如几何变化类操作,颜色变换类操作来获得大量的数据。下面从操作方法上介绍不同的数据增强方法,主要参考的是有三的数据增强方法的总结:
颜色扰动:就是在某一个颜色空间通过增加或减少某些颜色分量,或者更改颜色通道的顺序。
亮度、对比度、饱和度调整扩增数据
1)多样本插值SMOTE
论文:SMOTE: Synthetic Minority Over-sampling Technique
源码:https://zhuanlan.zhihu.com/p/44055312
SMOTE:是一种通过线性插的方法,对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,解决数据不均衡问题的方法。
2)多样本插值SMOTE
3)SamplePairing
解决的问题:数据不均衡
论文:Data Augmentation by Pairing Samples for Images Classification
算法:训练集随机抽取的两幅图像叠加合成一个新的样本(像素取平均值),使用第一幅图像的label作为合成图像的正确label,训练集规模从 N 扩增到 N*N。
1)Random erasing
解决的问题:遮挡问题
源码:https://github.com/zhunzhong07/Random-Erasing
论文:Random erasing data augmentation 在训练中,随机擦除随机选择图像中的一个矩形区域, 通过随机擦除目标的特征模拟遮挡的效果,提高模型 的泛化能力,弱化模型对于目标全部特征的依赖。
2)Random erasing
不同的处理需求,做法不相同
图像分类 :在原图中随机选择擦除区域 --- 漫无目的的擦除
目标检测 :在原图中随机选择擦除区域; 在每个b-box上独立执行random erasing,即此时b-box相对于图像一样成为一个独立的个体; 在图像和目标b-box上随机选择擦除区域。
3) Cutout
解决的问题:目标遮挡问题
源码:https://github.com/uoguelph-mlrg/Cutout
论文:Improved Regularization of Convolutional Neural Networks with Cutout etworks with Cutout
方法一:在训练的每个epoch过程中,保存每张图片 对应的最大激活特征图(输出的最大特征激活点), 在下一个训练回合,对每张图片的最大激活图进行 上采样到和原图一样大,然后使用阈值划分为二值 图,盖在原图上再输入到cnn中进行训练。
方法二:选择一个固定大小的正方形区域,然后将该区域填充为0即可,为了避免全0区域对训练的影响,需要对数据中心归一化到0。并且,与random erasing不同的是,其以一定概率(50%)允许擦除区域不完全在原图像中。
数据中心归一化
目的:得到均值为0,标准差为1的服从标准正态分布的数据。可以取消由于量纲不同、自身变异或者数值相差较大所引起的误差。
方法:数值减去均值,再除以标准差
4) Hide-and-seek
论文名称:Hide-and-Seek: A Data Augmentation Technique for Weakly-Supervised Localization and Beyond
源码:https://github.com/kkanshul/Hide-and-Seek
不再通过随机位置确定patch的位置,而是将原图划分为若干份,然后对 划分的每一份依概率进行隐藏,并且每一张图片的隐藏区域都是随机的 例如,将224*224*3的图像划分为16份,每个patch为56*56*3,每个patch是否隐藏 的概率p=0.5.
5)GridMask
论文名称:GridMask Data Augmentation
代码:https://github.com/akuxcw/GridMask
目的: 为了避免连续区域的过度删除和保留的问题,即在 删除和保留图像上的区域信息之间达到合理的平衡, Cutout,Hide-and-Seek中依概率对划分区域进行隐 藏,很有可能造成目标全部删除或者全部保留的现 象。
详细的做法为:
1)Mixup
核心就是将两张图像和label采用比例混合,即图像融合
论文:mixup: BEYOND EMPIRICAL RISK MINIMIZATION
源码:https://github.com/hongyi-zhang/mixup mixup:
采用对不同类别之间进行建模的方式实现数据增强,方法为:两张图像线性混合时,label也 要线性混合 通用数据增强方法则是针对同一类做变换
算法核心:
(xi,yi)和(xj,yj)是从训练数据中随机抽取的两个样本,且λ∈[0,1]。因此,mixup通过结合先验知识,即特征向量的线性插值应导致相关标签的线性插值,来扩展训练分布
2) Mosaic
Mosaic是YOLOv4中提出的一种数据增强方式,属于Cutmix的扩展。Cutmix是两张图像的混合,即Cutout仅有一块区域,而Mosaic是4张图像的混合,一张图相当于4张图
主要有几个优点:
丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好。
减少GPU:可能会有人说,随机缩放,普通的数据增强也可以做,但作者考虑到很多人可能只有一个GPU,因此Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。