一、FiveCrop()和TenCrop()的使用场景
目前我见到的场景,往往是在测试的时候,将一张图片裁剪成10张,然后分别对10张进行预测,再取平均值得到最后的预测结果。比如《5. 实验2:对预训练的AlexNet进行finetune,实现对猫狗数据集二分类》以及VGG的finetune代码中。
VGG的论文中也使用了multi-crop测试的技巧,不过它更夸张,一张图片裁剪成了150张。见《4. 论文精读2:训练技巧、测试技巧、实验结果、总结》
虽然说在训练的时候,为了增加数据量而进行multiCrop也可以,而且理论和首先上与测试阶段没什么区别,但是在实际使用中,我还没有遇到过。
二、为什么要单独讲FiveCrop()和TenCrop()?
因为如果使用了multiCrop()这个技巧,transformer的写法不一样。
而且,一般来说,一张图像经过transformer之后,得到的是C*H*W的三维张量;但是有了multiCrop之后,得到的是一个ncrops*C*H*W的思维向量。这就导致,需要经过特殊处理才能送入到网络中。而且得到的结果需要对ncrops取平均。
所以很多地方不怎么用这个技巧,因为写起来比较麻烦。这也就是要单独讲一下的原因。
<