[2020-CVPR] Dynamic Region-Aware Convolution 論文簡析

[2020-CVPR] Dynamic Region-Aware Convolution 論文簡析

論文地址:https://arxiv.org/abs/2003.12243
參考代碼地址(非官方):https://github.com/shallowtoil/DRConv-PyTorch

代碼筆者自己試了一下,應該是可以的,但是沒做到文中的性能,歡迎討論。

本文設計了一種新型動態區域感知卷積(DRConv),根據圖像的信息將圖像劃分為多個區域,并為每個區域單獨生成定制的卷積核。有強大的語義表示能力并且保持了平移不變性,本文還具體設計了此種卷積的反向傳播方式,根據總體的梯度進行參數更新,實現了端到端的訓練,該卷積在多項任務上具有極其優異的性能。

DRConv針對的問題是常規卷積同一個通道中所有卷積核共享參數,無法對圖像的不同的語義區域進行有針對性的卷積操作,所以標準卷積只能通過增加通道數來提取更多的視覺元素,這無疑會大幅增加計算的開銷。而本文提出的DRConv會根據圖像中不同的語義信息劃分不同的區域,然后針對每個語義區域定制不同的卷積核進行卷積,即不同區域間的卷積核的參數是不共享的、定制化的,這使得DRConv比標準卷積在建模語義信息的多樣性上表現更好。即DRConv將通道維度上的卷積核個數的增加轉換為了空間維度上可學習的區域劃分,這不僅提高了卷積的表示能力,并且保持了標準卷積的計算量和平移不變形。
作者還針對這個過程中的argmax函數無法反向傳播求梯度的問題提出了用softmax在反向傳播是近似代替argmax(hardmax)的解決方案。

實驗部分,作者將DRConv替換掉MobileNet等網絡的一些卷積層,在分類、人臉識別、檢測和分割任務上都取得了比較好的效果。

在這里插入圖片描述

DRConv的具體結構如圖所示,我們先對輸入圖像使用標準卷積來得到guided feature。根據guided feature,將空間維度劃分為若干區域。如圖所示,guided mask中相同顏色的像素表示同一塊區域。在每個共享區域中,我們使用filter generator模塊來生成一個卷積核去執行2維的卷積操作。這樣需要優化的參數主要在filter generator模塊中,并且這些參數的數量與圖像本身的大小沒有關系。因此,除了大幅提升模型的性能外,DRConv相較于局部卷積來說參數的數量也大大下降了,與標準卷積的參數量相當。

標準卷積在空間域卷積核都使用權值共享。問題是計算不夠高效,并且優化困難。
局部卷積在不同的像素位置使用不同的權值在空間維度上使用多卷積核的方法來利用語義信息的多樣性,如此比標準卷積在提取空間特征是更加高效。但問題一是大大增加了參數量,而是是破壞了卷積的平移不變性。而且其在不同的樣本之間還是共享卷積核的,這使它對于每個樣本各自的特定特征不夠敏感。

具體來說,作者設計了一個可學習的guided mask模塊,來根據輸入圖像的特點將空間維度劃分為多個區域,將圖像劃分成不同的區域,在不同的區域上使用不同的卷積。區域內卷積是通用的,不同區域卷積不通用。GGG 是生成卷積的模塊,有多少個區域,就生成多少個卷積核 WiW_iWi? 。在每個區域內部只有一個共享的卷積核。不同樣本的不同區域的卷積核會根據輸入的相應特征動態生成,這能夠使我們更加高效地關注于它們的關鍵特征。

Method

標準卷積:
Yu,v,o=∑c=1CXu,v,o?Wc(o)Y_{u,v,o}=\sum_{c=1}^CX_{u,v,o}*W_c^{(o)} Yu,v,o?=c=1C?Xu,v,o??Wc(o)?
局部卷積:
Yu,v,o=∑c=1CXu,v,o?W(u,v,c)(o)Y_{u,v,o}=\sum_{c=1}^CX_{u,v,o}*W_{(u,v,c)}^{(o)} Yu,v,o?=c=1C?Xu,v,o??W(u,v,c)(o)?
DRConv:
Yu,v,g=∑c=1CXu,v,o?W(t,c)(o)Y_{u,v,g}=\sum_{c=1}^CX_{u,v,o}*W_{(t,c)}^{(o)} Yu,v,g?=c=1C?Xu,v,o??W(t,c)(o)?
可概括為兩步,兩個主要模塊:learnable guided mask模塊和filter generator模塊,前者決定哪個分類起被分配到哪個塊,后者決定根據輸入特征生成相關的卷積核

learnable guided mask

該模塊根據相應的損失函數進行參數更新,所以可以適應不同的圖像輸入產生不同的分塊

具體來說,對于一個k*k的DRConv(k是卷積核尺寸),m個區域。我們先使用k*k的標準卷積來生成m個通道的guided feature,

對于空間域中每個位置,有:
Mu,v=argmax(Fu,v0^,Fu,v1^,...,Fu,vm?1^)M_{u,v}=argmax(\hat{F_{u,v}^0},\hat{F_{u,v}^1},...,\hat{F_{u,v}^{m-1}}) Mu,v?=argmax(Fu,v0?^?,Fu,v1?^?,...,Fu,vm?1?^?)
M是guided mask(U*V),F是guided feature在(u,v)處的特征向量,有m個元素(U*V*m),該argmax取的是索引(M是個索引,取值在0到m-1之間)

為了使該模塊可學習,需要有梯度來更新參數,但是guided feature,argmax并沒有梯度,為此,本文設計了一種得到guided feature近似梯度的方法。

前向傳播

我們已經根據上式得到了guided mask,有每個位置(u,v)的卷積核如下:
W^u,v=WMu,v,Mu,v∈[0,m?1]=W?Mu,v\hat{W}_{u,v}=W_{M_{u,v}},\ \ \ \ \ \ \ \ \ \ \ M_{u,v}\in[0,m-1]=W*M_{u,v} W^u,v?=WMu,v??,???????????Mu,v?[0,m?1]=W?Mu,v?

WMu,vW_{M_{u,v}}WMu,v?? 是由filter generator模塊G生成的m個卷積核之一,Mu,vM_{u,v}Mu,v?是guided feature FFF位置(u,v)通道維度中最大值的索引。這樣,m個卷積核會與所有的位置建立相關關系,整個空間域的所有像素會被分成m組。各組中的像素使用同樣的濾波器,他們具有相似的語義,因為他們是通過具有平移不變性的標準卷積將他們的信息轉換到guided feature 上的。

注意:前向傳播時是one hot的hardmax

在這里插入圖片描述

反向傳播

Mu,vM_{u,v}Mu,v? 的one-hot形式,如 Mu,v=2M_{u,v}=2Mu,v?=2, m=5m=5m=5,則其one-hot形式:(0,0,1,0,0)(0, 0, 1, 0, 0)(0,0,1,0,0) 作softmax得到 F^\hat{F}F^

因為argmax是hardmax,沒法求導,所以這里在反向傳播的時候使用了softmax來近似代替。

filter generator

該模塊功能主要體現在針對不同輸入圖像,抓住其獨有特征。

具體做法如上圖右側所示:先經過一個自適應的池化層將 U?V?CU*V*CU?V?C 的圖像降采樣到 k?k?Ck*k*Ck?k?C ,再經過兩個 1?11*11?1 的卷積得到 mmm 個卷積核。

experiments

分類檢測分割均有提升,表就不放了,有興趣請自行查看原文。

可以看到模型規模越小,本文方法提升越明顯,這是因為DRConv在空間維上提高了語義表達能力,對于表達能力較弱的小模型,幫助更為明顯。
在這里插入圖片描述
在這里插入圖片描述

不同層的可視化,可以看到有比較明顯的按照語義進行區域劃分的效果。

在這里插入圖片描述

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

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

相關文章

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…

java jps都卡死,java長時間運行后,jps失效

在部署完應用后&#xff0c;原本jps使用的好好的&#xff0c;能正確的查詢到自己正在運行的java程序。但&#xff0c;過了一段時間后&#xff0c;再使用jps來查看運行的應用時&#xff0c;自己運行的程序都看不到&#xff0c;但是自己也沒有關閉這些程序啊&#xff01;然而使用…

指針(*)、取地址()、解引用(*)與引用()

指針(*)、取地址(&)、解引用(*)與引用(&) C 提供了兩種指針運算符&#xff0c;一種是取地址運算符 &&#xff0c;一種是間接尋址運算符 *。 指針是一個包含了另一個變量地址的變量&#xff0c;您可以把一個包含了另一個變量地址的變量說成是"指向"另一…

matlab電類,985電氣研二,有發過考研經驗貼 電氣電力類的有

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓clc;clear;p[2.259;2.257;2.256;2.254;2.252;2.248;2.247;2.245;2.244;2.243;2.239;2.238;2.236;2.235;2.234;2.231;2.229;2.228;2.226;2.225;2.221;2.220;2.219;2.217;2.216;2.211;2.209;2.208;2.207;2.206;2.202;2.201;2.199;2.1…

matlab legend 分塊,matlab?legend?分塊!

matlab legend 分塊&#xff01;(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.…