基于深度學習的海洋動物檢測系統(tǒng)(Python+YOLOv5+清新界面)

摘要:基于深度學習的海洋動物檢測系統(tǒng)使用深度學習技術(shù)檢測常見海洋動物,識別圖片、視頻和實時視頻中的海洋動物,方便記錄、展示和保存結(jié)果。本文詳細介紹海洋動物檢測系統(tǒng),在介紹算法原理的同時,給出Python的實現(xiàn)代碼、訓練數(shù)據(jù)集,以及PyQt的UI界面。基于YOLOv5實現(xiàn)對圖像中存在的多個目標進行識別分類,可以在界面中選擇各種海洋動物圖片、視頻進行檢測識別。博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源文件請轉(zhuǎn)至文末的下載鏈接。

完整代碼下載:https://mbd.pub/o/bread/ZJaXlZdp
參考視頻演示:https://www.bilibili.com/video/BV1224y147Wz/
離線依賴庫下載:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

前言
????????海洋牧場人工魚礁區(qū)域建設是通過人工投放魚礁的方式為魚類等海洋生物構(gòu)建良好的生態(tài)系統(tǒng)、營造賴以生存的自然環(huán)境,促進海洋生物的健康生長,其建設是海洋環(huán)境生態(tài)修復、生態(tài)環(huán)境保護的重要手段,可促進海洋生態(tài)環(huán)境的良性健康發(fā)展;如何對投放的人工魚礁集魚效果進行檢測、評估,是人工魚礁建設情況評價的重要手段。我省海洋牧場海底觀測網(wǎng)實現(xiàn)了局部覆蓋,可實現(xiàn)海洋溫度、鹽度、深度、以及水下圖像數(shù)據(jù)的采集,如何借助于大數(shù)據(jù)與人工智能手段對相關(guān)數(shù)據(jù)進行分析,實時監(jiān)測人工魚礁區(qū)域魚群變化情況,是當前一項重要研究課題。
????????海洋動物檢測是近年來計算機視覺領(lǐng)域的研究熱點,同時也是目標檢測領(lǐng)域中的難點。其目的是識別和定位圖像中存在的海洋動物,在許多領(lǐng)域中都有廣泛的應用。本系統(tǒng)采用登錄注冊進行用戶管理,對于圖片、視頻和攝像頭捕獲的實時畫面,系統(tǒng)可檢測畫面中的動物,系統(tǒng)支持結(jié)果記錄、展示和保存,每次檢測的結(jié)果記錄在表格中。對此這里給出博主設計的界面,同款的簡約風,功能也可以滿足圖片、視頻和攝像頭的識別檢測,希望大家可以喜歡,初始界面如下圖:

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

???????? 詳細的功能演示效果參見博主的B站視頻或下一節(jié)的動圖演示,覺得不錯的朋友敬請點贊、關(guān)注加收藏!系統(tǒng)UI界面的設計工作量較大,界面美化更需仔細雕琢,大家有任何建議或意見和可在下方評論交流。
1.?效果演示
????????軟件好不好用,顏值很重要,首先我們還是通過動圖看一下識別海洋動物的效果,系統(tǒng)主要實現(xiàn)的功能是對圖片、視頻和攝像頭畫面中的海洋動物屬性進行識別,識別的結(jié)果可視化顯示在界面和圖像中,另外提供多個目標的顯示選擇功能,演示效果如下。
(一)系統(tǒng)介紹
????????基于深度學習的海洋動物檢測系統(tǒng)深度學習技術(shù)檢測的海洋動物類別,包括魚、鯊魚、水母、海星、企鵝等常見目標,以方便對海洋環(huán)境進行監(jiān)測分析;系統(tǒng)采用登錄注冊進行用戶管理;對于圖片、視頻和攝像頭捕獲的實時畫面,系統(tǒng)可檢測畫面中的海洋動物;系統(tǒng)支持結(jié)果記錄、展示和保存,每次檢測的結(jié)果記錄在表格中。
(二)技術(shù)特點
???????? (1)YOLOv5算法實現(xiàn),模型一鍵切換更新;
???????? (2)檢測圖片、視頻等圖像中的各目標數(shù)目;
???????? (3)攝像頭監(jiān)控實時檢測,便攜展示、記錄和保存;
???????? (4)支持用戶登錄、注冊,檢測結(jié)果可視化功能;
(三)用戶注冊登錄界面
????????這里設計了一個登錄界面,可以注冊賬號和密碼,然后進行登錄。界面還是參考了當前流行的UI設計,左側(cè)是一個動圖,右側(cè)輸入賬號、密碼、驗證碼等等。

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

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

(六)攝像頭檢測效果展示
????????在真實場景中,我們往往利用攝像頭獲取實時畫面,同時需要對畫面中的海洋動物進行識別,因此本文考慮到此項功能。如下圖所示,點擊攝像頭按鈕后系統(tǒng)進入準備狀態(tài),系統(tǒng)顯示實時畫面并開始檢測畫面中的海洋動物,識別結(jié)果展示可見演示視頻。
2.?海洋動物檢測
(一)海洋動物數(shù)據(jù)集
????????這里我們使用的海洋動物識別數(shù)據(jù)集,其中訓練數(shù)據(jù)包括4480張圖片,驗證集包含127張圖片,測試集包括63張圖片,共計圖片4670張。涉及水母、鯊魚、黃貂魚等類別,如下:
????????以下是部分圖片和標注情況:

? ? ? ? 每張圖像均提供了圖像類標記信息,圖像中海洋動物的bounding box,海洋動物的關(guān)鍵part信息,以及海洋動物的屬性信息,數(shù)據(jù)集并解壓后得到如下的圖片:

(二)YOLOv5模型簡介
???????? YOLOv5網(wǎng)絡結(jié)構(gòu)是由Input、Backbone、Neck、Prediction組成。Yolov5的Input部分是網(wǎng)絡的輸入端,采用Mosaic數(shù)據(jù)增強方式,對輸入數(shù)據(jù)隨機裁剪,然后進行拼接。Backbone是Yolov5提取特征的網(wǎng)絡部分,特征提取能力直接影響整個網(wǎng)絡性能。YOLOv5的Backbone相比于之前Yolov4提出了新的Focus結(jié)構(gòu)。Focus結(jié)構(gòu)是將圖片進行切片操作,將W(寬)、H(高)信息轉(zhuǎn)移到了通道空間中,使得在沒有丟失任何信息的情況下,進行了2倍下采樣操作。博主覺得YOLOv5不失為一種目標檢測的高性能解決方案,能夠以較高的準確率對海洋動物進行分類與定位。當然現(xiàn)在YOLOv6、YOLOv7、YOLOv8等算法也在不斷提出和改進,等其代碼版本成熟后博主也會再設計本系統(tǒng)的算法,敬請期待。

(三)訓練過程
????????train.py文件中需要修改以下參數(shù),模型的預訓練權(quán)重,使用的模型的yaml文件,博主這里使用的是yolov5s模型,訓練的輪數(shù),batch_size的大小,圖像的輸入尺寸等。
????????設置訓練集路徑、驗證集路徑和測試集路徑,種類共7類。
????????這里我們開始訓練和測試自己的數(shù)據(jù)集,在cmd終端中運行train.py進行訓練,以下是訓練過程中的結(jié)果截圖。

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

? ? ? ? 一般我們會接觸到兩個指標,分別是召回率recall和精度precision,兩個指標p和r都是簡單地從一個角度來判斷模型的好壞,均是介于0到1之間的數(shù)值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,為了綜合評價目標檢測的性能,一般采用均值平均密度map來進一步評估模型的好壞。我們通過設定不同的置信度的閾值,可以得到在模型在不同的閾值下所計算出的p值和r值,一般情況下,p值和r值是負相關(guān)的,繪制出來可以得到如下圖所示的曲線,其中曲線的面積我們稱AP,目標檢測模型中每種目標可計算出一個AP值,對所有的AP值求平均則可以得到模型的mAP值。

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

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

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

????在文件夾下的資源顯示如下,下面的鏈接中也給出了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,復制離線依賴包至項目目錄下進行安裝,離線依賴的使用詳細演示也可見本人B站視頻:win11從頭安裝軟件和配置環(huán)境運行深度學習項目、Win10中使用pycharm和anaconda進行python環(huán)境配置教程。

注意:該代碼采用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/ZJaXlZdp
參考視頻演示:https://www.bilibili.com/video/BV1224y147Wz/
離線依賴庫下載: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/文件夾中),可將該項設置如下即可修改背景圖:
結(jié)束語
????????由于博主能力有限,博文中提及的方法即使經(jīng)過試驗,也難免會有疏漏之處。希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹?shù)臉幼?,呈現(xiàn)在大家面前。同時如果有更好的實現(xiàn)方法也請您不吝賜教。