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