下拉多选择框 实现方式_物体检测之旅(三)|设计选择,经验教训和物体检测的趋势...
物體檢測器,像基于區(qū)域的檢測或者一階段的檢測器,從不同的起點(diǎn)起步,最后越來越相似,都是朝著更快更準(zhǔn)的目的地在前進(jìn)。事實(shí)上,有些性能的差距可能來自于一些微小的實(shí)現(xiàn)上的差別,而不是模型上的優(yōu)劣。在第三部分,我們會研究一些這些具體的設(shè)計(jì)上的差別。然后我們會總結(jié)這一路走來的一些經(jīng)驗(yàn)教訓(xùn)。
邊界框的編碼和損失函數(shù)
不同的檢測器用到了不同的損失函數(shù)和邊界框編碼的方法。例如,SSD預(yù)測是歸一化的寬和高的平方根損失。所以,對于一個小的邊界框來說,一個2像素的誤差要比大的邊界框更加顯著。這里是不同的方法使用的的損失函數(shù)和邊界框的編碼方式。
為了讓模型訓(xùn)練的更好,我們?yōu)椴煌膌oss使用了不同的權(quán)重。例如,在YOLO中,定位的loss的權(quán)重要比分類的高,所以我們可以更好的定位物體。
特征提取器(VGG16, ResNet, Inception, MobileNet)
特征提取器及影響準(zhǔn)確率也影響速度。如果準(zhǔn)確率比速度重要的話,常常使用ResNet和Inception。MobileNet結(jié)合SSD提供一個輕量級的檢測器,可以用在移動設(shè)備上,進(jìn)行實(shí)時的檢測。對于Faster R-CNN和R-FCN,選擇特征提取器的時候,相比SSD會更偏向于準(zhǔn)確性。
非極大值抑制 (nms)
nms只運(yùn)行在CPU上的話,對于一階段的模型來說往往會占用運(yùn)行時間。
數(shù)據(jù)增強(qiáng)
通過剪裁來增強(qiáng)數(shù)據(jù)可以幫助訓(xùn)練檢測不同尺度的物體。在推理的時候,我們可以對輸入圖像使用不同的檢測來提升準(zhǔn)確性。但是往往這樣會很慢,對于有實(shí)時性要求的場景是不合適的。
特征圖的步長
一階段的檢測器使用哪個特征層來進(jìn)行物體檢測常常是可選的。如果每個維度的分辨率降低2倍的話,那么特征圖的步長是2。低分辨率的特征圖常常用來檢測高階的結(jié)構(gòu),這對物體檢測有益。但是空間分辨率的降低有使得檢測小物體變得困難。
速度 v.s. 準(zhǔn)確率
最重要的問題并不是哪個檢測器是最好的。真正的問題是哪個檢測器或者哪種配置能夠給我們最好的速度與準(zhǔn)確率的平衡。下面是速度和準(zhǔn)確率之間的權(quán)衡。
通常來說,Faster R-CNN更加準(zhǔn)確, R-FCN 和 SSD 更加快速。Faster R-CNN使用Inception ResNet,采用300個建議框,在1FPS的時候達(dá)到最佳的準(zhǔn)確率。SSD使用了MobileNet在最快速的模型中具有最高的mAP。這個圖也幫助我們定位速度與準(zhǔn)確率之間的好的平衡點(diǎn)。使用了殘差網(wǎng)絡(luò)的R-FCN模型在準(zhǔn)確率和速度之間達(dá)到了很好的平衡,使用了Resnet的Faster R-CNN能夠達(dá)到類似的性能,如果我們把建議框的數(shù)量限制在50的時候。
特征提取器精度
論文中研究了特征提取器的精度是如何影響檢測器的準(zhǔn)確率的。Faster R-CNN和R-FCN都利用了更好的特征提取器,但是影響不如SSD大。
物體尺寸
對于大的物體,SSD即使使用最簡單的檢測器都表現(xiàn)的非常好。SSD甚至可以匹配上其他的更好的檢測器的精度。但是相比之下,SSD在小物體上的表現(xiàn)很差。
輸入圖像的分辨率
高分辨率可以顯著提高檢測小物體的能力,同時對大物體也有好處。當(dāng)分辨率降低時,準(zhǔn)確率平均降低了15.88%,不過推理時間也平均減少了27.4%。
建議框的數(shù)量
在 Faster R-CNN (FRCNN)中,生成的建議框的數(shù)量可以顯著的影響速度,但是并不會大大的降低準(zhǔn)確率。例如,使用Inception Resnet,使用50個建議框代替300個建議框,Faster R-CNN可以提升3倍的速度,準(zhǔn)確率的降低只有4%。由于R-FCN中每個ROI的工作量更少,所以速度的提升不是那么明顯。
一路走來的過程和未來的趨勢
我們開始于使用滑動窗口來進(jìn)行物體檢測。
# Sliding windows for window in windows patch = get_patch(image, window) results = detector(patch)為了提升速度,我們要么減少窗口的數(shù)量,要么減少每個ROI的工作量(比如說將一些工作移到循環(huán)外面)。R-CNN使用了一個建議區(qū)域生成的網(wǎng)絡(luò)來減少窗口數(shù)量到2000。Fast R-CNN通過特征圖來代替對每個圖像塊進(jìn)行檢測的方式,減少了每個ROI的工作量。這個方法從特征提取中節(jié)省了2000倍的時間。
# Fast R-CNNfeature_maps = process(image)ROIs = region_proposal(feature_maps)for ROI in ROIs patch = roi_pooling(feature_maps, ROI) results = detector2(patch)但是,建議區(qū)域的生成仍然很花時間。Faster R-CNN使用一個卷積網(wǎng)絡(luò)來進(jìn)行建議區(qū)域的生成,代替了原來的外部的建議區(qū)域生成的方法,將推理時間從2.3s減少到了0.3s。Faster R-CNN 還使用了anchors,因此我們的預(yù)測的多樣性更好,而且更加容易訓(xùn)練。減少每個ROI的工作量的路并沒有走完,R-FCN為每個ROIs計(jì)算了位置敏感得分圖。這個得分圖記錄了每個部分找到這個類別的物體的可能性。找到這個物體的概率就是所有的得分的平均。
# R-FCNfeature_maps = process(image)ROIs = region_proposal(feature_maps) score_maps = compute_score_map(feature_maps)for ROI in ROIs V = pool(score_maps, ROI) class_scores = average(V) class_probabilities = softmax(class_scores)雖然R-FCN很快,比Faster R-CNN準(zhǔn)確性稍差一點(diǎn)。但是,我們?yōu)槭裁匆欢ㄒ?階段的計(jì)算呢,一階段進(jìn)行ROIs的提取,另一階段進(jìn)行物體檢測。一階段的檢測器移除了ROIs的提取的步驟,同時的進(jìn)行邊界框的預(yù)測和類別的預(yù)測。
feature_maps = process(image) results = detector3(feature_maps) # No more separate step for ROIsSSD和YOLO都是一階段的物體檢測器。都使用了卷積層來提取特征,后面跟一個卷積來進(jìn)行預(yù)測。都使用了低分辨率的特征圖來進(jìn)行物體檢測。因?yàn)樗麄儗π∥矬w檢測效果不好,準(zhǔn)確率相比基于區(qū)域的檢測器要差。為了補(bǔ)救這個問題,一階段的檢測器添加了高分辨的特征來進(jìn)行物體的檢測。但是,高分辨率的特征中高階的結(jié)構(gòu)信息很少,對物體的預(yù)測不夠準(zhǔn)確。FPN通過從原始的特征圖進(jìn)行上采樣的方式得到高分辨率特征圖,這樣既能夠得到高分辨率的特征圖,有添加了高階的結(jié)構(gòu)化信息,能夠緩解一下這個問題。由于使用了不同的尺寸進(jìn)行檢測,整體的準(zhǔn)確率有了提高。
在訓(xùn)練中,相比物體,我們會遇到更多的是背景。我們會把檢測背景訓(xùn)練的很好,但是檢測真正的物體卻效果一般。Focal loss減少了哪些已訓(xùn)練的很好的類別的重要性。通過組合更加復(fù)雜的特征提取器,FPN和Focal loss,RetinaNet獲得了最佳的準(zhǔn)確率的結(jié)果。
檢測器的差距在縮小。一階段的檢測器使用了更加復(fù)雜的設(shè)計(jì),準(zhǔn)確率越來越高,基于區(qū)域的檢測器優(yōu)化了操作,越來越快。比如說YOLO,就是吸收了其他的檢測器的許多的優(yōu)點(diǎn)。最終,差距可能并不是在基本的模型上,而是在實(shí)現(xiàn)細(xì)節(jié)中。
經(jīng)驗(yàn)教訓(xùn)
- 特征金字塔網(wǎng)絡(luò)產(chǎn)生了豐富的語義信息,同時具有高空間分辨率,提升了準(zhǔn)確率。
- 如果速度不是很重要的話,復(fù)雜的特征提取器如ResNet 和 Inception ResNet是高準(zhǔn)確率的關(guān)鍵。
- 使用輕量級的特征提取器如MobileNet的一階段檢測器適合做實(shí)時的操作,特別是移動設(shè)備。
- 使用batch normalization。
- 進(jìn)行不同的特征提取器的實(shí)驗(yàn),找到速度和準(zhǔn)確性的均衡點(diǎn)。一些輕量級的網(wǎng)絡(luò)能夠顯著的提升速度,而準(zhǔn)確性降低并不多。
- 使用anchors來進(jìn)行邊界框的預(yù)測。
- 仔細(xì)的選擇anchors。
- 在訓(xùn)練的時候進(jìn)行圖像的剪裁,可以學(xué)習(xí)到不同尺度的特征(圖像增強(qiáng))。
- 犧牲一些速度,高分辨率的輸入圖像可以提高準(zhǔn)確率,特別是對于小物體。
- Faster R-CNN使用少一點(diǎn)的建議框可以提高很多速度,準(zhǔn)確率降低也不多。
- 端到端的多任務(wù)訓(xùn)練可以提升性能。
- 對于每個網(wǎng)格的建議框或者預(yù)測框的數(shù)量進(jìn)行試驗(yàn)。
- 對不同的loss(定位,分類等)的權(quán)重進(jìn)行試驗(yàn)。
- 試一試空洞卷積,在同樣的計(jì)算量下,可以提供大的感受野,有助于準(zhǔn)確率。
對于一階段的檢測器:
- 速度快,但是能否超過 Faster R-CNN或者R-FCN的準(zhǔn)確率需要進(jìn)一步驗(yàn)證。
- 同時使用卷積來預(yù)測邊界框和分類。
- 使用多個特征圖來進(jìn)行物體檢測。
- 對于挨得很近的物體,檢測起來有問題。
- 特征提取是速度的瓶頸。可以看看輕量級的網(wǎng)絡(luò),對準(zhǔn)確率影響不大的那種。
英文原文:https://medium.com/@jonathan_hui/what-do-we-learn-from-region-based-object-detectors-faster-r-cnn-r-fcn-fpn-7e354377a7c9
更多文章,請關(guān)注微信公眾號:AI公園
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的下拉多选择框 实现方式_物体检测之旅(三)|设计选择,经验教训和物体检测的趋势...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux如何永久更改ip
- 下一篇: uniapp中加入腾讯云智服小程序插件