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