0
本文作者: AI研習(xí)社-譯站 | 2019-04-04 10:28 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
You Only Look Once(YOLO): Implementing YOLO in less than 30 lines of Python Code
作者 | Garima Nishad
翻譯 | yasi
校對(duì) | 約翰遜·李加薪 審核 | 醬番梨 整理 | 立魚王
原文鏈接:
https://towardsdatascience.com/you-only-look-once-yolo-implementing-yolo-in-less-than-30-lines-of-python-code-97fb9835bfd2
"You Only Look Once"是一個(gè)實(shí)時(shí)對(duì)象檢測(cè)算法,它避免了在生成區(qū)域建議上花費(fèi)太多的時(shí)間。它不能完美地定位物體,而是優(yōu)先考慮速度和識(shí)別。
像 faster R-CNN 這樣的架構(gòu)是準(zhǔn)確的,但是模型本身相當(dāng)復(fù)雜,有多個(gè)輸出,每個(gè)輸出都是潛在的錯(cuò)誤來源。一旦接受訓(xùn)練,他們?nèi)匀粵]有足夠的速度來實(shí)時(shí)運(yùn)行。
設(shè)想一輛自動(dòng)駕駛汽車看到這條街道。對(duì)于一輛自動(dòng)駕駛汽車來說,能夠探測(cè)到周圍物體的位置是至關(guān)重要的,比如行人、汽車和交通燈。最重要的是,這種檢測(cè)必須在接近實(shí)時(shí)的情況下進(jìn)行,這樣汽車才能安全行駛在街道上。汽車并不總是需要知道所有這些物體是什么?它只是需要需要知道,千萬(wàn)不要撞到這些物體,另外,它也確實(shí)需要識(shí)別紅綠燈、自行車和行人,以便能夠正確遵守道路規(guī)則。在下面的圖中,我使用YOLO算法來定位和分類不同的對(duì)象,有一個(gè)定位每個(gè)對(duì)象的包圍框和相應(yīng)的類標(biāo)簽。
動(dòng)態(tài)的YOLO
很顯然,下一個(gè)問題就是,YOLO的運(yùn)行原理是什么?
假設(shè)我們有一個(gè)CNN,它被訓(xùn)練來識(shí)別幾個(gè)類,包括交通燈、汽車、人和卡車。我們給了它兩種類型的錨盒,一種高的和一種寬的,這樣它就可以處理不同形狀的重疊對(duì)象。一旦CNN經(jīng)過訓(xùn)練,我們現(xiàn)在可以通過輸入新的測(cè)試圖像來檢測(cè)圖像中的物體。
設(shè)定神經(jīng)網(wǎng)絡(luò)
什么是 anchor box ?YOLO可以很好地工作于多個(gè)對(duì)象,其中每個(gè)對(duì)象都與一個(gè)網(wǎng)格單元關(guān)聯(lián)。但是在重疊的情況下,一個(gè)網(wǎng)格單元實(shí)際上包含兩個(gè)不同對(duì)象的中心點(diǎn),我們可以使用 anchor box 來允許一個(gè)網(wǎng)格單元檢測(cè)多個(gè)對(duì)象。
動(dòng)態(tài)Anchor Boxes
在上圖中,我們看到我們?cè)趫D像中有一個(gè)人和一輛汽車重疊。因此,汽車的一部分被遮擋了。我們還可以看到,邊界框,汽車和行人的中心都落在同一個(gè)網(wǎng)格單元中。由于每個(gè)網(wǎng)格單元的輸出向量只能有一個(gè)類,因此它將被強(qiáng)制選擇汽車或人。但是通過定義 Anchor Boxes ,我們可以創(chuàng)建一個(gè)更長(zhǎng)的網(wǎng)格單元格向量,并將多個(gè)類與每個(gè)網(wǎng)格單元關(guān)聯(lián)起來。
Anchor Boxes 具有定義的縱橫比,并且他們?cè)噲D檢測(cè)恰好適合具有該比率的箱子的物體。例如,由于我們正在檢測(cè)寬車和站立的人,我們將定義一個(gè)大致與汽車形狀相似的 Anchor Box ,這個(gè)箱子比它高的寬。我們將定義另一個(gè) Anchor Box ,它可以容納一個(gè)站立的人,它的高度比它寬。
首先將測(cè)試圖像分解成網(wǎng)格,然后網(wǎng)絡(luò)產(chǎn)生輸出向量,每個(gè)網(wǎng)格單元一個(gè)。這些向量告訴我們一個(gè)單元格中是否有一個(gè)對(duì)象,該對(duì)象是什么類,以及該對(duì)象的邊界框。由于我們使用兩個(gè) Anchor Box ,我們將為每個(gè)網(wǎng)格單元獲得兩個(gè)預(yù)測(cè)的錨箱。實(shí)際上,大多數(shù)預(yù)測(cè)的錨箱都具有非常低的PC(物體存在概率)值。
在生成這些輸出向量之后,我們使用非最大抑制來消除不可能的邊界框。對(duì)于每個(gè)類,非最大抑制消除了PC值低于某個(gè)給定閾值的邊界框。
什么是非極大抑制(NMS)?
YOLO使用非極大抑制(NMS) 僅保留最佳邊界框。 NMS的第一步是刪除檢測(cè)概率小于給定NMS閾值的所有預(yù)測(cè)邊界框。在下面的代碼中,我們將此NMS閾值設(shè)置為0.6。這意味著將刪除檢測(cè)概率小于0.6的所有預(yù)測(cè)邊界框。
什么是交并比閾值(IOU)?
在刪除具有低檢測(cè)概率的所有預(yù)測(cè)邊界框之后,NMS中的第二步是選擇具有最高檢測(cè)概率的邊界框,并消除其 交并比 (IOU)值高于給定的所有邊界框。 IOU門檻。在下面的代碼中,我們將此IOU閾值設(shè)置為0.4。這意味著將刪除所有相對(duì)于最佳邊界框的IOU值大于0.4的預(yù)測(cè)邊界框。
然后選擇PC值最高的邊界框,并刪除與此太相似的邊界框。它將重復(fù)此操作,直到每個(gè)類的所有非最大邊界框都被刪除為止。最終的結(jié)果將如下圖所示,我們可以看到黃色已經(jīng)有效地檢測(cè)到了很多物體在圖像中比如這樣的一輛車和一個(gè)人。雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
YOLO物體檢測(cè)
現(xiàn)在您已經(jīng)了解了YOLO的工作原理,您可以看到為什么它是當(dāng)今使用最廣泛的對(duì)象檢測(cè)算法之一。
查看這里的代碼:
YOLO(https://github.com/Garima13a/YOLO-Object-Detection),以獲得YOLO算法的代碼實(shí)現(xiàn),并真正了解它如何檢測(cè)不同場(chǎng)景中的對(duì)象和不同程度的置信水平。
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
點(diǎn)擊【用不到 30 行 Python 代碼實(shí)現(xiàn) YOLO】即可訪問:
https://ai.yanxishe.com/page/TextTranslation/1539
Python中文書籍大集合
100本Python中文電子書,6份源代碼,Python從入門到出家,一條龍服務(wù)。
包含Python基礎(chǔ)、進(jìn)階、爬蟲、算法實(shí)現(xiàn)、深度學(xué)習(xí)、TensorFlow、NLP等等
友情提示:文件大小為2.89GB,慎用流量下載,可以先收藏喲~~!
點(diǎn)擊鏈接即可獲?。?/span>https://ai.yanxishe.com/page/resourceDetail/676
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。