當前位置:
首頁 > 最新 > 華盛頓大學推出YOLOv3:檢測速度比SSD和RetinaNet快3倍

華盛頓大學推出YOLOv3:檢測速度比SSD和RetinaNet快3倍

編譯 | 馬卓奇

編輯 | Natalie,Emily

AI 前線導讀:近日,來自華盛頓大學的 Joseph Redmon 和 Ali Farhadi 推出了 YOLO 的最新版本 YOLOv3。通過對 YOLO 的設計細節進行了一些優化,新的模型在準確率相當的情況下實現了檢測速度的高度提升。本文是 AI 前線的第 25 篇論文導讀,節選自作者發表的技術報告,主要介紹了 YOLOv3 的解決方案細節、實驗結果以及使用 YOLOv3 進行檢測的方法。

更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front)

論文原文:YOLOv3: An Incremental Improvement

解決方案

這一部分主要介紹了 YOLOv3 的解決方案。作者從其他研究中獲取了非常多的靈感,訓練了一個新的分類網路。因此原文章的這一部分主要從邊界框的預測、類別預測和特徵抽取等方面詳細介紹整個系統。

邊界框預測

YOLOv3 沿用了 YOLO9000 邊界框預測的方法,使用維度聚類中心作為 anchor box 來預測邊界框。YOLOv3 用 logistic 回歸預測每一個邊界框的對象狀態。如果某一個邊界框先驗與真實值重疊最多,對象狀態值應該為 1。如果邊界框不是最好的,但重疊部分超過閾值(0.5),則忽略這個預測。與 Fast-RCNN 不同的是,YOLOv3 只給每個真實對象分配一個邊界框先驗。如果一個邊界框沒有分配到一個真實對象,它對坐標或類別預測不會帶來損失,只是影響對象狀態。

圖 1 帶有維度先驗和定位預測的邊界框。通過預測離聚類中心的偏移度來預測邊界框的寬和高,並使用 Sigmoid 函數預測邊界框相對於濾波器應用位置的中心坐標。

類別預測

每個邊界框會使用多類標分類來預測其中包含物體的類別。作者沒有使用 Softmax,因為其對性能提升不是必要的,因此只是使用獨立的 logistic 分類。在訓練過程中,使用二值交叉熵損失進行類預測。

這種方法對於更複雜的數據集,如 Open Images Dataset,是很有幫助的。這個數據集有許多重疊的標籤,使用 Softmax 則會帶來每個邊界框只有一個類標的強加假設,但現實往往不是這樣的。多類標的方法可以對數據更好的建模。

跨尺度預測

YOLOv3 在 3 個不同的尺度預測邊界框。系統使用類似於特徵金字塔的網路從這些尺度中提取特徵。作者在基本的特徵提取器後添加了幾個卷積層。網路的最後一層會給出一個三維張量,其中編碼了邊界框、對象狀態和類別預測信息。在 COCO 數據集的實驗中,在每個尺度預測了 3 個邊界框,分別包含 4 個邊界框的偏移量,1 個對象狀態值,80 個類標預測值,因此張量大小為 n×n×[3*(4+1+80)]。

特徵提取

作者使用了新的網路進行特徵提取,新網路是 Darknet-19 和殘差網路的混合體。網路使用連續的 3×3 和 1×1 卷積層,但是加入了快捷連接。由於網路有 53 層卷積層,所以作者將新網路稱作 Darknet-53。

表 1 Darknet-53 結構

新網路遠比 Darknet-19 更強大,而且比 resnet-101 和 resnet-152 更有效。

表 2 主幹架構的性能對比(ImageNet 數據集):準確率(top-1 誤差、top-5 誤差)、運算次數(/ 十億)、每秒浮點數運算次數(/ 十億),以及 FPS 值。

總而言之,YOLOv3 的先驗檢測(Prior detection)系統將分類器或定位器重新用於檢測任務。他們將模型應用於圖像的多個位置和尺度。評分較高的區域可以視為檢測結果。

此外,YOLOv3 將一個單獨的神經網路應用於整張圖像,該網路將圖像劃分為不同的區域,然後預測每個區域的邊界框和類標概率,這些邊界框會通過預測的類標概率進行加權。

YOLOv3 與基於分類器的系統相比有一些優勢。它在測試時會查看整個圖像,所以它的預測利用了圖像中的全局信息。與 R-CNN 需要對單一圖像進行數千次預測不同,它通過一個單獨網路評估進行預測。這令 YOLOv3 非常快,比 R-CNN 快 1000 倍,比 Fast R-CNN 快 100 倍。

YOLOv3 測試效果

YOLOv3 可以在 22ms 之內執行完一張 320 × 320 的圖片,mAP 得分 28.2,和 SSD 的準確率相當,但是比它快三倍。此外,它在 Titan X 上經過 51 ms 訓練,mAP50 為 57.9,相比之下,RetinaNet 經過 198ms 的訓練之後 mAP50 為 57.5。對比起來,兩者的性能差異不大,但是 YOLOv3 比 RetinaNet 快 3.8 倍。

COCO 數據集實驗

表 3 從表中可以看出,YOLOv3 表現得不錯。RetinaNet 需要大約 3.8 倍的時間來處理一張圖像,YOLOv3 相比 SSD 變體要好得多,並在 AP_50 指標上和當前最佳模型有得一拼。

準確率 vs 速度

圖 2 以 0.5 IOU 為指標的速度與準確率關係曲線(mAP vs 推斷時間)。從圖中可以看出 YOLOv3 準確率高,速度也快。

如何使用 YOLOv3

用預訓練模型進行檢測接下來將給大家介紹如何利用 YOLO 系統使用預訓練模型來檢測物體。首先需要安裝 Darknet,或者運行命令:

這樣一來 cfg/ 子目錄中就有了 YOLO 配置文件,接下來下載預訓練模型的權重信息(237 MB),或運行命令:

然後就可以運行檢測器:

輸出如下:

Darknet 會輸出檢測到的物體、自信度以及檢測時間。我們沒有用 OpenCV 編譯 Darknet,所以它不能直接顯示檢測情況。檢測情況保存在 predictions.png 中。大家可以打開這個圖片來查看檢測到的對象。我們在 CPU 上使用 Darknet,檢測每張圖片大約需要 6-12 秒,如果使用 GPU 將快得多。

我還附上了一些其他圖片可以嘗試,或許能給大家提供靈感,data/eagle.jpg、data/dog.jpg、data/person.jpg 或 data/horses.jpg。

detect 命令是對通用版本的簡寫,通用版本命令如下:

如果你只是想檢測圖像,並不需要了解這個,但如果你想做其他的事情,比如在網路攝像頭上運行 YOLO,這個命令非常有用(稍後詳細描述)。

多圖像檢測

在命令行不給出圖像信息的話就可以連續運行多個圖片。當載入完配置和權重,你將看到如下提示:

輸入類似 data/horses.jpg 的圖像路徑來進行邊框預測:

一旦完成,它將提示你輸入更多路徑來檢測不同的圖像。使用 Ctrl-C 退出程序。

改變檢測閾值

默認情況下,YOLO 只顯示檢測到的自信度不小於 0.25 的物體。可以在 YOLO 命令中加入 -thresh來更改檢測門限。例如,將門限設置為 0 可以顯示所有的檢測結果。./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0網路攝像頭實時檢測 要運行 demo,需要用 CUDA 和 OpenCV 來編譯 Darknet。然後運行如下指令:

YOLO 將會顯示當前的 FPS 和預測的分類,以及帶有邊框的圖像。

你需要一個連接到電腦的攝像頭並且 OpenCV 也可以連接到,否則就無法運行。如果有多個攝像頭並想選擇其中某一個,可以使用 -c(OpenCV 在默認情況下使用攝像頭 0)語句。如果 OpenCV 可以讀取視頻,也可以在視頻文件中運行:

如何訓練 YOLO

在 VOC 數據集上訓練 YOLO

訓練 YOLO 需要 2007-2012 年的所有 VOC 數據,這是下載地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/,要把所有數據存儲在一個路徑下:

這樣所有的 VOC 訓練數據都在 VOCdevkit/ 子目錄下。

生成標籤

接下來需要生成 Darknet 使用的標籤文件。每張圖需要一個.txt 文件,每一行對應一個目標,格式如下:

x, y, width 和 height 對應圖像的寬和高。需要在 Darknet scripts/ 子目錄下運行 voc_label.py 來生成這些文件。

幾分鐘後,這個腳本將生成所有必需文件。大部分標籤文件存放在 VOCdevkit/VOC2007/labels/ 和 VOCdevkit/VOC2012/labels/ 下,大家可以在目錄下看到如下信息:

類似 2007_train.txt 的文件列出了那一年的圖像集內的圖像。Darknet 需要一個包含所有你想要訓練的圖片的文本文件。在這個例子中,我們訓練了除了 2007 測試集的所有數據。運行如下命令:

現在就有了包含 2007 和 2012 所有訓練驗證數據集的一個大的列表。數據準備工作到這裡就結束了。

修改 Pascal 數據設置

現在進入 Darknet 目錄,需要改變 cfg/voc.data 配置文件讓它指向數據:

替換為你存放 VOC 數據的目錄。

下載預訓練卷積權重

在訓練中使用在 Imagenet 上預訓練的卷積權重。我們這裡使用 darknet53 模型的權重,可以在這裡下載卷積層權重:https://pjreddie.com/darknet/imagenet/#darknet53,或者運行以下命令:

訓練模型

執行下面的命令進行訓練:

在 COCO 數據集上訓練 YOLO 與 VOC 類似,讀者可以在這裡查看詳情:https://pjreddie.com/darknet/yolo/

AI前線

緊跟前沿的AI技術社群

一些粉絲朋友還沒有養成閱讀後點贊的習慣,希望大家在閱讀後順便點個贊,以示鼓勵。原創是一種信仰,專註是一種態度。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI前線 的精彩文章:

春風得意馬蹄疾,AI作詩行不行?
看谷歌團隊如何做位置偏差估計

TAG:AI前線 |