在我看来,随机裁剪有助于数据增长的原因是,在保留图像语义的同时(除非您选择了一个非常糟糕的裁剪,但我们假设您设置了随机裁剪,以便这是非常低的概率),您在conv网中获得的激活值是不同的。因此,实际上我们的conv网络学习将更广泛的空间激活统计信息与某个类标签相关联,因此通过随机裁剪进行数据增强有助于提高我们的特征检测器在conv网络中的鲁棒性。同样地,随机裁剪会产生不同的中间激活值,并产生不同的前向传递,因此它就像一个“新的训练点”
这也不是小事。看看最近关于神经网络中的对抗性例子的研究(相对于AlexNet的大小来说比较浅)。当我们通过一个顶部带有softmax分类器的神经网络时,从语义上看大致相同的图像,我们可以得到完全不同的类概率。因此,从语义的角度来看,细微的变化最终会使不同的转发通过conv网。有关详细信息,请参见Intriguing properties of neural networks。
为了回答你问题的最后一部分:我通常只做我自己的随机裁剪脚本。假设我的图像是(3256256)(3个RGB通道,256x256空间大小),你可以通过随机选择一个有效的角点来编码一个循环,这个循环将对你的图像进行224x224次随机裁剪。所以我通常会计算一个有效的角点数组,如果我想随机抽取10个角点,我会从这个集合中随机抽取10个不同的角点,比如我选择(x0,y0)作为我的左上角点,我会选择裁剪X[x0:x0+224,y0:y0+224],就像这样。我个人喜欢从一组预先计算好的有效角点中随机选择,而不是一次随机选择一个角点,因为这样我保证不会得到重复的作物,尽管在现实中,这可能是低概率的。