衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用簡潔的語言來闡述YOLO算法

深度學習實戰 ? 2018-01-29 15:41 ? 次閱讀

YOLO算法,英文全稱是You Only Look Once,直接谷歌英文全稱就能找到那篇論文,同時作者也在github上開源了代碼。需要說明的是這篇推文是關于yolo v1,還有一個升級版。

顧名思義,這個算法就是只看一遍圖片就能把所有的物體都識別出來,這個算法能夠做到實時的物體檢測,大約能達到40幀每秒,速度是非??斓摹D侨绾稳ト胧诌@個算法呢?相信大家已經看過不少介紹YOLO算法的文章了,所以我在這里也不打算深入去講解這個算法了,而是盡量用簡潔的語言去闡述一下這個如此迷人的算法。

用簡潔的語言來闡述YOLO算法

和其它推文最大的不同是,我會介紹如何從實戰的角度去自己去做一個數據集,如何讓電腦識別特定的一個物體。

那先來看一下我實現的效果是怎么樣的。首先我隨手找了我桌上的藍色水杯,收集了兩百多張自己水杯的圖片,為了減少工作量,我用水杯的數據集去替換了原來是車輛(car)的所有數據。經過十幾個小時的訓練之后,效果如下:

用簡潔的語言來闡述YOLO算法

那怎么去實現呢?首先我覺得你要先“懂”這個算法,至少你要了解它是怎么實現的,原理是什么,輸入輸出是什么。為了學習這個算法,我也是花了大量時間去看作者的論文和代碼。我覺得論文配合代碼是一個很好的學習方式。通過代碼可以很清晰去了解它是如何去實現這個算法的。

這個算法的核心在于它把圖片劃分成了7*7個網格,注意這7*7個網格不是將一張圖片切割成49個小塊,而是說一個網格會對應一個輸出結果。可能會覺得有點抽象,我們先來看圖。

比如說上面這張圖,一共有49個網格,每個網格的任務就是去判斷這個物體的中心點是否落在該網格,如果是落在自身網格,那好,那這個網格就會跟系統匯報。假定上圖中被標記的紅色網格我們把它命名為小格,然后小格發現這里好像有條狗,于是乎它跟系統匯報說:我這里有條狗,然后系統問了一句:那這條狗有多寬有多高?小格好像有點懵,但是根據它的經驗,小格大概能猜出來,于是回答了系統:這條狗大概100像素寬,250像素高吧。到這里,小格的任務就基本完成了,小格只是49個網格之一,其它的網格也一樣。于是系統就收集了49個網格的意見,然后就得到了下圖。

其實在這張圖片中可以出現49*2=81個預測框,也就是說沒一個網格可以有對目標有兩個預測,因此最多可以出現81個預測框。可以在圖中看到,其實會出現很多無用框,相鄰的網格可能會出現相似的結果,以此我們可以通過極大值抑制過濾一部分的預測框。然后就可以得到下圖結果。

但是相信我,即使你已經全部理解了上面我說的,你也不一定能一下子看懂代碼,在我閱讀代碼的時候發現雖然代碼不多,邏輯也比較清晰,但是有一些細節還是讓人難以理解。那我就帶大家來捋一下吧!

比較重要的代碼主要是在pasal_voc.py、config.py、yolo_net.py和train.py。加載數據的代碼在pasal_voc.py里面,代碼并不是很難,不過要注意一點的就是一張圖片的label其實是一個7*7*25的矩陣,一個25的向量組成是這樣的:第一位是0或1,表示是否有物體,然后接下來的四位是邊界框的信息,也就是(x,y,w,h),剩下的就是one-hot編碼表類別。而預測的結果是7*7*30的,因為要預測兩個框。

用簡潔的語言來闡述YOLO算法

還有一個比較精髓的是它損失函數的定義,它對每一個預測值都計算了均方誤差,但是懲罰程度卻是不一樣的。

用簡潔的語言來闡述YOLO算法

其中λcoord = 5.0, λnoobj = 1.0,λclasses = 2.0,但是這組數字是這么得來的小編就不知道了,有可能是從大量測試中得到的一組最優解,也可能是從數學公式推算出來的吧。其實還有很多小細節,是很難描述出來的,如果要把一個小細節說明白可以就會牽扯到無數個細節,所以我建議你們自己通過代碼去把細節搞懂。

在你已經了解了代碼之后,就很容易做到文章開頭的那個效果了。那我講解一下我的思路和過程,最重要的還是要自己動手。當你去研究過它的數據集之后,你會發現這個數據集的標注是一個xml文件,每一個圖片就對應一個xml文件。當你收集好數據集之后就可以去做數據集標記了,但是最簡單的xml文件的格式是要求如下的:

這個是我數據集中的標注,也是能滿足代碼的最簡單的標注,我是自己寫了一個程序幫助我完成標記的,但是我推薦你們可以用別人的標注工具,因為畢竟別人已經寫好了就沒有必要再去重復造車輪。

這個就是一個標注的工具 ,但是我也沒用過,但是看描述應該是符合要求的。做好圖片標注之后就要考慮如何去修改它的數據集呢?難不成一張張粘貼進去,當然你可以這樣做,但是工作量是很大的,好吧,那就交給計算機去解決吧。我在加載數據集的時候做了一個判斷,如果一旦這張圖片里面有車,我就不加載這個數據了,指定一個路徑讓它去加載我們做好的數據集。

findcar = 0for obj in objs: cls_ind = obj.find('name').text.lower().strip() if cls_ind == 'car': findcar = 1 break

接下來就是你們思考如何去解決了。當你解決這個問題并能訓練的時候,如無意外你應該能得到和我一樣的結果,祝你們好運!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4630

    瀏覽量

    93354

原文標題:項目實戰 | YOLO算法識別特定物體

文章出處:【微信號:gh_a204797f977b,微信公眾號:深度學習實戰】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用C語言進行PID算法實現

    前文對PID算法離散化和增量式PID算法原理進行探索,之后又使用Matlab進行了仿真實驗,對PID三個參數又有了更深入的認識,接下來我們來使用C語言進行PID
    發表于 09-15 09:20

    JAVA語言實現RSA公鑰密碼算法

    JAVA語言實現RSA公鑰密碼算法:本文闡述了公開密鑰密碼體制RSA算法的原理及實現技術。并在此基礎上,給出了JAVA
    發表于 02-10 10:27 ?58次下載

    C語言實現DES算法

    C語言實現DES算法 本DES算法,使用了效率很高的C完成。目前,國內知名企業的POS終端中,單DES算法,均是采用這個函數完成。函數經
    發表于 01-16 10:09 ?3277次閱讀

    C語言實現FFT算法

    C語言實現FFT算法 /*****************fft programe*********************/#include "typedef.h" #include "math.h" struct
    發表于 10-30 13:39 ?6359次閱讀

    如何編寫高效簡潔的C語言代碼

      引言:   編寫高效簡潔的C語言代碼,是許多軟件工程師追求的目標。本文就工作中的一些體會和經驗做相關的闡述,不對的地方請各位指教。   第1招:以
    發表于 08-19 14:38 ?844次閱讀

    C語言實現PID算法

    PID的算法,C語言程序編程實現,可以學習一下,提高能力
    發表于 11-24 10:57 ?9次下載

    C語言經典算法

    C語言經典算法--助你解決算法問題C語言經典算法
    發表于 03-23 14:30 ?27次下載

    『 RJIBI 』-基于FPGA的YOLO-V3物體識別計算套件

    1. 引言 基于RJIBI公司硬件開發套件的YOLO-V3物體識別檢測算法的相應軟、硬件實現。 本文主要闡述和規定了兩大部分內容:(1)機器學習推理框架針對在MPSOC FPGA平臺上的ARM核心
    發表于 05-19 10:22 ?1.5w次閱讀

    如何使用Zynq SoC硬件加速實現改進TINY YOLO實時車輛檢測的算法

    針對 TINY YOLO車輛檢測算法計算量過大,且在小型嵌入式系統中難以達到實時檢測要求的問題。利用小型 Zynq Soc系統的架構優勢以及 TINY YOLO的網絡權值中存在大量接近零的權值參
    發表于 07-06 10:58 ?28次下載
    如何使用Zynq SoC硬件加速實現改進TINY <b class='flag-5'>YOLO</b>實時車輛檢測的<b class='flag-5'>算法</b>

    基于深度學習YOLO系列算法的圖像檢測

    圖像應用算法并輸出類別和相應的定位(YOLO系列) 1YOLO算法的提出 在圖像的識別與定位中,輸入一張圖片,要求輸出其中所包含的對象,以及每個對象的位置(包含該對象的矩形框)。 對象
    的頭像 發表于 11-27 10:15 ?3565次閱讀

    嵌入式設備的YOLO網絡剪枝算法

    為保證YoLO網絡在嵌入式設備上正常運行,需采用剪枝算法精簡濾波器以減小網絡存儲空間和計算量,而現有剪枝算法耗時較長且剪枝精度較低。提出一種基于參數子空間和批量歸一化(BN)層縮放因子的雙準則剪枝
    發表于 03-11 16:52 ?4次下載
    嵌入式設備的<b class='flag-5'>YOLO</b>網絡剪枝<b class='flag-5'>算法</b>

    目標檢測—YOLO的重要性!

    YOLO是什么? 它是One-stage目標檢測的代表,整個框架非常簡單。與RCNN算法不一樣,是以不同方式處理對象檢測。 YOLO算法的最大優點就是速度極快,每秒可處理45幀,也能夠
    的頭像 發表于 06-10 15:45 ?4279次閱讀

    基于YOLO算法實現鋼筋數量的智能盤點

      建筑工地在鋼筋成車來料時,需要人工清點數量,然后才能開展后續工作,不僅效率低,而且增加運營成本。隨著大數據時代的到來,建筑行業希望借助智能終端設備減少勞動力的投入,打破傳統的桎梏。本文利用YOLO算法實現鋼筋數量的智能盤點
    的頭像 發表于 10-18 15:39 ?1257次閱讀

    目標檢測YOLO系列算法的發展過程

    本文中將簡單總結YOLO的發展歷史,YOLO是計算機視覺領域中著名的模型之一,與其他的分類方法,例如R-CNN不同,R-CNN將檢測結果分為兩部分求解:物體類別(分類問題),物體位置即
    的頭像 發表于 10-27 17:45 ?1347次閱讀

    目標檢測算法YOLO的發展史和原理

    大家或許知道,首字母縮寫YOLO在英文語境下較為流行的含義,即You Only Live Once,你只能活一次。我們今天要介紹的YOLO卻有著與前者不一樣的含義。在算法的世界中,YOLO
    的頭像 發表于 11-18 10:33 ?6276次閱讀
    目標檢測<b class='flag-5'>算法</b><b class='flag-5'>YOLO</b>的發展史和原理
    博彩公司排名| 哪个百家乐投注好| 鑫鼎百家乐官网的玩法技巧和规则 | 免费百家乐官网追号软件| 百家乐官网娱乐场真人娱乐场| 网上百家乐官网骗人的吗| 百家乐官网巴厘岛娱乐城| 赌球网| 三原县| 龙江县| e世博百家乐官网娱乐场| 百家乐官网现场新全讯网| 网络百家乐官网漏洞| 百家乐官网赔率计算| 百家乐官网数据程序| 百家乐官网仿水晶筹码| 金木棉百家乐网络破解| 百家乐好不好| 德州扑克刷分| 黄山市| 百家乐官网变牌器批发| 百家乐官网第三张规则| 现场百家乐平台源码| 百家乐娱乐分析软件v| 大发888真人赌博| 德江县| 百家乐官网游戏教程| 24山安葬吉凶择日| 新锦江百家乐娱乐网| 大发888东方鸿运娱乐| 百家乐平注法亏损| 金宝博娱乐场| 百家乐官网赌博机假在哪里| 百家乐官网园qq群| 百家乐赌场现金网平台排名| 太阳城娱乐网可信吗| 百家乐官网如何捕捉长龙| 注册百家乐送彩金| 大发888娱乐网下| 大发888娱乐场老虎机| 网上百家乐官网靠谱吗|