血細(xì)胞智能檢測(cè)與計(jì)數(shù)軟件(Python+YOLOv5深度學(xué)習(xí)模型+清新界面版)
摘要:血細(xì)胞智能檢測(cè)與計(jì)數(shù)軟件應(yīng)用深度學(xué)習(xí)技術(shù)智能檢測(cè)血細(xì)胞圖像中紅細(xì)胞、鐮狀細(xì)胞等不同形態(tài)細(xì)胞并可視化計(jì)數(shù),以輔助醫(yī)學(xué)細(xì)胞檢測(cè)。本文詳細(xì)介紹血細(xì)胞智能檢測(cè)與計(jì)數(shù)軟件,在介紹算法原理的同時(shí),給出Python的實(shí)現(xiàn)代碼以及PyQt的UI界面。在界面中可以選擇各種圖片、視頻進(jìn)行檢測(cè)識(shí)別;可對(duì)圖像中存在的多目標(biāo)進(jìn)行識(shí)別分類(lèi),檢測(cè)速度快、識(shí)別精度高。博文提供了完整的Python代碼和使用教程,適合新入門(mén)的朋友參考,完整代碼資源文件請(qǐng)轉(zhuǎn)至文末的下載鏈接。

完整資源下載:https://mbd.pub/o/bread/ZJaXlZhx
參考視頻演示:https://www.bilibili.com/video/BV1p84y1A7Yj/
離線依賴庫(kù)下載鏈接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

前言
????????目標(biāo)檢測(cè)主要通過(guò)人工智能技術(shù)識(shí)別并定位圖像中的物體,在實(shí)際生活中應(yīng)用領(lǐng)域廣泛:數(shù)字?jǐn)z像機(jī)智能火災(zāi)監(jiān)控、醫(yī)學(xué)影像腫瘤檢測(cè)、數(shù)碼相機(jī)人臉自動(dòng)定位等等多個(gè)領(lǐng)域。傳統(tǒng)目標(biāo)檢測(cè)算法因無(wú)法利用圖像的深層特征而易受到物體遮擋、光照變化等因素的干擾,導(dǎo)致漏檢與誤檢。深度學(xué)習(xí)的出現(xiàn)可以很好地解決這一問(wèn)題。深度學(xué)習(xí)算法可以從樣本中學(xué)習(xí),通過(guò)對(duì)特征的加工組合,進(jìn)而提取圖像的更深層特征。本文在深度學(xué)習(xí)理論的支持下研究目標(biāo)檢測(cè)在血液細(xì)胞中的應(yīng)用。。
????????醫(yī)療圖像的獲取以及標(biāo)注需要耗費(fèi)巨大的人力成本,而訓(xùn)練數(shù)據(jù)不足會(huì)導(dǎo)致模型出現(xiàn)過(guò)擬合的現(xiàn)象,尤其是血液細(xì)胞中各類(lèi)細(xì)胞的識(shí)別。并且血液細(xì)胞圖像本身存在著對(duì)比度低和各類(lèi)細(xì)胞數(shù)量、外形差異較大的特點(diǎn),這些都影響著血液細(xì)胞檢測(cè)的精度。本文在對(duì)深度學(xué)習(xí)目標(biāo)檢測(cè)算法研究的基礎(chǔ)上,對(duì)血液細(xì)胞中的各類(lèi)細(xì)胞識(shí)別,并使用算法得到較高的血液細(xì)胞的檢測(cè)精度。
????????本系統(tǒng)采用登錄注冊(cè)進(jìn)行用戶管理,對(duì)于圖片、視頻和攝像頭捕獲的實(shí)時(shí)畫(huà)面,可檢測(cè)醫(yī)療圖像,系統(tǒng)支持結(jié)果記錄、展示和保存,每次檢測(cè)的結(jié)果記錄在表格中。對(duì)此這里給出博主設(shè)計(jì)的界面,同款的簡(jiǎn)約風(fēng),功能也可以滿足圖片、視頻和攝像頭的識(shí)別檢測(cè),希望大家可以喜歡,初始界面如下圖:

????????檢測(cè)類(lèi)別時(shí)的界面截圖(點(diǎn)擊圖片可放大)如下圖,可識(shí)別畫(huà)面中存在的多個(gè)類(lèi)別,也可開(kāi)啟攝像頭或視頻檢測(cè):

???????? 詳細(xì)的功能演示效果參見(jiàn)博主的B站視頻或下一節(jié)的動(dòng)圖演示,覺(jué)得不錯(cuò)的朋友敬請(qǐng)點(diǎn)贊、關(guān)注加收藏!系統(tǒng)UI界面的設(shè)計(jì)工作量較大,界面美化更需仔細(xì)雕琢,大家有任何建議或意見(jiàn)和可在下方評(píng)論交流。

1.?效果演示
????????軟件好不好用,顏值很重要,首先我們還是通過(guò)動(dòng)圖看一下識(shí)別的效果,系統(tǒng)主要實(shí)現(xiàn)的功能是對(duì)圖片、視頻和攝像頭畫(huà)面中的血細(xì)胞進(jìn)行識(shí)別,識(shí)別的結(jié)果可視化顯示在界面和圖像中,另外提供多個(gè)目標(biāo)的顯示選擇功能,演示效果如下。
(一)系統(tǒng)介紹
????????血細(xì)胞智能檢測(cè)與計(jì)數(shù)軟件主要用于顯微鏡下的血細(xì)胞檢測(cè)與計(jì)數(shù),基于深度學(xué)習(xí)技術(shù)識(shí)別圖像中常見(jiàn)的4種血細(xì)胞,包括血小板、紅細(xì)胞、白細(xì)胞、鐮狀細(xì)胞等,輸出細(xì)胞的標(biāo)記框坐標(biāo)和類(lèi)別,以輔助自動(dòng)化細(xì)胞統(tǒng)計(jì)和醫(yī)學(xué)研究;軟件提供登錄注冊(cè)功能,可進(jìn)行用戶管理;軟件能夠有效識(shí)別電子顯微鏡采集的細(xì)胞圖片、視頻等文件形式,檢測(cè)各種細(xì)胞形態(tài),并記錄識(shí)別結(jié)果在界面表格中方便查看;可開(kāi)啟攝像頭實(shí)時(shí)監(jiān)測(cè)和統(tǒng)計(jì)當(dāng)前視野范圍各種類(lèi)型細(xì)胞數(shù)目,支持結(jié)果記錄、展示和保存。
(二)技術(shù)特點(diǎn)
???????? (1)YoloV5目標(biāo)檢測(cè)算法檢測(cè)血細(xì)胞,模型支持更換;
???????? (2)攝像頭實(shí)時(shí)檢測(cè)血細(xì)胞,展示、記錄和保存結(jié)果;
???????? (3)檢測(cè)圖片、視頻等圖像中的血細(xì)胞個(gè)體;
???????? (4)支持用戶登錄、注冊(cè),檢測(cè)結(jié)果可視化功能;
(三)用戶注冊(cè)登錄界面
????????這里設(shè)計(jì)了一個(gè)登錄界面,可以注冊(cè)賬號(hào)和密碼,然后進(jìn)行登錄。界面還是參考了當(dāng)前流行的UI設(shè)計(jì),左側(cè)是一個(gè)動(dòng)圖,右側(cè)輸入賬號(hào)、密碼、驗(yàn)證碼等等。

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

(五)視頻識(shí)別效果展示
????????很多時(shí)候我們需要識(shí)別一段視頻中的血細(xì)胞,這里設(shè)計(jì)了視頻選擇功能。點(diǎn)擊視頻按鈕可選擇待檢測(cè)的視頻,系統(tǒng)會(huì)自動(dòng)解析視頻逐幀識(shí)別多個(gè)血細(xì)胞,并將血細(xì)胞的分類(lèi)和計(jì)數(shù)結(jié)果記錄在右下角表格中,效果如下圖所示:

(六)攝像頭檢測(cè)效果展示
????????在真實(shí)場(chǎng)景中,我們往往利用攝像頭獲取實(shí)時(shí)畫(huà)面,同時(shí)需要對(duì)血細(xì)胞進(jìn)行識(shí)別,因此本文考慮到此項(xiàng)功能。如下圖所示,點(diǎn)擊攝像頭按鈕后系統(tǒng)進(jìn)入準(zhǔn)備狀態(tài),系統(tǒng)顯示實(shí)時(shí)畫(huà)面并開(kāi)始檢測(cè)畫(huà)面中的血細(xì)胞,識(shí)別結(jié)果展示如下圖:

2.?血細(xì)胞數(shù)據(jù)集和模型訓(xùn)練
(一)數(shù)據(jù)集制作
????????本文實(shí)驗(yàn)的血細(xì)胞數(shù)據(jù)集包含訓(xùn)練集2853張圖片,驗(yàn)證集219張圖片,測(cè)試集81張圖片,共計(jì)3153張圖片,選取部分?jǐn)?shù)據(jù)部分樣本數(shù)據(jù)集如圖所示。

????????每張圖像均提供了圖像類(lèi)標(biāo)記信息,圖像中細(xì)胞的bounding box,目標(biāo)的屬性信息,數(shù)據(jù)集并解壓后得到如下的圖片

? ? ? ? ?船艦數(shù)據(jù)集的類(lèi)別信息如下,包含血小板、紅細(xì)胞、白細(xì)胞、鐮狀細(xì)胞等類(lèi)別
???????? 原數(shù)據(jù)格式是xml文件對(duì)目標(biāo)細(xì)胞注釋?zhuān)F(xiàn)在需要將這種注釋轉(zhuǎn)換為yolov5所需的格式。即每個(gè)圖像對(duì)應(yīng)一個(gè)txt文件,文件中存儲(chǔ)該圖像中全部細(xì)胞的類(lèi)別和坐標(biāo),一行存儲(chǔ)一個(gè)細(xì)胞的信息,如下圖

? ? ? ? ?在本項(xiàng)目的同級(jí)目錄下創(chuàng)建數(shù)據(jù)集存儲(chǔ)路徑,路徑內(nèi)創(chuàng)建訓(xùn)練集,測(cè)試集路徑和配置文件dataset.yaml

???????? images內(nèi)存儲(chǔ)圖像數(shù)據(jù),labels存儲(chǔ)標(biāo)注數(shù)據(jù),文件名稱(chēng)對(duì)應(yīng)相同,設(shè)置數(shù)據(jù)集配置文件如下
???????? (1)train 指定訓(xùn)練集圖像路徑
???????? (2)val 指定驗(yàn)證集圖像路徑
???????? (3)nc 指定目標(biāo)類(lèi)別數(shù)量 這里為血小板,紅細(xì)胞,白細(xì)胞共3種
???????? (4)目標(biāo)對(duì)應(yīng)類(lèi)別名稱(chēng)
???????? 接下來(lái)需要配置項(xiàng)目路徑內(nèi)的train.py的相關(guān)參數(shù),指定預(yù)訓(xùn)練的模型權(quán)重和模型結(jié)構(gòu)文件和數(shù)據(jù)集配置文件,訓(xùn)練的輪數(shù),batch_size的大小和輸入圖像的分辨率。
????????在我們的訓(xùn)練過(guò)程中,mAP50作為一種常用的目標(biāo)檢測(cè)評(píng)估指標(biāo)很快達(dá)到了較高水平,而mAP50:95也在訓(xùn)練的過(guò)程中不斷提升,說(shuō)明我們模型從訓(xùn)練-驗(yàn)證的角度表現(xiàn)良好。讀入一個(gè)測(cè)試文件夾進(jìn)行預(yù)測(cè),通過(guò)訓(xùn)練得到的選取驗(yàn)證集上效果最好的權(quán)重best.pt進(jìn)行實(shí)驗(yàn),得到PR曲線如下圖所示。

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

????????以PR-curve為例,可以看到我們的模型在驗(yàn)證集上的均值平均準(zhǔn)確率為0.794。
3.?血細(xì)胞檢測(cè)識(shí)別
????????運(yùn)行testVideo得到預(yù)測(cè)結(jié)果,我們便可以將幀圖像中的血細(xì)胞框出,然后在圖片上用opencv繪圖操作,輸出血細(xì)胞的類(lèi)別及血細(xì)胞的預(yù)測(cè)分?jǐn)?shù)。以下是讀取血細(xì)胞視頻并進(jìn)行檢測(cè)的腳本,首先將圖片數(shù)據(jù)進(jìn)行預(yù)處理后送predict進(jìn)行檢測(cè),然后計(jì)算標(biāo)記框的位置并在圖中標(biāo)注出來(lái)。
????????執(zhí)行得到的結(jié)果如下圖所示,圖中血細(xì)胞的種類(lèi)和置信度值都標(biāo)注出來(lái)了,預(yù)測(cè)速度較快?;诖四P臀覀兛梢詫⑵湓O(shè)計(jì)成一個(gè)帶有界面的系統(tǒng),在界面上選擇圖片、視頻或攝像頭然后調(diào)用模型進(jìn)行檢測(cè)。

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

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

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

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

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