![58e6a6d0049fffb465266c6f47641e3d.png](https://i-blog.csdnimg.cn/blog_migrate/7eedf0acb4b38cecd1326ddf98289ab9.jpeg)
深度学习训练tricks整理1
环境:pytorch1.4.0 + Ubuntu16.04
参考:
数据增强策略(一)mp.weixin.qq.com![5467719623aeb6604d8a867827495a7b.png](https://i-blog.csdnimg.cn/blog_migrate/4a6aab74bb414da2aa7aa9692111f42c.jpeg)
一、data_augmentation
基本的数据增强调用torchvision.transforms库中的就可以了,我整理一下其他的。
参考:
Pytorch 中的数据增强方式最全解释cloud.tencent.com1.1 单图操作(图像遮挡)
1.Cutout
对CNN 第一层的输入使用剪切方块Mask
论文参考:
Improved Regularization of Convolutional Neural Networks with Cutoutarxiv.org![27f9b38273249af38810f9b55befe6f3.png](https://i-blog.csdnimg.cn/blog_migrate/08c2424a5c4615e2eca7a956cfbdd1de.png)
代码链接:
https://github.com/uoguelph-mlrg/Cutoutgithub.com![982239536f8b5858fca51893eafad941.png](https://i-blog.csdnimg.cn/blog_migrate/025b22c832e38c3d20a2127c0252186e.jpeg)
2.Random Erasing
用随机值或训练集的平均像素值替换图像的区域
论文参考:
https://arxiv.org/abs/1708.04896arxiv.org代码参考:
https://github.com/zhunzhong07/Random-Erasing/blob/master/transforms.pygithub.com![6ff7e6ebabf27a1b669f060c297ac47a.png](https://i-blog.csdnimg.cn/blog_migrate/a62490b449c213133ac999251031257c.jpeg)
3.Hide-and-Seek
图像分割成一个由 SxS 图像补丁组成的网格,根据概率设置随机隐藏一些补丁,从而让模型学习整个对象的样子,而不是单独一块,比如不单独依赖动物的脸做识别。
论文参考:
Hide-and-Seek: Forcing a Network to be Meticulous for Weakly-supervised Object and Action Localizationarxiv.org![27f9b38273249af38810f9b55befe6f3.png](https://i-blog.csdnimg.cn/blog_migrate/08c2424a5c4615e2eca7a956cfbdd1de.png)
代码参考:
https://github.com/kkanshul/Hide-and-Seek/blob/master/hide_patch.pygithub.com![1140e1e9a7f1e4ba70b0237ecac32f8d.png](https://i-blog.csdnimg.cn/blog_migrate/c00cda13c75d7cd523abeb84f241b7f6.jpeg)
4.GridMask
将图像的区域隐藏在网格中,作用也是为了让模型学习对象的整个组成部分
论文参考:
https://arxiv.org/pdf/2001.04086.pdfarxiv.org代码参考:
https://github.com/Jia-Research-Lab/GridMask/blob/master/imagenet_grid/utils/grid.pygithub.com![58a6b62cbab9b1357caff47ffac6e834.png](https://i-blog.csdnimg.cn/blog_migrate/cc7539c2157589b346622b0ee6546f35.jpeg)
1.2 多图组合
1.Mixup
通过线性叠加两张图片生成新的图片,对应label也进行线性叠加用以训练
论文参考:
https://arxiv.org/abs/1710.09412arxiv.org理解与代码参考:
目标检测中图像增强,mixup 如何操作?www.zhihu.com![a0ea79e5bd763f206ab0dc6276d1825a.png](https://i-blog.csdnimg.cn/blog_migrate/a9e93efe350510f8ca67efd2c93567fe.jpeg)
![79971ca3ad0f735ff0cc3508b07b74c2.png](https://i-blog.csdnimg.cn/blog_migrate/bbc5db1eb15771ff4a57e8920dd5bb80.jpeg)
2.Cutmix
将另一个图像中的剪切部分粘贴到当前图像来进行图像增强,图像的剪切迫使模型学会根据大量的特征进行预测。
论文参考:
https://arxiv.org/abs/1905.04899arxiv.org代码参考:
https://github.com/clovaai/CutMix-PyTorch/blob/master/train.pygithub.com代码理解:
模型训练技巧--CutMix_Guo_Python的博客-CSDN博客_cutmix lossblog.csdn.net![f04d93773848807440e61e65a0b42a4f.png](https://i-blog.csdnimg.cn/blog_migrate/12f6f7538eb61686f96426b9b960c183.png)
![133404b2392fa1d51a3f9bbb3fe5fae0.png](https://i-blog.csdnimg.cn/blog_migrate/0942092b9a478382bf4a9c4edab02cbf.png)
3.Mosaic data augmentation(用于检测)
Cutmix中组合了两张图像,而在 Mosaic中使用四张训练图像按一定比例组合成一张图像,使模型学会在更小的范围内识别对象。其次还有助于显著减少对batch-size的需求。
代码参考:
https://zhuanlan.zhihu.com/p/163356279zhuanlan.zhihu.com![e241d7427acaac16d66ea8d020e9cfe4.png](https://i-blog.csdnimg.cn/blog_migrate/5e50d8bc149c952cb4f440f638d9aeca.jpeg)
二、Label Smoothing
- label smoothing
参考论文:
https://arxiv.org/pdf/1812.01187.pdfarxiv.org参考理解:
SoftMax原理介绍 及其 LabelSmooth优化blog.csdn.net![c74c570b178a0726d7bf6992e1819873.png](https://i-blog.csdnimg.cn/blog_migrate/0b025f9906603bfb4723f34b7763fd7b.jpeg)
![e2f6a51898caaf825430faac4ba74bcb.png](https://i-blog.csdnimg.cn/blog_migrate/fbcad6f9bf39bdf612c43613699ccd76.png)
在多分类训练任务中,输入图片经过神经网络的计算,会得到当前输入图片对应于各个类别的置信度分数,这些分数会被softmax进行归一化处理,最终得到当前输入图片属于每个类别的概率,最终在训练网络时,最小化预测概率和标签真实概率的交叉熵,从而得到最优的预测概率分布.
网络会驱使自身往正确标签和错误标签差值大的方向学习,在训练数据不足以表征所以的样本特征的情况下,这就会导致网络过拟合。label smoothing的提出就是为了解决上述问题。最早是在Inception v2中被提出,是一种正则化的策略。其通过"软化"传统的one-hot类型标签,使得在计算损失值时能够有效抑制过拟合现象。
代码:
class
三、学习率调整
warm up最早来自于这篇文章:https://arxiv.org/pdf/1706.02677.pdf 。根据这篇文章,我们一般只在前5个epoch使用warm up。consine learning rate来自于这篇文章:https://arxiv.org/pdf/1812.01187.pdf 。通常情况下,把warm up和consine learning rate一起使用会达到更好的效果。 代码实现:
class
四、蒸馏(distillation)
4.1 传统蒸馏
论文参考:
https://arxiv.org/pdf/1503.02531.pdfarxiv.org理解参考:
深度学习方法(十五):知识蒸馏(Distilling the Knowledge in a Neural Network),在线蒸馏blog.csdn.net![3fe1e2b5e93e18d5e7ae92e6870867e1.png](https://i-blog.csdnimg.cn/blog_migrate/25be1302456375e92bbdb7a9ae9b2d62.png)
![e2f6a51898caaf825430faac4ba74bcb.png](https://i-blog.csdnimg.cn/blog_migrate/fbcad6f9bf39bdf612c43613699ccd76.png)
![19f820665303f9c0b1d05f9a1844c5f3.png](https://i-blog.csdnimg.cn/blog_migrate/6111d1c1e8a7e834612cc62a68b8e155.jpeg)
训练的过程采用以下的步骤:
先用硬标签训练大型复杂网络(Teacher Net);
采用值大的T,经训练好的 TN 进行前向传播获得软标签;
分别采用值大的 T 和 T=1 两种情况,让小型网络(Student Net)获得两种不同的输出,加权计算两种交叉熵损失,训练SN;
采用训练好的 SN 预测类别。
2. 新的蒸馏方式:通道蒸馏
论文参考:
Channel Distillation: Channel-Wise Attention for Knowledge Distillationarxiv.org代码参考:
https://github.com/zhouzaida/channel-distillationgithub.com![a3ffcd7cf04d2826f6f264b94c45c7eb.png](https://i-blog.csdnimg.cn/blog_migrate/ab489b3fe45f729c846d0bae00732e98.png)