华为云·垃圾分类亚军方案赛方案分享(pytorch图像分类)

qlmx
qlmx
qlmx
50
文章
2
评论
2020年2月7日02:26:34 1 3,642阅读8分39秒

导语

结束比赛有几天了,这几天一直在处理前段时间堆积的工作,今天得空对自己的方案进行梳理总结。今年7月多结束魔镜杯后,将之前的内容整理了一下,刚好看到华为垃圾分类比赛,由于我的工作内容还是偏图像,所以就想玩玩,有幸拿了一个亚军。

这次比赛是基于华为云的modelArts平台,免费的gpu硬件环境,全新的结果提交验证方法。感谢组织方华为云,喜欢打比赛的小伙伴也可以多留意该平台,会不定期举办各种数据类竞赛。这次我们队共有三人:谢赋(老虎)、舒欣(up)和文瑞(QLMX),大家交流分工合作,才能不断奋力前进。这次分享主要是针对决赛阶段,该阶段要求模型的推理时间不能大于100ms,不能使用融合和TTA。故关于模型融合和TTA技巧,本次不会涉及到,后面还会有图像分类的专题分享。

一 解题思路

  1. 拿到数据后,我们首先做了数据分析。统计数据样本分布,尺寸分布,图片形态等,基于分析可以做一些针对性的数据预处理算法,对后期的模型训练会有很大的帮助。
  2. 选择好的baseline。需要不断的尝试各种现有的网络结构,进行结果对比,挑选出适合该网络的模型结构,然后基于该模型进行不断的调参,调试出性能较好的参数。
  3. 做结果验证,分析badcase。将上述模型在验证集上做结果验证,找出错误样本,分析出错原因,然后针对性的调整网络和数据。
  4. 基于新数据和模型,再次进行模型调优

二 数据分析(EDA)

  • 原始共有43个类别,共计19459张图片。图像类别数据不均衡,其中较少数据为类别3(牙签)、类别40(毛巾)和类别41(饮料盒);数据较多的为类别11(菜叶根)和类别21(插头电线)。

华为云·垃圾分类亚军方案赛方案分享(pytorch图像分类)

  • 图片长宽比有一定的差异性,下图是h/w比例数据分布图(只显示该类数量大于100的比例),长宽比大多数集中于1,后来模型输入尺寸设为1:1

    华为云·垃圾分类亚军方案赛方案分享(pytorch图像分类)

基于分析对图像进行简单的数据增强操作,包括图像的等比填充缩放裁剪,水平翻转、高斯噪声等。其中第一项目,对结果影响较大。这里是先将原始图像以最大边为基准做等比缩放,不足的地方填充0,这里缩放后的边是最终输入边长的256/224倍,然后在进行剪切,这里输入模型的尺寸为288*288。下图是对比图,如果不进行等比缩放,最终的结果是最右边的图片,最后的输出就极易识别为筷子。

华为云·垃圾分类亚军方案赛方案分享(pytorch图像分类)

等比缩放的代码如下:

class Resize(object):
    def __init__(self, size, interpolation=Image.BILINEAR):
        self.size = size
        self.interpolation = interpolation

    def __call__(self, img):
        # padding
        ratio = self.size[0] / self.size[1]
        w, h = img.size
        if w / h < ratio:
            t = int(h * ratio)
            w_padding = (t - w) // 2
            img = img.crop((-w_padding, 0, w+w_padding, h))
        else:
            t = int(w / ratio)
            h_padding = (t - h) // 2
            img = img.crop((0, -h_padding, w, h+h_padding))

        img = img.resize(self.size, self.interpolation)

        return img

三 模型设计与训练

首先对原始的数据进行分组,9:1的比例分为训练集和测试集,基于此做线下验证。

模型结构 baseline准确率
se_resnext50_32x4d 93.10
se_resnext101_32x4d 93.59
Senet154 94.38
resnext50_32*8d 95.01
resnext101_32*16d_wsl 95.56
resnext101_32*32d_wsl 95.32
Pnasnet5large 94.38
efficientnet-b7 95.20

基于上述结果验证,采用了resnext101_32*16d_wsl网络作为基本的baseline,进行结果调优,最后的网络结构如下图,红色的部分为调整的网络部分,模型最后全连接层添加dropout降低过拟合,首层卷积添加cbam注意力机制增强特征表征能力,关注重要特征抑制不必要特征。基于此网络,现在训练20个epoch就能收敛到最高分,训练时间大概5个小时左右。华为云·垃圾分类亚军方案赛方案分享(pytorch图像分类)

在模型参数选择和调整方面,尝试了很多参数,针对损失函数分别尝试了CrossEntropyLoss和focal loss, 优化函数:adabound、Radam、adam、sgd和sgd + warm up, 其中adabound在起始收敛的速度较快,但是最终还是sgd的网络精度较高。学习率优化方面使用了ReduceLROnPlateau和定值优化两种方法,定值优化需要根据实验选择适合的降分点。并且也要针对不同的模型调整学习率,最终采用的参数如下:

  • 使用预训练参数
  • 优化函数: sgd
  • 学习率:0.001
  • 学习率优化:ReduceLROnPlateau
  • 自己设置的网络层,初始学习率是预加载参数网络的5倍

四 结果分析

在验证集上做结果验证,得到下图所示的混淆矩阵。基于此分析各类别预测结果分布,分析badcase,采取措施进行数据扩充或数据增强工作。

华为云·垃圾分类亚军方案赛方案分享(pytorch图像分类)

五 展望

  • 对网络结果中的全部残差块添加时间和空间注意力机制
  • 对模型进行量化和剪枝,在保证精度的同时提高模型速度
  • 转化为二分类问题,使用人脸的arcfaceloss + triplet loss + focal loss联合loss优化
  • 在落地的场景中增加反馈机制,收集用户的反馈信息,对模型进行在线训练,不断增加训练数据优化模型。

参考文献

  • Robustness properties of Facebook’s ResNeXtWSL models
  • FaceNet: A Unified Embedding for Face Recognition and Clustering
  • Focal Loss for Dense Object Detection

感悟与建议

  • 想要做一件事情,要好好的坚持下去,坚持到最后都会有所收获;
  • 结束一件任务,要做好总结,无论有没有获得名次;
  • 报着真诚的态度向别人学习,学习别人的方法。比赛这种东西,即使第一次没有得奖,多参加两次,多熬两个夜就会得奖了,大多数比赛技巧性都比较强。
  • 基础知识很重要,真正的牛人基础都会比较好,共勉!!!

如果想要获取开源代码,关注微信公众号:AI成长社,回复:垃圾分类

继续阅读
  • 我的微信小程序
  • 这是我的微信小程序扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
qlmx
  • 本文由 发表于 2020年2月7日02:26:34
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
推荐系统工业界召回论文调研 深度学习

推荐系统工业界召回论文调研

1. 2020_KDD_ComiRec 论文综述:主要是应用于召回,是序列化推荐的解决方案。提出一个新的序列化推荐模块-ComiRec 解决问题: 聚焦匹配问题,提升召回的性能,也就是候选物的精度 解...
详细图像数据集增强原理的python代码 计算机视觉

详细图像数据集增强原理的python代码

导读 在深度学习时代,数据的规模越大、质量越高,模型就能够拥有更好的泛化能力,数据直接决定了模型学习的上限。然而在实际工程中,采集的数据很难覆盖全部的场景,比如图像的光照条件,同一场景拍摄的图片可能由...
python磨皮祛斑了解一下 计算机视觉

python磨皮祛斑了解一下

前言 在深度学习的加持下,计算机视觉进入了快车道,在使用深度的同时,自己可做的东西就比较局限,为了更深入的学习计算机视觉,对传统数字图像处理做了一下回顾。本文分享的就是基于传统的数字图像滤波技术:高斯...
CRNN翻译 深度学习

CRNN翻译

摘要 ​ 基于图像的序列识别一直是计算机视觉中长期存在的研究课题。在本文中,我们研究了场景文本识别的问题,这是基于图像的序列识别中最重要和最具挑战性的任务之一。提出了一种整合 特征提取,序列建模和转录...
匿名

发表评论 取消回复

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:1   其中:访客  0   博主  0
    • 小白 小白 1

      谢谢分享!!