一文帶你學會使用YOLO及Opencv完成圖像及視頻流目標檢測(下)

2021-01-07 阿里云云棲號

在上一節內容中,介紹了如何將YOLO應用於圖像目標檢測中,那麼在學會檢測單張圖像後,我們也可以利用YOLO算法實現視頻流中的目標檢測。

將YOLO應用於視頻流對象檢測

首先打開 yolo_video.py文件並插入以下代碼:

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

-- input :輸入視頻文件的路徑;-- output :輸出視頻文件的路徑;視頻的輸入可以是手機拍攝的短視頻或者是網上搜索到的視頻。另外,也可以通過將多張照片合成為一個短視頻也可以。本博客使用的是在PyImageSearch上找到來自imutils的VideoStream類的 示例。

下面的代碼與處理圖形時候相同:

在這裡,加載標籤並生成相應的顏色,然後加載YOLO模型並確定輸出層名稱。接下來,將處理一些特定於視頻的任務:

在上述代碼塊中:

打開一個指向視頻文件的文件指針,循環讀取幀;初始化視頻編寫器 (writer)和幀尺寸;嘗試確定視頻文件中的總幀數(total),以便估計整個視頻的處理時間;之後逐個處理幀:

上述定義了一個 while循環, 然後從第一幀開始進行處理,並且會檢查它是否是視頻的最後一幀。

接下來,如果尚未知道幀的尺寸,就會獲取一下對應的尺寸。

接下來,使用當前幀作為輸入執行YOLO的前向傳遞 :

在這裡,構建一個 blob 並將其傳遞通過網絡,從而獲得預測。然後繼續初始化之前在圖像目標檢測中使用過的三個列表: boxes 、 confidences、classIDs :

在上述代碼中,與圖像目標檢測相同的有:

循環輸出層和檢測;提取 classID並過濾掉弱預測;計算邊界框坐標;更新各自的列表;接下來,將應用非最大值抑制:

同樣的,在上述代碼中與圖像目標檢測相同的有:

使用cv2.dnn.NMSBoxes函數用於抑制弱的重疊邊界框,可以在此處閱讀有關非最大值抑制的更多信息;循環遍歷由NMS計算的idx,並繪製相應的邊界框+標籤;最終的部分代碼如下:

總結一下:

初始化視頻編寫器(writer),一般在循環的第一次迭代被初始化;列印出對處理視頻所需時間的估計;將幀(frame)寫入輸出視頻文件;清理和釋放指針;現在,打開一個終端並執行以下命令:

圖6:YOLO應用於車禍視頻對象檢測

在視頻/ GIF中,你不僅可以看到被檢測到的車輛,還可以檢測到人員以及交通信號燈!YOLO目標檢測器在該視頻中表現相當不錯。讓現在嘗試同一車追逐視頻中的不同視頻:

圖7:在該視頻中,使用OpenCV和YOLO對象檢測來找到該嫌疑人,嫌疑人現在已經逃離汽車並正位於停車場

YOLO再一次能夠檢測到行人!或者嫌疑人回到他們的車中並繼續追逐:

圖8:YOLO是一種快速深度學習對象檢測器,能夠在使用GPU的情況下用於實時視頻

最後一個例子,讓我們看看如何使用YOLO作為構建流量計數器:

圖9:立交橋交通視頻表明,YOLO和OpenCV可準確、快速地檢測汽車

下面匯總YOLO視頻對象檢測完整視頻:

Quaker Oats汽車追逐視頻;Vlad Kiraly立交橋視頻;「White Crow」音頻;

YOLO目標檢測器的局限和缺點

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

它並不總能很好地處理小物體;它尤其不適合處理密集的對象;限制的原因是由於YOLO算法其本身:

YOLO對象檢測器將輸入圖像劃分為SxS網格,其中網格中的每個單元格僅預測單個對象;如果單個單元格中存在多個小對象,則YOLO將無法檢測到它們,最終導致錯過對象檢測;因此,如果你的數據集是由許多靠近在一起的小對象組成時,那麼就不應該使用YOLO算法。就小物體而言,更快的R-CNN往往效果最好,但是其速度也最慢。在這裡也可以使用SSD算法, SSD通常在速度和準確性方面也有很好的權衡。

值得注意的是,在本教程中,YOLO比SSD運行速度慢,大約慢一個數量級。因此,如果你正在使用預先訓練的深度學習對象檢測器供OpenCV使用,可能需要考慮使用SSD算法而不是YOLO算法。因此,在針對給定問題選擇對象檢測器時,我傾向於使用以下準則:

如果知道需要檢測的是小物體並且速度方面不作求,我傾向於使用faster R-CNN算法;如果速度是最重要的,我傾向於使用YOLO算法;如果需要一個平衡的表現,我傾向於使用SSD算法;

想要訓練自己的深度學習目標檢測器?

圖10:在我的書「使用Python進行計算機視覺的深度學習」中,我介紹了多種對象檢測算法,包括fasterR-CNN、SSD、RetinaNet。書中講述了如何創建對象檢測圖像數據集、訓練對象檢測器並進行預測。

在本教程中,使用的YOLO模型是在COCO數據集上預先訓練的.。但是,如果想在自己的數據集上訓練深度學習對象檢測器,該如何操作呢?大體思路是自己標註數據集,按照darknet網站上的指示及網上博客自己更改相應的參數訓練即可。或者在我的書「 深度學習計算機視覺與Python」中,詳細講述了如何將faster R-CNN、SSD和RetinaNet應用於:

檢測圖像中的徽標;檢測交通標誌;檢測車輛的前視圖和後視圖(用於構建自動駕駛汽車應用);檢測圖像和視頻流中武器;書中的所有目標檢測章節都包含對算法和代碼的詳細說明,確保你能夠成功訓練自己的對象檢測器。在這裡可以了解有關我的書的更多信息(並獲取免費的示例章節和目錄)。

總結

在本教程中,我們學習了如何使用Deep Learning、OpenCV和Python完成YOLO對象檢測。然後,我們簡要討論了YOLO架構,並用Python實現:

將YOLO對象檢測應用於單個圖像;將YOLO對象檢測應用於視頻流;在配備的3GHz Intel Xeon W處理器的機器上,YOLO的單次前向傳輸耗時約0.3秒; 但是,使用單次檢測器(SSD),檢測耗時只需0.03秒,速度提升了一個數量級。對於使用OpenCV和Python在CPU上進行基於實時深度學習的對象檢測,你可能需要考慮使用SSD算法。如果你有興趣在自己的自定義數據集上訓練深度學習對象檢測器,請務必參閱寫的「使用Python進行計算機視覺深度學習」,其中提供了有關如何成功訓練自己的檢測器的詳細指南。

相關焦點

  • 從R-CNN到YOLO,一文帶你了解目標檢測模型(附論文下載)
    大數據文摘作品編譯:Yanruo、小魚這是一份詳細介紹了目標檢測的相關經典論文、學習筆記、和代碼示例的清單,想要入坑目標檢測的同學可以收藏了!在大數據文摘後臺回復「目標檢測」可打包下載全部論文~R-CNNR-CNN是2014年出現的。
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    動機我們從 Dat Tran 這篇文章開始挑戰實時目標檢測。不過處理進出容器的視頻流可能會有一點麻煩。此外,在次項目我還添加了一個視頻後處理功能,同樣使用 multiprocessing 庫來減少處理時間(使用 Tensorflow 原始目標檢測 API 處理時間會非常長)。實時和視頻目標識別都可以在我的個人筆記本電腦上以高性能運行,僅使用 8GB CPU。
  • YOLOV4視頻對象檢測,python+opencv輕鬆實現
    上期文章,我們介紹了YOLOV4對象檢測算法的模型以及基本知識,哪裡還進行了圖片的對象檢測,如何使用YOLOV4進行視頻檢測與實時視頻檢測呢?畢竟我們絕大多數的需求必然是視頻的實時對象檢測YOLOV4視頻檢測import numpy as npimport timeimport cv2import oslabelsPath = &34;LABELS = Nonewith open(labelsPath, &39;) as f: LABELS
  • 能去碼也能打碼,OpenCV實時檢測視頻流人臉並馬賽克之,視頻後期福音
    第一步:人臉檢測 在這一步可以使用任何的人臉檢測器,只要它能在圖像或視頻中生成人臉的邊界框坐標就行。 高斯模糊下的面部圖像 這兩個模糊方式都可以實現人臉自動模糊這個項目,練習時可以憑你的個人喜好選擇
  • 視頻後期福音!OpenCV 實時檢測視頻流人臉並打馬賽克
    現如今,大部分打馬賽克的工作都需要我們手動來打,比如在圖像/視頻製作軟體裡添加馬賽克。那麼這種工作能不能交給AI呢?如果AI可以自動對圖像/視頻進行實時處理,無疑會幫人類減輕很大的工作量。答案是可以!Adrian Rosebrock博士在博客中分享了通過OpenCV實現「人臉自動馬賽克」這一教程,而這個項目是受到了他的一位博客讀者的啟發。
  • 使用Yolov5進行端到端對象檢測
    無論答案是什麼,這絕對是目標檢測界發展速度的一個標誌。自從他們第一次移植YOLOv3以來,Ultralytics就使得使用Pytorch創建和部署模型變得非常簡單,所以我很想嘗試YOLOv5。事實證明,Ultralytics 進一步簡化了這個過程,結果不言自明。
  • 一文帶你體驗OpenCV強大圖像處理功能
    前言計算機視覺基礎首先是處理圖像、視頻這些非結構化的數據, 而圖像處理庫比較常用和強大的有 PIL、OpenCV 模塊, 本項目主要講述 OpenCV 的具體用法 內容目錄主要介紹了opencv模塊在圖像處理方面的一些常用操作。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    utm_source=blog&utm_medium=vehicle-detection-opencv-python)目錄視頻中運動目標檢測的思想視頻中目標檢測的真實世界用例視頻目標檢測的基本概念 幀差分 圖像閾值 檢測輪廓 圖像膨脹
  • 使用OpenCV和Python構建自己的車輛檢測模型
    utm_source=blog&utm_medium=vehicle-detection-opencv-python)目錄視頻中運動目標檢測的思想視頻中目標檢測的真實世界用例視頻目標檢測的基本概念 幀差分 圖像閾值 檢測輪廓 圖像膨脹利用OpenCV
  • 一文詳解YOLO 2與YOLO 9000目標檢測系統 | 分享總結
    YOLO 9000的最後一層採用層次分類的方法,來計算400多個條件概率,用它來產生目標的最終分類。                                           目標檢測首先是目標檢測,目標檢測和圖像分類的不同是圖像分類只需要識別出圖中的物體,而目標檢測需要在圖片中精確找到物體所在位置
  • 使用樹莓派和Python實現目標檢測
    這項研究的目的是確定在一個便宜的行動裝置上的對象檢測模型是否可以用於現實世界的任務。作為一個移動平臺,我們使用的是樹莓派3B。樹莓派是一款售價35美元的單板機,這意味著微處理器、內存、無線收音機和埠都在一塊電路板上。它是一臺Linux計算機,所以從技術上講,它可以做Linux計算機能做的一切事情,比如運行電子郵件和網絡伺服器,充當網絡存儲,或者用於對象檢測。
  • OpenCV實時檢測視頻流人臉並馬賽克之,視頻後期福音
    現如今,大部分打馬賽克的工作都需要我們手動來打,比如在圖像/視頻製作軟體裡添加馬賽克。那麼這種工作能不能交給AI呢?如果AI可以自動對圖像/視頻進行實時處理,無疑會幫人類減輕很大的工作量。  答案是可以!Adrian Rosebrock博士在博客中分享了通過OpenCV實現「人臉自動馬賽克」這一教程,而這個項目是受到了他的一位博客讀者的啟發。
  • PP-YOLO超越YOLOv4-目標檢測的進步
    然而,百度的作者寫道:本文不打算介紹一種新型的目標檢測器。它更像是一個食譜,告訴你如何逐步建立一個更好的探測器。讓我們一起看看。YOLO發展史YOLO最初是由Joseph Redmon編寫的,用於檢測目標。
  • OpenCV無神經網絡對象檢測模型,如何進行目標的檢測與追蹤
    前面的文章,小編分享了很多關於目標檢測與目標追蹤的文章,且使用python方面的目標檢測算法打造了自己的目標追蹤專欄文章,小夥伴們可以參考由於目標檢測算法太大,需要大量的計算機的計算能力,在小型的應用場景中,使用YOLO系列,或者SSD對象檢測(雖然SSD算法簡單,模型較小),Fast-RCNN 等等對象檢測算法,需要配備高計算能力的計算機,有沒有簡單的適合小型應用場景的目標檢測與追蹤算法
  • YOLO v5 實現目標檢測(參考數據集&自製數據集)
    、寫作動機由於博主當前的研究問題涉及到圖片的局部圖像提取,於是決定使用目前比較流行且高效的目標檢測網絡框架YOLOv5(雖然其沿用了社區的版本號v5,但只是ultralytics團隊的開源實現,並未獲得官方的認可,此處暫且按下不表)來完成實驗任務。
  • YOLO 系目標檢測算法家族全景圖!
    YOLO目標檢測算法誕生於2015年6月,從出生的那一天起就是「高精度、高效率、高實用性」目標檢測算法的代名詞。Baji 單位:西蒙弗雷澤大學 論文:https://arxiv.org/abs/1805.00107 引用 | 10 時間:2018年4月30日 一種結合壓縮視頻中的運動信息和YOLO目標檢測的目標跟蹤算法。
  • 教程| 從零開始PyTorch項目:YOLO v3目標檢測實現(下)
    總體而言,本教程的目的是使用 PyTorch 實現基於 YOLO v3 的目標檢測器,後者是一種快速的目標檢測算法。 本教程使用的代碼需要運行在 Python 3.5 和 PyTorch 0.3 版本之上。
  • 使用PyTorch實現目標檢測與跟蹤
    重磅乾貨,第一時間送達 引言 在昨天的文章中,我們介紹了如何在PyTorch中使用您自己的圖像來訓練圖像分類器,然後使用它來進行圖像識別。本文將展示如何使用預訓練的分類器檢測圖像中的多個對象,並在視頻中跟蹤它們。
  • yolov5實戰之皮卡丘檢測
    記得之前在剛接觸的時候看到博客中寫到,深度學習分三個層次,第一個層次是分類,第二個層次是檢測,第三個層次是分割。人臉識別算是分類問題,也就是一直在第一個層次···一直都想有機會了解下第二個層次,奈何精力有限,工作中也沒有實際的項目需要。最近正好有個不急的檢測項目,趁此機會入門檢測吧。工作中聽同事提到yolov5效果不錯,而且文檔指導也比較豐富,因此選擇從此入手,順便也熟悉下pytorch。
  • 1.8M超輕量目標檢測模型NanoDet,比YOLO跑得快
    這個項目對單階段檢測模型三大模塊(Head、Neck、Backbone)進行輕量化,得到模型大小僅 1.8m、速度超快的輕量級模型 NanoDet-m。目標檢測一直是計算機視覺領域的一大難題,其目標是找出圖像中的所有感興趣區域,並確定這些區域的位置和類別。