YoLoV5学习(4)--detect.py程序(预测图片、视频、网络流)逐段讲解~
本章博客主要分析YoloV5代碼中的detect程序代碼,按照程序運行步驟順序主要分為3大部分。
1、包與庫的導入
1.1 導入安裝好的python庫、torch庫等等
其中:argparse模塊、os模塊、sys模塊都是Python內置模塊。
argparse模塊:它是一個用于命令項選項與參數解析的模塊,通過在程序中定義好我們需要的參數,argparse 將會從 sys.argv 中解析出這些參數,并自動生成幫助和使用信息;
os模塊:它提供了多種操作系統的接口。通過os模塊提供的操作系統接口,我們可以對操作系統里文件、終端、進程等進行操作;
sys模塊:它是與python解釋器交互的一個接口,該模塊提供對解釋器使用或維護的一些變量的訪問和獲取,它提供了許多函數和變量來處理 Python 運行時環境的不同部分。
該段代碼意思是指從External Libraries->pathlib->path 導入Path庫,具體說明如下:
Path表示文件系統路徑,但與PurePath不同,它還提供方法對路徑對象進行系統調用。根據您的系統,實例化路徑將返回PosixPath或WindowsPath對象也可以直接實例化PosixPath或WindowsPath,但不能在POSIX系統上實例化WindowsPath,反之亦然。
添加torch庫,CUDNN 是英偉達專門為深度神經網絡所開發出來的 GPU 加速庫,針對卷積、池化等常見操作做了非常多的底層優化,比一般的 GPU 程序要快很多。在使用 GPU 的時候,PyTorch 會默認使用 CUDNN 加速。
1.2 導入相對路徑下的庫
導入、添加項目文件下相對應的文件夾中的庫文件。
1.3 定義一些文件路徑
_ _ file _ _表示當前detect.py的文件路徑,第一行代碼獲取其絕對路徑,第二行代碼獲取其根目錄,sys.path表示模塊的查詢路徑列表。
2、執行函數
if name == ‘main’:的作用,一個python文件通常有兩種使用方法,第一是作為腳本直接執行,第二是 import 到其他的 python 腳本中被調用(模塊重用)執行。因此 if name == ‘main’: 的作用就是控制這兩種情況執行代碼的過程,在 if name == ‘main’: 下的代碼只有在第一種情況下(即文件作為腳本直接執行)才會被執行,而 import 到其他腳本中是不會被執行的。
(1)解析命令行傳進的參數;opt = parse_opt()
該段代碼分為三部分,第一部分定義了一些可以傳導的參數類型,第二部分對于imgsize部分進行了額外的判斷(640*640),第三部分打印所有參數信息,opt變量存儲所有的參數信息,并返回。
(2)執行命令行參數; main(opt)
該段代碼分為兩部分,第一部分首先完成對于requirements.txt的檢查,檢測這些依賴包有沒有安裝;第二部分,將opt變量參數傳入,執行run函數。
3、Run函數
run函數的整體運行部分可以概括為6個部分。
3.1 對source傳入的東西進行額外判斷
此處的source對應run函數中的source,代表圖片路徑;第三行代碼判斷是否傳入為文件地址,IMG_FORMATS表示各種圖片類型,VID_FORMATS表示各種視頻類型;第四行代碼判斷是否為網絡流傳入;第五行代碼source.isnumeric判斷是否傳入為數字,–source 0,數字0表示打開電腦的第一個攝像頭;如果是一個網絡流且是一個文件,就會進行下載操作。
3.2 新建了一個保存結果的文件夾
代碼中的 project 指 run 函數中的 project,對應的是 runs/detect 的目錄,name 對應 run 函數中的“name=exp”,然后進行拼接操作;increment_path 表示增量路徑;判斷 save_txt 是否為 true,save_txt 在 run 函數以及 parse_opt() 函數中都有相應操作,如果傳入save_txt,新建 “labels” 文件夾存儲結果。
3.3 加載模型權重
首先根據代碼環境選擇加載設備,GPU/CPU。選擇多后端框架,判斷你的深度學習框架,本次是pytorch,加載模型,
讀取模型參數,判斷 imgsz,步長 stride 一般是32。
3.4 DataLoad模塊,加載待預測的圖片
首先是判斷 webcam 是否為 true,前面已經定義,不為True,因此執行 datasets.py下的LoadImages函數,完成輸入數據的加載過程。
3.5 模型的推理過程
執行模型推理過程,把圖片或者視頻輸入模型,產生一個預測結果,并用檢測框標記出來。
首先,讓模型進行一個預熱,然后定義 dt,seen 兩個變量,遍歷 dataset ,整理圖片信息;進行預測,根據 run 函數里面的置信度以及IOU參數,進行信息過濾;對檢測框進行后續處理,畫框選擇,坐標映射(640*640坐標映射為原圖坐標),是否保存繪畫結果。
3.6 打印出一些輸出信息
打印結果,記錄了一些總共的耗時,以及信息保存。
本次進行了一些簡短的分析,如果有幫助的話,點贊支持一下,后續有需要在進行其他文件程序。交流學習,互相進步~
總結
以上是生活随笔為你收集整理的YoLoV5学习(4)--detect.py程序(预测图片、视频、网络流)逐段讲解~的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苍南五凤茶进杭城“香”约西湖龙井, 茶旅
- 下一篇: 大师级管理人物盘点:“颠覆性技术“提出者