本文将给出一个简单的图片分类代码构建思路,以作入门参考。
MNIST数据集作为机器学习的经典基准测试,在深度学习时代显得过于简单了,Hinton在2017年提出的Capsule更是将错误率降低到了0.25%,可以说完全攻破了这一问题。同时考虑到一般的机器性能,Fashion MNIST是一个很好的基准测试选择,部分样本如下:
2017年提出的Random-Erasing方法可以达到95.8%的测试集正确率(注:原文报告的96.35%为在旧版FashionMNIST的表现),2018年亚马逊mxnet组提对已有的图像分类问题中的众多技巧做了综述,提供了很好的实践参考:Bag of Tricks for Image Classification with Convolutional Neural Network。下面本文将参考这些给出一个简单的Baseline。
构建模型
为选择合适模型,参考Random-Erasing一文的实验结果:
选用WideResNet 28-10 作为一个基准模型,同时参考 Bag of Tricks for Image Classification with Convolutional Neural Network 论文中提到的在residual block的跳层连接中使用平均池化进行下采样的做法(论文中的ResNet50-D),构建模型如下:
class
训练集与预处理
使用RandomErasing预处理(以集成到torchvision)
import
训练Pipeline
使用LabelSmooth技巧代替原生OneHot标注
import
开始训练
使用AdamW优化器,初始学习率0.001,每隔20个epoch降低学习率一次。
from
在GTX 1080Ti上大约130s一个epoch,训练2.5h即可得到结果,测试集上正确率达95.33%;效果相对差些,可以使用sgd训练200轮次达到更好效果,参照Random-Erasing。
不同实验设置对比: