日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

發(fā)布時間:2023/10/11 综合教程 137 老码农
生活随笔 收集整理的這篇文章主要介紹了 Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Kaiming
He
, Xiangyu Zhang, Shaoqing Ren, and Jian Sun 
The
13th European Conference on Computer Vision (ECCV), 2014

聲明:本文所有圖片均來自原始文章,自己的理解也未必正確,請查看原圖并拍磚

本文的兩個亮點:

1. 多尺度訓(xùn)練CNN。

2. 將圖像分割后的特征轉(zhuǎn)換為最小計算量,大大加速了detection的速度。

關(guān)于第一點:我們知道,卷積保留了圖像的spatial信息,同時卷積層其實是不受輸入圖像大小的限制的,之所以在訓(xùn)練CNN時,需要固定圖像尺寸,主要是由于全連接層的輸入需要固定維度的。但是,如果在進全連接層之前的一層,我們把無論多大的圖都轉(zhuǎn)換到相同維度,這樣前面其實是不限制圖像大小的。SPP在這里就起到了這個作用。這樣做一呢,解除了圖像大小的限制,二呢,可以多尺度圖像同時進行訓(xùn)練CNN。從作者的實驗結(jié)果來看,確實是效果提升的。而在VGG的工作中,人為random選擇輸入圖像尺寸進行變換,然后再裁圖到224X224進行CNN訓(xùn)練,就提高了分類效果。SPP的這種做法是另外一種多尺度吧,和VGG的這種不是很一樣其實,如下圖所示,在用SPP的效果,以及用了SPP同時采用多尺度的分類效果,多尺度進行訓(xùn)練CNN效果要比之前提高不少。

Spp在cnn中的框架應(yīng)用圖,基本思路就是用spp代替CNN中最后一個pooling層。其實,用更直白的話理解就是,由一個pooling變成了多個scale的pooling了。這種多尺度的應(yīng)用,必定會給分類帶來好處的,這也是這個文章的一個亮點。如下圖所示,只是在pooling的時候,需要注意一下,文章中說到的1X1,2X2,…不是pooling的窗口大小,而是pooling后的大小,即pooling后變成了1x1的一個bin,2X2的4個bins,等等,這個就是multi level的過程,而傳統(tǒng)的滑動窗口的方式是single level的方式。于是,在pooling過程中,窗口的大小和步長的大小都需要去計算,這樣也有個好處,就是進來的conv5的輸出無論出來多大維度的信息,都可以將其pooling到同一個維度上。如下圖所示,再把1X1,2X2,…等這些信息組合展開作為fc6的輸入。

至此,SPP在CNN中用于分類的效果可見一斑。比較一下,這部分工作還是很牛的,簡單的幾層CNN,只是多了一個spp ,分類效果提升了不少。對比當(dāng)今的網(wǎng)絡(luò)結(jié)構(gòu),他們只用了最原始的幾層CNN,沒有做深度加深,就提升了不少效果,速度快,訓(xùn)練起來也是很靈活的,即使你只有CPU也可以,單個GPU也可以,不用去搭建多機多卡什么的,效果就不錯了。

上面是SPP在分類中的應(yīng)用,那么在檢測中怎么用呢?其實,很多人贊這篇文章,可能大多數(shù)是因為這個(竊以為啊)。我們知道,目前做物體檢測的,或者說做視覺的,效果基本上被各種CNN刷新了。檢測也是,是基于CNN的R-CNN,也就是region CNN,也是berkely那幫人搞的,原理其實也不算復(fù)雜,但是其實相當(dāng)復(fù)雜的。R-CNN的圖可以見下圖,其流程就是先對一張圖用圖像分割,比如selective search, random prime, bing等方法分割成若干個小的regions,當(dāng)然這些regions其實基本上是被視為是一個完整物體的regions,然后將這些regions作為CNN的輸入,利用CNN提取這些regions的圖像特征,當(dāng)然是最后一層softmax去掉的,然后進SVM分類器,從而得到這些regions是哪一類,當(dāng)然由于你已經(jīng)得到regions了,因而你也能得到這些regions在原始圖中的坐標,于是物體檢測的任務(wù)就完成了。當(dāng)然,說著是不算復(fù)雜,但是仔細分析,其中涉及到幾個大模塊:1. 分割,regions提取,這個有專門的研究吧,比如selective search, random prime, bing等等,效果下降趨勢,當(dāng)然速度上升趨勢。2.
Cnn的fine tuning或者訓(xùn)練,你需要用這些待檢測或者與檢測物體相關(guān)的圖像做訓(xùn)練數(shù)據(jù)集,怎么選,這個也會決定其效果的。3. SVM模塊,分類器SVM的訓(xùn)練,學(xué)問大大的奧。我是菜鳥,不多說了,看原始文章和代碼吧https://github.com/rbgirshick/rcnn

RCNN簡直是劃時代的出現(xiàn),刷新了各種物體檢測效果。但是,其有個最大問題就是計算量問題。你想啊,那么多regions都進CNN,而根據(jù)我們做圖像分割的經(jīng)驗,這些regions之間肯定存在重疊的,所以計算量一下子多了太多。Ss的方式,400X500的圖,大概有2000多個regions生成啊。

而SPP用在detection中,恰恰就避免了R-CNN重復(fù)計算的問題。

其實,之前我們也看過不少文章,比如regionlets等等(文章:Generic Object Detection With Dense Neural Patterns and Regionlets),但是這個方法效果并不是很好,原因是其用直方圖的方式將最后卷積層出來的特征統(tǒng)一維度,這樣做將CNN中具有spatial的特征全部抹掉了,而且直方圖本身也將CNN的良好描述能力抹殺了不少啊。在看看regionlets的文章,我覺得可能有兩個原因效果沒那么好,一個是圖的尺寸太小,另外一個原因是region是隨機組合選取的,可能按照selective search等這種方式來選取region再做histogram,我感覺就是average pooling效果應(yīng)該不錯。當(dāng)時看到regionlets這篇文章時,我們也想用別的組合方式,將最后一層的特征進行組合,但是沒想到合適的,水平啊……

SPP用在CNN中用來做detection的框架圖如下圖所示:

其實,在這里也是要做圖像分割的,但是,并不是要所有2000個regions都進CNN提取特征,而是一張原始圖進CNN提取特征,這2000個regions不是有坐標嗎?因此在conv5之后,也能知道對應(yīng)的windows是哪里。然后,我們要對這些windows用上面介紹的SPP的方式,用多個尺度的pooling分別進fc層,然后是SVM,從而判斷這些windows進而對應(yīng)的regions是否是某一個目標。這樣做能夠節(jié)省大量計算量,因為在CNN中,其實卷積和pooling占據(jù)了80%左右的計算時間,而SPP只是放在最后一個pooling層了,因此,時間節(jié)省是大大的,根據(jù)作者文章說的,大概快了20-60倍啊。原來我們覺得可能這樣以來,就可以工程應(yīng)用了,但是目前來看,估計時間還是瓶頸,因為其實前面region分割的時間也不少,selective search大約要1s呢。

值得提到的一點是,在文中,作者用的圖像大小最小是480的,猜測可能用過小尺寸,但是效果不好。想想也知道,如果用特別小的原始圖像,經(jīng)過一系列conv和pooling后,有些小的region可能會被干掉了。但是把原始圖放大了,應(yīng)該在最后還有保留的。具體原始圖像中的坐標怎么和最后conv5出來的對應(yīng)上,作者文章中給了附錄,計算方式和另外一篇文章Generic Object Detection With Dense Neural Patterns and Regionlets中給出的類似,原理就是conv和pooling降維的尺寸一個一個計算。文章第二版的信息量很大,值得好好研讀的,細節(jié)的東西不少,期待作者早點放出來代碼。

代碼:https://github.com/ShaoqingRen/SPP_net

PS.最近兩周多,在自己機器上搭建caffe windows和spp_net,折騰人的很啊,最終還是搞定了。

測試了一下,個人普通臺式機,CPU下,多尺度(5個尺度)的spp下,一張pascal的圖大概要50s的時間,這個也是可以理解的,畢竟都要cnn卷積一遍,這個是很費時間的。單個尺度的話,10s一張圖。實際測試下來,當(dāng)圖片輸入是480時,典型的目標已經(jīng)無法得到了。

另外,由于要求輸入的圖像可以是大圖片的,而且一次性存了不少張,我懷疑我的GPU不夠用,在申請空間時,GPU掛掉。CPU比GPU存儲大,就沒事。

總結(jié)

以上是生活随笔為你收集整理的Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。