深度學習之 DCN(Deformable Convolution)-可變形卷積

  • Paper link:
    • http://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf
    • https://arxiv.org/pdf/1703.06211
  • Code link: https://github.com/msracver/Deformable-ConvNets

Abstract

如何有效地對幾何圖形的變化進行建模一直是一個挑戰,大體上有兩種處理方法:(1)構建一個包含各種變化的數據集,其本質是數據擴增(2)使用具有形變不變性的特征和算法(如SIFT)。這兩種方法都有很大的局限性:幾何形變被假設是固定和已知的,這是一種先驗信息,用這些已知的形變去處理未知的形變是不合理的;手工設計的特征或算法無法應對過度復雜的形變,即使該形變是已知的。近年來,CNNs在計算機視覺領域取得了飛速的發展和進步,在圖像分類,語義分割,目標檢測領域都有很好的應用。然后鑒于CNNs固定的幾何結構,導致對幾何形變的建模受到限制。本文提出了兩個新模塊來提升CNNs的形變建模能力,稱為“deformable convolution”和“deformable ROI pooling”,這兩個方法都是基于在模塊中增加額外偏移量的空間采樣位置和從目標任務中學習到偏移量且不需要額外的監督。這些新的模塊可以很容易的取代現有CNNs的普通模塊并且利用反向傳播進行端到端的訓練,產生可變形的卷積神經網絡。該方法在語義分割和目標檢測上有很好的表現。

1. Introduction

CNNs對大型,未知形狀變換的建模存在固有的缺陷,這種缺陷來源于CNNs模塊固有的幾何結構:卷積單元對輸入特征圖的固定位置進行采樣;池化層以固定的比例進行池化;即使是ROI pooling也是將ROI分割到固定的bin中去。這些特性是有影響的,例如,在同一層Conv中,所有的激活單元的感受野是一樣的,但由于不同位置可能對應著不同尺度或變形的物體,因此對尺度或者感受野大小進行自適應是進行精確定位所需要的。為了解決或者減輕這個問題,本文提出了兩種新的模塊,可變形卷積(deformable conv)和可變形感興趣區域池化(deformable ROI Pooling),來提高對形變的建模能力。這兩個模塊都是基于一個平行網絡學習offset(偏移),使得卷積核在input feature map的采樣點發生偏移,集中于我們感興趣的區域或者目標。通過研究發現,標準卷積中的規則格點采樣是導致網絡難以適應幾何形變的“罪魁禍首”,為了削弱這個限制,對卷積核中每個采樣點的位置都增加了一個偏移變量,可以實現在當前位置附近隨意采樣而不局限于之前的規則格點。如下圖所示,是常見的采樣點和可變形卷積采樣的對比

在這里插入圖片描述

(a)是常見的3x3卷積核的采樣方式,(b)是采樣可變形卷積,加上偏移量之后的采樣點的變化,(c)(d)是可變形卷積的特殊形式

2. Deformable Convolutional Networks

2.1 Deformable Convolution

**(1)**首先聲明一點,在可變形卷積中,可變形卷積操作和池化操作都是2維的,都是在同一channel上進行的,常規的卷積操作主要可以分為兩部分:(1)在輸入的feature map上使用規則網格R進行采樣;(2)進行加權運算,R定義了感受野的大小和擴張

R={(?1,?1),(?1,0),...,(0,1),(1,1)}R=\{(-1,-1),(-1,0),...,(0,1),(1,1)\} R={(?1,?1),(?1,0),...,(0,1),(1,1)}

對于在輸出的feature map上的每個位置P0,通過下列式子進行計算:

在這里插入圖片描述

其中,Pn是對R中所列位置的枚舉
**(2)**可變形卷積的操作是不同的,在可變形網絡的操作中,常規的規則網格R通過增加一個偏移量進行擴張,同樣的位置P0變為:

在這里插入圖片描述

現在,采樣的位置變成了不規則位置,由于偏移量△Pn通常是小數,因此我們通過雙線性插值法進行實現,公式為:
在這里插入圖片描述

(3)拓展:關于雙線性插值
首先看,雙線性插值的作用,對圖像進行縮放。假設原圖像大小為m*n,目標圖像的大小為a*b,那么兩幅圖像的邊長比為m/a,n/b。注意,通常這個比例不是整數,而非整數的坐標是無法在圖像這種離散數據上使用的。雙線性插值通過尋找距離這個對應坐標最近的四個像素點,來計算該點的值。比如,對應的坐標為(2.5,4.5),那么最近的像素是(2,4)(2,5)(3,4)(3,5)
若圖像為灰度圖像,那么(I,j)的灰度值可以通過以下公式計算:

在這里插入圖片描述

其中,pi(i=1,2,3,4)為最近的四個像素點,wi(i=1,2,3,4)為各點相應權值
來看一下可變形卷積的網絡結構:如下圖所示,大體流程為,在輸入的feature map中,原始的通過sliding window得到的是綠框,引入可變形卷積后,我們把原來的卷積網路分為兩路,共享input feature map,其中上面的一路用一個額外的conv層來學習offset,得到H*W*2N的輸出offset,其中,2N的意思是有x,y兩個方向的偏移,得到這個之后,我們對原始卷積的每一個窗口,都不再是原來規整的sliding window(input feature map中的綠框)而是經過平移后的window(input feature map中的籃框),取得數據后計算過程和常規卷積一樣,即input feature map和offset共同作為deformable conv層的輸入。

注意:這里有一個非常非常非常容易混淆的點,所謂的deformable,到底deformable在哪?很多人可能以為deformable conv學習的是可變形的kernel,其實不是不是不是!本文并不是對kernel學習offset而是對feature的每個位置學習一個offset。

在這里插入圖片描述

舉個例子來看:可變形卷積的流程為:
在這里插入圖片描述

2.2 Deformable ROI Pooling

ROI Pooling模塊是two-stage中常見的池化方法,基于目標檢測方法中所有的region proposal。將任意輸入大小的矩形調整為固定尺寸大小的feature。給定input feature map x 和一個大小為w*h,位于左上角的區域P0,ROI Pooling將會把這個ROI劃分為k*k個bins,同時輸出一個size為k*k的feature map y,可以用如下公式表示:

在這里插入圖片描述

其中,nij是bin中像素的數量
有了這個基礎,我們再來看可變形池化,公式如下:

在這里插入圖片描述

相比普通ROI Pooling,同樣增加了一個offset,下圖為網絡結構:具體操作為,首先,通過普通的ROI Pooling得到一個feature map,如下圖中的綠色塊,通過得到的這個feature map,加上一個全連接層,生成每一個位置的offset,然后按照上面的公式得到△Pij,為了讓offset的數據和ROI 的尺寸匹配,需要對offset進行微調,此處不是重點。全連接層的參數可以通過反向傳播進行學習。
在這里插入圖片描述

How to use

首先回顧一下SOTA的CNN結構,可以概括為兩方面,首先,一個深度全卷積網絡用于對整張圖片產生feature map。其次,一個淺層的目標明確的網絡,從feature map產生我們需要的結果。下圖展示了標準的卷積和可變形卷積之間的對比,可以看到,在標準卷積中,圖中的區域表示在普通卷積和可變形卷積中的感受野。這張圖怎么看呢,首先看頂層的feature map,我們取兩個激活點(分別在大羊和小羊身上),代表的是不同尺度和形狀。中間層:top層的feature map經過3*3的卷積后,需要抽樣的一些點。最底層:再經過一個3*3的卷積,需要采樣的點。通過對比可以明顯的看出,可變形卷積的采樣位置更符合物體本身的形狀和尺寸,而標準卷積的形式卻不能做到這一點。

在這里插入圖片描述

下圖是一些實例對比:

在這里插入圖片描述

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

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

相關文章

軟件開發 項目進展 軟件架構 指南

軟件開發,標準化流水線式開發的實施構想 軟件開發,標準化流水線式開發的實施構想 近日看到一篇博文,討論標準化流水線開發模式的話題,但是這篇博文僅僅提出這個問題,未見回應。 這其實是一個很大的問題,我…

linux 下php多版本安裝

php-multi-version ubuntu apt-get 安裝php5.6 添加軟件源sudo add-apt-repository ppa:ondrej/php sudo apt-get updatesudo apt-get install php5.6sudo apt-get install php5sudo apt-get install php7 /usr/local/bin 與/usr/bin echo $PATH/usr/local/sbin:/usr/local/bin…

c++ 舞伴配對問題_挑戰新物體描述問題,視覺詞表解決方案超越人類表現

編者按:最近,研究者們發布了 nocaps 挑戰,用以測量在沒有對應的訓練數據的情況下,模型能否準確描述測試圖像中新出現的各種類別的物體。針對挑戰中的問題,微軟 Azure 認知服務團隊和微軟研究院的研究員提出了全新解決方…

深度學習之雙線性插值(Bilinear interpolation)

1. 什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set of known data points. Image interpolation refers to the“guess”of intensity values at missing locations. 圖片放大是圖像處理中的一個特別基礎的操作。…

div table 超出了_div包裹的table,table的寬度超出了的寬度,出現的滾動條的在windows下無法拖動...

1.父級div是否設置了寬度,只有設置了寬度且滾動條在div內才是你想要控制的滾動2.僅憑你說的這些屬性不知道滾動條怎么不能動,可以貼一下代碼?3.橫向需要滾動條的話必須設置table的確定寬度做了一個demo:.table{table-layout:fixed; width:…

第二階段站立會議7

昨天:美化頁面 今天:進行項目上傳 問題:阿里云服務器上的mysql出現連接問題轉載于:https://www.cnblogs.com/sdysyhj/p/8301489.html

深度學習之 OHEM (Online Hard Example Mining)

論文 《Training Region-based Object Detectors with Online Hard Example Mining》鏈接 https://arxiv.org/pdf/1604.03540.pdf Astract 摘要主要講了四點: (1) 訓練過程需要進行參數的空間搜索(2) 簡單樣本與難分辨樣本之間的類別不平衡是亟需解決的問題(3) 自…

音視頻 詳解

avi文件格式詳解 AVI是音頻視頻交錯(Audio Video Interleaved)的英文縮寫,它是Microsoft公司開發的一種符合RIFF文件規范的數字音頻與視頻文件格式,原先用于Microsoft Video for Windows (簡稱VFW)環境,現在已被Windows 95/98、OS/2等多數操…

c6011取消對null指針的引用_C++| 函數的指針參數如何傳遞內存?

函數的參數是一個一級指針,可以傳遞內存嗎?如果函數的參數是一個一級指針,不要指望用該指針去申請動態內存。看下面的實例:#include using namespace std;void GetMemory(char *p, int num){p (char *)malloc(sizeof(char) * num…

Servlet執行時要實現的方法

Servlet執行時要實現的方法 public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo() public void service(ServletRequest request,ServletResponse response) public void destroy() 本文轉自sucre03 5…

axios 設置攔截器 全局設置帶默認參數(發送 token 等)

應用場景:1,每個請求都帶上的參數,比如token,時間戳等。2,對返回的狀態進行判斷,比如token是否過期代碼如下:[javascript] view plain copyaxios.interceptors.request.use( config &g…

深度學習目標檢測之 YOLO v2

論文名:《YOLO9000: Better, Faster, Stronger》原文:https://arxiv.org/pdf/1612.08242v1.pdf代碼:http://pjreddie.com/darknet/yolo/ YOLO v2 斬獲了CVPR 2017 Best Paper Honorable Mention。在這篇文章中,作者首先在YOLOv1的…

tcpmp 編譯 源代碼分析

TCPMP源代碼分析 TCPMP源代碼分析 播放器主要由核心框架模塊(common工程)和解碼器、分離器插件組成。TCPMP的插件非常多,其中主要的插件有:interface插件實現了TCPMP的界面,ffmpeg是系統主要的音視頻解碼模塊&#xff…

使用zerorpc踩的第一個坑:

Server端代碼:注意s.run() 和 s.run的區別,一個括號搞死我了.如果不加括號,服務端服務是不會啟動的,客戶端就會報連接超時的錯誤 Server端在本機所有IP上監聽4242端口的tcp協議 import zerorpcclass HelloRPC(object):   def __…

django存入mysql數據庫_django如何存數據到一個mysql數據表里面

讓我們聊聊這個話題, django如何存數據至mysql數據表里面,你會用什么方法?正常情況下,我們form邏輯處理后,直接form.save(),是,這個方法沒毛病;但有沒有其他的方法呢?假如…

【Luogu】P3343地震后的幻想鄉(對積分概率進行DP)

題目鏈接 神難qwq。配合rqy的博客食用。 首先我們學到有一個概率函數$p(x)$表示某事件發生概率取值小于x的函數。這個函數有什么特點呢? 那就是$\int_{-∞}^{∞}p(x)dx1$ 這個是顯然的 然后我們令p(x)為首次聯通的時間的概率分布函數 這其實等價于生成樹的最大權邊等…

深度學習目標檢測之 YOLO v3

論文名:《YOLOv3: An Incremental Improvement》論文地址 https://pjreddie.com/media/files/papers/YOLOv3.pdfhttps://arxiv.org/abs/1804.02767v1 論文代碼 https://github.com/yjh0410/yolov2-yolov3_PyTorchkeras:https://github.com/qqwweee/keras…

30本pdf完整版的經典Linux學習和開發教程和資料下載 android arm java 資料大全

史上最牛的Linux內核學習方法論 點擊下載我的arm_linux移植筆記 點擊下載S3C2440完全開發流程 點擊下載Linux系統命令及其使用詳解完整版 點擊下載Linux主要shell命令詳解 點擊下載深入理解Linux內核(第三版 pdf英文版) 點擊下載深入分析Linux內核源代碼教程pdf完整版 點擊下…

Fedex Ship Manager Software安裝

本文出自Simmy的個人blog:西米在線 http://simmyonline.com/archives/552.html 這個軟件的安裝頗費了我一番周章,特地Log之。下載:http://www.fedex.com/apac_english/fsmsoftware/ 安裝完后,接著輸入用戶信息,然后連…

mysql5.7.11解壓版安裝_Mysql5.7.11在windows10上的安裝與配置(解壓版)

第一步my-default.ini 添加配置:#綁定IPv4和3306端bind-address 127.0.0.1port 3306# 設置mysql的安裝目basedir E:\mysql# 設置mysql數據庫的數據的存放目datadirE:\mysql\data# 允許最大連接數max_connections200#設置默認字符集為utf8default-character-setutf…