【深度学习】一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)...
? 作者丨燈會
來源丨極市平臺
編輯丨極市平臺
導(dǎo)讀
?作者燈會為21屆中部985研究生,憑借自己整理的面經(jīng),去年在騰訊優(yōu)圖暑期實習(xí),七月份將入職百度cv算法工程師。在去年灰飛煙滅的算法求職季中,經(jīng)過30+場不同公司以及不同部門的面試中積累出了CV總復(fù)習(xí)系列,此為目標(biāo)檢測篇。?
Faster-Rcnn網(wǎng)絡(luò)
1.faster RCNN原理介紹,要詳細畫出圖
Faster R-CNN是一種兩階段(two-stage)方法,它提出的RPN網(wǎng)絡(luò)取代了選擇性搜索(Selective search)算法后使檢測任務(wù)可以由神經(jīng)網(wǎng)絡(luò)端到端地完成。在結(jié)構(gòu)上,Faster RCNN將特征抽取(feature extraction),候選區(qū)域提取(Region proposal提取),邊框回歸(bounding box regression),分類(classification)都整合在了一個網(wǎng)絡(luò)中,使得綜合性能有較大提高,在檢測速度方面尤為明顯。
2.RPN(Region Proposal Network)網(wǎng)絡(luò)的作用、實現(xiàn)細節(jié)
RPN網(wǎng)絡(luò)的作用: RPN專門用來提取候選框,一方面RPN耗時少,另一方面RPN可以很容易結(jié)合到Fast RCNN中,成為一個整體。
RPN網(wǎng)絡(luò)的實現(xiàn)細節(jié):一個特征圖(Faster RCNN的公共Feature Map)經(jīng)過sliding window處理,得到256維特征,對每個特征向量做兩次全連接操作,一個得到2個分?jǐn)?shù),一個得到4個坐標(biāo){然后通過兩次全連接得到結(jié)果2k個分?jǐn)?shù)和4k個坐標(biāo)[k指的是由錨點產(chǎn)生的K個框(K anchor boxes)]}
2個分?jǐn)?shù),因為RPN是提候選框,還不用判斷類別,所以只要求區(qū)分是不是物體就行,那么就有兩個分?jǐn)?shù),前景(物體)的分?jǐn)?shù),和背景的分?jǐn)?shù); 4個坐標(biāo)是指針對原圖坐標(biāo)的偏移,首先一定要記住是原圖;
預(yù)先設(shè)定好共有9種組合,所以k等于9,最后我們的結(jié)果是針對這9種組合的,所以有H x W x 9個結(jié)果,也就是18個分?jǐn)?shù)和36個坐標(biāo)。
寫一下RPN的損失函數(shù)(多任務(wù)損失:二分類損失+SmoothL1損失)
訓(xùn)練RPN網(wǎng)絡(luò)時,對于每個錨點我們定義了一個二分類標(biāo)簽(是該物體或不是)。
以下兩種情況我們視錨點為了一個正樣本標(biāo)簽時:
1.錨點和錨點們與標(biāo)注之間的最高重疊矩形區(qū)域
2.或者錨點和標(biāo)注的重疊區(qū)域指標(biāo)(IOU)>0.7
RPN損失中的回歸損失部分輸入變量是怎么計算的?(注意回歸的不是坐標(biāo)和寬高,而是由它們計算得到的偏移量)
ti 和 ti* 分別為網(wǎng)絡(luò)的預(yù)測值和回歸的目標(biāo)
在訓(xùn)練RPN時需要準(zhǔn)備好目標(biāo)t*。它是通過ground-truth box(目標(biāo)真實box)和anchor box(按一定規(guī)則生成的anchor box)計算得出的,代表的是ground-truth box與anchor box之間的轉(zhuǎn)化關(guān)系。用這個來訓(xùn)練rpn,那么rpn最終學(xué)會輸出一個良好的轉(zhuǎn)化關(guān)系t。而這個t,是predicted box與anchor box之間的轉(zhuǎn)化關(guān)系。通過這個t和anchor box,可以計算出預(yù)測框box的真實坐標(biāo)。
RPN中的anchor box是怎么選取的?
滑窗的中心在原像素空間的映射點稱為anchor,以此anchor為中心,生成k(paper中default k=9, 3 scales and 3 aspect ratios/不同尺寸和不同長寬比)個proposals。三個面積尺寸(128^2,256^2,512^2),然后在每個面積尺寸下,取三種不同的長寬比例(1:1,1:2,2:1)
為什么提出anchor box?
主要有兩個原因:一個窗口只能檢測一個目標(biāo)、無法解決多尺度問題。
目前anchor box尺寸的選擇主要有三種方式:人為經(jīng)驗選取、k-means聚類、作為超參數(shù)進行學(xué)習(xí)
為什么使用不同尺寸和不同長寬比? 為了得到更大的交并比(IOU)。
3.說一下RoI Pooling是怎么做的?有什么缺陷?有什么作用
RoI Pooling的過程就是將一個個大小不同的box矩形框,都映射成大小固定(w * h)的矩形框
具體操作:(1)根據(jù)輸入image,將ROI映射到feature map對應(yīng)位置(2)將映射后的區(qū)域劃分為相同大小的ps(ps數(shù)量與輸出的維度相同);(3)對每個ps進行max pooling操作;
這樣可以從不同大小的方框得到固定大小的相應(yīng)的feature maps。值得一提的是,輸出的feature maps的大小不取決于ROI和卷積feature maps大小。ROI pooling 最大的好處就在于極大地提高了處理速度。(在Pooling的過程中需要計算Pooling后的結(jié)果對應(yīng)到feature map上所占的范圍,然后在那個范圍中進行取max或者取average。)
優(yōu)點: 1.允許我們對CNN中的feature map進行reuse;2.可以顯著加速training和testing速度;3.允許end-to-end的形式訓(xùn)練目標(biāo)檢測系統(tǒng)。
缺點: 由于 RoIPooling 采用的是最近鄰插值(即INTER_NEAREST) ,在resize時,對于縮放后坐標(biāo)不能剛好為整數(shù)的情況,采用了粗暴的舍去小數(shù),相當(dāng)于選取離目標(biāo)點最近的點,損失一定的空間精度。
兩次整數(shù)化(量化)過程:1.region proposal的xywh通常是小數(shù),但是為了方便操作會把它整數(shù)化。2.將整數(shù)化后的邊界區(qū)域平均分割成 k x k 個單元,對每一個單元邊界進行整數(shù)化。 ?//經(jīng)過上述兩次整數(shù)化,此時的候選框已經(jīng)和最開始回歸出來的位置有一定的偏差,這個偏差會影響檢測或者分割的準(zhǔn)確度
怎么做的映射: 映射規(guī)則比較簡單,就是把各個坐標(biāo)除以“輸入圖片與feature map的大小的比值”
ROI Pooling與ROI Align(Mask R-CNN)的區(qū)別
ROI Align: ROI Align的思路很簡單:取消量化操作,使用雙線性內(nèi)插的方法獲得坐標(biāo)為浮點數(shù)的像素點上的圖像數(shù)值,從而將整個特征聚集過程轉(zhuǎn)化為一個連續(xù)的操作;1.遍歷每一個候選區(qū)域,保持浮點數(shù)邊界不做量化。2.將候選區(qū)域分割成k x k個單元,每個單元的邊界也不做量化。3.在每個單元中計算固定四個坐標(biāo)位置,用雙線性內(nèi)插的方法計算出這四個位置的值,然后進行最大池化操作。
區(qū)別: ROI Align舍去了近似像素取整數(shù)的量化方法,改用雙線性插值的方法確定特征圖坐標(biāo)對應(yīng)于原圖中的像素位置.ROI Align很好地解決了ROI Pooling操作中兩次量化造成的區(qū)域不匹配(mis-alignment)的問題。
對于檢測圖片中大目標(biāo)物體時,兩種方案的差別不大,而如果是圖片中有較多小目標(biāo)物體需要檢測,則優(yōu)先選擇RoiAlign,更精準(zhǔn)些。
RoI Align中雙線性插值計算像素值的具體方法
在數(shù)學(xué)上,雙線性插值是有兩個變量的插值函數(shù)的線性插值擴展,其核心思想是在兩個方向分別進行一次線性插值。
假如我們想得到未知函數(shù) f 在點 P = (x, y) 的值,假設(shè)我們已知函數(shù) f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四個點的值。最常見的情況,f就是一個像素點的像素值。首先在 x 方向進行線性插值,得到
然后在 y 方向進行線性插值,得到
綜合起來就是雙線性插值最后的結(jié)果:
由于圖像雙線性插值只會用相鄰的4個點,因此上述公式的分母都是1。
每個采樣點的特征值由其相鄰的4個整型特征點的像素值通過雙線性差值得到。
最近鄰插值法(圖像的內(nèi)插):在原圖中最近得像素點賦值給新的像素點
4.說一下非極大值抑制(NMS)(non maximum suppression) NMS實現(xiàn)細節(jié) 手寫NMS代碼
用處:本質(zhì)是搜索局部極大值,抑制非極大值元素。
原理:NMS為非極大值抑制,用來抑制檢測時冗余的框。
大致算法流程為:1.對所有預(yù)測框的置信度降序排序2.選出置信度最高的預(yù)測框,確認(rèn)其為正確預(yù)測,并計算他與其他預(yù)測框的IOU 3.根據(jù)2中計算的IOU去除重疊度高的,IOU>threshold閾值就刪除 4.剩下的預(yù)測框返回第1步,直到?jīng)]有剩下的為止
(需要注意的是:Non-Maximum Suppression一次處理一個類別,如果有N個類別,Non-Maximum Suppression就需要執(zhí)行N次。)
假設(shè)兩個目標(biāo)靠的很近,則會識別成一個bbox,會有什么問題,怎么解決?
當(dāng)兩個目標(biāo)靠的非常近時,置信度低的會被置信度高的框抑制掉,從而兩個目標(biāo)靠的非常近時會被識別成一個bbox。為了解決這個問題,可以使用softNMS(基本思想:用稍低一點的分?jǐn)?shù)來代替原有的分?jǐn)?shù),而不是直接置零)
5.Faster R-CNN是如何解決正負(fù)樣本不平衡的問題?
限制正負(fù)樣本比例為1:1,如果正樣本不足,就用負(fù)樣本補充,這種方法后面研究工作用的不多。通常針對類別不平衡問題可以從調(diào)整樣本數(shù)或修改loss weight兩方面去解決,常用的方法有OHEM、OHNM、class balanced loss和Focal loss。
Faster RCNN怎么篩選正負(fù)anchor
我們給兩種錨點分配一個正標(biāo)簽:(i)具有與實際邊界框的重疊最高交并比(IoU)的錨點,
(ii)具有與實際邊界框的重疊超過0.7 IoU的錨點。IoU比率低于0.3,我們給非正面的錨點分配一個負(fù)標(biāo)簽。
6.faster-rcnn中bbox回歸用的是什么公式,說一下該網(wǎng)絡(luò)是怎么回歸bbox的?
其中x,y,w,h分別為bbox的中心點坐標(biāo),寬與高。分別是預(yù)測box、anchor box、真實box。
前兩行是預(yù)測的box關(guān)于anchor的offset與scales,后兩行是真實box與anchor的offset與scales。那回歸的目的很明顯,即使得盡可能相近。回歸損失函數(shù)利用的是Fast-RCNN中定義的smooth L1函數(shù),對外點更不敏感:
in which
損失函數(shù)優(yōu)化權(quán)重W,使得測試時bbox經(jīng)過W運算后可以得到一個較好的平移量(offsets)與尺度(scales),利用這個平移量(offsets)與尺度(scales)可在原預(yù)測bbox上微調(diào),得到更好的預(yù)測結(jié)果。
為什么要做Bounding-box regression?
邊框回歸用來微調(diào)候選區(qū)域/框,使微調(diào)后的框更Ground Truth更接近。
7.簡述faster rcnn的前向計算過程 ?簡述faster rcnn訓(xùn)練步驟
輸入一張待檢測圖片->vgg16網(wǎng)絡(luò)conv layers提取整張圖片的特征,輸出feature map分別輸入到RPN和Fast RCNN網(wǎng)絡(luò)開頭->RPN網(wǎng)絡(luò)得出region proposal,將這些候選框信息送入到Fast RCNN網(wǎng)絡(luò)開頭->利用候選框在之前送到的feature map提取特征,并通過ROI Pooling層得到規(guī)定大小的feature map->將這些feature map送入Fast RCNN網(wǎng)絡(luò)中進行分類和回歸坐標(biāo),最終得到需檢測物體的坐標(biāo)。
簡述faster rcnn訓(xùn)練步驟
第一步,訓(xùn)練RPN,該網(wǎng)絡(luò)用ImageNet預(yù)訓(xùn)練的模型初始化,并端到端微調(diào),用于生成region proposal;
第二步,訓(xùn)練Fast R-CNN,由imageNet model初始化,利用第一步的RPN生成的region proposals作為輸入數(shù)據(jù),訓(xùn)練Fast R-CNN一個單獨的檢測網(wǎng)絡(luò),這時候兩個網(wǎng)絡(luò)還沒有共享卷積層;
第三步,調(diào)優(yōu)RPN,用第二步的fast-rcnn model初始化RPN再次進行訓(xùn)練,但固定共享的卷積層,并且只微調(diào)RPN獨有的層,現(xiàn)在兩個網(wǎng)絡(luò)共享卷積層了;
第四步,調(diào)優(yōu)Fast R-CNN,由第三步的RPN model初始化fast-RCNN網(wǎng)絡(luò),輸入數(shù)據(jù)為第三步生成的proposals。保持共享的卷積層固定,微調(diào)Fast R-CNN的fc層。這樣,兩個網(wǎng)絡(luò)共享相同的卷積層,構(gòu)成一個統(tǒng)一的網(wǎng)絡(luò)。
8. Faster rcnn有什么不足的地方嗎?如何改進?
改進:1.更好的特征網(wǎng)絡(luò)ResNet等;2.更精確的RPN:可以使用FPN網(wǎng)絡(luò)架構(gòu)來設(shè)計RPN網(wǎng)絡(luò)3.更好的ROI分類方法:比如ROI分別在conv4和conv5上做ROI-Pooling,合并后再進行分類,這樣基本不增加計算量,又能利用更高分辨率的conv4;4.使用softNMS代替NMS;
比較FasterRCNN在RCNN系列中的改進點 ? RPN提取RP
綜合問題
1.簡要闡述一下One-Stage、Two-Stage模型
One-Stage檢測算法,沒有selective search產(chǎn)生region proposal的階段,直接產(chǎn)生物體的類別概率和位置坐標(biāo),經(jīng)過單次檢測即可直接獲得最終的檢測結(jié)果。相比Two-Stage有更快的速度。代表網(wǎng)絡(luò)有YOLO v1/v2/v3/9000,SSD,Retina-Net. (two-stage算法中的roi pooling會對目標(biāo)做resize, 小目標(biāo)的特征被放大,其特征輪廓也更為清晰,因此檢測也更為準(zhǔn)確)
Two-Stage檢測算法將檢測問題劃分成兩個階段,首先是獲取region proposal進行位置精修和分類階段。相比于One-Stage,精度高,漏檢率也低,但是速度較慢,代表網(wǎng)絡(luò)有Fast rcnn,Faster rcnn,mask rcnn等。
Two-Stage和One-Stage的異同(回答的是Two-Stage先對前景背景做了篩選,再進行回歸,回歸效果比較好,準(zhǔn)度高但是相比較慢,One-Stage是直接對特征上的點進行直接回歸,優(yōu)點是速度快,因為用了多層特征圖出框可能小目標(biāo)效果比較好一點(個人看法),缺點是因為正負(fù)樣本失衡導(dǎo)致效果較差,要結(jié)合難例挖掘。)
one stage在哪些具體方面檢測精度不高(ROI+default box的深層理解)(one-stage算法對小目標(biāo)檢測效果較差,如果所有的anchor都沒有覆蓋到這個目標(biāo),那么這個目標(biāo)就會漏檢。)
Faster rcnn的兩階段訓(xùn)練和end-to-end訓(xùn)練的不一樣 (回答的是就是把RPN和二階段拆開訓(xùn),然后追問RPN在ENDTOEND中怎么回傳,答TOTALLoss中有一階段和二階段的LOSS,只是回傳影響的部分不一樣。)
目標(biāo)檢測的發(fā)展歷程,從傳統(tǒng)到深度(傳統(tǒng)部分回答的算子結(jié)合分類器分類,簡單說了一下缺陷,深度部分說了RCNN,FAST,FASTER,SSD,YOLO,FPN,MASK RCNN,Cascade RCNN,都簡單的介紹了一下)
傳統(tǒng)目標(biāo)檢測:主線:區(qū)域選擇->特征提取->分類器
傳統(tǒng)的做目標(biāo)檢測的算法基本流程如下:1. 使用不同尺度的滑動窗口選定圖像的某一區(qū)域為候選區(qū)域;2. 從對應(yīng)的候選區(qū)域提取如Harr HOG LBP LTP等一類或者多類特征;3. 使用Adaboost SVM 等分類算法對對應(yīng)的候選區(qū)域進行分類,判斷是否屬于待檢測的目標(biāo)。
缺點:1)基于滑動窗口的區(qū)域選擇策略沒有針對性,時間復(fù)雜度高,窗口冗余2)手工設(shè)計的特征對于多樣性的變化沒有很好的魯棒性
2.YOLOV1、YOLOV2、YOLOV3復(fù)述一遍 ?YOLOv1到v3的發(fā)展歷程以及解決的問題。
YOLO系列算法是一類典型的one-stage目標(biāo)檢測算法,其利用anchor box將分類與目標(biāo)定位的回歸問題結(jié)合起來,從而做到了高效、靈活和泛化性能好。
YOLOv1:YOLOv1的核心思想就是利用整張圖作為網(wǎng)絡(luò)的輸入,直接在輸出層回歸 bounding box(邊界框) 的位置及其所屬的類別。
YOLOv1的基本思想是把一副圖片,首先reshape成448×448大小(由于網(wǎng)絡(luò)中使用了全連接層,所以圖片的尺寸需固定大小輸入到CNN中),然后將劃分成SxS個單元格(原文中S=7),以每個格子所在位置和對應(yīng)內(nèi)容為基礎(chǔ),來預(yù)測檢測框和每個框的Confidence以及每個格子預(yù)測一共C個類別的概率分?jǐn)?shù)。
創(chuàng)新點:1. 將整張圖作為網(wǎng)絡(luò)的輸入,直接在輸出層回歸bounding box的位置和所屬的類別2. 速度快,one stage detection的開山之作
損失函數(shù)設(shè)計細節(jié):YOLOv1對位置坐標(biāo)誤差,IoU誤差,分類誤差均使用了均方差作為損失函數(shù)。激活函數(shù)(最后一層全連接層用線性激活函數(shù),其余層采用leak RELU)
缺點:1. 首先,每個單元格只預(yù)測2個bbox,然后每個單元格最后只取與gt_bbox的IOU高的那個最為最后的檢測框,也只是說每個單元格最多只預(yù)測一個目標(biāo)。2. 損失函數(shù)中,大物體 IOU 誤差和小物體 IOU 誤差對網(wǎng)絡(luò)訓(xùn)練中 loss 貢獻值接近(雖然采用求平方根方式,但沒有根本解決問題)。因此,對于小物體,小的 IOU 誤差也會對網(wǎng)絡(luò)優(yōu)化過程造成很大的影響,從而降低了物體檢測的定位準(zhǔn)確性。3. 由于輸出層為全連接層,因此在檢測時,YOLO 訓(xùn)練模型只支持與訓(xùn)練圖像相同的輸入分辨率的圖片。4. 和two-stage方法相比,沒有region proposal階段,召回率較低
YOLOv2:YOLOv2又叫YOLO9000,其能檢測超過9000種類別的物體。相比v1提高了訓(xùn)練圖像的分辨率;引入了faster rcnn中anchor box的思想,對網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計進行了改進,輸出層使用卷積層替代YOLO的全連接層,聯(lián)合使用coco物體檢測標(biāo)注數(shù)據(jù)和imagenet物體分類標(biāo)注數(shù)據(jù)訓(xùn)練物體檢測模型。相比YOLO,YOLO9000在識別種類、精度、速度、和定位準(zhǔn)確性等方面都有大大提升。相比于v1的改進: 1.Anchor: 引入了Faster R-CNN中使用的Anchor,作者通過在所有訓(xùn)練圖像的所有邊界框上運行k-means聚類來選擇錨的個數(shù)和形狀(k = 5,因此它找到五個最常見的目標(biāo)形狀) 2. 修改了網(wǎng)絡(luò)結(jié)構(gòu),去掉了全連接層,改成了全卷積結(jié)構(gòu)。3. 使用Batch Normalization可以從model中去掉Dropout,而不會產(chǎn)生過擬合。4. 訓(xùn)練時引入了世界樹(WordTree)結(jié)構(gòu),將檢測和分類問題做成了一個統(tǒng)一的框架,并且提出了一種層次性聯(lián)合訓(xùn)練方法,將ImageNet分類數(shù)據(jù)集和COCO檢測數(shù)據(jù)集同時對模型訓(xùn)練。
YOLOv3:YOLOv3總結(jié)了自己在YOLOv2的基礎(chǔ)上做的一些嘗試性改進,有的嘗試取得了成功,而有的嘗試并沒有提升模型性能。其中有兩個值得一提的亮點,一個是使用殘差模型,進一步加深了網(wǎng)絡(luò)結(jié)構(gòu);另一個是使用FPN架構(gòu)實現(xiàn)多尺度檢測。
改進點:1.多尺度預(yù)測 (類FPN):每種尺度預(yù)測3個box, anchor的設(shè)計方式仍然使用聚類,得到9個聚類中心。2.更好的基礎(chǔ)分類網(wǎng)絡(luò)(類ResNet)和分類器 darknet-53。3.用邏輯回歸替代softmax作為分類器。
(1)yolo的預(yù)測框是什么值(x,y,w,h)
(2)YOLOv2中如何通過K-Means得到anchor boxes
卷積神經(jīng)網(wǎng)絡(luò)具有平移不變性,且anchor boxes的位置被每個柵格固定,因此我們只需要通過k-means計算出anchor boxes的width和height即可
(3)YOLOv3框是怎么聚出來的? YOLOv3有沒有很致命的問題?
yolov3通過聚類的方式自定義anchor box的大小,在一定程度上,這可以提高定位的準(zhǔn)確率。缺點: 識別物體位置精準(zhǔn)性差,召回率低(在每個網(wǎng)格中預(yù)測兩個bbox這種約束方式減少了對同一目標(biāo)的多次檢測)(4)YOLO系列anchor的設(shè)計原理,kmeans的原理,anchor距離如何度量,如何改進k-means原理:K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評價指標(biāo),即認(rèn)為兩個對象的距離越近,其相似度就越大。該算法認(rèn)為簇是由距離靠近的對象組成的,因此把得到緊湊且獨立的簇作為最終目標(biāo)。
由于從標(biāo)記文件的width,height計算出的anchor boxes的width和height都是相對于整張圖片的比例(w=anchor_width*****input_width/downsamples、h=anchor_height*input_height/downsamples)
3.簡要闡述一下FPN網(wǎng)絡(luò)具體是怎么操作的 ?FPN網(wǎng)絡(luò)的結(jié)構(gòu)
FPN網(wǎng)絡(luò)直接在Faster R-CNN單網(wǎng)絡(luò)上做修改,每個分辨率的 feature map 引入后一分辨率縮放兩倍的 feature map 做 element-wise 相加的操作。通過這樣的連接,每一層預(yù)測所用的 feature map 都融合了不同分辨率、不同語義強度的特征,融合的不同分辨率的 feature map 分別做對應(yīng)分辨率大小的物體檢測。這樣保證了每一層都有合適的分辨率以及強語義(rich semantic)特征。同時,由于此方法只是在原網(wǎng)絡(luò)基礎(chǔ)上加上了額外的跨層連接,在實際應(yīng)用中幾乎不增加額外的時間和計算量。
FPN的特征融合為什么是相加操作呢?
假設(shè)兩路輸入來說,如果是通道數(shù)相同且后面帶卷積的話,add等價于concat之后對應(yīng)通道共享同一個卷積核。FPN里的金字塔,是希望把分辨率最小但語義最強的特征圖增加分辨率,從性質(zhì)上是可以用add的。如果用concat,因為分辨率小的特征通道數(shù)更多,計算量是一筆不小的開銷。所以FPN里特征融合使用相加操作可以理解為是為了降低計算量。
闡述一下FPN為什么能提升小目標(biāo)的準(zhǔn)確率
低層的特征語義信息比較少,但是目標(biāo)位置準(zhǔn)確;高層的特征語義信息比較豐富,但是目標(biāo)位置比較粗略。原來多數(shù)的object detection算法都是只采用頂層特征做預(yù)測。FPN同時利用低層特征高分辨率和高層特征的高語義信息,通過融合這些不同特征層的特征達到預(yù)測的效果。并且預(yù)測是在每個融合后的特征層上單獨進行的。所以可以提升小目標(biāo)的準(zhǔn)確率。
基于FPN的RPN是怎么訓(xùn)練的?(在FPN的每個預(yù)測層上都接一個RPN子網(wǎng),確定RPN子網(wǎng)的正負(fù)anchor box樣本,再計算各預(yù)測層上RPN的anchor box分類和回歸損失,利用BP將梯度回傳更新權(quán)值)
4.簡要闡述一下SSD網(wǎng)絡(luò)
SSD網(wǎng)絡(luò)的特點是對不同尺度下的feature map中的每一個點都設(shè)置一些default box,這些default box有不同的大小和橫縱比例,對這些default box進行分類和邊框回歸的操作。SSD的核心是對固定設(shè)置的default box(不同尺度feature map中每一個空間位置都設(shè)置一組default box,這里只考慮空間位置,不考慮feature的通道個數(shù))計算屬于各類物體的概率以及坐標(biāo)調(diào)整的數(shù)值。這個計算方式是對每層的feature map做卷積操作,卷積核設(shè)定為3*3,卷積核的個數(shù)是與default box個數(shù)相關(guān)。
優(yōu)點:SSD的優(yōu)點是運行速度超過yolo,精度在一定條件下超過faster rcnn。缺點是需要人工設(shè)置先驗框(prior box)和min_size,max_size和長寬比(aspect_ratio)值,網(wǎng)絡(luò)中default_box的基礎(chǔ)大小和形狀不能直接通過學(xué)習(xí)獲得,而是需要手工設(shè)置,雖然使用了圖像金字塔的思路,但是對小目標(biāo)的recall(召回率)依然一般
簡述SSD網(wǎng)絡(luò)前向是如何計算的
1數(shù)據(jù)增強,獲取訓(xùn)練樣本,將訓(xùn)練數(shù)據(jù)統(tǒng)一resize到固定尺寸;2.通過卷積網(wǎng)絡(luò)獲取feature map:①使用的卷積網(wǎng)絡(luò),前半部分使用基礎(chǔ)分類網(wǎng)絡(luò)獲取各層的feature map,這部分稱為base network。②下一步計算的輸入,就是上述的不同尺寸的feature map;3.通過卷積操作,從特征圖中獲取檢測信息。①此處實現(xiàn)方式與yolo類似;②與Faster R-CNN類似,在特征圖中每個點新建若干固定尺寸的anchor。檢測信息包括每個anchor的信息。主要包括:confidence(代表這個anchor中是否存在物體)、分類信息以及bbox信息。
SSD的致命缺點,如何改進
SSD主要缺點:SSD對小目標(biāo)的檢測效果一般,作者認(rèn)為小目標(biāo)在高層沒有足夠的信息
對小目標(biāo)檢測的改進可以從下面幾個方面考慮:1. 增大輸入尺寸2. 使用更低的特征圖做檢測(比如S3FD中使用更低的conv3_3檢測)3. FPN(已經(jīng)是檢測網(wǎng)絡(luò)的標(biāo)配了)
5.簡要闡述一下RetinaNet
RetinaNet的作者對one-stage檢測器準(zhǔn)確率不高的問題原因進行探究,發(fā)現(xiàn)主要問題在于正負(fù)類別不均衡,提出Focal Loss來解決類別不平衡問題。目的是通過減少易分類樣本的權(quán)重,從而使得模型在訓(xùn)練時更注重于難分類的樣本。RetinaNet=ResNet+FPN+Two sub-network+Focal Loss; RetinaNet由backbone網(wǎng)絡(luò)和兩個子任務(wù)網(wǎng)絡(luò)組成,backbone網(wǎng)絡(luò)負(fù)責(zé)計算feature map,子任務(wù)網(wǎng)絡(luò)一個負(fù)責(zé)目標(biāo)分類,一個負(fù)責(zé)bbox回歸,網(wǎng)絡(luò)的loss使用Focal loss。
闡述一下ssd和retinanet的區(qū)別
SSD的基礎(chǔ)網(wǎng)絡(luò)是VGG,且SSD在使用多層feature map時只是簡單的在不同層的feature map上放default box,并沒有真正將低維度特征和高維度特征進行融合。且SSD網(wǎng)絡(luò)中使用的控制正負(fù)樣本數(shù)量比的方法是難樣本挖掘方法,loss是分類+回歸的loss。而RetinaNet網(wǎng)絡(luò)的基礎(chǔ)網(wǎng)絡(luò)是resnet+FPN,是真正將低維度的特征和高維度的特征進行了特征融合后再來做檢測的。且控制正負(fù)樣本的方法是使用Focal Loss。
6. faster rcnn和yolo,ssd之間的區(qū)別和聯(lián)系
1.針對之前RCNN系列selective search的方法導(dǎo)致算法沒有實時性,所以faster rcnn提出RPN網(wǎng)絡(luò)來取代之前的方法,可以理解為fasterrcnn=fast rcnn+rpn網(wǎng)絡(luò),且rpn網(wǎng)絡(luò)和fast rcnn的分類,回歸網(wǎng)絡(luò)共用特征提取層,這樣使得引入RPN網(wǎng)絡(luò)不會增加太多計算量。整體流程為先使用RPN網(wǎng)絡(luò)找出可能存在object的區(qū)域,再將這些區(qū)域送入fast rcnn中進一步定位和分類。所以faster rcnn是典型的Two stage算法。因為faster rcnn中包含了兩次定位,所以其精度一般高于YOLO和SSD算法,所以速度一般慢于YOLO和SSD。
2.YOLO算法的特點是將檢測問題轉(zhuǎn)換成回歸問題,即YOLO直接通過回歸一次既產(chǎn)生坐標(biāo),又產(chǎn)生每種類別的概率。YOLO中將每張圖分成7*7的網(wǎng)格,每個網(wǎng)格默認(rèn)可能屬于2個object,即在一張圖片上提取98個region proposal,相比于faster rcnn使用Anchor機制提取20k個anchor再從中提取最終的300個region proposal,所以faster rcnn的精度比YOLO要高,但是由于需要處理更多region proposal,所以faster rcnn的速度要比YOLO慢。
3.SSD相比于faster rcnn使用了多層網(wǎng)絡(luò)特征,而不僅僅使用最后一層feature map。SSD還借鑒了YOLO算法中將檢測任務(wù)轉(zhuǎn)換為回歸任務(wù)的思想,且SSD也借鑒了faster rcnn中的anchor機制,只是SSD的anchor不是每個位置的精調(diào),而是類似于YOLO那樣在feature map上分割出網(wǎng)格,在網(wǎng)格上產(chǎn)生anchor。但是SSD和YOLO不需要selective search步驟,所以SSD和YOLO同屬于One-Stage算法。
闡述一下Mask RCNN網(wǎng)絡(luò),這個網(wǎng)絡(luò)相比于Faster RCNN網(wǎng)絡(luò)有哪些改進的地方
Mask rcnn網(wǎng)絡(luò)是基于faster rcnn網(wǎng)絡(luò)架構(gòu)提出的新的目標(biāo)檢測網(wǎng)絡(luò)。該網(wǎng)絡(luò)可以在有效地完成目標(biāo)檢測的同時完成實例分割。Mask RCNN主要的貢獻在于如下:1.強化了基礎(chǔ)網(wǎng)絡(luò):通過ResNeXt-101+FPN用作特征提取網(wǎng)絡(luò),達到state-of-the-art的效果。2.ROIAlign替換之前faster rcnn中的ROI Pooling,解決錯位(Misalignment)問題。3.使用新的Loss Function:Mask RCNN的損失函數(shù)是分類,回歸再加上mask預(yù)測的損失之和。總結(jié)來說,mask rcnn的主要貢獻就是采用了ROI Align以及加了一個mask分支。
7.分析一下SSD,YOLO,Faster rcnn等常用檢測網(wǎng)絡(luò)對小目標(biāo)檢測效果不好的原因
SSD,YOLO等單階段多尺度算法,小目標(biāo)檢測需要較高的分辨率,SSD對于高分辨的低層特征沒有再利用,而這些層對于檢測小目標(biāo)很重要。按SSD的設(shè)計思想,其實SSD對小目標(biāo)應(yīng)該有比較好的效果,但是需要重新精細設(shè)計SSD中的default box,比如重新設(shè)計min_sizes參數(shù),擴大小default box的數(shù)量來cover住小目標(biāo)。但是隨著default box數(shù)量的增加,網(wǎng)絡(luò)速度也會降低。YOLO網(wǎng)絡(luò)可以理解為是強行把圖片分割成7*7個網(wǎng)格,每個網(wǎng)格預(yù)測2個目標(biāo),相當(dāng)于只有98個anchor,所以不管是小目標(biāo),還是大目標(biāo),YOLO的表現(xiàn)都不是很理想,但是由于只需處理少量的anchor,所以YOLO的速度上有很大優(yōu)勢。
Faster rcnn系列對小目標(biāo)檢測效果不好的原因是faster rcnn只用卷積網(wǎng)絡(luò)的最后一層,但是卷積網(wǎng)絡(luò)的最后一層往往feature map太小,導(dǎo)致之后的檢測和回歸無法滿足要求。甚至一些小目標(biāo)在最后的卷積層上直接沒有特征點了。所以導(dǎo)致faster rcnn對小目標(biāo)檢測表現(xiàn)較差。
8.手寫計算IOU代碼
有兩個框,設(shè)第一個框的兩個關(guān)鍵點坐標(biāo):(x1,y1)(X1,Y1),第二個框的兩個關(guān)鍵點坐標(biāo):(x2,y2)(X2,Y2)。以大小寫來區(qū)分左上角坐標(biāo)和右下角坐標(biāo)。首先,要知道兩個框如果有交集,一定滿足下面這個公式:max(x1,x2)<=min(X1,X2) && max(y1,y2)<=min(Y1,Y2)!!!!
9.講一下目標(biāo)檢測優(yōu)化的方向
【可以從數(shù)據(jù)集下手,提升特征表征強度(backbone下手,加深加寬或者換卷積方式),RPN下手(級聯(lián),FPN,IOU NET),LOSS(行人檢測領(lǐng)域有些問題,如重疊,可以靠修改loss提升準(zhǔn)確度)。】
10.anchor設(shè)置的意義:
其實就是多尺度的滑動窗口
11.如果只能修改RPN網(wǎng)絡(luò)的話,怎么修改可以提升網(wǎng)絡(luò)小目標(biāo)檢出率
①修改RPN網(wǎng)絡(luò)的結(jié)構(gòu),比如引入FPN結(jié)構(gòu),利用多層feature map融合來提高小目標(biāo)檢測的精度和召回;②針對小目標(biāo)重新精細設(shè)計Anchor的尺寸和形狀,從而更好地對小目標(biāo)進行檢測;
12.如何理解concat和add這兩種常見的feature map特征融合方式
兩者都可以理解為整合特征圖信息。concat是通道數(shù)的增加;add是特征圖相加,通道數(shù)不變。 ?add是描述圖像的特征下的信息量增多了,但是描述圖像的維度本身并沒有增加,只是每一維下的信息量在增加,這顯然是對最終的圖像的分類是有益的。而concatenate是通道數(shù)的合并,也就是說描述圖像本身的特征數(shù)(通道數(shù))增加了,而每一特征下的信息是沒有增加。 ?concat每個通道對應(yīng)著對應(yīng)的卷積核。 而add形式則將對應(yīng)的特征圖相加,再進行下一步卷積操作,相當(dāng)于加了一個先驗:對應(yīng)通道的特征圖語義類似,從而對應(yīng)的特征圖共享一個卷積核(對于兩路輸入來說,如果是通道數(shù)相同且后面帶卷積的話,add等價于concat之后對應(yīng)通道共享同一個卷積核)。因此add可以認(rèn)為是特殊的concat形式。但是add的計算量要比concat的計算量小得多。
13.闡述一下如何檢測小物體
小目標(biāo)難以檢測的原因:分辨率低,圖像模糊,攜帶的信息少。
①借鑒FPN的思想,在FPN之前目標(biāo)檢測的大多數(shù)方法都是和分類一樣,使用頂層的特征來進行處理。雖然這種方法只是用到了高層的語義信息,但是位置信息卻沒有得到,尤其在檢測目標(biāo)的過程中,位置信息是特別重要的,而位置信息又是主要在網(wǎng)絡(luò)的低層。因此FPN采用了多尺度特征融合的方式,采用不同特征層特征融合之后的結(jié)果來做預(yù)測。
②要讓輸入的分布盡可能地接近模型預(yù)訓(xùn)練的分布。先用ImageNet做預(yù)訓(xùn)練,之后使用原圖上采樣得到的圖像來做微調(diào),使用微調(diào)的模型來預(yù)測原圖經(jīng)過上采樣的圖像。該方法提升效果比較顯著。
③采用多尺度輸入訓(xùn)練方式來訓(xùn)練網(wǎng)絡(luò);
④借鑒Cascade R-CNN的設(shè)計思路,優(yōu)化目標(biāo)檢測中Two-Stage方法中的IOU閾值。檢測中的IOU閾值對于樣本的選取是至關(guān)重要的,如果IOU閾值過高,會導(dǎo)致正樣本質(zhì)量很高,但是數(shù)量會很少,會出現(xiàn)樣本比例不平衡的影響;如果IOU閾值較低,樣本數(shù)量就會增加,但是樣本的質(zhì)量也會下降。如何選取好的IOU,對于檢測結(jié)果來說很重要。⑤采用分割代替檢測方法,先分割,后回歸bbox來檢測微小目標(biāo)。
14.闡述一下目標(biāo)檢測任務(wù)中的多尺度
輸入圖片的尺寸對檢測模型的性能影響相當(dāng)明顯,事實上,多尺度是提升精度最明顯的技巧之一。在基礎(chǔ)網(wǎng)絡(luò)部分常常會生成比原圖小數(shù)十倍的特征圖,導(dǎo)致小物體的特征描述不容易被檢測網(wǎng)絡(luò)捕捉。通過輸入更大、更多尺寸的圖片進行訓(xùn)練,能夠在一定程度上提高檢測模型對物體大小的魯棒性,僅在測試階段引入多尺度,也可享受大尺寸和多尺寸帶來的增益。
檢測網(wǎng)絡(luò)SSD中最后一層是由多個尺度的feature map一起組成的。FPN網(wǎng)絡(luò)中采用多尺度feature map分層融合,分層預(yù)測的方法可以提升小目標(biāo)的檢測效果。
闡述一下如何進行多尺度訓(xùn)練
多尺度訓(xùn)練可以分為兩個方面:一個是圖像金字塔,一個是特征金字塔
1、人臉檢測的MTCNN就是圖像金字塔,使用多種分辨率的圖像送到網(wǎng)絡(luò)中識別,時間復(fù)雜度高,因為每幅圖都要用多種scale去檢測。2、FPN網(wǎng)絡(luò)屬于采用了特征金字塔的網(wǎng)絡(luò),一次特征提取產(chǎn)生多個feature map即一次圖像輸入完成,所以時間復(fù)雜度并不會增加多少3、faster rcnn多個anchor帶來的多種尺寸的roi可以算muti scale思想的應(yīng)用。
15.如果有很長,很小,或者很寬的目標(biāo),應(yīng)該如何處理目標(biāo)檢測中如何解決目標(biāo)尺度大小不一的情況 ?小目標(biāo)不好檢測,有試過其他的方法嗎?比如裁剪圖像進行重疊
小目標(biāo)不好檢測的兩大原因:1)數(shù)據(jù)集中包含小目標(biāo)的圖片比較少,導(dǎo)致模型在訓(xùn)練的時候會偏向medium和large的目標(biāo)。2)小目標(biāo)的面積太小了,導(dǎo)致包含目標(biāo)的anchor比較少,這也意味著小目標(biāo)被檢測出的概率變小。
改進方法: 1)對于數(shù)據(jù)集中含有小目標(biāo)圖片較少的情況,使用過度采樣(oversample)的方式,即多次訓(xùn)練這類樣本。2)對于第二類問題,則是對于那些包含小物體的圖像,將小物體在圖片中復(fù)制多分,在保證不影響其他物體的基礎(chǔ)上,人工增加小物體在圖片中出現(xiàn)的次數(shù),提升被anchor包含的概率。3)使用FPN;4)RPN中anchor size的設(shè)置一定要合適,這樣可提高proposal的準(zhǔn)確率。5)對于分辨率很低的小目標(biāo),我們可以對其所在的proposal進行超分辨率,提升小目標(biāo)的特征質(zhì)量,更有利于小目標(biāo)的檢測。
16.檢測的框角度偏移了45度,這種情況怎么處理
RRPN也是基于Faster R-CNN,引入RPN,它對比CTPN加入了旋轉(zhuǎn)信息。CTPN只能檢測水平文本,而RRPN可以檢測任意方向的文本,因為CTPN的提議框是水平的,而RRPN的提議框帶有旋轉(zhuǎn)角度。為什么提出旋轉(zhuǎn)的提議框呢?因為水平提議框在檢測傾斜文本的時候會帶有一些冗余(非文本部分)
參考文獻
Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 779-788.
Redmon J, Farhadi A. YOLO9000: better, faster, stronger[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 7263-7271.
Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018.
Lin T Y, Dollár P, Girshick R, et al. Feature pyramid networks for object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 2117-2125.
Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.
Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[J]. arXiv preprint arXiv:1506.01497, 2015.
Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[J]. arXiv preprint arXiv:1506.01497, 2015.
參考鏈接
https://zhuanlan.zhihu.com/p/137735486
https://zhuanlan.zhihu.com/p/137736076
https://blog.csdn.net/wshdkf/article/details/80456588
https://www.cnblogs.com/eilearn/p/9061814.html
https://zhuanlan.zhihu.com/p/56405179
https://bbs.cvmart.net/topics/1310
https://blog.csdn.net/zxd52csx/article/details/82795104
https://zhuanlan.zhihu.com/p/133368642
https://blog.csdn.net/xys430381_1/article/details/88355956
https://www.zhihu.com/question/271781123/answer/517607398
https://zhuanlan.zhihu.com/p/57760020
https://blog.csdn.net/weixin_38708130/article/details/83720633
本文亮點總結(jié)
1.NMS算法流程為:1.對所有預(yù)測框的置信度降序排序2.選出置信度最高的預(yù)測框,確認(rèn)其為正確預(yù)測,并計算他與其他預(yù)測框的IOU 3.根據(jù)2中計算的IOU去除重疊度高的,IOU>threshold閾值就刪除 4.剩下的預(yù)測框返回第1步,直到?jīng)]有剩下的為止
2.Mask RCNN主要的貢獻在于如下:1.強化了基礎(chǔ)網(wǎng)絡(luò):通過ResNeXt-101+FPN用作特征提取網(wǎng)絡(luò),達到state-of-the-art的效果。2.ROIAlign替換之前faster rcnn中的ROI Pooling,解決錯位(Misalignment)問題。3.使用新的Loss Function:Mask RCNN的損失函數(shù)是分類,回歸再加上mask預(yù)測的損失之和。
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯溫州大學(xué)《機器學(xué)習(xí)課程》視頻 本站qq群851320808,加入微信群請掃碼:總結(jié)
以上是生活随笔為你收集整理的【深度学习】一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win11系统怎样设置更改密码
- 下一篇: 技术员联盟win11系统64位专业版镜像