最近在学习data augmentation的一些方法,在训练模型时经常碰到训练数据不够的情况,尤其是图像方面的模型,例如CNN。这时候对数据进行增强可以大大扩充训练集的规模,对模型的最终的准确度和泛化能力都有很大的帮助,有时甚至是决定性的作用
今天先学习了下图像方面的增强方法,主要是对图像进行小幅度的旋转,平移,缩放和错切,这4个方面的变换可以组成任意的affine transformation。实际应用时就是把原有数据的不同尺寸的图片缩放到相同尺寸,并添加随机的小幅度旋转,平移和错切来生成大量额外训练数据。
-
旋转
图片画的不是特别好,请轻吐槽
原有的点(X,Y)和坐标轴夹角 θ,旋转α角度后到达(X́ ,Ý ), 记(X,Y)的模为L, 那么:
L∗cos(θ)=XL∗sin(θ)=YL∗cos(θ+α)=X́ L∗sin(θ+α)=Ý
从三角公式可得:
L∗(cos(θ)∗cos(α)−sin(θ)∗sin(α))=X́ L∗(sin(θ)∗cos(α)+cos(θ)∗sin(α))=Ý
代入初始公式:
X∗cos(α)−Y∗sin(α)=X́ Y∗cos(α)+X∗sin(α)=Ý
最终得到:
⎡⎣⎢⎢⎢X́ Ý 1⎤⎦⎥⎥⎥=⎡⎣⎢⎢cos(α)sin(α)0−sin(α)cos(α)0001⎤⎦⎥⎥∗⎡⎣⎢⎢XY1⎤⎦⎥⎥
-
平移
平移比较简单
X+Xt=X́ Y+Yt=Ý
写成类似形式
⎡⎣⎢⎢⎢X́ Ý 1⎤⎦⎥⎥⎥=⎡⎣⎢⎢100010XtYt1⎤⎦⎥⎥∗⎡⎣⎢⎢XY1⎤⎦⎥⎥
- 缩放
缩放和平移类似,也比较简单
X∗Xzoom=X́ Y∗Yzoom=Ý
写成类似形式
⎡⎣⎢⎢⎢X́ Ý 1⎤⎦⎥⎥⎥=⎡⎣⎢⎢Xzoom000Yzoom0001⎤⎦⎥⎥∗⎡⎣⎢⎢XY1⎤⎦⎥⎥
- 错切
错切可以通过矩形变成平行四边形来理解,错切可以沿着任意一个坐标轴进行,图例是沿着Y轴进行错切
X+sin(θ)∗Y=X́ Y∗cos(θ)=Ý
写成类似形式
⎡⎣⎢⎢⎢X́ Ý 1⎤⎦⎥⎥⎥=⎡⎣⎢⎢100sin(θ)cos(θ)0001⎤⎦⎥⎥∗⎡⎣⎢⎢XY1⎤⎦⎥⎥
欢迎大家批评指正!