章毅恒 陳育罕 張雪秋
摘? 要:目標檢測數(shù)據(jù)集中的樣本數(shù)量及差異性對網絡檢測性能具有重要影響。通過人工標注圖像的方式生成數(shù)據(jù)集耗時又費力,因此設計一款目標檢測數(shù)據(jù)集自動采集軟件。該軟件可以檢測RTSP視頻流、圖片文件及視頻文件,通過預訓練好的輕量化檢測網絡得到目標位置類別及定位信息,生成標注文件并保存到本地。實驗結果表明,該文軟件在不同的平臺上均可運行,其數(shù)據(jù)集采集速度相比人工標注有顯著優(yōu)勢。
關鍵詞:數(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? 引? 言
卷積神經網絡本質上是一種輸入到輸出的映射,訓練時神經網絡通過大量輸入與輸出的關系不斷修正參數(shù),使得網絡可以得到輸入與輸出之間的映射關系。樣本數(shù)量越多,網絡得到的映射關系越精確。樣本之間的差異越大,網絡的泛化能力就越強。因此,輸入與輸出的樣本數(shù)據(jù)集合是決定目標檢測網絡精度的重要因素。
人工制作數(shù)據(jù)集需要在圖片中找出目標的種類與位置,并標注出詳細數(shù)據(jù),這個過程需要消耗巨大的人力成本。使用訓練好的網絡檢測并生成數(shù)據(jù)集大大減少了標注圖片形成數(shù)據(jù)集的人工成本,有助于提升深度學習的研究效率。
為此,本文設計一款實時目標檢測與數(shù)據(jù)集采集標注系統(tǒng),使用PyQt平臺進行開發(fā),采用PyTorch、和PyTorch等庫實現(xiàn)功能。通過預訓練好的目標檢測網絡自動檢測圖像,同時采集圖像目標位置類別與定位信息,生成txt格式的標注文件。為了能夠在沒有安裝GPU或配置深度學習環(huán)境的計算機上仍可使用本軟件,采用預訓練好的輕量化YOLOv5網絡作為檢測網絡,可以檢測COCO數(shù)據(jù)集包含的80個目標種類。為方便操作人員制作數(shù)據(jù)集,將數(shù)據(jù)集自動采集程序設計為可以根據(jù)選定的采樣頻率采集檢測網絡輸出的圖像與預測信息,并保存到自定義的文件夾中。為了更加便捷地增加樣本的差異性,將軟件設計為可以讀取RTSP視頻流、本地圖片和本地視頻三種圖像。
實驗證明,本文設計開發(fā)的數(shù)據(jù)集采集軟件運行穩(wěn)定,檢測過程流暢,可在操作系統(tǒng)為Win 10及以上版本、CPU為x86_64架構的計算機中運行。相比于人工標注數(shù)據(jù)集,使用本軟件標注數(shù)據(jù)集可節(jié)約90%的人力成本,便于相關研究人員快速制作數(shù)據(jù)集。
1? 軟件界面設計與功能設計
軟件界面如圖1所示,界面分為RTSP流操作區(qū)域、本地文件操作區(qū)域、數(shù)據(jù)集采樣操作區(qū)域、檢測操作區(qū)域以及圖像顯示區(qū)域六個區(qū)域。RTSP流操作區(qū)域提供輸入RTSP流地址、獲取RTSP流圖像和停止獲取RTSP流圖像等功能。本地文件區(qū)域提供選取本地文件并顯示文件類型和地址等功能。采樣操作區(qū)域提供單幀手動采集、選擇樣本保存地址、調節(jié)采集間隔幀數(shù)、啟動自動采集、停止自動采集等功能。檢測區(qū)域提供置信度調節(jié)、開始停止檢測等功能。
為了增加軟件的靈活性,設定六種輸入軟件的內容,分別為RTSP流地址、視頻文件地址、圖片文件地址、檢測網絡置信度、數(shù)據(jù)集采樣頻率、數(shù)據(jù)集保存位置。RTSP流為輸入的字符串,由使用人員從輸入框自行輸入。可從0至1的范圍內調節(jié)置信度。數(shù)據(jù)集自動采樣頻率由間隔幀數(shù)確定,可自行輸入,也可通過按鈕以每10幀為一單位進行調節(jié)。除了自動采集數(shù)據(jù)集,還可通過按鈕手動采集單幀圖像及其標注信息。檢測網絡輸入圖像有三種來源,分別為RTSP流實時畫面、本地圖片文件、本地視頻文件。多種輸入可以豐富數(shù)據(jù)集的來源,增加數(shù)據(jù)集的多樣性和規(guī)模。設定四種隊列(分別為視頻流隊列、檢測-輸入隊列、檢測-輸出隊列、檢測-目標信息隊列)來完成不同模塊線程間的信息交互,使程序運行更加流暢。設定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文件轉換為.py格式的UI聲明文件,通過UI聲明文件給UI中的按鈕、標簽等槽函數(shù)綁定各種功能。各模塊類繼承PyQt的QTherad線程類以實現(xiàn)多線程,線程間通過隊列通信,隊列繼承自Python內部的queue類。軟件結構如圖2所示。
2.1? UI模塊
使用Qt Designer開發(fā)程序界面,使用Qlabel元素作為展示視頻流和圖片/視頻文件的承載元素,使用QspinBox元素調節(jié)參數(shù),使用QListWidget元素展示統(tǒng)計結果,操作按鈕為PushButton。圖像讀取路徑和保存地址通過QlineEdit輸入。
2.2? 視頻流讀取模塊
調用中的videocapture函數(shù)來讀取RTSP視頻流的圖像。由于VideoCapture函數(shù)讀取的圖像會自行開辟緩存,輸出圖像數(shù)據(jù)時不一定是最新幀,造成掉幀和花屏的現(xiàn)象。因此,單獨開辟一個線程,將videocapture每次讀取的圖像輸入到視頻流隊列中。后續(xù)模塊調用時從隊列中讀取圖像,避免卡頓現(xiàn)象的發(fā)生。
2.3? 本地文件讀取模塊
如果本地文件地址為圖片,讀取完后會在原圖區(qū)域顯示圖片。如果本地文件地址為視頻,則顯示視頻的第一幀畫面。新編寫文件讀取函數(shù),解決了原生圖片及視頻讀取函數(shù)無法讀取中文路徑以及只能讀取8位深圖像的問題。
2.4? 圖像檢測模塊
圖像檢測模塊負責處理目標檢測網絡的輸入輸出。如果軟件正在讀取RTSP流,那么檢測網絡的輸入為RTSP流最新幀圖像。如果未獲取或停止獲取RTSP視頻流數(shù)據(jù),則檢測網絡輸入為本地文件,若本地文件地址為圖片或視頻,則檢測網絡輸入為選定的圖片或視頻。若本地文件地址為文件夾,則檢測該文件夾下所有圖片。檢測時,復制輸入圖像并將其推入檢測-輸入隊列,將檢測結果推入檢測-輸出隊列,將預測框信息、目標統(tǒng)計信息等推入檢測-目標信息隊列,從而保證檢測網絡的輸入輸出與目標信息同步,避免播放與采集時出現(xiàn)數(shù)據(jù)不匹配的問題。
2.5? 數(shù)據(jù)顯示模塊
數(shù)據(jù)顯示模塊負責將原始圖像、檢測網絡輸出圖像和檢測統(tǒng)計結果展示在界面上。當軟件處于檢測文件或檢測視頻流狀態(tài)時,數(shù)據(jù)顯示線程從檢測-輸入隊列讀取原圖并填入UI界面的原圖顯示區(qū)域,從檢測-輸出隊列讀取檢測完成的圖片填入檢測結果圖片顯示區(qū)域,從檢測-目標信息隊列讀取目標種類與數(shù)量統(tǒng)計結果填入統(tǒng)計區(qū)域。為了使圖像以原比例保存,編寫了圖像尺寸自適應函數(shù),通過填充邊緣的方式使圖像有效部分的比例不變。由于讀取圖像的色彩順序為BGR,重新編寫圖像讀取函數(shù),將圖像色彩順序調整為RGB。
2.6? 數(shù)據(jù)集采集模塊
數(shù)據(jù)集采集模塊負責將被檢測圖像及其檢測出的目標信息保存到本地,以供制作數(shù)據(jù)集。采集線程設置一個計數(shù)器,當計數(shù)器數(shù)量與采集間隔幀數(shù)相同時,采集線程讀取目標信息隊列中最新的目標信息,將當前所檢測圖像幀中每一個目標的中心點位置、高度、寬度和種類等標注信息保存為本地txt文件,保存位置由使用者自行選擇。同時,讀取當前檢測結果圖像隊列的最新一幀圖像為本地圖片文件,保存的圖像與標注信息命名相同。采集完畢后,計數(shù)器清零,重新開始計數(shù)。
3? 檢測程序
為了快速且準確地檢測圖像,采用預訓練好的基于PyQt的目標檢測網絡獲取圖像中的目標信息。
3.1? 輕量化檢測網絡
YOLO系列網絡是目標檢測領域常用的一種端到端深度網絡,該網絡將檢測問題轉化為回歸問題,可以在預測目標中心位置與寬高的同時,預測目標的類別。與R-CNN系列的兩級網絡相比,YOLO網絡無需大規(guī)模生成先驗框,從而大幅減少參數(shù),提升運行速度。本文所設計的軟件需要檢測視頻流,對檢測速度提出了更高的要求,因此YOLO網絡更適合作為本文檢測網絡的基礎。
深度學習網絡訓練與檢測時,往往使用GPU硬件進行計算以加快速度。為了確保本文所設計的系統(tǒng)在缺乏GPU平臺的計算機上能夠移植且保持檢測的實時性,使用YOLOv5網絡的輕量化版本YOLOv5-lite作為目標檢測網絡,使得網絡在只有CPU的計算機上仍能實時檢測目標。
YOLOv5-lite網絡結構如圖3所示。YOLOv5-lite繼承了YOLOv5的核心思想,但相比于對性能要求更高的YOLOv5s,YOLOv5-lite做了如下輕量化處理,使得網絡在CPU設備上仍可流暢運行。
首先,YOLOv5-lite去除了Focus層,以Conv-BatchNorm-Relu結構取而代之,從而避免多次slice操作導致的緩存過度占用;使用ShuffleNetv2網絡取代原YOLOv5s網絡的Backbone層,相比于原Backbone層大量使用的C3模塊,Shuffle_Block操作對內存訪問量要求更低。為進一步降低內存占用與運算量,將原始YOLOv5s里PAN結構中的Concat操作更改為add操作。
3.2? 網絡訓練
訓練所用計算機的配置:CPU為Intel(R) Xeon(R) Silver 4210R,運行內存為32 GB,GPU為GTX3060ti,顯存為8 GB。訓練環(huán)境為Python 3.8.16、PyTorch 1.12、cuda 11.7。為提高預訓練網絡的特征提取能力,在COCO數(shù)據(jù)集中選取9 000張圖片作為訓練集。訓練參數(shù)設置:batch大小為30,epoch數(shù)量為300,初始學習率為0.01。
3.3? 網絡實驗與驗證
為了驗證網絡在較低性能CPU平臺上的運行速度與精度,在Intel i7-6700k處理器上測試網絡的速度與精度。速度指標為FPS,檢測精度指標為mAP@0.5,表示各類別檢測精度的平均值。
驗證數(shù)據(jù)集為COCO數(shù)據(jù)集中未經訓練的1 000張圖片,同時橫向對比其他若干檢測網絡。實驗結果如表1所示。
實驗結果表明,YOLOv5-lite網絡在CPU上的檢測速度為28.1 f/s,遠遠高于原始YOLOv5s網絡和fast-rcnn網絡,滿足實時性要求,同時又遠高于YOLOv4-tiny的檢測精度。故YOLOv5-lite網絡適合作為本軟件的目標檢測網絡。
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架構的計算機上運行。測試用視頻流來自??低晹z像頭GH19L,輸出圖像尺寸為1 920×1 080,碼率為25 f/s。在部分計算機上測試各功能是否能正常運行,實驗結果如表3所示。
驗證結果表明,本文軟件具有良好的可移植性,在用于測試的計算機上均能流暢運行。
4.3? 標注效率驗證
在COCO數(shù)據(jù)集中隨機選取未經檢測網絡訓練的500張圖片,使用攝像機自行采集并人工標注500張圖片,共計7 360個目標,構成驗證數(shù)據(jù)集,用于對比使用軟件標注的優(yōu)劣。軟件正確標注了6 356個目標,錯誤標注了371個目標,漏檢了633個目標,漏檢目標多為成像尺寸較小的目標。相較于人工標注,使用本文軟件標注能夠節(jié)約86%的人工成本,充分驗證了本文軟件的實用價值。
5? 結? 論
本文提出一款可快速制作目標檢測數(shù)據(jù)集的軟件。通過預訓練網絡檢測RTSP視頻流或本地文件,得到圖片中的目標種類與位置信息,并保存到本地文件夾中,從而自動生成數(shù)據(jù)集。軟件可以自選輸入,檢測置信度,采樣頻率和數(shù)據(jù)集保存位置等信息。測試結果表明,本文軟件具有良好的可移植性,可大幅減輕數(shù)據(jù)集制作的工作量。
參考文獻:
[1] 高洪波.煤礦應急救援指揮信息系統(tǒng)的設計與實現(xiàn) [J].現(xiàn)代信息科技,2022,6(21):105-108+111.
[2] 吳春波,陳偉,趙振華,等.基于PyQt的SHPB試驗數(shù)據(jù)處理程序開發(fā) [J].計算機應用與軟件,2021,38(12):11-13+80.
[3] 劉宏偉.基于Qt的多通道振動信號采集儀上位機軟件設計 [J].現(xiàn)代信息科技,2023,7(3):24-28+32.
[4] 陸安琴,秦嬋嬋,胡圣波,等.基于PyQt5的數(shù)字圖像處理實驗平臺設計 [J].電子元器件與信息技術,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.