建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
093454tjmehwgqrskef4if.jpg 文字识别 百万调用 1元包年 2020年华为云AI实战营 华为云普惠AI

FantDing

发帖: 1粉丝: 0

级别 : 新手上路

发消息 + 关注

发表于2020-5-26 10:43:30 1009 4
直达本楼层的链接
楼主
显示全部楼层
[参赛经验分享] “华为云杯”2019 DL队伍优胜奖方案分享

大家好,我们是DL团队,很高兴可以在论坛和大家分享“华为云杯”2019人工智能创新应用大赛的一些经验。下面主要会从数据,模型,训练,后处理这四个方面进行介绍,也希望和大家能够多交流交流。 # 1. 数据 ## 1.1. 问题 数据方面主要存在的问题就是数据量少,不同类别数据不均衡 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202005/26/104211mof9rxqpmwkgfh2v.png) ## 1.2. 解决 - 爬虫:我们从主流的搜索引擎,包括百度,谷歌,必应,搜狗总共爬取了1万多张图片 - 关于脏数据的处理:我们先用官方数据集训练好的模型,对爬取的图片进行预测,初步选取出`分类错误`、`置信度低`的图片,再手动对这些数据进行筛选 - 数据增广: - RandAugment - 空间扭曲,视角变换。使用的是[Augmentor](https://github.com/mdbloice/Augmentor)这个库,可以比较方便地集成在pytorch中 - randomErase - CutMix - 没有使用RICAP:效果不好,可能是因为单张图片是裁剪,变换,再randomErase覆盖得到的,再通过RICAP裁剪的话,有效信息太少了,正则化强度太大 - 并且我们对于相似的类别都进行填充,使这些类别样本数基本相同 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202005/26/104229xotmjd7tv4qlcx5y.png) # 2. 模型选择 - 考虑到模型的精度和速度,我们选择了Efficientnet系列模型,由于过程中数据增广方式的不断变换,正则化强度越来越高,模型也从b4到b5,最终选择了b6 - 此外为了使得模型更好得捕捉全局空间信息,在b6模型较为靠前的feature map上加了两个Non Local空间注意力模块 # 3. 训练 > 一些关键的训练超参数如下 - LabelSmooth: 0.2 - batch size: 16 - optimizer:SGD + 动量 - learning rate:0.6 / 1024 * batch_size - warm up:3轮增加2倍 - 余弦退火:最小速率为6e-6;从第10轮开始每个20,40,60轮最大学习率降至一半 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202005/26/104242sqmfgcq2y7zo1ize.png) # 4. 后处理 - 图像分辨率的选择 - [Fixing the train-test resolution discrepancy](https://arxiv.org/abs/1906.06423)论文中提到:基于裁剪的数据增强方法会导致训练-测试时图片大小不匹配问题,测试时较大的输入会使准确率更高。下图可以看出对于相同模型(同一条线),当测试分辨率(红色三角)大于训练分辨率(黑色圆点)时,准确率会有提高。 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202005/26/104255u2juhjonjqx7zip6.png) - 因此我们使用420x420分辨率的图片作为输入,测试分辨率从450到500区间进行搜索,最终482x482能在本地验证集达到最大精度 - 【注】: 原论文中为了缓解上图中这种下降现象,会在大的分辨率上进行微调。比赛中这种方法并没有使用到 # 5. 总结 ## 5.1. 一些失败的尝试 - 由于训练的batch size为16并不大,batch norm效果可能会不好。因此尝试了一些替代品,比如`Switchable Whitening`, `Filter Response Normalization Layer`。使用前者会爆显存;使用后者,由于预训练参数改变了,训练起来很慢。之后想想,如果先训练好模型,再改变bn,再在训练集上训练,收敛速度应该会快很多。 - 使用具有难例挖掘思想的损失函数`OHEM`, `focal loss`都没有取得更好的效果 - [GridMask](https://arxiv.org/abs/2001.04086)数据增广方式,也没有提高精度。实验中也没有具体很细节地调试一些参数 ## 5.2. 感悟与经验 - 要积极跟进相关的论文和技术。比赛中使用的技术都是通过一些开源社区得来的,多多关注[github](https://github.com/)、[paperswithcode](https://paperswithcode.com/)这些网站 - 认真记录实验数据。本次比赛使用git来管理不同的版本,但是实验结果、超参数记录起来还是很麻烦的,因此我们丢失了很多实验内容,这对赛中的分析和赛后的总结都是非常不利的。大家可以关注一下这方面的开源工具。 - 比赛经验很重要。之前也和队友参加过华为云举办的垃圾分类比赛,由于是第一次参加比赛,走了很多弯路。最终二十多名止步于初赛。这次2019华为云杯复用了很多之前的方法,也认真看了大佬们的方案总结,节省了很多时间。大家多多参加社区举办的比赛,慢慢也会变好的 # 6. 代码&数据 由于决赛期间代码都是通过华为云提供计算资源跑的,现在手上没有本地资源,因此代码暂且分享在华为云论坛,如果关注人比较多后续本地化之后再传到[github](https://github.com/FantDing/HuaweiCloud_Cup_2019)上。 - 代码说明 - 比赛代码用到了很多开源库,包括但不限于[gen-efficientnet-pytorch](https://github.com/rwightman/gen-efficientnet-pytorch),[PyTorch-FilterResponseNormalizationLayer](https://github.com/yukkyo/PyTorch-FilterResponseNormalizationLayer)。在此说明,后续也会继续补充。 - 核心代码在`/src_final/main.py`文件中 - 数据说明:数据通过爬虫得到的,包括的搜索引擎有百度,搜狗,谷歌,必应。共1w多张图片,在`/train_val/train/`目录下 - 运行:参考`/README.md`文件 ⭐️代码和数据[点此下载](javascript:;)
举报
分享

分享文章到朋友圈

分享文章到微博

蓝书签

发帖: 65粉丝: 21

级别 : 金牌会员

发消息 + 关注

发表于2020-5-26 12:59:04
直达本楼层的链接
沙发
显示全部楼层

谢谢分享

点赞 评论 引用 举报

l番薯加奶

发帖: 14粉丝: 2

级别 : 版主

发消息 + 关注

发表于2020-5-27 09:42:43
直达本楼层的链接
板凳
显示全部楼层

学习了

点赞 评论 引用 举报

角动量

发帖: 79粉丝: 5

级别 : 外部版主

发消息 + 关注

发表于2020-5-28 09:56:45
直达本楼层的链接
地板
显示全部楼层

谢谢分享

点赞 评论 引用 举报

极客潇

发帖: 212粉丝: 16

级别 : 外部版主

发消息 + 关注

发表于2020-5-29 16:42:38
直达本楼层的链接
5#
显示全部楼层

干货满满

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册