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