[CVPR 2021] Your “Flamingo“ is My “Bird“: Fine-Grained, or Not

Your “Flamingo” is My “Bird”

  • 对于如下图片,FGVC 的目标是让模型识别出 “flamingo”,但对于大部分业余爱好者而言,模型只需要将其分类为 “bird” 即可,不同的人群对 “细粒度” 的定义是不同的。为了满足具有不同专业知识的用户,作者修改了传统的 FGVC 设定,将其由单标签分类更改为了一个层次多粒度分类问题,例如对于如下图片,模型需要输出 “bird” ⇒ “Phoenicopteriformes” (order) ⇒ “Phoenicopteridae” (family) ⇒ “flamingo” (species)
    在这里插入图片描述
  • 为了验证多粒度分类的必要性,作者还招募了 50 个志愿者,基于 CUB-200-2011 鸟类数据集开展了一个 Human Study 来证明 (i) 现有 FGVC 模型输出的细粒度标签并不符合实际应用中人们对标签粒度的不同主观需求;(ii) 输出多粒度标签有助于满足不同人群的实际需求
    在这里插入图片描述

Method

Cooperation or Confrontation?

  • 层次多粒度分类模型可以看作是一个 multi-task 模型,因此作者首先设计了一个简单的实验来理解不同粒度的分类任务之间的相互作用关系。具体而言,作者给 CUB-200-2011 鸟类数据集中的每张图片都分配了 order 和 family 标签,训练时采用如下损失函数来进行 order 和 family 的层次多粒度分类任务:
    在这里插入图片描述其中, α , β \alpha,\beta α,β 用于控制粗细粒度分类任务的重要程度, y 1 , y 2 y^1,y^2 y1,y2 为 order 和 family 标签
  • 由图 (a) 可以看出,保持 α = 1 \alpha=1 α=1 并将 β \beta β 不断增大 (增大细粒度分类任务的重要程度),模型在粗粒度任务上的性能也得到了提升。由图 (b) 可以看出,保持 β = 1 \beta=1 β=1 并将 α \alpha α 不断增大 (增大粗粒度分类任务的重要程度),模型在细粒度任务上的性能有了下降。也就是说,粗粒度标签分类任务会损害细粒度标签分类任务的性能,但细粒度标签分类任务却有利于粗粒度标签分类任务
    在这里插入图片描述

Disentanglement and Reinforcement

  • 基于上述结论,作者提出了如下图所示模型,其中, x x x 为输入图像, F ( ⋅ ) \mathcal F(\cdot) F() 为 CNN backbone, f = F ( x ) f=\mathcal F(x) f=F(x) G 1 ( ⋅ ) , . . . , G K ( ⋅ ) \mathcal G_1(\cdot),...,\mathcal G_K(\cdot) G1(),...,GK() K K K 个分类器,用于输出 K K K 个不同粒度的预测结果 ( y ^ k = G k ( f k ) \hat y^k=G_k(f_k) y^k=Gk(fk)),每个分类器都采用交叉熵损失
    在这里插入图片描述
  • 为了缓解粗粒度预测任务对细粒度预测任务的消极影响,作者使用了 K K K 个不同的分类器来输出不同粒度的预测结果,并且将 f f f 分为 K K K 份,分别提供给 K K K 个分类器。为了让细粒度预测任务增强粗粒度预测任务的性能,作者让细粒度特征参与粗粒度预测任务。具体而言,对于 G k ( ⋅ ) \mathcal G_k(\cdot) Gk(),作者将 f k , f k + 1 , . . . , f K f_k,f_{k+1},...,f_K fk,fk+1,...,fK 进行连接作为分类器输入。为了避免粗粒度预测任务在反向传播时更新细粒度特征,作者限定细粒度特征参与粗粒度预测任务时不进行 BP
    在这里插入图片描述

Experiment

  • Datasets: 作者在 3 个常用的 FGVC 数据集上进行了实验,并通过追踪细粒度标签在 Wikipedia 网页上的父结点来为数据集中的图片构建标签层次。(i) 对于 CUB-200-2011 鸟类数据集,作者将数据集标签扩充为了 3 层的标签层次,包括 13 orders (e.g., “Passeriformes” and “Anseriformes”), 38 families (e.g., “Icteridae” and “Cardinalidae” ) and 200 species (e.g., “Brewer Blackbird” and “Red winged Black-bird”);(ii) 对于 FGVC-Aircraft 数据集,作者直接采用了数据集中的 3 层标签层次,包括 30 makers (e.g., “Boe-ing” and “Douglas Aircraft Company”), 70 families (e.g.,“ Boeing 767”,“ Boeing 777”), and 100 models (e.g., “767-200”, “767-300”);(iii) 对于 Stanford Cars 数据集,作者将数据集标签扩充为了 2 层的标签层次,包括 9 car types (e.g., “Cab” and “SUV”) and 196 specific models (e.g., “Cadillac Escalade EXT Crew Cab 2007” and “Chevrolet Avalanche Crew Cab 2012”)
  • 作者基于新构建的数据集开展了层次多粒度分类实验,backbone 采用 ResNet50,avg_acc 表示模型在不同粒度分类任务上的平均精度。Vanilla single: one single shared network backbone with multiple classification heads appended to the end;Vanilla multi: one independent network backbone for each label prediction;Ours single: 将作者提出的 Disentanglement 技巧用于 Vanilla single;Ours: 作者提出的完整模型;Ours MC, Ours NTS, Ours PMG:作者模型采用了不同的 SOTA FGVC 模型作为 backbone。结果表明,新模型性能好于所有 baseline 模型,并且其作为一种通用方法,当使用性能更强的 backbone 时性能还能进一步提升。并且注意到,Vanilla multi 在细粒度分类任务上表现很好,而粗粒度任务上表现不佳,这进一步说明了分解不同粒度的分类任务以及用细粒度分类任务增强粗粒度分类任务性能的重要性
    在这里插入图片描述
  • 作者在传统的 FGVC 设置下也进行了实验 (与上面的实验设置相比,仅仅是把分辨率设置为了 448 × 448 448\times448 448×448),通过使用 PMG 作为 backbone,新模型达到了新的 SOTA
    在这里插入图片描述
  • 作者最后还进行了一些可视化工作,就是利用 Grad-Cam 通过计算不同粒度的分类器损失在图像 x x x 上的梯度来可视化分类器关注的区域。可以看到,与 Vanilla Single 不同,作者提出的模型中,越细粒度的分类器关注的区域大小越小,这说明模型将不同粒度的分类任务进行了解耦
    在这里插入图片描述

Discussions

在这里插入图片描述

References

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值