Detecting Twenty-thousand Classes using Image-level Supervision

Detecting Twenty-thousand Classes using Image-level Supervision

  • 摘要
  • 背景方法
  • Preliminaries
  • Detic:具有圖像類別的檢測器
  • loss
  • 技術細節擴展
    • Grad-CAM
      • Grad-CAM原理
  • 總結

摘要

在這里插入圖片描述

摘要 由于檢測數據集的規模較小,目前的物體檢測器在詞匯量方面受到限制。而圖像分類器的數據集更大,也更容易收集,因此它們的詞匯量要大得多。我們提出的 Detic 只需在圖像分類數據上訓練檢測器的分類器,從而將檢測器的詞匯量擴展到數以萬計的概念。與之前的工作不同,Detic 不需要復雜的分配方案,就能根據模型預測將圖像標簽分配給方框,因此更容易實現,并與一系列檢測架構和骨干兼容。我們的研究結果表明,即使對于沒有方框注釋的類別,Detic 也能生成出色的檢測器。它在開放詞匯和長尾檢測基準上的表現都優于之前的工作。在開放詞匯 LVIS 基準上,Detic 為所有類別帶來了 2.4 mAP 的增益,為新類別帶來了 8.3 mAP 的增益。在標準 LVIS 基準上,如果對所有類別或僅對稀有類別進行評估,Detic 可獲得 41.7 mAP,從而縮小了樣本較少的對象類別的性能差距。我們首次使用 ImageNet 數據集的全部 21000 個類別來訓練檢測器,并證明它無需微調即可泛化到新的數據集。代碼見 https://github.com/facebookresearch/Detic 。

現階段的目標檢測器的性能已經到了一個瓶頸。

  1. 作者認為限制其性能進一步提升的主要原因是其可獲得的訓練數據量規模太小。
  2. 另一方面,圖像分類的數據量就相對來說大得多同時更加容易收集,也因此圖像分類可以在更大規模的詞匯表上進行推理。

作者基于此,提出了自己命名為Detic的目標檢測訓練方法,其可以非常簡單的使用圖像分類的數據集來對目標檢測器的分類頭進行訓練。簡單,是Detic的最大賣點,之前的類似弱監督的工作都是基于預測然后進行box-class的分配,實現起來十分繁瑣且兼容性很差,只能在特定的檢測器結構上進行訓練,Detic則可易于實現,在大部分的檢測建構和backbone上都可以接入使用。

背景方法

在這里插入圖片描述
物體檢測包括兩個子問題:尋找物體(定位)和命名物體(分類)。傳統方法將這兩個子問題緊密結合在一起,因此依賴于所有類別的盒式標簽。盡管做了很多數據收集工作,但檢測數據集 [18 , 28 , 34 , 49] 的總體規模和詞匯量都遠遠小于分類數據集 [10]。例如,最近的 LVIS 檢測數據集 [18] 有 1000 多個類別,12 萬張圖像;OpenImages [28] 有 500 個類別,180 萬張圖像。此外,并非所有類別都包含足夠的注釋來訓練強大的檢測器(見圖 1 頂部)。在分類方面,即使是已有十年歷史的 ImageNet [10] 也有 21K 個類別和 1400 萬張圖片(圖 1 底部)。

現階段目標檢測的標注數據量相對于圖像分類來說少得太多,LVIS 120K的圖片,包含了1000+類,OpenImages 1.8M的圖片,包含了500+類,而10年前的古董級圖像分類數據集ImageNet就有21K個類別、14M的圖片數目。在有限的類別上訓練出來的目標檢測器,總是會出現差錯。而Detic使用了圖像分類的數據,能夠檢測出得類別就更加多樣、更加精確。如下圖所示,一個普通的LVIS檢測器將獅子檢測成了熊,將狐貍檢測成了水獺,而Detic則檢測正確。

傳統的目標檢測將分類和定位耦合在一起,對訓練的數據集有較高的要求,數據集需要包括物體的種類,以及bbox位置信息,這就導致了要檢測多少類就需要多少類的數據標注。

而detic將分類與定位解耦成兩個問題,在定位時不再那么依賴標注數據。

在這里插入圖片描述
在本文中,我們提出了帶圖像類別的檢測器(Detic),它除了檢測監督外,還使用圖像級監督。我們發現,定位和分類子問題可以解耦
在這里插入圖片描述

因此,我們將重點放在分類子問題上,使用圖像級標簽來訓練分類器并擴大檢測器的詞匯量。我們提出了一種簡單的分類損失,將圖像級監督應用于規模最大的提案,而不對其他有圖像標簽的數據輸出進行監督。這種方法易于實現,并能大量擴展詞匯量。

對于采用第二種數據如何定位,文中沒有細說(文中的重點是分類),但是提到了用的是弱監督學習的思想,目前在弱監督學習的定位中采用最多的方法是 Gard-Cam(detic可能不是用的這個,但是感覺應該是一樣的思想)。Gard-cam起初是用來可視化CNN任務的,稍作修改即可用來定位。

在這里插入圖片描述
我們發現問題,并提出一個更簡單的替代現有的弱監督檢測技術在開放詞匯設置。

我們提出的損失族顯著提高了新類別的檢測性能,與監督性能上限非常匹配。

我們的檢測器無需微調即可轉換到新的數據集和詞匯

  1. 作者找到現階段目標檢測弱監督訓練出現的問題,并使用了更簡單易用的替換方案。
  2. 作者為了使用圖像級別的監督信號,提出了一個新的損失函數,實驗表明,這個損失函數可以非常有效地提升目標檢測器的性能,尤其是在novel class的檢測中。
  3. 作者訓練出來的目標檢測器可以無需微調,直接遷移到新的數據集和檢測詞匯表上。

Preliminaries

在這里插入圖片描述
我們使用對象檢測和圖像分類數據集來訓練對象檢測器。我們提出了一種簡單的方法來利用圖像監督來學習對象檢測器,包括沒有盒子標簽的類。我們首先描述目標檢測問題,然后詳細說明我們的方法

在這里插入圖片描述
問題設置。給定一幅圖像,目標檢測解決兩個子問題:( 1)定位:找到所有目標及其位置,表示為一個盒子 😭 2)分類:給第j個目標分配一個類別標簽cj 。這里C test是用戶在測試時提供的類詞匯。
在訓練期間,我們使用檢測數據集,詞匯C det既有類標簽又有box標簽。我們還使用圖像分類數據集,詞匯表C cls只有圖像級類標簽。詞匯C test、C det、C cls可能重疊,也可能不重疊。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

傳統的對象檢測認為在這里插入圖片描述,主要的目標檢測器遵循兩階段框架。

第一階段,稱為區域建議網絡(RPN),取圖像I并生成一組對象建議:在這里插入圖片描述
第二階,段取對象特征,輸出每個對象的分類評分和細化后的盒子位置。在這里插入圖片描述
w,b分別是分類層和回歸層的學習權重。

在這里插入圖片描述

我們的工作重點是在第二階段提高分類。在我們的實驗中,RPN和邊界框回歸器并不是當前的性能瓶頸,因為現代探測器在測試中使用了過多的建議數量(每張圖像< 20個對象使用1K個建議)。

在這里插入圖片描述
在這里插入圖片描述

方法概述。我們在檢測數據和圖像標記數據上混合訓練。當使用檢測數據時,我們的模型使用標準檢測損失來訓練檢測器的分類器(W)和盒預測分支(B)。當使用圖像標記的數據時,我們僅使用我們修改的分類損失來訓練分類器。
我們的損失訓練從最大尺寸的提議中提取的特征。

Detic的數據集分為兩類,一種是傳統目標檢測數據集,一種是label-image數據(可以類比為圖像分類的數據,沒有bbox信息)。
對于第一種數據來說,訓練時就按照傳統目標檢測的流程進行,得到分類權重
以及bbox預測分支
,對于第二種數據來說,我們只訓練來自固定區域的特征進行分類。使用這兩種數據可以訓練種類更多的分類器(跟傳統的目標檢測相比降低了數據獲取的成本)。

Detic:具有圖像類別的檢測器

在這里插入圖片描述
如圖3所示,我們的方法利用了來自檢測數據集Ddet的盒子標簽和來自分類數據集Dcls的圖像級標簽。在訓練期間,我們使用來自兩種類型的數據集的圖像組成一個小批量。對于帶有方框標簽的圖像,我們遵循標準的兩階段檢測器訓練[46]。對于圖像級標記圖像,我們只訓練來自固定區域的特征進行分類。因此,我們只計算具有GT標簽的圖像的定位損失(RPN損失和邊界盒回歸損失)。下面,我們描述我們改進的圖像級標簽的分類損失

在這里插入圖片描述

如上圖所示,一個普通的LVIS檢測器將獅子檢測成了熊,將狐貍檢測成了水獺,而Detic則檢測正確。

loss

弱監督目標檢測
在這里插入圖片描述
左圖:標準檢測需要地面實況標簽盒,無法利用圖像級標簽。
中間: 現有的基于預測的弱監督檢測方法[3, 44, 45]通過將圖像級標簽分配給檢測器的預測框(建議)來使用圖像級標簽。遺憾的是,這種分配容易出錯,尤其是在大詞匯量檢測中。
右圖 Detic 只需將圖像標簽分配給最大尺寸的提議。我們的研究表明,這種損失比之前的工作更簡單,性能也更好。

在這里插入圖片描述

在這里插入圖片描述

其中 f 代表proposal對應的RoI feature,c是最大的proposal對應的類別,也就是是該圖片對應的類別,W是分類器的權重。同時,再加上傳統目標檢測器里使用的loss,就組成了Detic的最終loss。

參考文獻1
參考文獻2

技術細節擴展

關于使用分類數據集訓練網絡模型,完成定位,文中沒有細說(文中的重點是分類),但是提到了用的是弱監督學習的思想,目前在弱監督學習的定位中采用最多的方法是gard-cam(detic可能不是用的這個,但是感覺應該是一樣的思想)…

Grad-CAM

論文名稱:Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
論文下載地址:https://arxiv.org/abs/1610.02391
推薦代碼(Pytorch):https://github.com/jacobgil/pytorch-grad-cam

對于常用的深度學習網絡(例如CNN),普遍認為是個黑盒可解釋性并不強(至少現在是這么認為的),它為什么會這么預測,它關注的點在哪里,我們并不知道。很多科研人員想方設法地去探究其內在的聯系,也有很多相關的論文。通過Grad-CAM我們能夠繪制出如下的熱力圖(對應給定類別,網絡到底關注哪些區域)。Grad-CAM(Gradient-weighted Class Activation Mapping)是CAM(Class Activation Mapping)的升級版(論文3.1節中給出了詳細的證明),Grad-CAM相比與CAM更具一般性。CAM比較致命的問題是需要修改網絡結構并且重新訓練,而Grad-CAM完美避開了這些問題。本文不對CAM進行講解,有興趣的小伙伴自行了解。

在這里插入圖片描述
我們通過網絡關注的區域能夠反過來分析網絡是否學習到正確的特征或者信息。在論文6.3章節中舉了個非常有意思的例子,作者訓練了一個二分類網絡,Nurse和Doctor。如下圖所示,第一列是預測時輸入的原圖,第二列是Biased model(具有偏見的模型)通過Grad-CAM繪制的熱力圖。第三列是Unbiased model(不具偏見的模型)通過Grad-CAM繪制的熱力圖。通過對比發現,Biased model對于Nurse(護士)這個類別關注的是人的性別,可能模型認為Nurse都是女性,很明顯這是帶有偏見的。比如第二行第二列這個圖,明明是個女Doctor(醫生),但Biased model卻認為她是Nurse(因為模型關注到這是個女性)。而Unbiased model關注的是Nurse和Doctor使用的工作器具以及服裝,明顯這更合理。
在這里插入圖片描述

Grad-CAM原理

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

參考文獻3

參考文獻4

總結

Unfortunately, this assignment requires good initial detections which leads to a chicken-and-egg problem–we need a good detector for good label assignment, but we need many boxes to train a good detector. Our method completely side steps the label assignment process by supervising the classification sub-problem alone when using classification data.

不幸的是,這種分配需要良好的初始檢測,這會導致先有雞還是先有蛋的問題——我們需要一個好的檢測器來實現良好的標簽分配,但我們需要很多盒子來訓練一個好的檢測器。 我們的方法通過在使用分類數據時單獨監督分類子問題來完全回避標簽分配過程

這里說的是弱監督檢測器:對于完全的弱監督學習來說,定位依賴于檢測結果

Detic解決的問題:對于傳統目標檢測任務,數據標注比較麻煩;對于完全的弱監督學習來說,定位依賴于檢測結果。
所以detic采取了一個中合的辦法

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

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

相關文章

LeetCode_03Java_1572. 矩陣對角線元素的和

給你一個正方形矩陣 mat&#xff0c;請你返回矩陣對角線元素的和。 請你返回在矩陣主對角線上的元素和副對角線上且不在主對角線上元素的和。 輸入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;25 解釋&#xff1a;對角線的和為&#xff1a;1 5 9 3 7 2…

Scratch 之 3D 介紹及教程

第一章 為什么 3D 很難&#xff1f; 1.1 3D 難在何處&#xff1f; 3D 之所以會使我們覺得困難&#xff0c;是因為 Scratch 軟件只有兩個坐標軸&#xff0c;既&#xff1a;X軸、Y軸。 2維坐標系 而 3D 卻擁有三個坐標軸&#xff1a; 3維坐標系 怎么辦&#xff1f;很簡單&…

Gin各種參數接收

Gin參數接收 文章目錄 Gin參數接收1.各個參數的接收方法Gin中發送JSON數據Gin接收querystring數據Gin接收Form的參數Gin接收URI參數 2.參數綁定方式接收(更加方便)推薦一款軟件 1.各個參數的接收方法 聲明: 這里的c都是c *gin.Context中的c Gin中發送JSON數據 在傳輸或接受JS…

33 | 美國總統數據分析

在這個數據分析項目中,利用Pandas等Python庫對美國2020年7月22日至2020年8月20日期間的超過75萬條捐贈數據進行了深入的探索和分析。通過這一分析,他們揭示了這段時間內美國選民對總統候選人的偏好和捐款情況。以下是對文章中的主要步驟和內容的進一步描述: 數據集處理: 作…

Jquery 復選框點擊生成標簽 源代碼

html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>服務資源管理</title><link rel"stylesheet" type"text/css" href"../lib/layui/css/layui.css" /><link rel"st…

2023牛客第八場補題報告A H J K

2023牛客第八場補題報告A H J K A-Alive Fossils_2023牛客暑期多校訓練營8 (nowcoder.com) 思路 統計字符串&#xff0c;取出現次數為t的。 代碼 #include <bits/stdc.h> #define int long long #define endl \n #define IOS ios::sync_with_stdio(0), cin.tie(0), …

【C++】面試題

1、都說c是面向對象的語言&#xff0c;面向對象的三個特性能 [展開] 介紹一下嗎&#xff1f; 封裝&#xff1a;封裝是一種集中管理的思想&#xff0c;把內部的數據和實現方法組合在一起&#xff0c;并且不對外暴漏內部的數據和實現方法&#xff0c;只對外提供幾個接口來完成函數…

DockePod信號處理機制與僵尸進程優化

Docke&Pod信號處理與僵尸進程優化 容器與信號的關系 SIGTERM信號&#xff1a;程序結束(terminate)信號&#xff0c;這是用來終止進程的標準信號&#xff0c;也是 kill 、 killall 、 pkill 命令所發送的默認信號。與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程…

k8s和docker簡單介紹

當涉及到容器技術和容器編排時&#xff0c;Docker和Kubernetes是兩個重要的概念。我將更詳細地介紹它們以及它們之間的關系。 Docker&#xff1a; Docker是一種容器化技術&#xff0c;它允許你將應用程序及其依賴項打包到一個稱為"容器"的封閉環境中。每個容器都包…

rust包跨平臺編譯,macbook ,linux

在 MacBook 上編譯 Rust 項目并生成 Linux 包需要一些步驟。以下是一般的步驟概述&#xff1a; 1. **安裝所需工具&#xff1a;** 首先&#xff0c;確保您的 MacBook 上已經安裝了所需的工具。您需要 Rust 編程語言的工具鏈以及一些用于交叉編譯到 Linux 的工具。 - 安裝 R…

【BASH】回顧與知識點梳理(二十一)

【BASH】回顧與知識點梳理 二十一 二十一. Linux 的文件權限與目錄配置21.1 使用者與群組屬主(文件擁有者)屬組(群組概念)其他人的概念root(萬能的天神)Linux 用戶身份與群組記錄的文件 21.2 Linux 文件權限概念Linux 文件屬性Linux 文件權限的重要性 21.3 如何改變文件屬性與權…

組合模式(C++)

定義 將對象組合成樹形結構以表示部分-整體’的層次結構。Composite使得用戶對單個對象和組合對象的使用具有一致性(穩定)。 應用場景 在軟件在某些情況下&#xff0c;客戶代碼過多地依賴于對象容器復雜的內部實現結構&#xff0c;對象容器內部實現結構(而非抽象接口)的變化…

Redis數據結構——鏈表list

鏈表是一種常用的數據結構&#xff0c;提供了順序訪問的方式&#xff0c;而且高效地增刪操作。 Redis中廣泛使用了鏈表&#xff0c;例如&#xff1a;列表的底層實現之一就是鏈表。 在Redis中&#xff0c;鏈表分為兩部分&#xff1a;鏈表信息 鏈表節點。 鏈表節點用來表示鏈表…

PyTorch深度學習實踐---筆記

PyTorch深度學習實踐---筆記 2.線性模型&#xff08;Linear Model&#xff09;2.exercise 3. 梯度下降算法&#xff08;Gradient Descent&#xff09;3.1梯度下降&#xff08;Gradient Descent&#xff09;3.2 隨機梯度下降&#xff08;Stochastic Gradient Descent&#xff09…

亞馬遜測評工作室怎么做?

亞馬遜是全球最大的電商平臺之一&#xff0c;任何一個賣家想要提升自己店鋪的知名度和銷量&#xff0c;都需要關注自己Listing的Review數量和星級評價&#xff0c;而測評對于賣家賬號的評定和產品曝光量有著重要影響&#xff0c;可以用于店鋪提升銷量&#xff0c;留評等 在進行…

【GC日志分析】-對象晉升到老年代分析

[GC (Allocation Failure) [PSYoungGen: 123456K->65432K(262144K)] 123456K->765432K(1048576K), 0.1234567 secs] [Times: user0.10 sys0.02, real0.13 secs] 從這段GC日志中&#xff0c;可以看到兩個年輕代和老年代的堆內存容量變化情況。 首先&#xff0c;我們來看…

百度坐標(BD09)、國測局坐標(火星坐標,GCJ02)、和WGS84坐標系之間的轉換

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><script>/*** * 百度坐標&#xff08;BD09&#xff09;、國測局坐標&#xff08;火星坐標&#xff0c;GCJ02&#xff09;、和…

c51單片機串口通信(中斷方式接收數據)(單片機--單片機通信)示例代碼 附proteus圖

單片機一般采用中斷方式接受數據&#xff0c;這樣便于及時處理 #include "reg51.h" #include "myheader.h" #define uchar unsigned char int szc[10]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int bufferc[6]{0}; int sza[6]{0x01,0x02,0x0…

HOT96-只出現一次的數字

leetcode原題鏈接&#xff1a;只出現一次的數字 題目描述 給你一個 非空 整數數組 nums &#xff0c;除了某個元素只出現一次以外&#xff0c;其余每個元素均出現兩次。找出那個只出現了一次的元素。你必須設計并實現線性時間復雜度的算法來解決此問題&#xff0c;且該算法只使…

TEXTure環境配置,跑通inference的demo

TEXTure 環境配置安裝kaolin這個包,這里可能會遇到各種問題配置huggingface的訪問令牌 運行Text Conditioned Texture Generation指令報錯1報錯2成功運行 查看結果查看貼圖后的三維網格模型 環境配置 # 創建一個名為texture的環境 conda create -n texture python3.9 -y# 激活…