vb.net 图片水平翻转_Apache Flink极客挑战赛垃圾图片分类赛道冠军方案分享

一、赛题背景分析及理解

1.1 赛题

结合大数据计算引擎Flink和深度学习计算平台Intel Analytics Zoo应用在图片识别场景,进行100类垃圾图片的分类,包括模型训练和模型预测。

1.2 赛题要求

在模型训练部分,可自定义算法模型,本地调试时可以从网上自行下载图片进行训练。此后用户上传预训练好的算法模型,天池平台会提供约6000张垃圾图片对模型进行训练,训练时长限制3小时以内。

在模型预测阶段,天池根据用户训练出的模型使用Flink实现实时垃圾图片分类。

分数计算方法:(500毫秒内识别准确图片数/总图片数)*100。

1.3 主要挑战

  • 结合工程部署的算法大赛
  • 类别间相似度极高
  • 训练时间仅三小时
  • 采用cpu训练
  • List item
  • 图片数量有限且类间差异大

二、核心思路

  1. 采用单模型,选择轻量化网络Xception,参数更少效率更高。

  2. 三阶段训练,参数的固定使得网络加快收敛。

  3. 数据增强,用到图像翻转和mixup,让有限的数据产生更多的等价数据。其中,mixup增加难样本易混淆样本的学习。

  4. 提出针对性的mix-focal loss改进mixup阶段的训练效果,解决数据不均衡。

  5. 采用Intel Analytics Zoo自带OpenCV极大降低了处理耗时;加入测试增强,提高预测准确率。

三、关键代码

3.1 python算法代码

3.1.1 模型的加载

采用的是imagenet预训练模型450d6803cbff12a6a645343bff929bac.png

模型采用Xception,网络结构定义如下:f0af21e00babe561ba1e1f7bb614d3ac.png

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第二个是mixup的操作,也是我们提分的一大亮点 1b5550264e7c20acc55e4aaa7873fcbb.png 该部分代码按照beta分布来选取概率合并一个batch内的随机两张图片生成新的图片和label,将one-hot的label软化变成soft label,能使网络学习更加充分的特征,带有区分性的学习。通过参数mixup来设置。

3.1.3 loss函数的改进及设置

我们查看了训练数据的分布,绝大部分数据还是均衡的,因此采用softmax-loss即可,但是在mixup阶段,由于选取具有很大的偶然性,且训练的轮数有限,所以很容易出现数据不均衡的现象,因此我们改进了focal-loss如下: e1d040f821a3cec818491e665f9febaf.png

3.1.4 训练的流程

三阶段训练,首先第一次训练固定预训练模型参数,只训练FC层,采用的学习率为1e-3 a52321605c3790be35b9f8383a6b428c.png 第二阶段,放开所有的参数,学习率降为1e-4进行训练,开启mixup来进行更难的样本的学习,训练2个epoch,加深网络的特征区分能力,注释处的loss可选择improved-focal-loss或者传统的交叉熵,同时不再进行数据增强,也可选择开启,在训练时间充分的条件下可以涨点。 a02eb3818b8d417cde4a159610d9441c.png 第三阶段,关闭mixup和数据增强,学过了难的样本,再来让网络适配当前的任务,训练2个epoch,学习率仍然为1e-4,同样可以选择loss函数,如果上一阶段采用improved-focal-loss,则该阶段需要切换回交叉熵 fe275f8f72ec9052d2a03934b28efd53.png

3.2 java工程代码

3.2.1 模型加载

使用model.doLoadTF加载模型: a8476d726fcb5b43294427da6826992b.png传入的参数为: b46329956d7902e0cf1e544ff5e245b5.png

3.2.2 图片预处理

预处理过程包括图片读取,剪裁,HWC转CHW,float数组转为JTensor。测试时,我们采用了测试增强策略,所以对图片的预处理包括原图和翻转图。 图片读取和剪裁 经调试,我们发现ImageIO的方式读取图片字节数组很慢,取而代之的是使用zoo自带的openCV方式读取和剪裁图片,这种方式速度是很快的,大大减少了预处理过程的耗时。 e7ca9c5b3804e9791cf051e88b671514.pngHWC转CHW d5a99d8bac8e9ca99168e5bee99d2244.pngHWC转CHW过程中,对图片的像素值按照模型的预处理方式进行了处理。 8714c60473eafb5d629967503729e900.png

3.2.3 模型预测

图片经过预处理后,输出JTensor数组,包括原图的JTensor和翻转图片的JTensor,转换为相应格式后调用model.predict方法分别对云图和翻转图进行预测。 71d0cd0ad920c2de956aa25aed6613e0.png

3.2.4 结果输出

模型预测结果是各类别的预测概率,是一个float数组,首先对两组预测结果求和取平均,然后找出概率最大值,再根据有class_index加载出来的类别Map得到预测类别,并输出。 34be6ade4310a920d4d789b56e7e4e66.png求和取平均 858590c5a7d132cde57c29a98e09ea97.png找到最大概率值 d094cd34ddb1d6bda2d932787331598d.png由class_index加载出的类别Map 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定能创造更大的价值。

「 往期精彩4e2682b658f3e0c788d5d947c3ef23ec.gif

6c05c11a49a0b9df72f40d1639aee864.gif

6820285854f4133f01a196859bab5be0.png

深度学习基础知识汇总

56da8fb0bb4d3c9db4493d14e98e085e.png Apache Flink 零基础入门系列 de5def42b9e3dc4fbf69ce3835f8af59.png 天池大赛 950decd6f88827d50dd1ac7cadc4211f.png

如果你在学习过程中,有看到一些比较优质的文章或Paper,或者你平时自己学习笔记和原创文章,请投稿到天池,让更多的人看到。除了精美的丰富的神秘天池大礼以及粮票奖励,更有现金大礼在等着你。

分享成功后你也可以通过下方钉钉群?主动联系我们的社区运营同学(钉钉号: modestt)

8e0306851b822e981a1497156e44ae15.png

天池宝贝们有任何问题,可在戳“留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!

评论、在看、转发4e2682b658f3e0c788d5d947c3ef23ec.gif

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值