理解SSD多盒-實時目標檢測
這幅圖片解釋了構成直觀的解釋關於SSD多盒目標檢測技術。
自從AlexNet在2012年ILSVRC比賽中對於影象識別任務打敗傳統計算機視覺方法後給研究界帶來風暴。在計算機視覺領域,傳統神經網路在影象分類表現出色,包含分類圖片,給定類別集合(例如貓,狗)使用網路來決定影象中呈現的最可信的類別。現在,深度學習網路比人類在影象分類表現更好。然而我們作為人類在觀察和互動世界時可以比分類影象任務做的更多。我們也定位和分類各個成分在我們的視覺中。這些是更復雜的任務。
1 The Region-Convolutional Neural Network(R-CNN)
研究員開發RCNN來處理目標檢測任務,定位和分類。廣泛地說,一個R-CNN是一種特別型別的CNN其能夠定位和檢測物體在影象中:輸出是一系列bounding box集合,很接近的匹配每個檢測的物體,也對於每個檢測的物體輸出類別。在RCNN之後發展了Fast-RCNN , Faster-RCNN,每一次提升是使用更快的網路完成實時目標檢測。但是上述網路仍然遺留一下問題:
a) 訓練資料是不實用的並且太長
b) 訓練要經歷多個階段(例如訓練region proposal 和 分類器)
c) 網路在推論時太慢了(也就是當處理非訓練資料時)
幸運的是,現在新的技術出現來解決RCNN的瓶頸,能夠實時目標檢測。最有名的是YOLO(you only look once)和SSD multiBox(Single Shot Detector).在本文中,我們將討論SSD。
2 Single Shot MultiBox Detector
SSD論文在2016年11月放出並達到當前最好的表現和精度對於目標檢測任務,74% mAP 每秒59幀在標準資料集PascalVOC和COCO。為了更好理解SSD,我們從解釋這個架構的名字來由開始:
* Single shot:這意味著物體定位和分類任務在單次網路傳播中完成
* MultiBox:這是對於bounding box迴歸技術的名稱
* Detector: 網路是一個物體檢測器,並能分類這些檢測的物體
3 架構
當你看上述圖是,SSD的架構建立在一個VGG-16架構上,但拋棄了全連線層。使用VGG-16作為基網路的原因是因為其在高質量影象分類任務和它對於問題的流行性的高表現,遷移學習能幫助提高結果。而不是原始的VGG全連線層,一系列輔助卷積層(從conv6)被增加,因此能夠在多尺度提取特徵並逐漸減少輸入的大小到每個接下來的層。
4MultiBox
SSD的bounding box 迴歸技術受Szegedy的工作關於Multibox影響, 一種對於快速類別不可知的bounding box座標提議方法。在MultiBox工作中使用Inception 風格的卷積網路。1*1 卷積幫助降維當維度的數量下降時(但是寬和高保持不變)
MultiBox的損失函式也結合兩個重要組成:
1. 置信度損失:這度量多大置信度關於計算的Bounding box的物體性。分類的交叉熵被用來計算該損失。
2. 定位損失:這度量了網路預測的Bounding box和真實的box距離多遠,這裡使用L2範數。
關於損失的表達:multibox_loss = confidence_loss +alpha * location_loss.
alpha平衡定位損失的貢獻。目標是找到最優減少損失函式的引數值,因此讓預測值距離真實值更近。
5 multi-box 先驗和IOU
在Bounding box 生成的周圍邏輯旋轉更復雜。在Multibox中,研究員創造了我們稱為先驗(或者角點在Faster-RCNN),就是提前就算,固定尺寸的bounding boxes很接近原始真實boxes的分佈。事實上這些先驗以他們的在並集率的交集集合選出(Intersection over Union ratio IOU, 有時也稱Jaccard 索引)大於0.5閾值的。因此MultiBox使用先驗開始作為預測並嘗試去迴歸更接近真實值的bounding box
最後架構包含11個先驗每個特徵圖單元(8*8, 6*6, 4*4, 3*3, 2*2)和只有一個1*1 的特徵圖,導致最後每張圖片有1420個先驗,因此增強在多尺度下輸入影象的魯棒收斂,來檢測多種大小的物體。
最後MultiBox 只保留了前K個預測,其中有最小的定位和置信度損失。
6 SSD 提升
返回到SSD,一些調整增加去使網路更有能力去定位和分類物體。
固定先驗:不像MultiBox, 每個特徵圖單元關聯一系列預設不同維度和方面比例的Bounding box。這些先驗是手動選擇,然而在MultiBox,他們被選擇因為他們的IOU關於真實值超過了0.5。在理論上應該允許SSD去泛化到任何輸入型別,不要求一個預訓練階段對於先驗生成。例如假設我們有數b個預設的bounding box在每個特徵圖單元上,c個類別取分類,在一個給定特徵圖大小為f = m * n , SSD應該計算f(b+c)的值對於這個特徵圖。
定位損失:SSD使用平滑的L1範數來計算定位損失。沒有L2範數精確,但也很高效並給SSD更多空間對於調整,它沒有試圖為在bounding box預測的畫素級最好。
分類:MultiBox在分類任務表現差,然而SSD表現好。因此對於每個預測的bounding box,一系列c個類別預測被計算。
Training & Running SSD
資料集
Pascal VOC和COCO是較好的開始點。
預設的bounding boxes
推薦去計算一系列變化的bounding boxes, 在不同尺度和方面比率來確保捕獲絕大多數的物體。SSD論文中每個特徵圖有6個bounding boxes。
特徵圖
特徵圖(也就是卷積塊的結果)是在不同尺度下影象中顯著特徵的表達。因此在多種特徵圖中跑MultiBox增加了最終檢測定位和分類的物體的似然。
7 Hard Negative Mining
在訓練彙總,大多數bounding box只有較低的IOU並因此被認為是負訓練樣本,我們可能最終使用不成比例的負樣本數在訓練中。因此不是使用所有負預測,而是保持一定負樣本到正樣本的比例為3:1。需要保持負樣本的原因是因為網路也需要學習和被更清晰的告知什麼組成了一個不正確的檢測。
8 資料增強
SSD作者聲稱資料增強很重要來教會網路變得更魯棒對於輸入不同物體大小。他們生成額外的訓練樣本具有不同的IOU比例包含原始影象塊和隨機塊。並且,每個影象也隨機水平旋轉以0.5的概率,隱藏確保潛在物體出現在左和右具有相似的似然。
9 非最大抑制(Non-Maximun Suppression)
在SSD的一次前向傳輸在推斷是生成的大量boxes,有必要減少大量的Bounding box通過應用NMS技術:boxes具有一個置信度閾值少於cf(例如0.01) 和IOU少於lt(例如0.45)會被拋棄,只要前N個預測保留。這確保了只有最可能的預測被保留,噪音被移除。
10 額外知識
以下幾點觀察:
* 許多預設的boxes具有更精確的檢測,儘管這影響速度降低
* 在多層用MultiBox導致更好的預測,由於檢測器在多解析度中檢測特徵
* 80%的時間花在基VGG-16網路,這意味有一個更快的相同精度的網路 SSD的表現會更好。
* SSD 混淆相似類別的物體。這可能因為定位對於多類別是共享的
* SSD-500(最搞解析度使用512*512輸入影象)完成最好mAP 在PascalVOC2007 為76.8%,幀率為22
* SSD在相似的物體上產生較差的表現,因為他們可能沒有仔所有特徵圖中出現。增加輸入影象解析度能緩解問題但不能完全解決。
*
相關推薦
理解SSD多盒-實時目標檢測
這幅圖片解釋了構成直觀的解釋關於SSD多盒目標檢測技術。 自從AlexNet在2012年ILSVRC比賽中對於影象識別任務打敗傳統計算機視覺方法後給研究界帶來風暴。在計算機視覺領域,傳統神經網路在影象分類表現出色,包含分類圖片,給定類別集合(例如貓,狗)使
Faster R-CNN:利用區域提案網路實現實時目標檢測 論文翻譯
Faster R-CNN論文地址:Faster R-CNN Faster R-CNN專案地址:https://github.com/ShaoqingRen/faster_rcnn 摘要 目前最先進的目標檢測網路需要先用區域提案演算法推測目標位置,像SPPnet1和Fast R-CNN2
深度學習(三)——tiny YOLO演算法實現實時目標檢測(tensorflow實現)
一、背景介紹 YOLO演算法全稱You Only Look Once,是Joseph Redmon等人於15年3月發表的一篇文章。本實驗目標為實現YOLO演算法,借鑑了一部分材料,最終實現了輕量級的簡化版YOLO——tiny YOLO,其優勢在於實現簡單,目標檢測迅速。 [1]文章連結:ht
Faster R-CNN:用區域提案網路實現實時目標檢測
摘要 最先進的目標檢測網路依賴於區域建議演算法來假設物體的位置.像sppnet[1]和快速r-cnn[2]這樣的進步減少了這些檢測網路的執行時間,將區域提案計算暴露為瓶頸。在本文中,我們引入了一個區域提案網路(RPN),它與檢測網路共享全影象卷積特徵,從而實現了幾乎免費的區域提案。RPN是一個完
手把手教你如何用objection detection API實現實時目標檢測(三)
本文是這一系列文章的最後一篇,由於之前兩篇文章已經對專案的環境配置和引數修改做了較為詳細的介紹。因此,在本文中我們不再贅述上述部分,讀者可以看一下之前的兩篇文章。《手把手教你如何用objection detection API實現實時目標檢測(一)》、《手把手教你如何用objecti
手把手教你如何用objection detection API實現實時目標檢測(二)
上文我們介紹如何配置用objection detection API實現實時目標檢測的環境(原文連結),在這裡,我們將給大家介紹如何如何自己動手做一個目標檢測系統來實現對影象的識別。 一、準備圖片 在這裡博主想要實現的是使用API來對手機進行檢測,因此我們首先需要從網上
手把手教你如何用objection detection API實現實時目標檢測(一)
本系列文章共分為三篇,包括環境配置、對影象的目標檢測和利用攝像頭實現實時檢測三個部分,本文主要介紹相關的環境配置部分。 step1:準備相關檔案 在這裡我們使用的是GPU版本的TensorFlow,因此在此之前我們需要下載所需要的相關資料。主要有如下幾部分: CUDA9.
機器視覺 OpenCV—python 基於深度學習的實時目標檢測
一、目標檢測原理 運動目標在工廠,監控,自動駕駛中有著舉足輕重的地位。在做實時目標檢測之前,我做過OpenCV的目標檢測和運動軌跡及運動方向預判等,但這些都是基於OpenCV的,有一定的侷限性。為此,從這篇部落格開始將給大家帶來一系列的實時目標檢測,與大家一起
mac下安裝darknet和opencv跑yolo-v2實時目標檢測
參考: 環境: 整個安裝過程用兩個字來形容就是“折騰”。第一步先安裝好opencv,一個強大開源計算機視覺庫。從官網下載了2.4.10的原始碼進行編譯安裝: cd opencv-2.4.10 mkdir build cd build cmake -G
Yolo-lite:實時的適用於移動裝置的目標檢測演算法(比ssd和mobilenet更快)
YOLO-LITE: A Real-Time Object Detection Algorithm Optimized for Non-GPU Computers 論文:Yolo-lite paper 專案:Yolo-lite 摘要: 作者提出了一種可以應用於行動式裝置中執行的
深度學習之目標檢測常用演算法原理+實踐精講 YOLO / Faster RCNN / SSD / 文字檢測 / 多工網路
深度學習之目標檢測常用演算法原理+實踐精講 YOLO / Faster RCNN / SSD / 文字檢測 / 多工網路 資源獲取連結:點選這裡 第1章 課程介紹 本章節主要介紹課程的主要內容、核心知識點、課程涉及到的應用案例、深度學習演算法設計通用流程、適應人群、學習本門
深度學習之目標檢測常用算法原理+實踐精講 YOLO / Faster RCNN / SSD / 文本檢測 / 多任務網絡
資源 測試 -h 轉換 條件 評價 框架 檢測方法 結果 深度學習之目標檢測常用算法原理+實踐精講 YOLO / Faster RCNN / SSD / 文本檢測 / 多任務網絡 資源獲取鏈接:點擊這裏 第1章 課程介紹 本章節主要介紹課程的主要內容、核心知識點、課程
目標檢測之SSD:RefineNet演算法理解
RefineDet是CVPR2018的論文,個人覺得是一篇很不錯的文章,大致上是SSD演算法和RPN網路、FPN演算法的結合,可以在保持SSD高效的前提下提高檢測效果(實驗效果提升挺明顯)。第一眼看到這篇文章就讓我想起了RON,畢竟都是想做one stage和two stag
CSMA/CD協議(載波偵聽多路訪問/碰撞檢測) 最小幀長理解
ges 傳輸 分享 png 理解 時延 cnblogs mage csma/cd 以下的幀長有的是指幀的時間長度,幀的時間長度= 幀長/傳輸時延 CSMA/CD協議(載波偵聽多路訪問/碰撞檢測) 最小幀長理解
學習筆記-目標檢測、定位、識別(RCNN,Fast-RCNN, Faster-RCNN,Mask-RCNN,YOLO,SSD 系列)
0. 前言 說到深度學習的目標檢測,就要提到傳統的目標檢測方法。 傳統的目標檢測流程: 1)區域選擇(窮舉策略:採用滑動視窗,且設定不同的大小,不同的長寬比對影象進行遍歷,時間複雜度高) 2)特徵提取(SIFT、HOG等;形態多樣性、光照變化多樣性、背景多樣性使得特徵魯棒性差)
計算機視覺之目標檢測一之SSD
目標檢測——SSD 編者:楊柳依依 日期:2018年9月27日 今天給大家介紹一篇目標檢測領域中經典的一篇論文,15年發表在ECCV。 1.背景知識 在介紹論文之前,我們先簡單瞭解下本文的思路和做法。 作者提出了一種單個深度神經網路來解決影象中的目標檢測的問題。這種方法
目標檢測演算法理解:從R-CNN到Mask R-CNN
因為工作了以後時間比較瑣碎,所以更多的時候使用onenote記錄知識點,但是對於一些演算法層面的東西,個人的理解畢竟是有侷限的。我一直做的都是影象分類方向,最近開始接觸了目標檢測,也看了一些大牛的論文,雖然網上已經有很多相關的演算法講解,但是每個人對同一個問題的理解都不太一樣,本文主
目標檢測中對端對端(End to end)的理解
End to end:指的是輸入原始資料,輸出的是最後結果,應用在特徵學習融入演算法,無需單獨處理。 end-to-end(端對端)的方法,一端輸入我的原始資料,一端輸出我想得到的結果。只關心輸入和輸出,中間的步驟全部都不管。 端到端指的是輸入是原始資料,輸出是最後的結果,原來輸入端不是
caffe-ssd使用預訓練模型做目標檢測
首先參考https://www.jianshu.com/p/4eaedaeafcb4 這是一個傻瓜似的目標檢測樣例,目前還不清楚圖片怎麼轉換,怎麼驗證,後續繼續跟進 模型測試(1)圖片資料集上測試 python examples/ssd/score_ssd_pascal.py 輸出為
快速小目標檢測--Feature-Fused SSD: Fast Detection for Small Objects
Feature-Fused SSD: Fast Detection for Small Objects 本文針對小目標檢測問題,對 SSD 模型進行了一個小的改進,將 contextual information 引入到 SSD 中 幫助SSD檢測小目標。 contextual inf