章毅恒 陳育罕 張雪秋
摘? 要:目標檢測數(shù)據(jù)集中的樣本數(shù)量及差異性對網(wǎng)絡(luò)檢測性能具有重要影響。通過人工標注圖像的方式生成數(shù)據(jù)集耗時又費力,因此設(shè)計一款目標檢測數(shù)據(jù)集自動采集軟件。該軟件可以檢測RTSP視頻流、圖片文件及視頻文件,通過預(yù)訓(xùn)練好的輕量化檢測網(wǎng)絡(luò)得到目標位置類別及定位信息,生成標注文件并保存到本地。實驗結(jié)果表明,該文軟件在不同的平臺上均可運行,其數(shù)據(jù)集采集速度相比人工標注有顯著優(yōu)勢。
關(guān)鍵詞:數(shù)據(jù)集制作;PyQt;目標檢測;多線程;YOLOv5
中圖分類號:TP311.5? 文獻標識碼:A? 文章編號:2096-4706(2023)15-0012-05
Design and Implementation of Target Detection Dataset Automatic Collection Software Based on PyQt
ZHANG Yiheng, CHEN Yuhan, ZHANG Xueqiu
(College of Mechanical Engineering, Chongqing University of Technology, Chongqing? 400054, China)
Abstract: The number and diversity of samples in the target detection dataset have a significant impact on network detection performance. Generating a dataset by manually annotating images is time-consuming and laborious, so that a software for automatic collection of object detection datasets is designed. This software can detect RTSP video streams, image files, and video files, obtain target location categories and positioning information through a pre trained lightweight detection network, generate annotation files, and save them locally. The experimental results show that the software can run on different platforms, and its dataset collection speed has significant advantages compared to manual annotation.
Keywords: dataset making; PyQt; target detection; multithreading; YOLOv5
0? 引? 言
卷積神經(jīng)網(wǎng)絡(luò)本質(zhì)上是一種輸入到輸出的映射,訓(xùn)練時神經(jīng)網(wǎng)絡(luò)通過大量輸入與輸出的關(guān)系不斷修正參數(shù),使得網(wǎng)絡(luò)可以得到輸入與輸出之間的映射關(guān)系。樣本數(shù)量越多,網(wǎng)絡(luò)得到的映射關(guān)系越精確。樣本之間的差異越大,網(wǎng)絡(luò)的泛化能力就越強。因此,輸入與輸出的樣本數(shù)據(jù)集合是決定目標檢測網(wǎng)絡(luò)精度的重要因素。
人工制作數(shù)據(jù)集需要在圖片中找出目標的種類與位置,并標注出詳細數(shù)據(jù),這個過程需要消耗巨大的人力成本。使用訓(xùn)練好的網(wǎng)絡(luò)檢測并生成數(shù)據(jù)集大大減少了標注圖片形成數(shù)據(jù)集的人工成本,有助于提升深度學(xué)習(xí)的研究效率。
為此,本文設(shè)計一款實時目標檢測與數(shù)據(jù)集采集標注系統(tǒng),使用PyQt平臺進行開發(fā),采用PyTorch、和PyTorch等庫實現(xiàn)功能。通過預(yù)訓(xùn)練好的目標檢測網(wǎng)絡(luò)自動檢測圖像,同時采集圖像目標位置類別與定位信息,生成txt格式的標注文件。為了能夠在沒有安裝GPU或配置深度學(xué)習(xí)環(huán)境的計算機上仍可使用本軟件,采用預(yù)訓(xùn)練好的輕量化YOLOv5網(wǎng)絡(luò)作為檢測網(wǎng)絡(luò),可以檢測COCO數(shù)據(jù)集包含的80個目標種類。為方便操作人員制作數(shù)據(jù)集,將數(shù)據(jù)集自動采集程序設(shè)計為可以根據(jù)選定的采樣頻率采集檢測網(wǎng)絡(luò)輸出的圖像與預(yù)測信息,并保存到自定義的文件夾中。為了更加便捷地增加樣本的差異性,將軟件設(shè)計為可以讀取RTSP視頻流、本地圖片和本地視頻三種圖像。
實驗證明,本文設(shè)計開發(fā)的數(shù)據(jù)集采集軟件運行穩(wěn)定,檢測過程流暢,可在操作系統(tǒng)為Win 10及以上版本、CPU為x86_64架構(gòu)的計算機中運行。相比于人工標注數(shù)據(jù)集,使用本軟件標注數(shù)據(jù)集可節(jié)約90%的人力成本,便于相關(guān)研究人員快速制作數(shù)據(jù)集。
1? 軟件界面設(shè)計與功能設(shè)計
軟件界面如圖1所示,界面分為RTSP流操作區(qū)域、本地文件操作區(qū)域、數(shù)據(jù)集采樣操作區(qū)域、檢測操作區(qū)域以及圖像顯示區(qū)域六個區(qū)域。RTSP流操作區(qū)域提供輸入RTSP流地址、獲取RTSP流圖像和停止獲取RTSP流圖像等功能。本地文件區(qū)域提供選取本地文件并顯示文件類型和地址等功能。采樣操作區(qū)域提供單幀手動采集、選擇樣本保存地址、調(diào)節(jié)采集間隔幀數(shù)、啟動自動采集、停止自動采集等功能。檢測區(qū)域提供置信度調(diào)節(jié)、開始停止檢測等功能。
為了增加軟件的靈活性,設(shè)定六種輸入軟件的內(nèi)容,分別為RTSP流地址、視頻文件地址、圖片文件地址、檢測網(wǎng)絡(luò)置信度、數(shù)據(jù)集采樣頻率、數(shù)據(jù)集保存位置。RTSP流為輸入的字符串,由使用人員從輸入框自行輸入??蓮?至1的范圍內(nèi)調(diào)節(jié)置信度。數(shù)據(jù)集自動采樣頻率由間隔幀數(shù)確定,可自行輸入,也可通過按鈕以每10幀為一單位進行調(diào)節(jié)。除了自動采集數(shù)據(jù)集,還可通過按鈕手動采集單幀圖像及其標注信息。檢測網(wǎng)絡(luò)輸入圖像有三種來源,分別為RTSP流實時畫面、本地圖片文件、本地視頻文件。多種輸入可以豐富數(shù)據(jù)集的來源,增加數(shù)據(jù)集的多樣性和規(guī)模。設(shè)定四種隊列(分別為視頻流隊列、檢測-輸入隊列、檢測-輸出隊列、檢測-目標信息隊列)來完成不同模塊線程間的信息交互,使程序運行更加流暢。設(shè)定4種工作狀態(tài),分別為初始狀態(tài)、播放視頻流狀態(tài)、顯示本地文件狀態(tài)、檢測狀態(tài)。執(zhí)行不同操作前先判斷軟件的工作狀態(tài),避免出現(xiàn)數(shù)據(jù)混亂和程序卡死的問題。
2? 功能模塊開發(fā)
采用vscode編輯器+PyQt-Integration插件+Python插件作為集成開發(fā)環(huán)境。使用PyQt-Integration插件將.ui文件轉(zhuǎn)換為.py格式的UI聲明文件,通過UI聲明文件給UI中的按鈕、標簽等槽函數(shù)綁定各種功能。各模塊類繼承PyQt的QTherad線程類以實現(xiàn)多線程,線程間通過隊列通信,隊列繼承自Python內(nèi)部的queue類。軟件結(jié)構(gòu)如圖2所示。
2.1? UI模塊
使用Qt Designer開發(fā)程序界面,使用Qlabel元素作為展示視頻流和圖片/視頻文件的承載元素,使用QspinBox元素調(diào)節(jié)參數(shù),使用QListWidget元素展示統(tǒng)計結(jié)果,操作按鈕為PushButton。圖像讀取路徑和保存地址通過QlineEdit輸入。
2.2? 視頻流讀取模塊
調(diào)用中的videocapture函數(shù)來讀取RTSP視頻流的圖像。由于VideoCapture函數(shù)讀取的圖像會自行開辟緩存,輸出圖像數(shù)據(jù)時不一定是最新幀,造成掉幀和花屏的現(xiàn)象。因此,單獨開辟一個線程,將videocapture每次讀取的圖像輸入到視頻流隊列中。后續(xù)模塊調(diào)用時從隊列中讀取圖像,避免卡頓現(xiàn)象的發(fā)生。
2.3? 本地文件讀取模塊
如果本地文件地址為圖片,讀取完后會在原圖區(qū)域顯示圖片。如果本地文件地址為視頻,則顯示視頻的第一幀畫面。新編寫文件讀取函數(shù),解決了原生圖片及視頻讀取函數(shù)無法讀取中文路徑以及只能讀取8位深圖像的問題。
2.4? 圖像檢測模塊
圖像檢測模塊負責(zé)處理目標檢測網(wǎng)絡(luò)的輸入輸出。如果軟件正在讀取RTSP流,那么檢測網(wǎng)絡(luò)的輸入為RTSP流最新幀圖像。如果未獲取或停止獲取RTSP視頻流數(shù)據(jù),則檢測網(wǎng)絡(luò)輸入為本地文件,若本地文件地址為圖片或視頻,則檢測網(wǎng)絡(luò)輸入為選定的圖片或視頻。若本地文件地址為文件夾,則檢測該文件夾下所有圖片。檢測時,復(fù)制輸入圖像并將其推入檢測-輸入隊列,將檢測結(jié)果推入檢測-輸出隊列,將預(yù)測框信息、目標統(tǒng)計信息等推入檢測-目標信息隊列,從而保證檢測網(wǎng)絡(luò)的輸入輸出與目標信息同步,避免播放與采集時出現(xiàn)數(shù)據(jù)不匹配的問題。
2.5? 數(shù)據(jù)顯示模塊
數(shù)據(jù)顯示模塊負責(zé)將原始圖像、檢測網(wǎng)絡(luò)輸出圖像和檢測統(tǒng)計結(jié)果展示在界面上。當(dāng)軟件處于檢測文件或檢測視頻流狀態(tài)時,數(shù)據(jù)顯示線程從檢測-輸入隊列讀取原圖并填入UI界面的原圖顯示區(qū)域,從檢測-輸出隊列讀取檢測完成的圖片填入檢測結(jié)果圖片顯示區(qū)域,從檢測-目標信息隊列讀取目標種類與數(shù)量統(tǒng)計結(jié)果填入統(tǒng)計區(qū)域。為了使圖像以原比例保存,編寫了圖像尺寸自適應(yīng)函數(shù),通過填充邊緣的方式使圖像有效部分的比例不變。由于讀取圖像的色彩順序為BGR,重新編寫圖像讀取函數(shù),將圖像色彩順序調(diào)整為RGB。
2.6? 數(shù)據(jù)集采集模塊
數(shù)據(jù)集采集模塊負責(zé)將被檢測圖像及其檢測出的目標信息保存到本地,以供制作數(shù)據(jù)集。采集線程設(shè)置一個計數(shù)器,當(dāng)計數(shù)器數(shù)量與采集間隔幀數(shù)相同時,采集線程讀取目標信息隊列中最新的目標信息,將當(dāng)前所檢測圖像幀中每一個目標的中心點位置、高度、寬度和種類等標注信息保存為本地txt文件,保存位置由使用者自行選擇。同時,讀取當(dāng)前檢測結(jié)果圖像隊列的最新一幀圖像為本地圖片文件,保存的圖像與標注信息命名相同。采集完畢后,計數(shù)器清零,重新開始計數(shù)。
3? 檢測程序
為了快速且準確地檢測圖像,采用預(yù)訓(xùn)練好的基于PyQt的目標檢測網(wǎng)絡(luò)獲取圖像中的目標信息。
3.1? 輕量化檢測網(wǎng)絡(luò)
YOLO系列網(wǎng)絡(luò)是目標檢測領(lǐng)域常用的一種端到端深度網(wǎng)絡(luò),該網(wǎng)絡(luò)將檢測問題轉(zhuǎn)化為回歸問題,可以在預(yù)測目標中心位置與寬高的同時,預(yù)測目標的類別。與R-CNN系列的兩級網(wǎng)絡(luò)相比,YOLO網(wǎng)絡(luò)無需大規(guī)模生成先驗框,從而大幅減少參數(shù),提升運行速度。本文所設(shè)計的軟件需要檢測視頻流,對檢測速度提出了更高的要求,因此YOLO網(wǎng)絡(luò)更適合作為本文檢測網(wǎng)絡(luò)的基礎(chǔ)。
深度學(xué)習(xí)網(wǎng)絡(luò)訓(xùn)練與檢測時,往往使用GPU硬件進行計算以加快速度。為了確保本文所設(shè)計的系統(tǒng)在缺乏GPU平臺的計算機上能夠移植且保持檢測的實時性,使用YOLOv5網(wǎng)絡(luò)的輕量化版本YOLOv5-lite作為目標檢測網(wǎng)絡(luò),使得網(wǎng)絡(luò)在只有CPU的計算機上仍能實時檢測目標。
YOLOv5-lite網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。YOLOv5-lite繼承了YOLOv5的核心思想,但相比于對性能要求更高的YOLOv5s,YOLOv5-lite做了如下輕量化處理,使得網(wǎng)絡(luò)在CPU設(shè)備上仍可流暢運行。
首先,YOLOv5-lite去除了Focus層,以Conv-BatchNorm-Relu結(jié)構(gòu)取而代之,從而避免多次slice操作導(dǎo)致的緩存過度占用;使用ShuffleNetv2網(wǎng)絡(luò)取代原YOLOv5s網(wǎng)絡(luò)的Backbone層,相比于原Backbone層大量使用的C3模塊,Shuffle_Block操作對內(nèi)存訪問量要求更低。為進一步降低內(nèi)存占用與運算量,將原始YOLOv5s里PAN結(jié)構(gòu)中的Concat操作更改為add操作。
3.2? 網(wǎng)絡(luò)訓(xùn)練
訓(xùn)練所用計算機的配置:CPU為Intel(R) Xeon(R) Silver 4210R,運行內(nèi)存為32 GB,GPU為GTX3060ti,顯存為8 GB。訓(xùn)練環(huán)境為Python 3.8.16、PyTorch 1.12、cuda 11.7。為提高預(yù)訓(xùn)練網(wǎng)絡(luò)的特征提取能力,在COCO數(shù)據(jù)集中選取9 000張圖片作為訓(xùn)練集。訓(xùn)練參數(shù)設(shè)置:batch大小為30,epoch數(shù)量為300,初始學(xué)習(xí)率為0.01。
3.3? 網(wǎng)絡(luò)實驗與驗證
為了驗證網(wǎng)絡(luò)在較低性能CPU平臺上的運行速度與精度,在Intel i7-6700k處理器上測試網(wǎng)絡(luò)的速度與精度。速度指標為FPS,檢測精度指標為mAP@0.5,表示各類別檢測精度的平均值。
驗證數(shù)據(jù)集為COCO數(shù)據(jù)集中未經(jīng)訓(xùn)練的1 000張圖片,同時橫向?qū)Ρ绕渌舾蓹z測網(wǎng)絡(luò)。實驗結(jié)果如表1所示。
實驗結(jié)果表明,YOLOv5-lite網(wǎng)絡(luò)在CPU上的檢測速度為28.1 f/s,遠遠高于原始YOLOv5s網(wǎng)絡(luò)和fast-rcnn網(wǎng)絡(luò),滿足實時性要求,同時又遠高于YOLOv4-tiny的檢測精度。故YOLOv5-lite網(wǎng)絡(luò)適合作為本軟件的目標檢測網(wǎng)絡(luò)。
4? 程序打包與功能驗證
4.1? 程序打包
運行本軟件所需的依賴庫如表2所示。
為了避免對此軟件無用的庫也被打包進可執(zhí)行程序而帶來程序體積增大的問題,使用Anconda新建一個虛擬環(huán)境,安裝表2所列出的依賴庫。在編寫程序時,盡量按需引入功能模塊,減小打包體積。為了使程序在無依賴庫與Python環(huán)境的計算中仍可運行,使用Pyinstaller將Python文件打包成Windows平臺可執(zhí)行程序(.exe文件)。
4.2? 跨平臺運行驗證
為了驗證軟件的可移植性,在不同的平臺上測試軟件的運行。從使用場景的角度出發(fā),只考慮軟件在操作系統(tǒng)為Win10及以上、CPU位數(shù)為64位x86_64架構(gòu)的計算機上運行。測試用視頻流來自??低晹z像頭GH19L,輸出圖像尺寸為1 920×1 080,碼率為25 f/s。在部分計算機上測試各功能是否能正常運行,實驗結(jié)果如表3所示。
驗證結(jié)果表明,本文軟件具有良好的可移植性,在用于測試的計算機上均能流暢運行。
4.3? 標注效率驗證
在COCO數(shù)據(jù)集中隨機選取未經(jīng)檢測網(wǎng)絡(luò)訓(xùn)練的500張圖片,使用攝像機自行采集并人工標注500張圖片,共計7 360個目標,構(gòu)成驗證數(shù)據(jù)集,用于對比使用軟件標注的優(yōu)劣。軟件正確標注了6 356個目標,錯誤標注了371個目標,漏檢了633個目標,漏檢目標多為成像尺寸較小的目標。相較于人工標注,使用本文軟件標注能夠節(jié)約86%的人工成本,充分驗證了本文軟件的實用價值。
5? 結(jié)? 論
本文提出一款可快速制作目標檢測數(shù)據(jù)集的軟件。通過預(yù)訓(xùn)練網(wǎng)絡(luò)檢測RTSP視頻流或本地文件,得到圖片中的目標種類與位置信息,并保存到本地文件夾中,從而自動生成數(shù)據(jù)集。軟件可以自選輸入,檢測置信度,采樣頻率和數(shù)據(jù)集保存位置等信息。測試結(jié)果表明,本文軟件具有良好的可移植性,可大幅減輕數(shù)據(jù)集制作的工作量。
參考文獻:
[1] 高洪波.煤礦應(yīng)急救援指揮信息系統(tǒng)的設(shè)計與實現(xiàn) [J].現(xiàn)代信息科技,2022,6(21):105-108+111.
[2] 吳春波,陳偉,趙振華,等.基于PyQt的SHPB試驗數(shù)據(jù)處理程序開發(fā) [J].計算機應(yīng)用與軟件,2021,38(12):11-13+80.
[3] 劉宏偉.基于Qt的多通道振動信號采集儀上位機軟件設(shè)計 [J].現(xiàn)代信息科技,2023,7(3):24-28+32.
[4] 陸安琴,秦嬋嬋,胡圣波,等.基于PyQt5的數(shù)字圖像處理實驗平臺設(shè)計 [J].電子元器件與信息技術(shù),2021,5(2):158-161.
[5] 陳富榮,肖明明.基于YOLOv5的改進小目標檢測算法研究 [J].現(xiàn)代信息科技,2023,7(3):55-60+65.
[6] ZHANG X Y,ZHOU X Y,LIN M X,et al. ShuffleNet: An Extr-emely Efficient Convolutional Neural Network for Mobile Devices [C]//2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition.Salt Lake City:IEEE,2018:6848-6856.
[7] MA N N,ZHANG X Y,ZHENG H T,et al. Shufflenetv2: Practical guidelines for efficient CNN architecture design [C]//Proceedings of the European Conference on Computer Vision. Munich:Springer,2018:122-138.