深度學習: 物件偵測上的模型結構變化
前言
物件偵測基本上大方向分one stage和two stage物件偵測,之前文章「深度學習-什麼是one stage,什麼是two stage 物件偵測」有提過,這邊就大概在review一下。
基本上one stage和two stage物件偵測結構如下圖:
Feature Extractor部分:
所以在物件偵測的文章都會寫SSD,內容但卻又出現VGG16或是MobileNet之類的網路結構,原因就在他們其實都是拿VGG16/MobileNet當作他們物件偵測的Feature extractor (backbone network),他們的論文都是在強調在後面object localization和classification他們如何設計讓模型偵測率變好,但為了比較時能比較公平,所以在Feature extractor會用比較一般常出現的模型當Feature extractor,一般都是用VGG16為主,也有人用ResNet-101/53等,當然你也可以自己設計feature extractor(比如YOLO的Darknet-19/53,YOLO的風格是自成一派,所以通常比較就是直接整個YOLO下去比,不會去改變YOLO的feature extractor)。
object localization和classification部分:
這部分主要就是區隔one stage和two stage的差異,簡單說two stage會把object localization和classification分開來處理,one stage則是合併一起處理。
two stage舉例如Faster RCNN,在object localization時Faster RCNN會採用Region proposal network (RPN)在feature extractor產生的feature map上選取可能是物件的bounding box,每個bounding box會帶有可能是背景或是前景的信心度(score)以及bounding box的座標,在利用這個背景或是前景的信心度初步塞選出特定數量的Region of Interest (ROI)出來,例如300個ROIs,然後在針對這300個ROIs獨立去進行classification的動作(可能還是接NN,也有可能接SVM),在classification步驟時的機率輸出除了指定的類別數之外還會加上背景的類別,例如:這個問題只偵測貓和狗兩類,但實際上在執行時classification最後機率輸出會有三個,分別是貓、狗和背景三類。這類的方法performance通常比較好,但缺點是object localization出來的ROI大小都不一樣,要經過ROIpooling這個動作,才能進行classification,因此運行上速度會比one stage慢很多,因此物件偵測主流研究以one stage為主,後面有沒有two stage可以跑得很快的我就沒有研究。
one stage是希望object localization和classification要同時處理,這樣執行速度才會快,但速度快一定有缺點,缺點是performance相對沒有很好,但還在可接受的範圍,後續的研究慢慢靠object localization和classification結構的複雜化讓performance越來越好甚至超過two stage,今天這篇文章就是要講one stage在Object localization and Classification的變化怎麼讓performance變得更好。
物件偵測上的模型結構變化
今天要寫的內容是深度學習在one stage物件偵測應用上的模型結構變化和優缺點,大部分內容都是參考以下文章整理而來的
MDSSD: Multi-scale Deconvolutional Single Shot Detector for Small Objects
Feature Pyramid Networks for Object Detection
FSSD: Feature Fusion Single Shot Multibox Detector
主要介紹「物件偵測的Object localization and Classification結構變化」。
主要結構從(a)變化到(e) (結構畫出來如下圖)
(a) Features are computed from images with different scales independently (Featured image pyramids).
(b) Single scale features (Faster R-CNN and R-FCN, YOLOv1 and YOLOv2.)
(c) Multi-scale features (Pyramidal Feature network, SSD).
(d) Feature fusion method (Feature Pyramid network, YOLOv3).
(e) Multi-scale Fusion (feature fusion and feature pyramid generation method, MDSSD, FSSD).
(a) Features are computed from images with different scales independently (Featured image pyramids).
這個方法顧名思義就是在不同scale下的圖像做偵測(如上圖二(a)),如果原圖大小是1000×1000,這時候除了在1000×1000的圖下做偵測外,還可以將圖片縮小做偵測,比如縮小到500×500、300×300或10×10做處理。這個方法的優點是不同scale可以做不同物件大小的偵測,比如高解析度的圖比如500×500可以做小物件的偵測,10×10可以做大物件的偵測。下圖(抓人臉)用來解釋小物件和大物件在不同scale下的差異。
由上兩張圖可以發現,如果圖片內只有一個大物件則在小的scale就可以做得很好,而如果是小物件則是需要在大一點的 scale才能有較好的解析。比如在0.0X的scale下,Twice那張圖基本上已經很難分辨人臉的位置了,但在白人女生那張圖還是能有很好的解析,因此不同scale的圖片能偵測的物件不同,如果圖片由大排到小就像是一個金字塔,因此這類方法被稱為Featured image pyramids。
缺點: 一個scale的圖就要做一次CNN,因此計算量很大(假設scale設了100個就要跑100次CNN),很花時間,效果好但計算時間久。
此例經典的方法就是Multi-task Cascaded Convolutional Networks (MTCNN)內的P-Net。
Note: 因為Featured image pyramids的缺點,所以在之後的方法幾乎都是希望能餵入原大小的圖到模型內就可以不同大小的物件都偵測出來。
(b) Single scale features (Faster R-CNN and R-FCN, YOLOv1 and YOLOv2.)
這個方法是經典方法(Faster RCNN, R-FCN, YOLOv1-v2)採用的方式。在搭配的feature extractor時,一般CNN的feature extractor結構都是向下圖,不斷利用卷積(convolution)、池化(poolnig)或是卷積(convolution)部分靠stride=2的方式將feature map縮小和萃取特徵,所以feature map會不斷的變小,而這類的做法通常則是在最後一個scale的feature map下做Object localization and Classification。一般都是到1/32下的feature map做偵測,比如輸入圖大小是416×416,則最後一層feature map是13×13 (416/32=13),至於怎麼在13×13 feature map做Object localization and Classification不是這篇的重點,後續會在寫一篇怎麼在13×13的feature map做localization and Classification (在「深度學習-物件偵測YOLOv1、YOLOv2和YOLOv3 cfg 檔解讀(一)」有大概提一下怎麼在13×13的feature map做localization and Classification)。
優點: 這類方法的結構通常較簡單。
缺點: 在單一scale的feature map做object localization and Classification,而且還是scale=1/32下,在小物件偵測效果相對不佳,有可能在down-scale時小物件的特徵就消失了,如上圖範例,紅色框物件到Conv9_2時就消失了。
Note: 這邊有個分支(HyperNet),雖然feature map經由不斷做卷積時增加了feature map對圖片語意,但同時因為feature map縮小的關係,feature map的空間資訊變弱了,因此有一作法是將較大scale的feature map和其他scale做feature map fusion (圖片語意足夠且空間資訊有保留),然後在做 object localization and Classification,但上述的缺點(down-scale時小物件的特徵就消失)還是存在。
(c) Multi-scale features (Pyramidal Feature network, SSD)
Multi-scale feature map則是可以解決(b)這類的問題,在不同的scale的feature map下做object localization and Classification,Single Shot MultiBox Detector (SSD)是這個分類最經典的方法。
優點: 在不同scale的feature map都做偵測,這樣大小物件都較容易被偵測。
缺點: 1/8 scale的feature map圖片語意解釋量可能不足(前面特徵萃取的卷積層不夠多),導致特徵資訊沒有被很好的保留,所以小物件偵測出來的分類正確率可能不高。
(d) Feature fusion method (Feature Pyramid network, YOLOv3)
這類方法綜合(b)提到的feature map fusion的優點和(c) Multi-scale detection的優點。在小scale的feature map(很多層的卷積後結果)圖片語意足夠但空間解釋能力差,這時候利用upsample (方法有deconv或稱為transpose conv. 、nearest neighbor, bilinear等方式)將feature map放大,然後和不同scale的feature map做fusion (concat.或是elementwise sum)進行detection。
因此此類的方法不但保留feature map fusion的優點更融合Multi-scale detection的優點。
優點: 不同scale的圖片語意特徵擷取量夠,偵測效果好。
缺點: 看似天下無敵,但模型相對計算量大很多,執行時間和運算記憶體使用率不佳。
(e) Multi-scale Fusion (feature fusion and feature pyramid generation method, MDSSD, FSSD)
這也是我參考論文提出的架構,我把他們都歸類成同一塊,英文寫Multi-scale Fusion,其實和(d)做法很像,但是他們都是希望可以融合feature map又可以在不同scale下做detection。
上圖FSSD這類的作法好處是可以融入HyperNet (multi-scale feature fusion)的優點 (很多的scale的feature map同時間融合),這樣得到的訊息更為全面,缺點在於所有的detection都必須等前面部分完成才可以進行。
上圖MDSSD的作法比較能平行處理,且整體運算時間跟結構都會比FSSD簡單。
優點:此類的方法都是提出來改善(d) Feature fusion method缺點的方法,核心概念都還是離不開(d) Feature fusion method。
結論
個人覺得目前物件偵測的結構應該不會有太大的改變了,研究方向應該也是要往如何讓模型執行的更快更好,1. 從模型的feature extractor去著手,2.是像(e) Multi-scale Fusion 這類的作法一樣,更改一下detection的結構,讓performance不要掉但整體計算量macc和參數量都相對少很多,達到運算加速的目的。
不負責聲明: 以上內容可能都是小弟憑空幻想出來的,連參考價值都沒有,看看笑笑就好。
但覺得不錯的話,拍個幾下手給點鼓勵吧。