程陽(yáng) 黃靈湛 陳立 汪宇玲
(東華理工大學(xué)信息工程學(xué)院,南昌,330013)
目標(biāo)檢測(cè)是指通過(guò)輸入圖像以確定目標(biāo)物體的位置和類別的過(guò)程,它是圖像處理領(lǐng)域的一個(gè)重要研究方向,在安全帽識(shí)別、桃花檢測(cè)、船舶跟蹤等領(lǐng)域都有應(yīng)用。據(jù)相關(guān)數(shù)據(jù)統(tǒng)計(jì),施工過(guò)程中因種種原因致人員傷亡等造成的經(jīng)濟(jì)損失平均每年逾百億元[1]。在建筑行業(yè)中,除了對(duì)施工人員進(jìn)行三級(jí)安全教育以外,還要做好“三寶”措施——安全帽、安全帶、安全網(wǎng)。然而,施工人員可能會(huì)出現(xiàn)忘記佩戴安全帽、長(zhǎng)時(shí)間脫下安全帽等情況,導(dǎo)致意外發(fā)生[1]。
在基于計(jì)算機(jī)視覺(jué)的安全帽檢測(cè)領(lǐng)域,目標(biāo)檢測(cè)算法有傳統(tǒng)檢測(cè)算法和深度學(xué)習(xí)的檢測(cè)算法兩大類。傳統(tǒng)的目標(biāo)檢測(cè)方法包括幀差法[2]、光流法[3]、HOG 檢測(cè)器[4]、YCbCr 色彩模型[5]等,這些算法利用了膚色、頭部和人臉信息配合圖像處理和機(jī)器學(xué)習(xí)來(lái)得到目標(biāo)檢測(cè)結(jié)果。傳統(tǒng)的檢測(cè)方法在特定的環(huán)境下可以取得良好效果,但在真實(shí)復(fù)雜的環(huán)境下,基于傳統(tǒng)方案的安全帽檢測(cè)會(huì)受影響,其準(zhǔn)確性難以得到保證,導(dǎo)致安全帽識(shí)別不準(zhǔn)確。同時(shí),傳統(tǒng)的目標(biāo)檢測(cè)方法的主觀性強(qiáng),檢測(cè)過(guò)程繁瑣,計(jì)算開(kāi)銷大,泛化能力不足,在檢測(cè)的場(chǎng)景中往往具有很大的挑戰(zhàn)性。
近年來(lái)人工智能發(fā)展迅速,目標(biāo)檢測(cè)作為計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)研究熱點(diǎn)[6],越來(lái)越多的研究者采用基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)[7]的目標(biāo)檢測(cè)方法實(shí)現(xiàn)安全帽檢測(cè)。徐守坤[7]等在算法Faster-RCNN 的基礎(chǔ)上實(shí)現(xiàn)安全帽佩戴檢測(cè),檢測(cè)準(zhǔn)確率高,但是算法實(shí)現(xiàn)復(fù)雜,訓(xùn)練步驟繁瑣,檢測(cè)速率慢;肖體剛等[8]通過(guò)增大輸入圖像尺度,添加深度可分離卷積結(jié)構(gòu),減少特征的丟失?;诰矸e神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法,不需要人為地設(shè)計(jì)和選擇特征,而是通過(guò)向深層網(wǎng)絡(luò)輸入已有的大量訓(xùn)練數(shù)據(jù),不斷訓(xùn)練深度網(wǎng)絡(luò)模型,從而獲得深度學(xué)習(xí)特征,再利用這些特征對(duì)需要測(cè)試的圖片進(jìn)行預(yù)測(cè),并且可以根據(jù)預(yù)測(cè)結(jié)果不斷地進(jìn)一步優(yōu)化特征。深度學(xué)習(xí)特征能夠獲得圖像更深層次的抽象特征,能表征圖像高層語(yǔ)義,在諸多應(yīng)用領(lǐng)域,深度學(xué)習(xí)檢測(cè)算法相比傳統(tǒng)算法都表現(xiàn)出眾。
YOLOv3 算法使用了One Stage 思想,特征圖直接回歸目標(biāo)的類別和位置,檢測(cè)速度較快,且同時(shí)吸收了殘差網(wǎng)絡(luò)和特征金字塔等優(yōu)點(diǎn),提高了模型的精度[9]。YOLOv3算法檢測(cè)速度較Faster-CNN算法已經(jīng)有了提升,但對(duì)于小目標(biāo)和集群式的目標(biāo)檢測(cè)效果并不好。因此,為了提高小目標(biāo)和集群式的目標(biāo)檢測(cè)精度,本文提出一種基于改進(jìn)的DarkNet 目標(biāo)檢測(cè)算法,通過(guò)調(diào)整DarkNet的卷積層網(wǎng)絡(luò),使用反卷積模塊對(duì)網(wǎng)絡(luò)進(jìn)行采樣,使得YOLOv3 檢測(cè)較集中地被目標(biāo)遮擋也有較好的效果,最后進(jìn)行相關(guān)實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明檢測(cè)精度有一定的提升。
DarkNet 深度學(xué)習(xí)框架是由Joseph Redmon[10]提出的一個(gè)用C 語(yǔ)言和CUDA 編寫的開(kāi)源神經(jīng)網(wǎng)絡(luò)框架,其主要作用是提取訓(xùn)練圖像的相關(guān)特征[10-11]。它支持CPU和GPU(CUDA/cu DNN)計(jì)算,且支持Open CV 和Open MP,同時(shí)DarkNet 框架結(jié)構(gòu)清晰,源代碼查看、修改方便。DarkNet 借鑒了ResNet[12]網(wǎng)絡(luò)中的 shortcut 方法,對(duì)前后提取的特征值進(jìn)行組合,加強(qiáng)對(duì)于特征數(shù)據(jù)的訓(xùn)練。DarkNet 能夠?qū)τ谀繕?biāo)檢測(cè)做出合理的網(wǎng)絡(luò)設(shè)計(jì)[13],該結(jié)構(gòu)的出現(xiàn)使得使用該網(wǎng)絡(luò)結(jié)構(gòu)的 YOLO 算法在精度和檢測(cè)綜合性能上面都得到了很大的提升,成為 YOLOv3 等新算法主要采用的主網(wǎng)絡(luò)結(jié)構(gòu)。
YOLOv3 是一種實(shí)時(shí)對(duì)象檢測(cè)算法,可識(shí)別視頻、實(shí)時(shí)供稿或圖像中的特定對(duì)象。YOLO 的 1-3 版本由Joseph Redmon 和 Ali Farhadi 創(chuàng)建[10],是用于進(jìn)行對(duì)象檢測(cè)的深度卷積神經(jīng)網(wǎng)絡(luò)模型 (DCNN)。它允許模型在測(cè)試時(shí)查看整個(gè)圖像,因此它的預(yù)測(cè)由圖像中的全局上下文提供信息,根據(jù)區(qū)域與預(yù)定義類的相似性對(duì)區(qū)域進(jìn)行“評(píng)分”。
YOLOv3 對(duì)圖片分區(qū)域進(jìn)行特征提取和訓(xùn)練,以更好地區(qū)別目標(biāo)和背景。YOLOv3 算法將整個(gè)圖片分為若干個(gè)區(qū)域,在對(duì)圖像進(jìn)行輸入時(shí),會(huì)將圖像置于某個(gè)區(qū)域進(jìn)行檢測(cè)和預(yù)測(cè),在每次預(yù)測(cè)時(shí)會(huì)有一個(gè)置信度,從而根據(jù)置信度判斷該檢測(cè)區(qū)域是否會(huì)被分類和貼上相應(yīng)的標(biāo)簽,既而完成從檢測(cè)到預(yù)測(cè)的過(guò)程。YOLOv3 的網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示,圖2 是 YOLOv3 與主流檢測(cè)算法的性能對(duì)比圖,對(duì)比可以看到Y(jié)OLOv3 檢測(cè)速率和準(zhǔn)確率比大部分算法優(yōu)秀。因此,本文選用YOLOv3 進(jìn)行安全帽檢測(cè),以達(dá)到提高小目標(biāo)和集群式的目標(biāo)檢測(cè)精度的效果。
圖1 YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)
圖2 YOLOv3 與其他算法性能對(duì)比
在深度學(xué)習(xí)中,計(jì)算機(jī)視覺(jué)領(lǐng)域最常見(jiàn)的網(wǎng)絡(luò)是卷積神經(jīng)網(wǎng)絡(luò),卷積操作是卷積神經(jīng)網(wǎng)絡(luò)最基礎(chǔ)的組成成分。如圖 3 中,左側(cè)的Source pixel 可看成是一張圖片的數(shù)據(jù),中間的Convolution kernel 是卷積核(濾波器),右側(cè)的New pixel value 是卷積之后的結(jié)果。卷積的計(jì)算過(guò)程如圖3 右側(cè),即對(duì)應(yīng)位置相乘的結(jié)果累加。當(dāng)卷積核向右移動(dòng)一個(gè)步長(zhǎng)后,做同樣的操作,則得到第二個(gè)值。很容易計(jì)算得出第二個(gè)值也是-8。經(jīng)過(guò)5 次計(jì)算之后,需要將窗口對(duì)準(zhǔn)下一行的開(kāi)頭,同樣可以計(jì)算出5 個(gè)值。當(dāng)依次完成所有操作就可以得到一個(gè)5×5 的數(shù)組。
圖3 卷積操作
該操作可以提取所需要的目標(biāo)特征。可簡(jiǎn)單理解為,當(dāng)卷積核的數(shù)字固定時(shí),則就代表它能夠檢測(cè)某個(gè)特征,當(dāng)圖像中有這個(gè)特征存在時(shí),按照卷積的操作,結(jié)果的數(shù)值會(huì)很大,數(shù)值越大就代表存在這樣特征的可能性越高。當(dāng)網(wǎng)絡(luò)越深,抽取的特征也就更抽象。
學(xué)習(xí)數(shù)據(jù)分布是卷積神經(jīng)網(wǎng)絡(luò)的特征學(xué)習(xí)本質(zhì),如果訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)的分布不同,網(wǎng)絡(luò)泛化能力就會(huì)大大降低。另一方面,卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程復(fù)雜,只要前面網(wǎng)絡(luò)發(fā)生微小的改變,該改變就會(huì)在逐層傳遞的過(guò)程中被累積放大,造成網(wǎng)絡(luò)模型的不穩(wěn)定,這將大大降低網(wǎng)絡(luò)的訓(xùn)練速度。在對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練時(shí),由于每一層的參數(shù)不斷地向前傳播,不斷地更新,所以各層的輸入數(shù)據(jù)分布都在不斷地發(fā)生改變,其分布會(huì)逐漸發(fā)生偏移,Loffe 等[14]針對(duì)該變化提出批歸一化算法,通過(guò)批歸一化算法可以使輸入數(shù)據(jù)保持正態(tài)分布,從而加速收斂,以減少網(wǎng)絡(luò)數(shù)據(jù)分布的改變對(duì)神經(jīng)網(wǎng)絡(luò)參數(shù)訓(xùn)練的影響,從而加快神經(jīng)網(wǎng)絡(luò)的收斂速度和穩(wěn)定性。其主要步驟如下:
在訓(xùn)練初期的時(shí)候,由于網(wǎng)絡(luò)參數(shù)的初始化,位置信息、類別信息和置信度信息與真實(shí)的值會(huì)有較大的差別,于是YOLOv3 根據(jù)預(yù)測(cè)框和真實(shí)框的中心點(diǎn)坐標(biāo)以及寬高信息設(shè)定了MSE 損失函數(shù)[15]。
YOLOv3 損失函數(shù)主要包括3 部分:坐標(biāo)誤差、IoU誤差、分類誤差。其公式為:
在卷積層后,通常會(huì)添加偏置,為此會(huì)引入激活函數(shù)。在卷積中會(huì)對(duì)圖像的每個(gè)像素點(diǎn)賦予權(quán)值,但該操作并不適合所有的情況,針對(duì)這個(gè)問(wèn)題,本文考慮進(jìn)行線性變化或引入非線性的因素來(lái)解決,激活函數(shù)則是其中一種較為普遍的方法。它可以將線性數(shù)據(jù)映射到非線性中,從而增強(qiáng)網(wǎng)絡(luò)擬合能力。
將特征圖像還原到原圖像空間的方法稱為反卷積網(wǎng)絡(luò)。本文通過(guò)將YOLOv3 原來(lái)的上采樣過(guò)程變換到反卷積模塊,用于重建輸入圖像的邊緣細(xì)節(jié)信息以及增加特征圖像的分辨率,從而提高小目標(biāo)和集群式的目標(biāo)檢測(cè)精度。使用如圖4 所示的反卷積來(lái)替代原采樣過(guò)程,讓網(wǎng)絡(luò)的反卷積結(jié)構(gòu)與原復(fù)雜的模塊具有更好的精度,且使網(wǎng)絡(luò)更加高效。
圖4 反卷積結(jié)構(gòu)
本文實(shí)驗(yàn)基于DarkNet 框架下進(jìn)行,操作系統(tǒng)為Windows-64,硬件環(huán)境為:Intel(R) Core(TM) i5-8265U CPU@ 1.60GHz 1.80 GHz, 內(nèi) 存 為8GB,NVIDIA Tesla V100 GPU,顯存為16GB。
在深度學(xué)習(xí)中,數(shù)據(jù)集質(zhì)量的高低直接影響最終檢測(cè)效果的好壞,同時(shí)由于網(wǎng)絡(luò)要充分學(xué)習(xí)待檢測(cè)目標(biāo)的特征,這便需要大量的樣本。本文在實(shí)驗(yàn)中采用數(shù)據(jù)集的方法,共采集7581 張圖片,樣本示例如圖 5 所示。由于數(shù)據(jù)是xml 格式,需要先提取圖片中物體的位置和大小信息,每一張圖片對(duì)應(yīng)一個(gè)文本,每一個(gè)目標(biāo)對(duì)應(yīng)該文本的一行數(shù)據(jù),一張圖片有多個(gè)目標(biāo),因此可能有多行數(shù)據(jù),每行數(shù)據(jù)包括位置中心坐標(biāo)、長(zhǎng)寬以及類別信息。提取的xml文件關(guān)鍵數(shù)據(jù)包括:目標(biāo)類別(class)、目標(biāo)位置(x-min,y-min, x-max, y-max)、圖像寬高(width, height)。
圖5 樣本示例
將目標(biāo)位置信息變換成相對(duì)圖片大小的數(shù)值,用空格分開(kāi),分別是:目標(biāo)x 中心點(diǎn)、目標(biāo)y 中心點(diǎn)、目標(biāo)相對(duì)寬度、目標(biāo)相對(duì)高度,位置信息的取值范圍均在0~1之間。一個(gè)文本存放一張圖片的所有目標(biāo)類別和位置信息,每一行只存放一個(gè)目標(biāo)的類別和位置信息,若一張圖片有n 個(gè)目標(biāo),則該文本就有n 行5 列數(shù)據(jù)。訓(xùn)練流程如圖 6 所示。
圖6 訓(xùn)練流程圖
本文通過(guò)對(duì)數(shù)據(jù)進(jìn)行聚類處理,以獲取先驗(yàn)框,降低計(jì)算的難度,由于DarkNet 框架已經(jīng)自帶了聚類的命令,因此可以很容易地得到聚類結(jié)果。
筆者將數(shù)據(jù)集劃分為三部分,其中5581 張圖片用于訓(xùn)練,1000 張用于驗(yàn)證,1000 張用于測(cè)試;在數(shù)據(jù)增強(qiáng)方面,筆者對(duì)訓(xùn)練集中的圖片執(zhí)行裁剪、翻轉(zhuǎn)等操作以生成更多的樣本;在配置文件中修改學(xué)習(xí)率、圖片大小、batch-size、sub_batch 等相關(guān)參數(shù)。
訓(xùn)練結(jié)果如圖 7 所示。
圖7 準(zhǔn)確率及損失函數(shù)趨勢(shì)
本文使用的網(wǎng)絡(luò)結(jié)構(gòu)包括YOLOv3_416、YOLOv3_608、YOLOv3_spp_416、YOLO3_spp_608、csresnext50_panet_spp_416、YOLOv3_5l_416、YOLOv3-tiny _416(移 動(dòng)端)。416、608 代表網(wǎng)絡(luò)將輸入的圖片重構(gòu)的初始大小為416×416 或608×608,設(shè)置7 組實(shí)驗(yàn)的目的是為了尋找一套最佳的網(wǎng)絡(luò)結(jié)構(gòu)和權(quán)重參數(shù)。不同網(wǎng)絡(luò)模型參數(shù)最終的結(jié)果如表1 所示。
從模型結(jié)果中,綜合各項(xiàng)指標(biāo)(見(jiàn)圖 8 )可以看出,csresnext50-panet-spp_416 網(wǎng)絡(luò)結(jié)構(gòu)最優(yōu)。
此外,從測(cè)試集進(jìn)一步驗(yàn)證,csresnext50-panetspp_416 網(wǎng)絡(luò)結(jié)構(gòu)依然是最優(yōu)結(jié)果,其他網(wǎng)絡(luò)優(yōu)化度不足,可能出現(xiàn)了訓(xùn)練過(guò)擬合或欠擬合,結(jié)果如表2 所示。
從圖 9 可以明顯看出,csresnext50-panet-spp_416 優(yōu)于其他網(wǎng)絡(luò)結(jié)構(gòu)。
在表1、表2、圖8、圖9 中,Hat AP、Person AP 分別表示檢測(cè)佩戴安全帽的平均精確度和檢測(cè)未佩戴安全帽的平均精確度;recall 表示召回率;F1 score 表示精確度和召回率的調(diào)和平均數(shù);mAP@0.5 表示交并比設(shè)置為0.5 下的均值平均精度;average IoU 表示平均交并比;FPS RTX2060 表示使用RTX2060 6G 顯卡時(shí)每秒傳輸幀數(shù)。
圖8 驗(yàn)證集各項(xiàng)指標(biāo)趨勢(shì)圖
圖9 測(cè)試集各項(xiàng)指標(biāo)趨勢(shì)
表1 驗(yàn)證集結(jié)果
表2 測(cè)試集結(jié)果
本文使用采集得到的驗(yàn)證集,得到部分安全帽檢測(cè)模型結(jié)果示例如圖 10 所示,可以看出,改進(jìn)的DarkNet在不同場(chǎng)景下均有較強(qiáng)的檢測(cè)能力,其中圖中佩戴安全帽的施工作業(yè)人員上方出現(xiàn) “ hat ” 字樣,未佩戴安全帽的施工作業(yè)人員上方出現(xiàn) “ person ” 字樣。由此可知,本文使用的模型在復(fù)雜背景等不利因素下,提高了小目標(biāo)和集群式目標(biāo)檢測(cè)精度,整體效果較為理想。
圖10 安全帽檢測(cè)模型結(jié)果
針對(duì)安全帽的佩戴檢測(cè),本文提出了一種基于改進(jìn)的DarkNet 框架下YOLO 系列的安全帽佩戴檢測(cè)方法,該方法可以有效檢測(cè)現(xiàn)場(chǎng)未佩戴安全帽人員的情況,從而避免因未佩戴安全帽而導(dǎo)致的人員傷亡以及經(jīng)濟(jì)損失,保障人員生命及財(cái)產(chǎn)安全。另外,由于部分遮擋的目標(biāo)檢測(cè)準(zhǔn)確率低,會(huì)導(dǎo)致檢測(cè)不精確,對(duì)此類問(wèn)題的解決是下一步研究的主要工作。