在视觉文档分析任务中,尤其是手写数字识别(如MNIST数据集),数据的分布具有一定的不变性(invariance)。例如,手写数字的形状可能会因为书写者的笔迹、手部肌肉的微小抖动等因素而发生变化。这些变化可以被视为一种弹性变形。通过在训练数据中引入类似的弹性变形,可以使神经网络更好地学习到这种不变性,从而提高模型的泛化能力。 弹性变形论文最早是由Patrice等人在2003年ICDAR上发表: Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis 。
弹性形变的过程:
1️⃣随机生成位移场:首先生成随机的水平位移场 Δx(x,y) 和垂直位移场 Δy(x,y),其中每个像素的位移值是从均匀分布 [−1,+1] 中随机抽取的。
2️⃣平滑位移场:将生成的随机位移场与一个高斯核进行卷积,以平滑位移场。高斯核的标准差 σ 控制了变形的“弹性”程度:
- 当 σ 很大时,位移场接近于仿射变换(affine transformation)。
- 当 σ 很小时,位移场看起来更像随机噪声。
- 中等的 σ 值会产生类似弹性变形的效果。
论文中给出了示意图:
左上角的6:原始图像。 其余的6:不同 σ 的位移场应用于原始图像后得到的结果图像,右上角的6的 σ 最小。
3️⃣调整变形强度 :将平滑后的位移场乘以一个缩放因子 α,以控制变形的强度。
4️⃣应用于原有图像 : 有以下步骤
- 对于每个像素,根据位移场计算其新的位置。
- 如果新的位置不在整数坐标上,需要通过插值(如双线性插值)来计算该位置的灰度值。例如,假设像素A的新位置是 (1.75,−0.5),则可以通过双线性插值计算出该位置的灰度值。
弹性形变可以提高神经网络在cv任务中的性能,不仅增加了训练数据的多样性,还帮助神经网络学习输入数据的不变性,提高模型的泛化能力。
参考文章:
https://zhuanlan.zhihu.com/p/342274228?utm_id=0