基于深度學習的瓶子檢測軟件(UI界面+YOLOv5+訓練數(shù)據(jù)集)
摘要:基于深度學習的瓶子檢測軟件用于自動化瓶子檢測與識別,對于各種場景下的塑料瓶、玻璃瓶等進行檢測并計數(shù),輔助計算機瓶子生產(chǎn)回收等工序。本文詳細介紹深度學習的瓶子檢測軟件,在介紹算法原理的同時,給出Python的實現(xiàn)代碼、訓練數(shù)據(jù)集,以及PyQt的UI界面?;赮OLOv5算法實現(xiàn)對圖像中存在的多個目標進行識別分類,在界面中可以選擇各種圖片、視頻進行檢測識別;博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源文件請轉(zhuǎn)至文末的下載鏈接。

參考博客文章:https://mbd.pub/o/bread/ZJaXlZ1q
參考視頻演示:https://www.bilibili.com/video/BV1jM411W7Tz/
離線依賴庫下載:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

前言
????????玻璃瓶、塑料瓶使用后可以回收再產(chǎn),既有效解決廢料垃圾的產(chǎn)生,同時也能夠?qū)崿F(xiàn)產(chǎn)品的循環(huán)利用。隨著政府對環(huán)境友好型、資源節(jié)約型社會建設的不斷深入,以及消費者本身環(huán)保節(jié)約意識的增強,玻璃包裝逐漸成為政府鼓勵類包裝材料,消費者的認可程度也不斷提升。各種玻璃瓶、塑料瓶的應用已然非常普遍,諸如:酒類、醫(yī)包、日包等。
????????為了提高塑料瓶、玻璃瓶的生產(chǎn)線定位檢測、回收利用等環(huán)節(jié)的效率,在當今全自動化生產(chǎn)趨勢下,需要配合機床、機器人等識別和定位瓶子位置,傳統(tǒng)的人工目測顯然不是一個好的解決方案。各企業(yè)急需一套全自動化的檢測方案,來解決這個難以平衡的矛盾。
????????本系統(tǒng)基于YOLOv5算法實現(xiàn),采用登錄注冊進行用戶管理,對于圖片、視頻和攝像頭捕獲的實時畫面,可檢測瓶子,系統(tǒng)支持結果記錄、展示和保存,每次檢測的結果記錄在表格中。對此這里給出博主設計的界面,同款的簡約風,功能也可以滿足圖片、視頻和攝像頭的識別檢測,希望大家可以喜歡,初始界面如下圖:

????????檢測類別時的界面截圖(點擊圖片可放大)如下圖,可識別畫面中存在的多個類別,也可開啟攝像頭或視頻檢測:

???????? 詳細的功能演示效果參見博主的B站視頻或下一節(jié)的動圖演示,覺得不錯的朋友敬請點贊、關注加收藏!系統(tǒng)UI界面的設計工作量較大,界面美化更需仔細雕琢,大家有任何建議或意見和可在下方評論交流。
1.?效果演示
????????首先我們還是通過動圖看一下識別的效果,系統(tǒng)主要實現(xiàn)的功能是對圖片、視頻和攝像頭畫面中的瓶子進行識別,識別的結果可視化顯示在界面和圖像中,另外提供多個目標的顯示選擇功能,演示效果如下。
(一)系統(tǒng)介紹
????????基于深度學習的瓶子檢測軟件主要用于日常塑料瓶、玻璃瓶等瓶子檢測,利用深度學習技術檢測識別瓶子數(shù)目,可視化檢測結果;可對圖片、視頻、攝像設備得到的圖像進行分析,自動標記和記錄檢測結果,輔助計算機進行瓶子生產(chǎn)回收等工序;深度學習模型可方便切換和更新,已針對不同場景進行模型調(diào)整;提供用戶登錄注冊功能,方便用戶管理和使用;檢測結果易于查看、記錄和保存。
(二)技術特點
???????? (1)檢測算法采用YoloV5實現(xiàn),模型可切換更新;
???????? (2)定位圖片、視頻或攝像頭等圖像中瓶子位置;
???????? (3)檢測結果實時性強,便攜展示、記錄和保存;
???????? (4)支持用戶登錄、注冊、管理、界面可視化等功能;
(三)用戶注冊登錄界面
????????這里設計了一個登錄界面,可以注冊賬號和密碼,然后進行登錄。界面還是參考了當前流行的UI設計,左側是一個動圖,右側輸入賬號、密碼、驗證碼等等。

(四)選擇圖片識別
????????系統(tǒng)允許選擇圖片文件進行識別,點擊圖片選擇按鈕圖標選擇圖片后,顯示所有識別的結果,可通過下拉選框查看單個結果,以便具體判斷某一特定目標。本功能的界面展示如下圖所示:

(五)視頻識別效果展示
????????很多時候我們需要識別一段視頻中的多個瓶子,這里設計了視頻選擇功能。點擊視頻按鈕可選擇待檢測的視頻,系統(tǒng)會自動解析視頻逐幀識別多個瓶子,并將瓶子的分類和計數(shù)結果記錄在右下角表格中,效果如下圖所示:

(六)攝像頭檢測效果展示
????????在真實場景中,我們往往利用攝像頭獲取實時畫面,同時需要對瓶子進行識別,因此本文考慮到此項功能。如下圖所示,點擊攝像頭按鈕后系統(tǒng)進入準備狀態(tài),系統(tǒng)顯示實時畫面并開始檢測畫面中的瓶子,識別結果展示如下圖:

2.?瓶子檢測與識別
(一)基于YoloV5的瓶子檢測
????????YOLOv5( You Only Look Once ) 是 由 UltralyticsLLC 公司于 2020 年 5 月份提出,其圖像推理速度最快達 0.007 s,即每秒可處理 140 幀,滿足視頻圖像實時檢測需求,同時結構更為小巧,YOLOv5s 版本的權重數(shù)據(jù)文件為 YOLOv4的 1/9,大小為 27 MB。YOLOv5處理流程為:
???????? (1)先將輸入圖片縮放到固定大小 640×640,再假想地將圖片切分為 7×7個網(wǎng)格;
???????? (2)對整張圖像做卷積運算,每個小網(wǎng)格負責 2 個回歸框的和置信度的預測,同時每個小網(wǎng)格還要預測出來 20 個類別,以及屬于這些類別的條件概率。
???????? (3)使用非極大值抑制法,對輸出結果—類別和位置進行篩選處理。
???????? YOLO 最大的特長是由于只看一次,所以速度極快,但是準確率跟當下最好的檢測器相比有差距。對于出現(xiàn)在同一個網(wǎng)格里,距離很近的兩個小目標,經(jīng)常出現(xiàn)漏檢等情況。
????????Yolov5 按照網(wǎng)絡深度大小和特征圖寬度大小分為 Yolov5s、 Yolov5m、Yolov5l、Yolov5,本文采用了 yolov5s 作為使用模型。Yolov5 的結構分為 input,backbone,Neck, 預測層。
(1)在輸入端使用了 Mosaic 的數(shù)據(jù)增強方式,隨機調(diào)用 4 張圖片,隨機大小和分布,進行堆疊,豐富了數(shù)據(jù),增加了很多小目標,提升小物體的識別能力??梢酝瑫r計算 4 張圖片,相當于增加了 Mini-batch 大小,減少了GPU 內(nèi)存的消耗。Yolov5 首先也可以通過聚類設定anchor大小,然后還可以在訓練過程中,在每次訓練時,計算不同訓練集中的ahchor值。然后在預測時使用了自適應圖片大小的縮放模式,通過減少黑邊,提高了預測速度。
(2) 在 Backbone 上 的 主 要 是 采 用 了Focus 結構,CSPnet 結構。Focus 結構不存在與 YOLOv3和 v4 版本中,其關鍵步驟為切片操作,如下圖 所示。例如將原始圖像 416* 416* 3 接入 Focus 結構中,通過切片操作,變?yōu)?208* 208* 12 的特征圖,接下來進行一次 32 個卷積核操作,變?yōu)?208* 208* 32 的特征圖。

(二)數(shù)據(jù)集和訓練
????????這里我們使用的瓶子識別數(shù)據(jù)集,包含訓練數(shù)據(jù)集1486張圖片,驗證集248張圖片,驗證集125張圖片,共計1859張圖片。數(shù)據(jù)集部分圖像及其標注信息如下圖所示:

????????每張圖像均提供了圖像類標記信息,圖像中瓶子的bounding box,瓶子的關鍵part信息,以及瓶子的屬性信息,數(shù)據(jù)集并解壓后得到如下的圖片。

????????在深度學習中,我們通常通過損失函數(shù)下降的曲線來觀察模型訓練的情況。而YOLOv5訓練時主要包含三個方面的損失:矩形框損失(box_loss)、置信度損失(obj_loss)和分類損失(cls_loss),在訓練結束后,我們也可以在logs目錄下找到生成對若干訓練過程統(tǒng)計圖。下圖為博主訓練瓶子類識別的模型訓練和曲線圖。

? ? ? ? YOLOv5訓練時主要包含三個方面的損失:矩形框損失(box_loss)、置信度損失(obj_loss)和分類損失(cls_loss),下圖為博主訓練交通標志類識別的模型訓練曲線圖。

????????一般我們會接觸到兩個指標,分別是召回率recall和精度precision,兩個指標p和r都是簡單地從一個角度來判斷模型的好壞,均是介于0到1之間的數(shù)值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,為了綜合評價目標檢測的性能,一般采用均值平均密度map來進一步評估模型的好壞。繪制出來可以得到如下圖所示的曲線。

????????以PR-curve為例,可以看到我們的模型在驗證集上的均值平均準確率為0.945。
3.?瓶子檢測識別
????????在訓練完成后得到最佳模型,接下來我們將幀圖像輸入到這個網(wǎng)絡進行預測,從而得到預測結果,預測方法(predict.py)部分的代碼如下所示:
????????得到預測結果我們便可以將幀圖像中的瓶子框出,然后在圖片上用opencv繪圖操作,輸出瓶子的類別及瓶子的預測分數(shù)。以下是讀取一個瓶子圖片并進行檢測的腳本,首先將圖片數(shù)據(jù)進行預處理后送predict進行檢測,然后計算標記框的位置并在圖中標注出來。
????????執(zhí)行得到的結果如下圖所示,圖中瓶子的種類和置信度值都標注出來了,預測速度較快?;诖四P臀覀兛梢詫⑵湓O計成一個帶有界面的系統(tǒng),在界面上選擇圖片、視頻或攝像頭然后調(diào)用模型進行檢測。

????????博主對整個系統(tǒng)進行了詳細測試,最終開發(fā)出一版流暢得到清新界面,就是博文演示部分的展示,完整的UI界面、測試圖片視頻、代碼文件,以及Python離線依賴包(方便安裝運行,也可自行配置環(huán)境),均已打包上傳,感興趣的朋友可以通過下載鏈接獲取。

下載鏈接
????若您想獲得博文中涉及的實現(xiàn)完整全部程序文件(包括測試圖片、視頻,py, UI文件等,如下圖),這里已打包上傳至博主的面包多平臺,見可參考博客與視頻,已將所有涉及的文件同時打包到里面,點擊即可運行,完整文件截圖如下:

????在文件夾下的資源顯示如下,其中包含了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,點擊bat文件進行安裝,詳細演示也可見本人B站視頻。

注意:該代碼采用Pycharm+Python3.8開發(fā),經(jīng)過測試能成功運行,運行界面的主程序為runMain.py和LoginUI.py,測試圖片腳本可運行testPicture.py,測試視頻腳本可運行testVideo.py。為確保程序順利運行,請按照requirements.txt配置Python依賴包的版本。Python版本:3.8,請勿使用其他版本,詳見requirements.txt文件;
完整資源中包含數(shù)據(jù)集及訓練代碼,環(huán)境配置與界面中文字、圖片、logo等的修改方法請見視頻,項目完整文件下載請見參考博客文章里面,或參考視頻的簡介處給出:???
參考博客文章:https://mbd.pub/o/bread/ZJaXlZ1q
參考視頻演示:https://www.bilibili.com/video/BV1jM411W7Tz/
離線依賴庫下載:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

界面中文字、圖標和背景圖修改方法:
????????在Qt Designer中可以徹底修改界面的各個控件及設置,然后將ui文件轉(zhuǎn)換為py文件即可調(diào)用和顯示界面。如果只需要修改界面中的文字、圖標和背景圖的,可以直接在ConfigUI.config文件中修改,步驟如下:
????????(1)打開UI_rec/tools/ConfigUI.config文件,若亂碼請選擇GBK編碼打開。
????????(2)如需修改界面文字,只要選中要改的字符替換成自己的就好。
????????(3)如需修改背景、圖標等,只需修改圖片的路徑。例如,原文件中的背景圖設置如下:
????????可修改為自己的名為background2.png圖片(位置在UI_rec/icons/文件夾中),可將該項設置如下即可修改背景圖:
結束語
????????由于博主能力有限,博文中提及的方法即使經(jīng)過試驗,也難免會有疏漏之處。希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹?shù)臉幼?,呈現(xiàn)在大家面前。同時如果有更好的實現(xiàn)方法也請您不吝賜教。