一、赛题背景分析及理解
1.1 赛题
结合大数据计算引擎Flink和深度学习计算平台Intel Analytics Zoo应用在图片识别场景,进行100类垃圾图片的分类,包括模型训练和模型预测。
1.2 赛题要求
在模型训练部分,可自定义算法模型,本地调试时可以从网上自行下载图片进行训练。此后用户上传预训练好的算法模型,天池平台会提供约6000张垃圾图片对模型进行训练,训练时长限制3小时以内。
在模型预测阶段,天池根据用户训练出的模型使用Flink实现实时垃圾图片分类。
分数计算方法:(500毫秒内识别准确图片数/总图片数)*100。
1.3 主要挑战
- 结合工程部署的算法大赛
- 类别间相似度极高
- 训练时间仅三小时
- 采用cpu训练
- List item
- 图片数量有限且类间差异大
二、核心思路
采用单模型,选择轻量化网络Xception,参数更少效率更高。
三阶段训练,参数的固定使得网络加快收敛。
数据增强,用到图像翻转和mixup,让有限的数据产生更多的等价数据。其中,mixup增加难样本易混淆样本的学习。
提出针对性的mix-focal loss改进mixup阶段的训练效果,解决数据不均衡。
采用Intel Analytics Zoo自带OpenCV极大降低了处理耗时;加入测试增强,提高预测准确率。
三、关键代码
3.1 python算法代码
3.1.1 模型的加载
采用的是imagenet预训练模型
模型采用Xception,网络结构定义如下:
3.1.2 加载训练数据及数据增强
主要位于
> generate_from_paths_and_labels(input_paths, labels, batch_size,
> input_size=(359,359),aug=False,mixup=False)
这个函数中,可以控制aug及mixup
该函数中定义了4中数据增强方式,随机水平翻转、随机旋转、随机缩放、cutout这四种方法(由于训练时间有限,只打开了水平翻转,如果有需要且训练时间充分可以打开下面的注释增加更多的增强)
![a123d5ba80e0d4d4d109202515c36814.png](https://img-blog.csdnimg.cn/img_convert/a123d5ba80e0d4d4d109202515c36814.png)
![1b5550264e7c20acc55e4aaa7873fcbb.png](https://img-blog.csdnimg.cn/img_convert/1b5550264e7c20acc55e4aaa7873fcbb.png)
3.1.3 loss函数的改进及设置
我们查看了训练数据的分布,绝大部分数据还是均衡的,因此采用softmax-loss即可,但是在mixup阶段,由于选取具有很大的偶然性,且训练的轮数有限,所以很容易出现数据不均衡的现象,因此我们改进了focal-loss如下:![e1d040f821a3cec818491e665f9febaf.png](https://img-blog.csdnimg.cn/img_convert/e1d040f821a3cec818491e665f9febaf.png)
3.1.4 训练的流程
三阶段训练,首先第一次训练固定预训练模型参数,只训练FC层,采用的学习率为1e-3![a52321605c3790be35b9f8383a6b428c.png](https://img-blog.csdnimg.cn/img_convert/a52321605c3790be35b9f8383a6b428c.png)
![a02eb3818b8d417cde4a159610d9441c.png](https://img-blog.csdnimg.cn/img_convert/a02eb3818b8d417cde4a159610d9441c.png)
![fe275f8f72ec9052d2a03934b28efd53.png](https://img-blog.csdnimg.cn/img_convert/fe275f8f72ec9052d2a03934b28efd53.png)
3.2 java工程代码
3.2.1 模型加载
使用model.doLoadTF加载模型:![a8476d726fcb5b43294427da6826992b.png](https://img-blog.csdnimg.cn/img_convert/a8476d726fcb5b43294427da6826992b.png)
![b46329956d7902e0cf1e544ff5e245b5.png](https://img-blog.csdnimg.cn/img_convert/b46329956d7902e0cf1e544ff5e245b5.png)
3.2.2 图片预处理
预处理过程包括图片读取,剪裁,HWC转CHW,float数组转为JTensor。测试时,我们采用了测试增强策略,所以对图片的预处理包括原图和翻转图。 图片读取和剪裁 经调试,我们发现ImageIO的方式读取图片字节数组很慢,取而代之的是使用zoo自带的openCV方式读取和剪裁图片,这种方式速度是很快的,大大减少了预处理过程的耗时。![e7ca9c5b3804e9791cf051e88b671514.png](https://img-blog.csdnimg.cn/img_convert/e7ca9c5b3804e9791cf051e88b671514.png)
![d5a99d8bac8e9ca99168e5bee99d2244.png](https://img-blog.csdnimg.cn/img_convert/d5a99d8bac8e9ca99168e5bee99d2244.png)
![8714c60473eafb5d629967503729e900.png](https://img-blog.csdnimg.cn/img_convert/8714c60473eafb5d629967503729e900.png)
3.2.3 模型预测
图片经过预处理后,输出JTensor数组,包括原图的JTensor和翻转图片的JTensor,转换为相应格式后调用model.predict方法分别对云图和翻转图进行预测。![71d0cd0ad920c2de956aa25aed6613e0.png](https://img-blog.csdnimg.cn/img_convert/71d0cd0ad920c2de956aa25aed6613e0.png)
3.2.4 结果输出
模型预测结果是各类别的预测概率,是一个float数组,首先对两组预测结果求和取平均,然后找出概率最大值,再根据有class_index加载出来的类别Map得到预测类别,并输出。![34be6ade4310a920d4d789b56e7e4e66.png](https://img-blog.csdnimg.cn/img_convert/34be6ade4310a920d4d789b56e7e4e66.png)
![858590c5a7d132cde57c29a98e09ea97.png](https://img-blog.csdnimg.cn/img_convert/858590c5a7d132cde57c29a98e09ea97.png)
![d094cd34ddb1d6bda2d932787331598d.png](https://img-blog.csdnimg.cn/img_convert/d094cd34ddb1d6bda2d932787331598d.png)
![1c95c0e3e6d52fa453408654aa63fc41.png](https://img-blog.csdnimg.cn/img_convert/1c95c0e3e6d52fa453408654aa63fc41.png)
四、比赛经验总结
4.1 算法方面
总的来说,三阶段训练中间穿插mixup的难样本学习能够带来性能很大的提升,同时在mixup阶段加入我们改进的focal-loss也会使得loss更加合理,也能带来一定的性能提升,同时解决了mixup阶段的样本不均衡问题。 我们整体的框架也是仅有单个模型,部署及训练都很方便。同时我们也尝试过换backbone,将Xception换成其他如inceptionResNetv2、resnet101等,总体性能差异并不大,基于Xception的模型采用了深度可分离卷积对运算非常友好,且模型较小,参数比resnet50模型还小,部署起来很方便,且训练收敛速度也较快,更加适合实际cpu场景的部署,鉴于实际部署需要,最终我们还是选择小模型Xception. 4.2 工程方面 总的来说,我们使用了zoo自带的openCV方式读取和剪裁图片,大大减少了预处理过程的耗时,进而使得大部分预测可以很好地控制在500ms以内;其次,我们采用了测试增强的策略,使得预测结果更加可信,虽然测试增强会增加测试耗时,但由于可以提高准确率,对于总体的分数还是有所提高。五、感想
本次比赛,我们深深的感受到了Flink和Intel Analytics Zoo在开发中的各种优势。Flink开发快捷,实现真正意义上的实时流处理;Analytics Zoo提供内置的特征工程操作,数据预处理更加高效便捷,Analytics Zoo同时提供大量高级的Pipelines API,通过少量代码便可构建起端到端的大数据分析加上深度学习的应用。 通过这次比赛,我们对大数据与机器学习的结合应用也有了更深刻的理解。在这个越来越智能的大数据时代,我们坚信Flink和Inter Analytics Zoo定能创造更大的价值。「 往期精彩」
深度学习基础知识汇总
![56da8fb0bb4d3c9db4493d14e98e085e.png](https://img-blog.csdnimg.cn/img_convert/56da8fb0bb4d3c9db4493d14e98e085e.png)
![de5def42b9e3dc4fbf69ce3835f8af59.png](https://img-blog.csdnimg.cn/img_convert/de5def42b9e3dc4fbf69ce3835f8af59.png)
![950decd6f88827d50dd1ac7cadc4211f.png](https://img-blog.csdnimg.cn/img_convert/950decd6f88827d50dd1ac7cadc4211f.png)
如果你在学习过程中,有看到一些比较优质的文章或Paper,或者你平时自己学习笔记和原创文章,请投稿到天池,让更多的人看到。除了精美的丰富的神秘天池大礼以及粮票奖励,更有现金大礼在等着你。
分享成功后你也可以通过下方钉钉群?主动联系我们的社区运营同学(钉钉号: modestt)
天池宝贝们有任何问题,可在戳“留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!
评论、在看、转发