1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        10分鐘學會使用YOLO及Opencv實現(xiàn)目標檢測

        共 4086字,需瀏覽 9分鐘

         ·

        2021-03-18 10:14

        點擊上方小白學視覺”,選擇加"星標"或“置頂

        重磅干貨,第一時間送達

        本文轉(zhuǎn)自:新機器視覺

        計算機視覺領(lǐng)域中,目標檢測一直是工業(yè)應(yīng)用上比較熱門且成熟的應(yīng)用領(lǐng)域,比如人臉識別、行人檢測等,國內(nèi)的曠視科技、商湯科技等公司在該領(lǐng)域占據(jù)行業(yè)領(lǐng)先地位。相對于圖像分類任務(wù)而言,目標檢測會更加復(fù)雜一些,不僅需要知道這是哪一類圖像,而且要知道圖像中所包含的內(nèi)容有什么及其在圖像中的位置,因此,其工業(yè)應(yīng)用比較廣泛。那么,今天將向讀者介紹該領(lǐng)域中表現(xiàn)優(yōu)異的一種算算法——“你只需要看一次”(you only look once,yolo),提出該算法的作者風趣幽默可愛,其個人主頁及論文風格顯示了其性情,目前該算法已是第三個版本,簡稱YoLo V3。



        在本教程中,將學習如何使用YOLO、OpenCV和Python檢測圖像和視頻流中的對象。主要內(nèi)容有:

        簡要討論YOLO算法;

        使用YOLO、OpenCV、Python進行圖像檢測;

        使用YOLO、OpenCV、Python進行視頻流檢測;

        討論YOLO算法的優(yōu)點和缺點;

        當涉及基于深度學習的對象檢測時,常用的三類算法有:

        R-CNN家族系列算法:R-CNN、fast R-CNN以及faster R-CNN;

        單發(fā)檢測器(SSD);

        YOLO算法;
        R-CNN算法是最早的基于深度學習的目標檢測器之一,其結(jié)構(gòu)是兩級網(wǎng)絡(luò);

        首先需要諸如選擇性搜索之類的算法來提出可能包含對象的候選邊界框;然后將這些區(qū)域傳遞到CNN算法進行分類;R-CNN算法存在的問題在于其仿真很慢,并且不是完整的端到端的目標檢測器。Fast R-CNN算法對原始R-CNN進行了相當大的改進,即提高準確度并減少執(zhí)行正向傳遞所花費的時間,但是,該模型仍然依賴于外部區(qū)域搜索算法。直到2015年,faster R-CNN才成為真正的端到端深度學習目標檢測器,刪除了選擇性搜索的要求,而是依賴于(1)完全卷積的區(qū)域提議網(wǎng)絡(luò)(RPN)和(2)可以預(yù)測對象邊界框和“對象”分數(shù)(量化它是一個區(qū)域的可能性的分數(shù))。然后將RPN的輸出傳遞到R-CNN組件以進行最終分類和標記。R-CNN系列算法的檢測結(jié)果一般都非常準確,但R-CNN系列算法最大的問題在仿真速度——非常慢,即使是在GPU上也僅獲得5 FPS。為了提高基于深度學習的目標檢測器的速度,單次檢測器(SSD)和YOLO都使用單級檢測器策略(one stage)。這類算法將對象檢測視為回歸問題,獲取給定的輸入圖像并同時學習邊界框坐標和相應(yīng)的類標簽概率。通常,單級檢測器往往不如兩級檢測器準確,但其速度明顯更快。YOLO是單級檢測器中一個很好的算法。YOLO算法于2015年提出,在GPU上獲得了  45 FPS性能,此外,同時也提出了一個較小的變體稱為“Fast YOLO”,在GPU上達到155 FPS的性能。YOLO經(jīng)歷了許多次的迭代,包括YOLOv2,能夠檢測超過9,000個目標。直到最近提出的YOLOv3算法,YOLOv3模型比之前的版本要復(fù)雜得多,但它是YOLO系列目標檢測器中最好的一款。本文使用YOLOv3,并在COCO數(shù)據(jù)集上進行訓練。COCO數(shù)據(jù)集由80個標簽組成,可以使用此鏈接找到Y(jié)OLO在COCO數(shù)據(jù)集上訓練的內(nèi)容的完整列表。


        0

        1

        項目結(jié)構(gòu)


        $ tree.
        ├── images
        │   ├── baggage_claim.jpg
        │   ├── dining_table.jpg
        │   ├── living_room.jpg
        │   └── soccer.jpg
        ├── output
        │   ├── airport_output.avi
        │   ├── car_chase_01_output.avi
        │   ├── car_chase_02_output.avi
        │   └── overpass_output.avi
        ├── videos
        │   ├── airport.mp4
        │   ├── car_chase_01.mp4
        │   ├── car_chase_02.mp4
        │   └── overpass.mp4
        ├── yolo-coco
        │   ├── coco.names
        │   ├── yolov3.cfg
        │   └── yolov3.weights
        ├── yolo.py
        └── yolo_video.py


        從上面可以看出,項目包括4個文件夾和2個Python腳本。
        目錄(按重要性順序)是:

        yolo - coco/  :YOLOv3對象檢測器預(yù)先(在COCO數(shù)據(jù)集上)訓練得到最終的權(quán)重文件,可以在Darknet團隊主頁找到對應(yīng)的文件;

        images/ :此文件夾包含四個靜態(tài)圖像,之后將執(zhí)行對象檢測以進行測試和評估;

        videos/ :使用YOLO對圖像進行目標檢測器后,將實時處理視頻。該文件夾中包含四個示例視頻可供測試;

        輸出/  :輸出已由YOLO處理并帶有邊界框和類名稱注釋的視頻可以放在此文件夾中;

        此外還有兩個Python腳本——yolo.py和 yolo_video.py ,第一個腳本用于圖像處理,第二個腳本用于視頻處理。下面進入實戰(zhàn)內(nèi)容,你準備好了嗎?



        0

        2

        將YOLO應(yīng)用于圖像對象檢測

        YOLO算法并沒有應(yīng)用非最大值抑制,這里需要說明一下。應(yīng)用非最大值抑制可以抑制明顯重疊的邊界框,只保留最自信的邊界框,NMS還確保我們沒有任何冗余或無關(guān)的邊界框。

        利用OpenCV內(nèi)置的NMS DNN模塊實現(xiàn)即可實現(xiàn)非最大值抑制 ,所需要的參數(shù)是邊界框、 置信度、以及置信度閾值和NMS閾值。

        假設(shè)存在至少一個檢測結(jié)果,就循環(huán)用非最大值抑制確定idx 。然后,我們使用隨機類顏色在圖像上繪制邊界框和文本 。最后,顯示結(jié)果圖像,直到用戶按下鍵盤上的任意鍵。
        下面進入測試環(huán)節(jié),打開一個終端并執(zhí)行以下命令:

        $python yolo.py --image    images/baggage_claim.jpg --yolo yolo-coco

        [INFO] loading YOLO from disk...
        [INFO] YOLO took 0.347815 seconds


        0

        3

        視頻檢測解決

        那么在學會檢測單張圖像后,我們也可以利用YOLO算法實現(xiàn)視頻流中的目標檢測。



        同樣,首先從導入相關(guān)數(shù)據(jù)包和命令行參數(shù)開始。與之前不同的是,此腳本沒有-- image參數(shù),取而代之的是量個視頻路徑:

        -- input  :輸入視頻文件的路徑;

        -- output  :輸出視頻文件的路徑;

        視頻的輸入可以是手機拍攝的短視頻或者是網(wǎng)上搜索到的視頻。另外,也可以通過將多張照片合成為一個短視頻也可以。本博客使用的是在PyImageSearch上找到來自imutils的VideoStream類的 示例。
        代碼與處理圖形時候相同:

        YOLO目標檢測器的最大限制和缺點是:

        它并不總能很好地處理小物體;

        它尤其不適合處理密集的對象;

        限制的原因是由于YOLO算法其本身:

        YOLO對象檢測器將輸入圖像劃分為SxS網(wǎng)格,其中網(wǎng)格中的每個單元格僅預(yù)測單個對象;

        如果單個單元格中存在多個小對象,則YOLO將無法檢測到它們,最終導致錯過對象檢測;

        因此,如果你的數(shù)據(jù)集是由許多靠近在一起的小對象組成時,那么就不應(yīng)該使用YOLO算法。就小物體而言,更快的R-CNN往往效果最好,但是其速度也最慢。在這里也可以使用SSD算法, SSD通常在速度和準確性方面也有很好的權(quán)衡。
        值得注意的是,在本教程中,YOLO比SSD運行速度慢,大約慢一個數(shù)量級。因此,如果你正在使用預(yù)先訓練的深度學習對象檢測器供OpenCV使用,可能需要考慮使用SSD算法而不是YOLO算法。
        因此,在針對給定問題選擇對象檢測器時,我傾向于使用以下準則:

        如果知道需要檢測的是小物體并且速度方面不作求,我傾向于使用faster R-CNN算法;

        如果速度是最重要的,我傾向于使用YOLO算法;

        如果需要一個平衡的表現(xiàn),我傾向于使用SSD算法;





         End 


        下載1:OpenCV-Contrib擴展模塊中文版教程
        在「小白學視覺」公眾號后臺回復(fù):擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實戰(zhàn)項目52講
        小白學視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。

        下載3:OpenCV實戰(zhàn)項目20講
        小白學視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


        瀏覽 67
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            护士爽躁多水快深小说 | 97人妻 | 久久国产精品-国产精品 | 久久久久久久久久久久一区二区 | 裸体秀videoshd | www.淫淫.com | 潘金莲一级特黄a大片 | 黄片免费视频在线观看 | 欧美小逼| 国产乱婬A∨片 |