[2021-CVPR] Fine-grained Angular Contrastive Learning with Coarse Labels 论文简析

[2021-CVPR] Fine-grained Angular Contrastive Learning with Coarse Labels 论文简析

论文地址:https://arxiv.org/abs/2012.03515

代码地址:https://github.com/guybuk/ANCOR

首先通俗地介绍一下细粒度(fine-grained),细粒度分类是指在原来粗分类的基础上再对子类进行更细致的分类。举个例子,图中有一只狗,粗(coarse)分类的分类结果即是一只狗,而细粒度的分类结果则会细致到这只狗是什么品种,是比格,柯利还是哈巴狗。

在这里插入图片描述

本文提出了一个新任务C2FS(Coarse-to-Fine Few-Shot),即由粗粒度转向细粒度的小样本的分类任务,在训练阶段使用粗类样本进行训练,在测试阶段经过细粒度子类小样本数据集的微调之后测试细粒度子类的分类准确度。

并提出了一个针对该任务的网络架构,使用有监督学习对样本进行粗分类,使用自监督对比学习(文中用的是MoCo V2)进行细粒度分类,并针对两种分类训练时损失函数会冲突的问题提出了Angular Normalization模块,将自监督的infoNCE损失转移到角度空间,从而提升两个分类任务之间损失函数的协同性。

整体网络结构如下:

在这里插入图片描述

其中针对粗分类的任务,根据粗类标签进行有监督学习,来将粗类之间分开,损失函数就是我们熟悉的交叉熵。而针对粗类的子类进行细粒度分类时,作者使用了最近大火的自监督对比学习,具体使用的是何恺明团队的MoCo V2,使得属于同一个粗类内的每个不同的实例分开有一定距离,损失函数是最近对比学习最常用的infoNCE,但针对两损失的冲突问题,对infoNCE的输入进行了一些改动。

具体流程是:一张图片(实际上训练是在batch内进行的,这点对于对比学习来说很关键,上图简明起见用一张图片表示)输入进来以后,经过两种不同的数据扩增方法(Aug. 1,2)得到同一张原图的两张图片 xqx_qxqxkx_kxk,然后其中 xqx_qxq 经过backbone B\mathcal{B}B (就是MoCo中的encoder_q)和MLP E\mathcal{E}E 得到 xqx_qxq 的特征表示 qqq ,这个 qqq 会经过一个分类器(全连接+Softmax)得到粗类的预测概率,而粗类分类的训练是有标签的,可以直接做交叉熵损失,这一部分是有监督的粗类分类训练。

再说两种数据扩增得到另一张图片 xkx_kxk ,它会经过动量更新的(详见MoCo)Bk\mathcal{B}_kBkEk\mathcal{E}_kEk ,得到特征表示 k+k_+k+k+k_+k+ 会在对比学习中与 qqq 组成正对(positive pair),而从MoCo维护的队列中拿到的与输入图片属于同一粗类(比如图中的狗类)的不同图片样本 k−k_-k 会和 qqq 组成负对(negative pair),从而根据 qqqk+k_+k+k−k_-k 计算infoNCE损失进行对比学习,来使得同一粗类内的不同样本也有一定的距离,方便后面测试时进行小样本的细粒度分类学习。

至此看起来一切顺其自然,十分合理。但是作者敏锐地发现了一个重要问题:如下图上半部分所示,粗类分类的有监督CE损失会使得同一粗类的每个样本都尽量靠到一起,而对比学习infoNCE损失又会使得粗类中的每个样本有一定的距离,也就是说这两个损失会有冲突存在。

在这里插入图片描述

针对这个问题,作者提出了Angular Normalization(AN)模块,来增强两个损失之间的协同性(synergy)。

首先说明一些符号:输入图片 III ,它的特征表示 qqq ,它所属的粗类 yyy ,分类器 CCC 的参数 WWW 的第 yyyWyW_yWy ,分类器 CCCyyy 类的logit WyqW_yqWyq

这样,要想使CE损失 LCE=(C(q),y)\mathcal{L}_{CE}=(C(q),y)LCE=(C(q),y) 最小,要 WyqW_yqWyq 最大且 Wi≠yqW_{i\neq y}qWi=yq 最小,也就是 qqq (单位向量,embedder E\mathcal{E}E 的最后再经过L2 norm)转到 WyW_yWy 的方向,这对所有的 yyy 类的图片都是相同的,会使他们倒向(collapse to)最接近 WyW_yWy 的单位向量Wy∣∣Wy∣∣\frac{W_y}{||W_y||}WyWy 。但是这种倒向(collapse)与 y 类特定的 InfoNCE 对比损失 Lcont(q,k−,k+)\mathcal{L}_cont(q,k_-,k_+)Lcont(q,k,k+) 存在冲突,后者试图将 yyy 类的样本彼此之间推开。

作者提出的解决方法即是AN,定义 yyy 类的angular normalzation:
A(x,W,y)=∠x=x∣∣x∣∣−Wy∣∣Wy∣∣∣∣x∣∣x∣∣−Wy∣∣Wy∣∣∣∣\mathcal{A}(x,W,y)=\angle x = \frac{\frac{x}{||x||}-\frac{W_y}{||W_y||}}{||\frac{x}{||x||}-\frac{W_y}{||W_y||}||} A(x,W,y)=x=xxWyWyxxWyWy
这就将单位向量 x∣∣x∣∣\frac{x}{||x||}xx 转换为了表示其与 Wy∣∣Wy∣∣\frac{W_y}{||W_y||}WyWy 的角度的单位向量。

根据以上定义,我们将 Lcont\mathcal{L}_{cont}Lcont 中的 q,k−,k+q,k_-,k_+q,k,k+ 分别替换为它们的 yyy 类angular normalization的形式:
∠q=A(q,W,y)\angle{q}=\mathcal{A}(q,W,y) q=A(q,W,y)
∠k−=A(k−,W,y)\angle{k_-}=\mathcal{A}(k_-,W,y) k=A(k,W,y)
∠k+=A(k+,W,y)\angle{k_+}=\mathcal{A}(k_+,W,y) k+=A(k+,W,y)

从而我们损失函数的最终形式就是:
L=LCE(C(y),y)+Lcont(∠q,∠k+,∠k−)\mathcal{L}=\mathcal{L}_{CE}(C(y),y)+\mathcal{L}_{cont}(\angle{q},\angle{k_+},\angle{k_-}) L=LCE(C(y),y)+Lcont(q,k+,k)
如上图下方所示,改进后的AN形式的 Lcont\mathcal{L}_{cont}Lcont 运作在角度空间中围绕着 Wy∣∣Wy∣∣\frac{W_y}{||W_y||}WyWy 的“轨道"(orbit)上。这样就不会干扰到 LCE\mathcal{L}_{CE}LCE 损失使倒向(collapse)Wy∣∣Wy∣∣\frac{W_y}{||W_y||}WyWy,即不会与CE损失产生冲突,从而提升了两损失的协同性。

AN一个额外的好处是它忽视了(在normalize之后)到权重向量的距离,这样可以保护 Lcont\mathcal{L}_{cont}Lcont 不会收到不同子类间“松紧”程度的影响。

实验部分有兴趣可以去查看原文。

作为2021 CVPR的 oral,本文的质量还是很足的,一个颇有意思的新任务C2FS,并结合了一些最新的方法提出了一个比较合理的解决方案,还针对这个框架存在的一个关键问题有一个不错的解决方案。

有理解不对的地方欢迎指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 论文简析

[2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 论文简析 论文链接:https://arxiv.org/abs/1911.11419 本文探索从自监督的角度进行美学评估。基于一个基本的动机:一个好的美学特征表示应该能够辨别出不同的…

java9 堆外内存_java堆外内存泄漏排查

当考虑Java中的内存泄漏时,我们通常会考虑Java堆泄漏,即在堆中分配的对象没有被垃圾收集。这是我在处理一台服务器内存泄漏时的想法,但我即将经历的远超出我的想象。症状:运行Vertx应用程序(没有交换分区)的生产服务器被Linux内存…

[2020-CVPR] Dynamic Region-Aware Convolution 论文简析

[2020-CVPR] Dynamic Region-Aware Convolution 论文简析 论文地址:https://arxiv.org/abs/2003.12243 参考代码地址(非官方):https://github.com/shallowtoil/DRConv-PyTorch 代码笔者自己试了一下,应该是可以的&…

mmdetection 使用笔记 01: 安装与简单的推理demo

mmdetection 使用笔记 01: 安装与简单的推理demo mmdetection是来自商汤和港中文联合实验室openmmlab推出的目标检测工具包,与其同系列的还有基础视觉包mmcv,图像分类mmclassification,还有mmaction,mmaction2等等。 今天第一次…

php无限评论回复_php实现无限级评论功能_后端开发

php去除数组的键名的方法_后端开发在php中可以使用“array_values()”函数去除数组的键名,该函数返回包含数组中所有的值的数组,其语法是“array_values(array)”,其参数“array”表示规定的数组,返回值是包含数组中所有的值的数组…

错误类型、混淆矩阵及目标检测常用评价指标

目标检测常用评价指标 本文主要参考陈恺大佬在B站商汤账号的介绍mmdetection的视频。 检测结果的正确/错误类型 真阳性(Ture Positive):算法检测到了某类物体(Positive),而实际图中也确实有这个物体&…

使用yolov5训练自己的目标检测数据集

使用yolov5训练自己的目标检测数据集 yolov4出来后不久,又出现了yolov5,没有论文。虽然作者没有放上和yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的。很多人考虑到YOLOv5的创新性不足,对算法是否能够进化&#xf…

php获取h1,jQuery获取h1-h6标题元素值方法实例

本文主要介绍了jQuery实现获取h1-h6标题元素值的方法,涉及$(":header")选择器操作h1-h6元素及事件响应相关技巧,需要的朋友可以参考下,希望能帮助到大家。1、问题背景:查找到h1-h6,并遍历它们,打印出内容2、实现代码&am…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析 论文:https://arxiv.org/abs/2104.00323 代码:https://github.com/dvlab-research/JigsawClustering 总结 本文提出了一种单批次&#xff0…

matlab legend 分块,matlab legend 分块!

matlab legend 分块!(2013-03-26 18:07:38)%%%压差clc;clear all;figure(55);set (gcf,Position,[116 123 275 210],color,w);P[25 26 27 28 29 30 31 32 33 34 35];%理论q0.00006*pi*28*P*10^(6)*0.03^3/(12*0.028448*5);q1110.00006*pi*28*P*10^(6)*0.03^3/(12*0.…

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化)

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化) 本文主要就少opencv中两个函数polylines和fillPoly分别用于绘制多边形框或区域填充,并会会以常见用途分割任务mask(还是笔者…

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单。对其做各种改进的顶会论文也是层出不穷,本文将聚焦于各种最新的视觉trans…

mysql 分析查询语句,MySQL教程之SQL语句分析查询优化

怎么获取有功能问题的SQL1、经过用户反应获取存在功能问题的SQL2、经过慢查询日志获取功能问题的SQL3、实时获取存在功能问题的SQL运用慢查询日志获取有功能问题的SQL首要介绍下慢查询相关的参数1、slow_query_log 发动定制记载慢查询日志设置的办法,能够经过MySQL指…

树莓派摄像头基础配置及测试

树莓派摄像头基础配置 step 1 硬件连接 硬件连接,注意不要接反了,排线蓝色一段朝向网口的方向。(笔者的设备是树莓派4B) step 2 安装raspi-config 安装 raspi-config raspi-config在raspbian中是预装的,而在kali、…

使用百度云智能SDK和树莓派搭建简易的人脸识别系统 Python语言版

硬件 树莓派4B一个CSI摄像头一个 笔者使用的是树莓派4B和CSI摄像头,但是树莓派3和USB摄像头等相似设备均可。 百度云智能设置 Step 1 登录 百度云智能 网址https://cloud.baidu.com/ 首先登录百度账号,与百度云、百度贴吧等互通,可直接…

xp搭建 php环境,windows xp 下 LAMP环境搭建

1. apache安装步骤如下图在浏览器中输入:localhost,出现下面页面说明已成功安装apache。2. mysql安装如下图显示在运行里面输入cmd ,然后连接测试mysql ,如图所示:3. php安装(1)将php压缩包解压到安装路径中的php目录…

C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

C中的虚函数(表)实现机制以及用C语言对其进行的模拟实现 声明:本文非博主原创,转自https://blog.twofei.com/496/,博主读后受益良多,特地转载,一是希望好文能有更多人看到,二是为了日后自己查阅。 前言 …

C++中数组和指针的关系(区别)详解

C中数组和指针的关系(区别)详解 本文转自:http://c.biancheng.net/view/1472.html 博主在阅读后将文中几个知识点提出来放在前面: 没有方括号和下标的数组名称实际上代表数组的起始地址,这意味着数组名称实际上就是…

安装php独立环境,0507-php独立环境的安装与配置 Web程序 - 贪吃蛇学院-专业IT技术平台...

1.在一个纯英文目录下新建三个文件夹2.安装apache(选择好版本)过程中该填的按格式填好,其余的只更改安装目录即可如果报错1901是安装版本的问题。检查:安装完成后localhost打开为It works!添加到电脑属性环境变量:3.将php文件解压文档放到AMP…

linux中PATH变量-详细介绍

转自:https://blog.csdn.net/haozhepeng/article/details/100584451 转载者勘误 原文最后提到的 echo 命令对于环境变量的修改无影响。这是肯定的,echo 命令相当于只是一个打印的函数(比如 Python 中的 print)。这里要修改环境变…