1說一下非極大值抑制(NMS)
用處:本質(zhì)是搜索局部極大值,抑制非極大值元素。
原理:NMS為非極大值抑制,用來抑制檢測時冗余的框。
大致算法流程為:
@1.對所有預(yù)測框的置信度降序排序
@2.選出置信度最高的預(yù)測框,確認其為正確預(yù)測,并計算他與其他預(yù)測框的IOU
@3.根據(jù)2中計算的IOU去除重疊度高的,IOU>threshold閾值就刪除
@4.剩下的預(yù)測框返回第1步,直到?jīng)]有剩下的為止(需要注意的是:Non-Maximum Suppression一次處理一個類別,如果有N個類別,Non-Maximum Suppression就需要執(zhí)行N次。)
假設(shè)兩個目標靠的很近,則會識別成一個bbox,會有什么問題,怎么解決?
@當兩個目標靠的非常近時,置信度低的會被置信度高的框抑制掉,從而兩個目標靠的非常近時會被識別成一個bbox。為了解決這個問題,可以使用softNMS(基本思想:用稍低一點的分數(shù)來代替原有的分數(shù),而不是直接置零)
2為什么提出anchor box?
主要有兩個原因:一個窗口只能檢測一個目標、無法解決多尺度問題。
目前anchor box尺寸的選擇主要有三種方式:人為經(jīng)驗選取、k-means聚類、作為超參數(shù)進行學(xué)習(xí)
為什么使用不同尺寸和不同長寬比? 為了得到更大的交并比(IOU)。
3Faster R-CNN是如何解決正負樣本不平衡的問題?
限制正負樣本比例為1:1,如果正樣本不足,就用負樣本補充,這種方法后面研究工作用的不多。通常針對類別不平衡問題可以從調(diào)整樣本數(shù)或修改loss weight兩方面去解決,常用的方法有OHEM、OHNM、class balanced loss和Focal loss。
Faster RCNN怎么篩選正負anchor
我們給兩種錨點分配一個正標簽:(i)具有與實際邊界框的重疊最高交并比(IoU)的錨點,(ii)具有與實際邊界框的重疊超過0.7 IoU的錨點。IoU比率低于0.3,我們給非正面的錨點分配一個負標簽。
4簡要闡述一下One-Stage、Two-Stage模型
One-Stage檢測算法,沒有selective search產(chǎn)生region proposal的階段,直接產(chǎn)生物體的類別概率和位置坐標,經(jīng)過單次檢測即可直接獲得最終的檢測結(jié)果。相比Two-Stage有更快的速度。代表網(wǎng)絡(luò)有YOLO v1/v2/v3/9000,SSD,Retina-Net. (two-stage算法中的roi pooling會對目標做resize, 小目標的特征被放大,其特征輪廓也更為清晰,因此檢測也更為準確)Two-Stage檢測算法將檢測問題劃分成兩個階段,首先是獲取region proposal進行位置精修和分類階段。相比于One-Stage,精度高,漏檢率也低,但是速度較慢,代表網(wǎng)絡(luò)有Fast rcnn,F(xiàn)aster rcnn,mask rcnn等。
Two-Stage和One-Stage的異同
(回答的是
Two-Stage先對前景背景做了篩選,再進行回歸,回歸效果比較好,準度高但是相比較慢,
One-Stage是直接對特征上的點進行直接回歸,優(yōu)點是速度快,因為用了多層特征圖出框可能小目標效果比較好一點(個人看法),缺點是因為正負樣本失衡導(dǎo)致效果較差,要結(jié)合難例挖掘。)
one stage在哪些具體方面檢測精度不高(ROI+default box的深層理解)
(one-stage算法對小目標檢測效果較差,如果所有的anchor都沒有覆蓋到這個目標,那么這個目標就會漏檢。)
Faster rcnn的兩階段訓(xùn)練和end-to-end訓(xùn)練的不一樣 (回答的是就是把RPN和二階段拆開訓(xùn),然后追問RPN在ENDTOEND中怎么回傳,答TOTALLoss中有一階段和二階段的LOSS,只是回傳影響的部分不一樣。)
目標檢測的發(fā)展歷程,從傳統(tǒng)到深度(傳統(tǒng)部分回答的算子結(jié)合分類器分類,簡單說了一下缺陷,深度部分說了RCNN,FAST,FASTER,SSD,YOLO,FPN,MASK RCNN,Cascade RCNN,都簡單的介紹了一下)傳統(tǒng)目標檢測:主線:區(qū)域選擇->特征提取->分類器
傳統(tǒng)的做目標檢測的算法基本流程如下:
- 使用不同尺度的滑動窗口選定圖像的某一區(qū)域為候選區(qū)域;
- 從對應(yīng)的候選區(qū)域提取如Harr HOG LBP LTP等一類或者多類特征;
- 使用Adaboost SVM 等分類算法對對應(yīng)的候選區(qū)域進行分類,判斷是否屬于待檢測的目標。
缺點:1)基于滑動窗口的區(qū)域選擇策略沒有針對性,時間復(fù)雜度高,窗口冗余2)手工設(shè)計的特征對于多樣性的變化沒有很好的魯棒性
5YOLOV1、YOLOV2、YOLOV3復(fù)述一遍 YOLOv1到v3的發(fā)展歷程以及解決的問題。
YOLO系列算法是一類典型的one-stage目標檢測算法,其利用anchor box將分類與目標定位的回歸問題結(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個類別的概率分數(shù)。
創(chuàng)新點:
- 將整張圖作為網(wǎng)絡(luò)的輸入,直接在輸出層回歸bounding box的位置和所屬的類別
- 速度快,one stage detection的開山之作損失函數(shù)設(shè)計細節(jié): YOLOv1對位置坐標誤差,IoU誤差,分類誤差均使用了均方差作為損失函數(shù)。激活函數(shù)(最后一層全連接層用線性激活函數(shù),其余層采用leak RELU)
缺點:
- 首先,每個單元格只預(yù)測2個bbox,然后每個單元格最后只取與gt_bbox的IOU高的那個最為最后的檢測框,也只是說每個單元格最多只預(yù)測一個目標。
- 損失函數(shù)中,大物體 IOU 誤差和小物體 IOU 誤差對網(wǎng)絡(luò)訓(xùn)練中 loss 貢獻值接近(雖然采用求平方根方式,但沒有根本解決問題)。因此,對于小物體,小的 IOU 誤差也會對網(wǎng)絡(luò)優(yōu)化過程造成很大的影響,從而降低了物體檢測的定位準確性。
- 由于輸出層為全連接層,因此在檢測時,YOLO 訓(xùn)練模型只支持與訓(xùn)練圖像相同的輸入分辨率的圖片。
- 和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物體檢測標注數(shù)據(jù)和imagenet物體分類標注數(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的大小,在一定程度上,這可以提高定位的準確率。缺點: 識別物體位置精準性差,召回率低(在每個網(wǎng)格中預(yù)測兩個bbox這種約束方式減少了對同一目標的多次檢測)
(4)YOLO系列anchor的設(shè)計原理,kmeans的原理,anchor距離如何度量,如何改進k-means原理:
K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評價指標,即認為兩個對象的距離越近,其相似度就越大。該算法認為簇是由距離靠近的對象組成的,因此把得到緊湊且獨立的簇作為最終目標。由于從標記文件的width,height計算出的anchor boxes的width和height都是相對于整張圖片的比例(w=anchor_width*****input_width/downsamples h=anchor_height*input_height/downsamples)
6.簡要闡述一下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ù))計算屬于各類物體的概率以及坐標調(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è)置,雖然使用了圖像金字塔的思路,但是對小目標的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對小目標的檢測效果一般,作者認為小目標在高層沒有足夠的信息對小目標檢測的改進可以從下面幾個方面考慮:
- 增大輸入尺寸
- 使用更低的特征圖做檢測(比如S3FD中使用更低的conv3_3檢測)
- FPN(已經(jīng)是檢測網(wǎng)絡(luò)的標配了)
7簡要闡述一下RetinaNet
RetinaNet的作者對one-stage檢測器準確率不高的問題原因進行探究,發(fā)現(xiàn)主要問題在于正負類別不均衡,提出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ò)負責(zé)計算feature map,子任務(wù)網(wǎng)絡(luò)一個負責(zé)目標分類,一個負責(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ò)中使用的控制正負樣本數(shù)量比的方法是難樣本挖掘方法,loss是分類+回歸的loss。而RetinaNet網(wǎng)絡(luò)的基礎(chǔ)網(wǎng)絡(luò)是resnet+FPN,是真正將低維度的特征和高維度的特征進行了特征融合后再來做檢測的。且控制正負樣本的方法是使用Focal Loss。
8faster 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)生坐標,又產(chǎn)生每種類別的概率。YOLO中將每張圖分成7*7的網(wǎng)格,每個網(wǎng)格默認可能屬于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)提出的新的目標檢測網(wǎng)絡(luò)。該網(wǎng)絡(luò)可以在有效地完成目標檢測的同時完成實例分割。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分支。
9分析一下SSD,YOLO,Faster rcnn等常用檢測網(wǎng)絡(luò)對小目標檢測效果不好的原因
SSD,YOLO等單階段多尺度算法,小目標檢測需要較高的分辨率,
1 SSD對于高分辨的低層特征沒有再利用,而這些層對于檢測小目標很重要。按SSD的設(shè)計思想,其實SSD對小目標應(yīng)該有比較好的效果,但是需要重新精細設(shè)計SSD中的default box,比如重新設(shè)計min_sizes參數(shù),擴大小default box的數(shù)量來cover住小目標。但是隨著default box數(shù)量的增加,網(wǎng)絡(luò)速度也會降低。
2 YOLO網(wǎng)絡(luò)可以理解為是強行把圖片分割成7*7個網(wǎng)格,每個網(wǎng)格預(yù)測2個目標,相當于只有98個anchor,所以不管是小目標,還是大目標,YOLO的表現(xiàn)都不是很理想,但是由于只需處理少量的anchor,所以YOLO的速度上有很大優(yōu)勢。
3 Faster rcnn系列對小目標檢測效果不好的原因是faster rcnn只用卷積網(wǎng)絡(luò)的最后一層,但是卷積網(wǎng)絡(luò)的最后一層往往feature map太小,導(dǎo)致之后的檢測和回歸無法滿足要求。甚至一些小目標在最后的卷積層上直接沒有特征點了。所以導(dǎo)致faster rcnn對小目標檢測表現(xiàn)較差。
10手寫計算IOU代碼
有兩個框,設(shè)第一個框的兩個關(guān)鍵點坐標:(x1,y1)(X1,Y1),第二個框的兩個關(guān)鍵點坐標:(x2,y2)(X2,Y2)。以大小寫來區(qū)分左上角坐標和右下角坐標。首先,要知道兩個框如果有交集,一定滿足下面這個公式:max(x1,x2)<=min(X1,X2) && max(y1,y2)<=min(Y1,Y2)!!!!
11講一下目標檢測優(yōu)化的方向
【可以從數(shù)據(jù)集下手,提升特征表征強度(backbone下手,加深加寬或者換卷積方式),RPN下手(級聯(lián),F(xiàn)PN,IOU NET),LOSS(行人檢測領(lǐng)域有些問題,如重疊,可以靠修改loss提升準確度)。】
12 anchor設(shè)置的意義:
其實就是多尺度的滑動窗口
13 如果只能修改RPN網(wǎng)絡(luò)的話,怎么修改可以提升網(wǎng)絡(luò)小目標檢出率
①修改RPN網(wǎng)絡(luò)的結(jié)構(gòu),比如引入FPN結(jié)構(gòu),利用多層feature map融合來提高小目標檢測的精度和召回;
②針對小目標重新精細設(shè)計Anchor的尺寸和形狀,從而更好地對小目標進行檢測;
14 如何理解concat和add這兩種常見的feature map特征融合方式
兩者都可以理解為整合特征圖信息。concat是通道數(shù)的增加;add是特征圖相加,通道數(shù)不變。 add是描述圖像的特征下的信息量增多了,但是描述圖像的維度本身并沒有增加,只是每一維下的信息量在增加,這顯然是對最終的圖像的分類是有益的。而concatenate是通道數(shù)的合并,也就是說描述圖像本身的特征數(shù)(通道數(shù))增加了,而每一特征下的信息是沒有增加。 concat每個通道對應(yīng)著對應(yīng)的卷積核。 而add形式則將對應(yīng)的特征圖相加,再進行下一步卷積操作,相當于加了一個先驗:對應(yīng)通道的特征圖語義類似,從而對應(yīng)的特征圖共享一個卷積核(對于兩路輸入來說,如果是通道數(shù)相同且后面帶卷積的話,add等價于concat之后對應(yīng)通道共享同一個卷積核)。因此add可以認為是特殊的concat形式。但是add的計算量要比concat的計算量小得多。
15 闡述一下如何檢測小物體
小目標難以檢測的原因:**分辨率低,圖像模糊,攜帶的信息少
①借鑒FPN的思想,在FPN之前目標檢測的大多數(shù)方法都是和分類一樣,使用頂層的特征來進行處理。雖然這種方法只是用到了高層的語義信息,但是位置信息卻沒有得到,尤其在檢測目標的過程中,位置信息是特別重要的,而位置信息又是主要在網(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)化目標檢測中Two-Stage方法中的IOU閾值。檢測中的IOU閾值對于樣本的選取是至關(guān)重要的,如果IOU閾值過高,會導(dǎo)致正樣本質(zhì)量很高,但是數(shù)量會很少,會出現(xiàn)樣本比例不平衡的影響;如果IOU閾值較低,樣本數(shù)量就會增加,但是樣本的質(zhì)量也會下降。如何選取好的IOU,對于檢測結(jié)果來說很重要。
⑤采用分割代替檢測方法,先分割,后回歸bbox來檢測微小目標。
16闡述一下目標檢測任務(wù)中的多尺度
輸入圖片的尺寸對檢測模型的性能影響相當明顯,事實上,多尺度是提升精度最明顯的技巧之一。在基礎(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ù)測的方法可以提升小目標的檢測效果。
闡述一下如何進行多尺度訓(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)用。
17 如果有很長,很小,或者很寬的目標,應(yīng)該如何處理目標檢測中如何解決目標尺度大小不一的情況 小目標不好檢測,有試過其他的方法嗎?
嗎?
比如裁剪圖像進行重疊小目標不好檢測的兩大原因:
1)數(shù)據(jù)集中包含小目標的圖片比較少,導(dǎo)致模型在訓(xùn)練的時候會偏向medium和large的目標。
2)小目標的面積太小了,導(dǎo)致包含目標的anchor比較少,這也意味著小目標被檢測出的概率變小。
改進方法:
1)對于數(shù)據(jù)集中含有小目標圖片較少的情況,使用過度采樣(oversample)的方式,即多次訓(xùn)練這類樣本。
2)對于第二類問題,則是對于那些包含小物體的圖像,將小物體在圖片中復(fù)制多分,在保證不影響其他物體的基礎(chǔ)上,人工增加小物體在圖片中出現(xiàn)的次數(shù),提升被anchor包含的概率。
3)使用FPN;
4)RPN中anchor size的設(shè)置一定要合適,這樣可提高proposal的準確率
5)對于分辨率很低的小目標,我們可以對其所在的proposal進行超分辨率,提升小目標的特征質(zhì)量,更有利于小目標的檢測。
18 介紹YOLO,并且解釋一下YOLO為什么可以這么快?
yolo是單階段檢測算法的開山之作,最初的yolov1是在圖像分類網(wǎng)絡(luò)的基礎(chǔ)上直接進行的改進,摒棄了二階段檢測算法中的RPN操作,直接對輸入圖像進行分類預(yù)測和回歸,所以它相對于二階段的目標檢測算法而言,速度非常的快,但是精度會低很多;但是在迭代到目前的V4、V5版本后,yolo的精度已經(jīng)可以媲美甚至超過二階段的目標檢測算法,同時保持著非常快的速度,是目前工業(yè)界內(nèi)最受歡迎的算法之一。yolo的核心思想是將輸入的圖像經(jīng)過backbone特征提取后,將的到的特征圖劃分為S x S的網(wǎng)格,物體的中心落在哪一個網(wǎng)格內(nèi),這個網(wǎng)格就負責(zé)預(yù)測該物體的置信度、類別以及坐標位置。
19 介紹一下YOLOv3的原理?
yolov3采用了作者自己設(shè)計的darknet53作為主干網(wǎng)絡(luò),darknet53借鑒了殘差網(wǎng)絡(luò)的思想,與resnet101、resnet152相比,在精度上差不多的同時,有著更快的速度,網(wǎng)絡(luò)里使用了大量的殘差跳層連接,并且拋棄了pooling池化操作,直接使用步長為2的卷積來實現(xiàn)下采樣。
在特征融合方面,為了加強小目標的檢測,引入了類似與FPN的多尺度特征融合,特征圖在經(jīng)過上采樣后與前面層的輸出進行concat操作,淺層特征和深層特征的融合,使得yolov3在小目標的精度上有了很大的提升。
yolov3的輸出分為三個部分,首先是置信度、然后是坐標信息,最后是分類信息。在推理的時候,特征圖會等分成S x S的網(wǎng)格,通過設(shè)置置信度閾值對格子進行篩選,如果某個格子上存在目標,那么這個格子就負責(zé)預(yù)測該物體的置信度、坐標和類別信息。
20 YOLO、SSD和Faster-RCNN的區(qū)別,他們各自的優(yōu)勢和不足分別是什么?
YOLO、SSD和Faster-RCNN都是目標檢測領(lǐng)域里面非常經(jīng)典的算法,無論是在工業(yè)界還是學(xué)術(shù)界,都有著深遠的影響;Faster-RCNN是基于候選區(qū)域的雙階段檢測器代表作,而YOLO和SSD則是單階段檢測器的代表;在速度上,單階段的YOLO和SSD要比雙階段的Faster-RCNN的快很多,而YOLO又比SSD要快,在精度上,F(xiàn)aster-RCNN精度要優(yōu)于單階段的YOLO和SSD;不過這也是在前幾年的情況下,目標檢測發(fā)展到現(xiàn)在,單階段檢測器精度已經(jīng)不虛雙階段,并且保持著非常快的速度,現(xiàn)階段SSD和Faster-RCNN已經(jīng)不更了,但是YOLO仍在飛快的發(fā)展,目前已經(jīng)迭代到V4、V5,速度更快,精度更高,在COCO精度上雙雙破了50map,這是很多雙階段檢測器都達不到的精度,而最近的Scale yolov4更是取得了55map,成功登頂榜首。當然雖然SSD和Faster-RCNN已經(jīng)不更了,但是有很多他們相關(guān)的變體,同樣有著不錯的精度和性能,例如Cascade R-CNN、RefineDet等等。
21 介紹一下CenterNet的原理,它與傳統(tǒng)的目標檢測有什么不同點?
CenterNet是屬于anchor-free系列的目標檢測算法的代表作之一,與它之前的目標算法相比,速度和精度都有不小的提高,尤其是和yolov3相比,在速度相同的情況下,CenterNet精度要比yolov3高好幾個點。它的結(jié)構(gòu)非常的簡單,而且不需要太多了后處理,連NMS都省了,直接檢測目標的中心點和大小,實現(xiàn)了真正的anchor-free。
CenterNet論文中用到了三個主干網(wǎng)絡(luò):ResNet-18、DLA-34和Hourglass-104,實際應(yīng)用中,也可以使用resnet-50等網(wǎng)絡(luò)作為backbone;CenterNet的算法流程是:一張512512(1x3x512x512)的圖片輸入到網(wǎng)絡(luò)中,經(jīng)過backbone特征提取后得到下采樣32倍后的特征圖(1x2048x16x16),然后再經(jīng)過三層反卷積模塊上采樣到128128的尺寸,最后分別送入三個head分支進行預(yù)測:分別預(yù)測物體的類別、長寬尺寸和中心點偏置。其中推理的核心是從headmap中提取需要的bounding box,通過使用3*3的最大池化,檢查當前熱點的值是否比周圍的8個臨近點值都大,每個類別取100個這樣的點,經(jīng)過box后處理后再進行閾值篩選,得到最終的預(yù)測框。
22 你知道哪些邊緣端部署的方案?
目前大多數(shù)深度學(xué)習(xí)算法模型要落地對算力要求還是比較高的,如果在服務(wù)器上,可以使用GPU進行加速,但是在邊緣端或者算力匱乏的開發(fā)板子上,不得不對模型進一步的壓縮或者改進,也可以針對特定的場景使用市面上現(xiàn)有的推理優(yōu)化加速框架進行推理。目前來說比較常見的幾種部署方案為:
nvidia GPU:pytorch->onnx->TensorRT
intel CPU: pytorch->onnx->openvino
移動端(手機、開發(fā)板等):pytorch->onnx->MNN、NCNN、TNN、TF-lite、Paddle-lite、RKNN等
搭環(huán)境
依賴庫:動態(tài)庫 *.o *.lib (官方) (開發(fā)環(huán)境是什么庫,推理環(huán)境就得是什么庫,不然可能發(fā)生不兼容)
配置環(huán)境變量:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH (依賴庫路徑)轉(zhuǎn)模型
pytorch->onnx->tensorRT推理模型
(1) 讀取模型文件 根據(jù)每個框架的API
(2) 送入輸入數(shù)據(jù) opencv 應(yīng)該和原工程保持一致 Anchor, Mean(0.485, 0.456, 0.406), Std(1/255)
(3) 推理模型 根據(jù)每個框架的API
(4) 獲取輸出結(jié)果 根據(jù)API
(5) 后處理 (1) 輸出的是一個什么樣的數(shù)據(jù),它的形狀是多少 (2) 知道輸出的格式模型部署難點:
模型大小 -> 量化(float16、int8)、蒸餾、剪枝
算子不適配 -> 根據(jù)框架提供的API來開發(fā)算子實現(xiàn)跑在硬件資源上
推理時間 -> 模型大小、模型層的復(fù)雜度、量化
當前部署場景精度 -> 訓(xùn)練事情
后處理 -> 寫到對應(yīng)框架里面去,調(diào)用框架本身對應(yīng)的硬件資源(GPU, NPU, TPU)
23 你最常用的幾種目標檢測算法是什么?為什么選擇這些算法,你選擇它們的場景分別是什么?
在工作中,我通常會根據(jù)不同的任務(wù)選取不同的算法模型:
目標檢測:yolov5、yolov3、CenterNet、SSD、Faster RCNN、EfficientDet;
圖像分類:mobileNetv2、mobileNetv3、ghostNet、ResNet系列、ShuffleNetV2、EfficientNet;
實例分割:mask-rcnn、yolact、solo;
語義分割:deeplabv3、deeplabv3+、UNet;
文本檢測:CTPN、PSENet、DBNet、YOLOV5;
文本識別:CRNN+CTC、CRNN+Attention;
通常,我比較喜歡性能好的模型,性能的指標由兩部分,一個是精度,一個是速度。比如在目標檢測中,用的比較多的是yolo系列,特別是v4、v5出來后。通常在圖像分類的任務(wù)上,分類并不困難的情況下會選擇一些輕量型的網(wǎng)絡(luò),能夠一定程度上節(jié)省算力資源。其他領(lǐng)域的任務(wù)算法抉擇也大同小異。
24 介紹一下yolov5
yolov5和v4都是在v3基礎(chǔ)上改進的,性能與v4基旗鼓相當,但是從用戶的角度來說,易用性和工程性要優(yōu)于v4,
v5的原理可以分為四部分:
輸入端、backbone、Neck、輸出端;
1、輸入端:針對小目標的檢測,沿用了v4的mosaic增強,當然這個也是v5作者在他復(fù)現(xiàn)的v3上的原創(chuàng),對不同的圖片進行隨機縮放、裁剪、排布后進行拼接;
2、是自適應(yīng)錨框計算,在v3、v4中,初始化錨框是通過對coco數(shù)據(jù)集的進行聚類得到,v5中將錨框的計算加入了訓(xùn)練的代碼中,每次訓(xùn)練時,自適應(yīng)的計算不同訓(xùn)練集中的最佳錨框值;
3、backbone:沿用了V4的CSPDarkNet53結(jié)構(gòu),但是在圖片輸入前加入了Focus切片操作,CSP結(jié)構(gòu)實際上就是基于Densnet的思想,復(fù)制基礎(chǔ)層的特征映射圖,通過dense block發(fā)送到下一個階段,從而將基礎(chǔ)層的特征映射圖分離出來。這樣可以有效緩解梯度消失問題,支持特征傳播,鼓勵網(wǎng)絡(luò)重用特征,從而減少網(wǎng)絡(luò)參數(shù)數(shù)量。在V5中,提供了四種不同大小的網(wǎng)絡(luò)結(jié)構(gòu):s、m、l、x,通過depth(深度)和width(寬度)兩個參數(shù)控制。
4、Neck:采用了SPP+PAN多尺度特征融合,PAN是一種自下而上的特征金字塔結(jié)構(gòu),是在FPN的基礎(chǔ)上進行的改進,相對于FPN有著更好的特征融合效果。
5、輸出端:沿用了V3的head,使用GIOU損失進行邊框回歸,輸出還是三個部分:置信度、邊框信息、分類信息。
25 在你的項目中為什么選用yolov5模型而不用v4?
yolov4和v5都是yolo系列性能非常優(yōu)秀的算法,性能上不分伯仲,而且最近出來的scale yolov4更是達到了55的map。在項目中選擇v5的原因是因為在v4、v5出來之前,就一直在用U版的yolov3,相對于原版的v3,做了很多改進,而V5是在這個hub的基礎(chǔ)上改進的,用起來上手比較快,而且代碼和之前的v3相似度很高,可以無縫對接以前的項目。另一方面,v5可選的模型比較多,在速度和精度上對比v4有一定的優(yōu)勢,而且模型采用半精度存儲,模型很小,訓(xùn)練和推理上都很友好。通常用s或者m版本的基本上都可以滿足項目需求。
比較官方一點的回答:
1、使用Pytorch框架,對用戶非常友好,能夠方便地訓(xùn)練自己的數(shù)據(jù)集,相對于YOLOV4采用的Darknet框架,Pytorch框架更容易投入生產(chǎn)。
2、代碼易讀,整合了大量的計算機視覺技術(shù),非常有利于學(xué)習(xí)和借鑒。
不僅易于配置環(huán)境,模型訓(xùn)練也非常快速,并且批處理推理產(chǎn)生實時結(jié)果。
3、 能夠直接對單個圖像,批處理圖像,視頻甚至網(wǎng)絡(luò)攝像頭端口輸入進行有效推理。
4、 能夠輕松的將Pytorch權(quán)重文件轉(zhuǎn)化為安卓使用的ONXX格式,然后可以轉(zhuǎn)換為OPENCV的使用格式,或者通過CoreML轉(zhuǎn)化為IOS格式,直接部署到手機應(yīng)用端。
5、最后YOLO V5s高達140FPS的對象識別速度令人印象非常深刻,使用體驗非常棒。
26 介紹yolov5中Focus模塊的原理和作用
Focus模塊將W、H信息集中到通道空間,輸入通道擴充了4倍,作用是可以使信息不丟失的情況下提高計算力。
具體操作為把一張圖片每隔一個像素拿到一個值,類似于鄰近下采樣,這樣我們就拿到了4張圖,4張圖片互補,長的差不多,但信息沒有丟失,拼接起來相當于RGB模式下變?yōu)?2個通道,通道多少對計算量影響不大,但圖像縮小,大大減少了計算量。
以Yolov5s的結(jié)構(gòu)為例,原始640×640×3的圖像輸入Focus結(jié)構(gòu),采用切片操作,先變成320×320×12的特征圖,再經(jīng)過一次32個卷積核的卷積操作,最終變成320×320×32的特征圖。
27 yolov4和v5均引入了CSP結(jié)構(gòu),介紹一下它的原理和作用
CSP結(jié)構(gòu)是一種思想,它和ResNet、DenseNet類似,可以看作是DenseNet的升級版,它將feature map拆成兩個部分,一部分進行卷積操作,另一部分和上一部分卷積操作的結(jié)果進行concate。主要解決了三個問題:
- 增強CNN的學(xué)習(xí)能力,能夠在輕量化的同時保持著準確性;
- 降低計算成本;
- 降低內(nèi)存開銷。CSPNet改進了密集塊和過渡層的信息流,優(yōu)化了梯度反向傳播的路徑,提升了網(wǎng)絡(luò)的學(xué)習(xí)能力,同時在處理速度和內(nèi)存方面提升了不少。
強CNN學(xué)習(xí)能力的Backbone:CSPNet
28 你還了解當下哪些比較流行的目標檢測算法?
目前比較流行的目標檢測算法有以下幾種類型,不局限于這幾種:
anchor-based:yolov3、yolov4、yolov5、pp-yolo、SSD、Faster-R-CNN、Cascade R-CNN、EfficientDet,RetinaNet、MTCNN;
anchor-free:CornerNet、CenterNet、CornerNet-lite、FCOS;
transform:DETR; mobile-detector:mobileNet-yolo、mobileNet-SSD、tiny-yolo、nanodet、yolo-fastest、YOLObile、mobilenet-retinaNet、MTCNN;
還有很多很多。。。mmdetection里面就實現(xiàn)了幾十種,可以去看一看,這里面最想總結(jié)的是移動端的det,很多都是一些大佬在原生算法基礎(chǔ)上的改進,有時間出一篇文章專門記錄這個類型的檢測器。
29 EfficentDet為什么可以做到速度兼精度并存 ?
30 介紹Faster R-CNN和Cascade R-CNN
Faster-RCNN是基于候選區(qū)域的雙階段檢測器代表作,總的來說可以分為四部分:首先是主干卷積網(wǎng)絡(luò)的特征提取,然后是RPN層,RPN層通過softmax判斷anchors屬于positive或者negative,再利用邊框回歸修正anchors獲得精確的候選區(qū)域,RPN生成了大量的候選區(qū)域,這些候選區(qū)域和feature maps一起送入ROI pooling中,得到了候選特征區(qū)域,最后送入分類層中進行類別判斷和邊框回歸,得到最終的預(yù)測結(jié)果。Cascade R-CNN算法是在Faster R-CNN上的改進,通過級聯(lián)幾個檢測網(wǎng)絡(luò)達到不斷優(yōu)化預(yù)測結(jié)果的目的,預(yù)普通的級聯(lián)不同,Cascade R-CNN的幾個檢測網(wǎng)絡(luò)是基于不同的IOU閾值確定的正負樣本上訓(xùn)練得到的。簡單來說cascade R-CNN是由一系列的檢測模型組成,每個檢測模型都基于不同IOU閾值的正負樣本訓(xùn)練得到,前一個檢測模型的輸出作為后一個檢測模型的輸入,因此是stage by stage的訓(xùn)練方式,而且越往后的檢測模型,其界定正負樣本的IOU閾值是不斷上升的。
31 SSD相比于YOLO做了哪些改進?
這里說的是SSD相對于YOLOv1的改進,因為現(xiàn)在SSD已經(jīng)不更了,但是YOLO還如日中天,已經(jīng)發(fā)展到v5,性能在目標檢測算法里一騎絕塵。那么最原始的SSD相對于YOLOv1做了哪些改進呢?
1、SSD提取了不同尺度的特征圖來做檢測,而YOLO在檢測是只用了最高層的Feature maps;
2、 SSD引入了Faster-RCNN的anchor機制,采用了不同尺度和長寬比的先驗框;SSD網(wǎng)絡(luò)結(jié)構(gòu)是全卷積,采用卷積做檢測,YOLO用到了FC(全連接)層;
SSD算法流程;
3、 輸入一幅圖,讓圖片經(jīng)過卷積神經(jīng)網(wǎng)絡(luò)(VGG)提取特征,生成feature map 抽取其中六層的feature map,然后分別在這些feature map層上面的每一個點構(gòu)造
4、個不同尺度大小的default box,然后分別進行檢測和分類(各層的個數(shù)不同,但每個點都有) 將生成的所有default box都集合起來,全部丟到NMS中,輸出篩選后的default box。
32 了解哪些開源的移動端輕量型目標檢測?
輕量型的目標檢測其實有很多,大多數(shù)都是基于yolo、SSD的改進,當然也有基于其他算法改的;比較常用的改進方法是使用輕量型的backbone替換原始的主干網(wǎng)絡(luò),例如mobilenet-ssd、mobilenet-yolov3、yolo-fastest、yolobile、yolo-nano、nanodet、tiny-yolo等等,在減少了計算量的同時保持著不錯的精度,經(jīng)過移動部署框架推理后,無論是在服務(wù)器還是移動端都有著不錯的精度和速度
33 對于小目標檢測,你有什么好的方案或者技巧?
1、圖像金字塔和多尺度滑動窗口檢測(MTCNN)
2、多尺度特征融合檢測(FPN、PAN、ASFF)
3、增大訓(xùn)練、檢測圖像分辨率;
4、超分策略放大后檢測;
34 介紹一下NMS和IOU的原理;
NMS全稱是非極大值抑制,顧名思義就是抑制不是極大值的元素。在目標檢測任務(wù)中,通常在解析模型輸出的預(yù)測框時,預(yù)測目標框會非常的多,其中有很多重復(fù)的框定位到了同一個目標,NMS的作用就是用來除去這些重復(fù)框,從而獲得真正的目標框。而NMS的過程則用到了IOU,IOU是一種用于衡量真實和預(yù)測之間相關(guān)度的標準,相關(guān)度越高,該值就越高。IOU的計算是兩個區(qū)域重疊的部分除以兩個區(qū)域的集合部分,
簡單的來說就是交集除以并集。在NMS中,首先對預(yù)測框的置信度進行排序,依次取置信度最大的預(yù)測框與后面的框進行IOU比較,當IOU大于某個閾值時,可以認為兩個預(yù)測框框到了同一個目標,而置信度較低的那個將會被剔除,依次進行比較,最終得到所有的預(yù)測框。
35 目標檢測中如何處理正負樣本不平衡的問題?
那么正負樣本不均衡,會帶來什么問題呢?
1、訓(xùn)練效率低下
2、模型精度變低。 過多的負樣本會主導(dǎo)訓(xùn)練,使模型退化。
36 yolov3為什么這么快?
yolov3和SSD比網(wǎng)絡(luò)更加深了,雖然anchors比SSD少了許多,但是加深的網(wǎng)絡(luò)深度明顯會增加更多的計算量,那么為什么yolov3會比SSD快3倍?
SSD用的很老的VGG16,V3用的其最新原創(chuàng)的Darknet,darknet-53與resnet的網(wǎng)絡(luò)結(jié)構(gòu),darknet-53會先用1x1的卷積核對feature降維,隨后再利用3x3的卷積核升維,這個過程中,就會大大降低參數(shù)的計算量以及模型的大小,有點類似于低秩分解。究其原因是做了很多優(yōu)化,比如用卷積替代替代全連接,1X1卷積減小計算量等。
37 基于Anchor-base的目標檢測算法相對于基于Anchor-free的目標檢測算法有什么缺陷?
1、基于Anchor-base的目標檢測算法需要在訓(xùn)練前通過聚類決定一系列的anchor,這些anchor具有很強的領(lǐng)域性,泛化差;
2、 anchor機制增加了detection heads的復(fù)雜性,增加了預(yù)測數(shù)量,這在邊緣AI系統(tǒng)中,是一個瓶頸。
anchor-free在yolox中的做法是:
在每個位置只預(yù)測一次,預(yù)測四個值:左上角xy坐標的偏移、寬、高。將中心3X3=9的區(qū)域設(shè)置為正樣本,稱作:center sampling.
37 什么是梯度消失和梯度爆炸問題?
在反向傳播過程中需要對激活函數(shù)進行求導(dǎo),如果導(dǎo)數(shù)大于1,那么隨著網(wǎng)絡(luò)層數(shù)的增加梯度更新將會朝著指數(shù)爆炸的方式增加這就是梯度爆炸。同樣如果導(dǎo)數(shù)小于1,那么隨著網(wǎng)絡(luò)層數(shù)的增加梯度更新信息會朝著指數(shù)衰減的方式減少這就是梯度消失。因此,梯度消失、爆炸,其根本原因在于反向傳播訓(xùn)練法則,屬于先天不足。
38 梯度消失、爆炸的解決方案
1、預(yù)訓(xùn)練加微調(diào)
2、權(quán)重正則化: 針對梯度爆炸提出的,其思想是設(shè)置一個梯度剪切閾值,然后更新梯度的時候,如果梯度超過這個閾值,那么就將其強制限制在這個范圍之內(nèi)。這可以防止梯度爆炸。
3、relu、leakrelu、elu等激活函數(shù)
4、batch normalization :具有加速網(wǎng)絡(luò)收斂速度,提升訓(xùn)練穩(wěn)定性的效果。
反向傳播式子中有w的存在,所以w的大小影響了梯度的消失和爆炸,batchnorm就是通過對每一層的輸出規(guī)范為均值和方差一致的方法,消除了w帶來的放大縮小的影響,進而解決梯度消失和爆炸的問題。
5、LSTM
6、殘差結(jié)構(gòu)
參考文獻:https://zhuanlan.zhihu.com/p/51490163
。