CNN图像分类改进方法
Contact me
- Blog -> https://cugtyt.github.io/blog/index
- Email -> cugtyt@qq.com
- GitHub -> Cugtyt@GitHub
重点参考博客, Bag of Tricks for Image Classification with Convolution Neural Networks论文, 和图像分类训练技巧包博客。
一 数据角度
1.1 手动数据增强
-
基础的图片旋转,剪切,平移,pytorch自带Transforms
-
数据增强库 albumentations
- 图片叠加操作, https://segmentfault.com/a/1190000015624467, https://www.cnblogs.com/mfryf/archive/2012/03/08/2385304.html
1.2 自动数据增强
- AdvProp, 尚无代码
二 模型角度
SOTA模型EfficientNet
待补充
三 Tricks
主要总结自Bag of Tricks for Image Classification with Convolution Neural Networks,和 fast.ai
3.1 增大batch-size
DON’T DECAY THE LEARNING RATE, INCREASE THE BATCH SIZE
- 等比例增大学习率,学习率预热, Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour
- 零γ初始化
-
混合精度训练 FP16, MIXED PRECISION TRAINING
实验对比结果
3.2 训练技巧
- 标签平滑,Label Smoothing
实验对比结果
3.3 其他
- 使用差分学习率,对于微调,先冻结预训练的网络层,产生了好的效果后,使用差分学习率改变前面的网络层
尝试使用较低学习率来训练神经网络,但是在每个批次中以指数形式增加,记录不同学习率对应的loss值:
找出学习率最高且Loss值仍在下降的值来确定最佳学习率。在上述情况中,该值将为0.01。
我们的小型FastAI团队使用Mish代替ReLU,打破了之前在FastAI全球排行榜上准确性得分记录的一部分。结合Ranger优化器,Mish激活,Flat + Cosine 退火和自注意力层,我们能够获得12个新的排行榜记录! ——来源
-
focal loss 和 GHM 用于解决类别不平衡的问题,相关博客
-
PReLU激活
四 细粒度分类
细粒度图像分类是在区分出基本类别的基础上,进行更精细的子类划分,如区分鸟的种类、车的款式、狗的品种等。细粒度图像相较于粗粒度图像具有更加相似的外观和特征,加之采集中存在姿态、视角、光照、遮挡、背景干扰等影响,导致数据呈现类间差异性大、类内差异性小的现象,从而使分类更加具有难度。与当前任务有一定的关联性。
-
综述文章 Deep learning for fine-grained image analysis: A survey,细粒度分类文章,代码,数据汇总
-
DCL 【CVPR 19】代码 Destruction and Construction Learning for Fine-grained Image Recognition
- TASN 【CVPR 19】 代码 模型较为复杂 Looking for the Devil in the Details: Learning Trilinear Attention Sampling Network for Fine-Grained Image Recognition
五 模型检查工具
- fast.ai Interpretation, 需要配合fastai库使用
查看分类错误的图像,混淆矩阵,以及CAM激活图
- Captum 模型分析库, 目前beta版