昨天刷arxiv的RSS看到的新文章,作者在zhihu上都能看到……
先过一遍,最近手头有其他事情,有机会再实践,基本都是论文内容罗列,应该是之前说的gluoncv里面的提升手段。
主要是三大块:
两大块:一个是增加batch size, 一个是半精度训练,额外工作基本都在batch size的增加上。
Large batch size
好处:
运算速度更快。
占用显存更少,这样就可以提升batch size,最终的结果还是训练的更快。
我试了下pytorch,同样的batch size速度提升的不明显,但是显存降低的是很明显。
所以加batch_size会额外再提升速度。
以上所有都用上,速度快很多,精度还能高那么一点点。

可以看到这里的提升,大概是Res50为0.3+的百分点。不知道如果batch size不变的话,这些都用上,会有多大提升(其实就是初始化和正则这两项)。

原始的bottleneck里面直接用了1x1 stride 2的卷积在降分辨率,所以换成在后面的那个3x3的卷积上用stride 2。
不过我看了下,torchvision里面的实现已经是这样了。
第一个7x7的卷积换成了3层3x3的卷积,也算常规操作。3x3有没有用group我没看到。
同样ResNet-B的思想,用在stride=2的block的短接上,先avg pooling,再conv1x1, stride=1这样不丢失信息。
参数量基本没什么变化,精度最终增加了一个点的样子,这个改进还是很明显的,不过,主要的提升是B方案带来的0.5,也就是说torchvision里面已经用了的一个结构,当然,另外两个还有0.5的提升。
由于都是针对ResNet的改进,其他的网络没有这个收益。

作为对比,torchvision的官方精度验证集Top-1是76.15。
自己的观察:
后面的迁移学习的试验结果就不多说了,结果自然是很不错。针对Segmentation的任务要注意下,不是所有的训练trick都有提升。