论文阅读

细粒度分类 (FGVC) 是为了解决“类内分类”问题,有别于猫狗分类,它要解决的是 [这只狗是萨摩还是哈士奇] 这种问题。这类问题的特点是类别之间的区别较小,本人从事的瑕疵检测也是属于这一领域,有瑕疵的样本与正常样本往往区别很小,用普通的分类网络并不能达到很好的效果,这篇论文中介绍的网络亲测比普通的分类网络效果更好。

该论文提出了一种针对细粒度视觉分类任务的方法,采用基于弱监督学习的图像增强方法,结合注意力机制,这使得网络可以在不需要额外标注信息的情况下聚焦到那些图像中“有话语权”的部分,在细粒度分类问题中达到 state-of-art 的水准。

论文地址:https://arxiv.org/pdf/1901.09891.pdf​

论文的前面两小节,作者大概介绍了一下他们发这篇论文做的工作以及业界对 FGVC 问题的进展。精华从第三小节开始:

1.训练过程

上图是整个网络的训练过程,也是整片论文的核心。训练过程分成了**(A)Weakly Supervised Attention Learning** 以及 (B) Attention-Guided Data Augmentation 两部分,下面分别讲解这两部分

  • (A)Weakly Supervised Attention Learning

这一步是基于弱监督的注意力区域学习。首先,网络会对原始图片基础 CNN 进行特征提取,特征提取网络默认使用 inceptionV3,当然我们也可以用其他网络。提取到的特征文中称为 Feature maps,随后 Feature maps 经过一个kernel size 为 1 的卷积运算得到 Attention maps,就是说 Attention maps 是由 Feature maps 降维之后得到的,具体降到多少维度 M 是一个超参数可以自行配置。根据作者描述,M 个 Attention map 中每一个都代表了物体的一个位置例如鸟的头部,飞机的机翼等。后面网络还会根据 Attention map 对图片进行针对性的增强。

在得到 Feature maps 和 Attention maps 之后,作者受 Bilinear Pooling 的启发,提出了 Bilinear Attention Pooling,简称 BAP,如上图中所示,具体操作是将 Feature maps 与每个 channel 的 Attention map 按元素相乘,如下式。相乘之后再经过池化降维以及拼接操作获得最后的 Feature Matrix,这是最后线性分类层的输入。

Fk=Ak⊙F(k=1,2,...,M)F_k = A_k \odot F(k = 1, 2, ..., M) Fk​=Ak​⊙F(k=1,2,...,M)

  • (B) Attention-Guided Data Augmentation

这一步是用之前步骤获得的 Attention map 来指导数据增强,这会比普通的随机数据增强更有优势,将Attention map 提取的部位放大作为增强后的数据进行训练,为细粒度分类这一问题提供了有效的解决方式。

在上面的步骤中,我们获得了 M 个 Attention Map,网络会在 M 个中随机选取一个作为后面做数据增强的依据,至于为啥随机选取我的理解是第一可以增加鲁棒性,第二是可以对多个物体部位做到“雨露均沾”。随机选取一个 Attention Map 之后先对其归一化以方便后续的操作。

现在可以根据 Attention Map 生成 Crop Mask 了,Crop Mask 个人理解为截图的策略,文中策略是将Ak∗A_k^*Ak∗​ 中大于阈值 θc\theta _cθc​ 的元素置为 1 ,其他置为 0,这一块为 1 的区域就是我们细粒度分类中需要的细节区域,将它上采样至模型输入的图片大小,当作一个新的“样本”输入对模型进行训练,以强制模型“注意”这些细节区域。上面的 θc\theta _cθc​ 作为一个超参数也是可以根据具体问题进行调节的,文中默认为 0.5。

Attention Dropping 与 Attention Cropping 类似,将 Attention Map 中小于阈值 θd\theta_dθd​ 的元素置为 1 ,其他为 0 。加入这个操作是因为作者发现不同的 Attention Maps 可能聚焦了物体相同的部位,为了让模型也可以注意到其他位置,比如上图中的 Attention Map 是鸟的头部,该操作就可以让模型注意到鸟的其他部位,就像是在告诉模型,看看啊,除了头,身体长这样的也是某某种鸟啊。Attention Dropping 操作让模型提高了 0.6% 的准确率。

训练过程还有一个很新颖的点是损失函数的设计,除了计算预测结果的交叉熵损失之外,作者为了每次各个 Attention Map 可以找到相同的物体部位,还加入了特征图与部位中心的平方差之和作为惩罚项,如下公式,这就会让每个特征图固定到每个部位的中心。其中部位中心也是每次学习到的特征图来更新的,这种设计真的很妙!

2. 预测过程

预测过程依然分为两个部分,最终预测结果是两个子结果的平均值。

  1. 第一步,原始图片输入训练好的模型中得到属于各个类别的概率,以及 Attention Maps

  2. 第二步,将第一步中得到的 M 个 Attention Maps 取平均值,注意这里不是像训练过程里面随机取一个区域,我的理解是这里如果随机取的话,可能会导致模型不稳定,每次的预测结果不一样。下面就是与训练过程类似了,根据 Attention Maps 的平均值 AmA_mAm​ 画出截取框,将截取框上采样再放入训练好的网络中,得到“注意力区域”属于各个类别的概率。

  3. 最后一步将上面两步的结果取平均值得到最后的分类结果

后面作者对比了一下该算法与现有的算法在各个数据集上的表现:

可以看出,该算法在各个细粒度分类数据集上的表现都比现有的分类算法有所提升,大家如果有细粒度分类的任务也可以试试该算法。

代码

pytorch 实现的代码地址:https://github.com/GuYuc/WS-DAN.PyTorch

这个代码一个大神写的,有注释很容易看懂,跑起来也ok,如果有问题的话可以留言我们一起交流。

待续

后面想尝试将其中的特征提取网络换成 se_ResNeXt ,这也是在细粒度分类领域中常用的算法,如果结合的话也许会有更好的效果,试试才知道。

PS:欢迎关注我的个人微信公众号 [MachineLearning学习之路],每周一篇 CV 方向的论文解读奉上!

细粒度分类网络之WS-DAN论文阅读附代码相关推荐

  1. fishnet:论文阅读与代码理解

    fishnet:论文阅读与代码理解 一.论文概述 二.整体框架 三.代码理解 四.总结 fishnet论文地址:http://papers.nips.cc/paper/7356-fishnet-a-v ...

  2. OpenCV图像处理算法——7(《Contrast image correction method》 论文阅读及代码实现)

    <Contrast image correction method> 论文阅读及代码实现 以下内容大部分引自:https://cloud.tencent.com/developer/art ...

  3. 基于FPGA的一维卷积神经网络CNN的实现(三)训练网络搭建及参数导出(附代码)

    训练网络搭建 环境:Pytorch,Pycham,Matlab. 说明:该网络反向传播是通过软件方式生成,FPGA内部不进行反向传播计算. 该节通过Python获取训练数据集,并通过Pytorch框架 ...

  4. 细粒度分类网络 RACNN 论文翻译

    racnn论文翻译 论文原地址http://openaccess.thecvf.com/content_cvpr_2017/papers/Fu_Look_Closer_to_CVPR_2017_pap ...

  5. RA-CNN细粒度分类网络

    CVPR2017细粒度分类paper:Look Closer to See Better: Recurrent Attention Convolutional Neural Network for F ...

  6. paperswithcode 论文阅读与代码复现

    Machine Learning论文阅读与复现 神奇宝贝 1.丰富的论文合集 2.丰富的数据集 3.方法合集 4.论文解析 要是有一个cs科研er不知道这个宝藏网站,我都会伤心的,OK?https:/ ...

  7. [软件工程程序修复论文阅读]基于代码感知机器翻译的程序修复

    本文约2871字,预计阅读时长6分钟. 原文标题为CURE: Code-Aware Neural Machine Translation for Automatic Program Repair 论文 ...

  8. 九月学习笔记 (FM、一些论文阅读、代码)

    目录 2020.09.16 FM 因子分解机 2021.09.18 论文阅读 Interactive Recommender System via Knowledge Graph-enhanced R ...

  9. 收藏 | 精选11篇AI领域论文(附代码、数据集链接)

    来源:PaperWeekly 本文共1000字,建议阅读5分钟. 本文带你快速get近期精选论文的亮点和痛点,时刻紧跟AI前沿成果. 01 Large Scaled Relation Extracti ...

  10. GLMP:任务型对话中全局到局部的记忆指针网络 论文阅读及代码解析

    UPDATE 11.6.2020 复习代码,修正部分内容,清晰化部分表述.如发现问题,欢迎留言讨论! 文章目录 UPDATE GLMP ABSTRACT 1.INTRODUCTION 2.GLMP M ...

最新文章

  1. TensorFlow2020:如何使用Tensorflow.js执行计算机视觉应用程序?
  2. jndi weblogic mysql_Tomcat配置JNDI数据源连接池
  3. Leetcode 118. 杨辉三角 (每日一题 20210901)
  4. 02 jmeter 简单发送http请求
  5. 详细设计说明书示例_专利说明书常用句型汇总
  6. IPv6终于要取代IPv4了!阿里云将全面提供IPv6服务
  7. 【2016年第5期】数据科学人才的需求与培养
  8. vscode 构建Python ,和C++ 开发环境
  9. App自动化测试前期准备---android SDK配置
  10. opencv源代码之中的一个:cvboost.cpp
  11. 阿里云centos 7下安装jdk
  12. 兄弟连 php 下载,兄弟连新版ThinkPHP视频教程下载地址
  13. 转载-如果你不熟悉Material Design,请一口吃下这篇干货!
  14. ue4使用Niagara粒子实现下雨效果,使用蓝图调节雨量
  15. 数学建模的常用模型和方法
  16. 数组方法 + ES6中数组方法 + 数组的空位
  17. 英雄联盟怎么解除小窗口_英雄联盟手游ping信号怎么发 怎么给队友发信号_英雄联盟手游...
  18. oracle是否支持gb18030,将oracle字符集改成GB18030
  19. 程设作业:魔兽世界2:装备
  20. 网站favion.ico图标

热门文章

  1. SpringBoot+FreeMarker实现单据打印功能
  2. [工具]勒索病毒解密工具汇总
  3. Docker之Jitsi Meet视频会议服务
  4. arduino i2c EEPROM(AT24C02、AT24C08、AT24C16、AT24C32、AT24C64)驱动
  5. 用jsp代码完成购物车并且实现添加功能
  6. 主键中mappedBy的具体使用及其含义
  7. 三层交换机LLDP协议对 L2/L3端口,报文处理实验
  8. 电视端Android TV应用移植开发常见问题QA-Android TV 应用开发
  9. 三菱四节传送带梯形图_PLC控制四节传送带设计
  10. MVC2 扩展Models和自定义验证(学习笔记)