[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_qxq?xkx_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}_kBk?Ek\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_yqWy?q

這樣,要想使CE損失 LCE=(C(q),y)\mathcal{L}_{CE}=(C(q),y)LCE?=(C(q),y) 最小,要 WyqW_yqWy?q 最大且 Wi≠yqW_{i\neq y}qWi?=y?q 最小,也就是 qqq (單位向量,embedder E\mathcal{E}E 的最后再經過L2 norm)轉到 WyW_yWy? 的方向,這對所有的 yyy 類的圖片都是相同的,會使他們倒向(collapse to)最接近 WyW_yWy? 的單位向量Wy∣∣Wy∣∣\frac{W_y}{||W_y||}Wy?Wy?? 。但是這種倒向(collapse)與 y 類特定的 InfoNCE 對比損失 Lcont(q,k?,k+)\mathcal{L}_cont(q,k_-,k_+)Lc?ont(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=xx??Wy?Wy??xx??Wy?Wy???
這就將單位向量 x∣∣x∣∣\frac{x}{||x||}xx? 轉換為了表示其與 Wy∣∣Wy∣∣\frac{W_y}{||W_y||}Wy?Wy?? 的角度的單位向量。

根據以上定義,我們將 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||}Wy?Wy?? 的“軌道"(orbit)上。這樣就不會干擾到 LCE\mathcal{L}_{CE}LCE? 損失使倒向(collapse)Wy∣∣Wy∣∣\frac{W_y}{||W_y||}Wy?Wy??,即不會與CE損失產生沖突,從而提升了兩損失的協同性。

AN一個額外的好處是它忽視了(在normalize之后)到權重向量的距離,這樣可以保護 Lcont\mathcal{L}_{cont}Lcont? 不會收到不同子類間“松緊”程度的影響。

實驗部分有興趣可以去查看原文。

作為2021 CVPR的 oral,本文的質量還是很足的,一個頗有意思的新任務C2FS,并結合了一些最新的方法提出了一個比較合理的解決方案,還針對這個框架存在的一個關鍵問題有一個不錯的解決方案。

有理解不對的地方歡迎指正。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532872.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

orcle mysql 查詢_Oracle與Mysql的高級查詢與難點sql

一、連接查詢 1. 內連接 內連接用于返回滿足連接條件的所有記錄。默認情況下,在執行連接查詢時如果沒有指定任何連接操作符,那么這些連接查詢都屬于內連接。 Sql 代碼 1. SELECT a.dname,b.ename from depta,empb where a.deptnob.deptno and a.deptno10…

[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 代碼筆者自己試了一下,應該是可以的&…

java activity模式_Activity的啟動模式

Android系統采用任務棧的方式來管理Activity實例。棧是后進先出的數據結構。通常一個應用程序對應一個任務棧,默認情況下,每啟動一個Activity都會入棧,處于棧頂位置。用戶操作的永遠都是棧頂的Activity。Activity可以層疊擺放,每啟…

Python 中的可執行對象 eval,exec 和 compile與其在深度學習訓練中的應用實例

Python 中的可執行對象 eval,exec 和 compile 與其在深度學習訓練中的應用實例 eval 計算指定表達式的值。也就是說它要執行的python代碼只能是單個表達式(注意eval不支持任何形式的賦值操作),而不能是復雜的代碼邏輯。 eval(s…

php寫簡單接口_php寫接口的日常

php寫接口的日常/*評論列表*/public function commentListW(){$base new Base();$info $base->getUserByToken();$shop_id $info[shop_id];$page $this->data[page]?:1;$pagesize $this->data[pagesize]?:C(ROLLPAGE);$search $this->data[search];$and &…

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),而實際圖中也確實有這個物體&…

php顯示json,PHP解決JSON中文顯示問題

PHP如何解決JSON中文顯示問題&#xff1f;本文主要介紹了PHP JSON格式的中文顯示問題解決方法&#xff0c;本文總結了3種解決中文顯示\u開頭字符問題的方法。希望對大家有所幫助。返回json數據中文顯示的問題解決方法一&#xff1a;<?php function Notice(){include ./incl…

使用yolov5訓練自己的目標檢測數據集

使用yolov5訓練自己的目標檢測數據集 yolov4出來后不久&#xff0c;又出現了yolov5&#xff0c;沒有論文。雖然作者沒有放上和yolov4的直接測試對比&#xff0c;但在COCO數據集的測試效果還是很可觀的。很多人考慮到YOLOv5的創新性不足&#xff0c;對算法是否能夠進化&#xf…

php的integer,PHP整型 integer

整數是一個沒有小數的數字。整數規則:整數必須至少有一個數字 (0-9)整數不能包含逗號或空格整數是沒有小數點的整數可以是正數或負數整型可以用三種格式來指定&#xff1a;十進制&#xff0c; 十六進制( 以 0x 為前綴)或八進制(前綴為 0)。在以下實例中我們將測試不同的數字。 …

einops和einsum:直接操作張量的利器

einops和einsum&#xff1a;直接操作張量的利器 einops和einsum是Vision Transformer的代碼實現里出現的兩個操作tensor維度和指定tensor計算的神器&#xff0c;在卷積神經網絡里不多見&#xff0c;本文將介紹簡單介紹一下這兩樣工具&#xff0c;方便大家更好地理解Vision Tra…

php的filter input,php中filter_input函數用法分析

本文實例分析了php中filter_input函數用法。分享給大家供大家參考。具體分析如下&#xff1a;在 php5.2 中,內置了filter 模塊,用于變量的驗證和過濾,過濾變量等操作&#xff0c;這里我們看下如何直接過濾用戶輸入的內容.fliter 模塊對應的 filter_input 函數使用起來非常的簡單…

COCO 數據集格式及mmdetection中的轉換方法

COCO 數據集格式及mmdetection中的轉換方法 COCO格式 CV中的目標檢測任務不同于分類&#xff0c;其標簽的形式稍為復雜&#xff0c;有幾種常用檢測數據集格式&#xff0c;本文將簡要介紹最為常見的COCO數據集的格式。 完整的官方樣例可自行查閱&#xff0c;以下是幾項關鍵的…

php獲取h1,jQuery獲取h1-h6標題元素值方法實例

本文主要介紹了jQuery實現獲取h1-h6標題元素值的方法,涉及$(":header")選擇器操作h1-h6元素及事件響應相關技巧,需要的朋友可以參考下&#xff0c;希望能幫助到大家。1、問題背景&#xff1a;查找到h1-h6&#xff0c;并遍歷它們&#xff0c;打印出內容2、實現代碼&am…

在導入NVIDIA的apex庫時報錯 ImportError cannot import name ‘UnencryptedCookieSessionFactoryConfig‘ from

在導入NVIDIA的apex庫時報錯 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ from ‘pyramid.session’ (unknown location) 報錯 在使用NVIDIA的apex庫時報錯 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ fro…

php怎么取request,PHP-如何在Guzzle中獲取Request對象?

我需要使用Guzzle檢查數據庫中的很多項目.例如,項目數量為2000-5000.將其全部加載到單個數組中太多了,因此我想將其分成多個塊&#xff1a;SELECT * FROM items LIMIT100.當最后一個項目發送到Guzzle時,則請求下一個100個項目.在“已滿”處理程序中,我應該知道哪個項目得到了響…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 論文簡析及關鍵代碼簡析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 論文簡析及關鍵代碼簡析 論文&#xff1a;https://arxiv.org/abs/2104.00323 代碼&#xff1a;https://github.com/dvlab-research/JigsawClustering 總結 本文提出了一種單批次&#xff0…