郭 磊,王邱龍,薛 偉,郭 濟
(1. 電子科技大學計算機科學與工程學院 成都 611731;2. 新疆大學信息科學與工程學院 烏魯木齊 830000;3. 西藏民族大學財經學院 陜西 咸陽 712082)
隨著人工智能理論和深度學習技術的深入研究,作為計算機視覺領域核心問題之一的目標檢測技術也取得了較大進展,已被應用于人臉檢測[1]、智慧醫(yī)療[2-3]、行人檢測[4]、活動識別[5]等。目標檢測是利用圖像處理、深度學習等技術,從圖像或視頻中定位感興趣的對象,通過目標分類判斷輸入圖像中是否包含目標,用目標定位找出目標物體位置并框出目標,其任務是鎖定圖像中的目標,定位目標位置、確定目標類別。作為圖像及視頻理解的基石,目標檢測是解決圖片分割、目標跟蹤、圖像描述、事件檢測和場景理解等更高層次視覺任務的基礎。
小目標檢測長期以來是目標檢測中的重點和難點之一。由于小目標具有圖像覆蓋面積較少、分辨率不足、位置缺乏準確性、特征表達不充分的特點,因而相對于常規(guī)目標小目標檢測更困難。目標檢測中對小目標的定義通常有兩種:1)國際光學工程學會對小目標的定義,將256×256 像素的圖像中成像點小于80 個像素點(即目標所占的像素點數(shù)與原圖總像素點數(shù)的比例小于0.12%)的目標定義為小目標;2)根據(jù)具體的數(shù)據(jù)集對小目標進行定義,如在COCO 數(shù)據(jù)集[6]中,將尺寸小于32×32 像素的目標定義為小目標;文獻[7] 在其交通標志數(shù)據(jù)集中,將寬度占整個圖像比例小于20%的目標定義為小目標。一般而言,常規(guī)目標特征表達充分,位置準確明了,而小目標的分辨率相對較低,特征表達會相對缺乏。
傳統(tǒng)的目標檢測算法通常由人工提取目標的特征,檢測精度低、效果不好。隨著深度學習的發(fā)展和硬件設備算力的提升,基于深度學習的卷積神經網(wǎng)絡(convolutional neural network, CNN)[8]嶄露頭角,人們開始利用卷積神經網(wǎng)絡自動提取圖像中的特征并將其應用在目標檢測中,極大地提升了目標檢測效果。目前最通用的兩個方法是以R-CNN(region-based CNN)系列為代表的基于候選框的兩階段深度學習算法和以YOLO(you only look once)系列為代表的基于回歸的單階段深度學習目標檢測算法。
R-CNN 模型[9]使用CNN 提取的特征替代傳統(tǒng)視覺特征,并采用大樣本的有監(jiān)督預訓練與小樣本微調的方式解決模型的過擬合問題,使得模型的檢測性能有了較大的提升,但R-CNN 需對每個候選區(qū)域的CNN 特征進行大量重復計算。SPP-Net 網(wǎng)絡[10]能產生固定大小的輸出,而與輸入圖像大小無關;由于輸入尺寸的靈活性,使得SPP-Net 能夠提取多個尺度下的特征,且一張圖片中候選區(qū)域的CNN 特征只需要計算一次,在很大程度上能夠節(jié)省計算資源。在SPP-Net 的基礎上,文獻[11-12]先后提出Fast R-CNN 和Faster R-CNN 模型。從RCNN 模型發(fā)展到Fast R-CNN 模型,進一步發(fā)展到Faster R-CNN 模型,檢測速度不斷提高,檢測精度也不斷增強,但與單階段目標檢測算法在檢測速度上相比,仍具有一定差距。
YOLO 系列算法和單點多盒檢測器(single shot multibox detector, SSD)是典型的單階段目標檢測算法。文獻[13] 提出了第一個單階段目標檢測算法YOLO,與YOLO 最后采用全連接層提取檢測結果不同,SSD[14]使用不同尺度的特征圖來做檢測,并直接使用卷積提取檢測結果。文獻[15-16] 在YOLOv1 的基礎上繼續(xù)改進,又提出了YOLOv2和YOLOv3 檢測算法,其中YOLOv2 進行了多種嘗試,使用了批標準化(batch normalization, BN)技術,引入了錨框機制;YOLOv3 采用darknet-53 作為骨干網(wǎng)絡,并且使用了3 種不同大小的錨框,在邏輯分類器中使用sigmoid 函數(shù)把輸出約束在0~1 之間,使得YOLOv3 擁有更快的推理速度。文獻[17] 在傳統(tǒng)的YOLO 基礎上,加入了一些實用的技巧,提出了YOLOv4 算法,將BackBone 骨干網(wǎng)絡中的ReLU 激活函數(shù)改為Mish 激活函數(shù),與ReLU 相比,Mish 函數(shù)圖像更加平滑,實現(xiàn)了檢測速度和精度的最佳權衡。從YOLOv1 至今,YOLO 系列已經發(fā)展到了YOLOv5,YOLOv5 融合了先前版本的優(yōu)點,在檢測速度和精度上都更勝一籌,在某種程度上YOLOv5 已經成為YOLO 系列算法中的SOTA(State Of The Art)。
YOLOv5 是一個高性能、通用的目標檢測模型,能一次性完成目標定位與目標分類兩個任務,因此選擇YOLOv5 作為目標檢測的基本骨架是可行的。但是為了實現(xiàn)一些場景下對小目標的獨特性檢測,就需要對YOLOv5 的網(wǎng)絡結構進行相應的調整和改進。
本文在YOLOv5 網(wǎng)絡的基礎上進行改進,改進后的整體的網(wǎng)絡結構如圖1 所示,通過新增尺寸為輸入圖像尺寸四分之一的特征圖來提升對小目標特征的挖掘,采用多尺度反饋以引入全局上下文信息來提升對圖像中小目標的識別能力。損失函數(shù)使用CIOU[18],從重疊面積、中心點距離、長寬比3 個方面更好地描述目標框的回歸。在原始YOLOv5的基礎上使用Mosaic-8 數(shù)據(jù)增強,修改目標框回歸的公式,提高模型的收斂精度。下面分別從Mosaic-8 數(shù)據(jù)增強、特征提取器、損失函數(shù)和目標框回歸4 個方面進行詳細介紹。
圖1 整體網(wǎng)絡結構
要獲得一個表現(xiàn)良好的神經網(wǎng)絡模型,往往需要大量的數(shù)據(jù)作支撐,然而獲取新的數(shù)據(jù)這項工作往往需要花費大量的時間與人工成本,因此數(shù)據(jù)增強應運而生。使用數(shù)據(jù)增強技術,可以充分利用計算機來生成數(shù)據(jù),增加數(shù)據(jù)量,如采用縮放、平移、旋轉、色彩變換等方法增強數(shù)據(jù),數(shù)據(jù)增強的好處是能夠增加訓練樣本的數(shù)量,同時添加合適的噪聲數(shù)據(jù),能夠提高模型的泛化力。
在YOLOv5 中除了使用最基本的數(shù)據(jù)增強方法外,還使用了Mosaic 數(shù)據(jù)增強方法,其主要思想就是將4 張圖片進行隨機裁剪、縮放后,再隨機排列拼接形成一張圖片,實現(xiàn)豐富數(shù)據(jù)集的同時,增加了小樣本目標,提升網(wǎng)絡的訓練速度。在進行歸一化操作時會一次性計算4 張圖片的數(shù)據(jù),因此模型對內存的需求降低。Mosaic 數(shù)據(jù)增強的流程如圖2 所示。本文受Mosaic 思想的啟發(fā),采用Mosaic 方法的增強版——Mosaic-8,即采用8 張圖片隨機裁剪、隨機排列、隨機縮放,然后組合成一張圖片,以此來增加樣本的數(shù)據(jù)量,同時合理引入一些隨機噪聲,增強網(wǎng)絡模型對圖像中小目標樣本的區(qū)分力,提升模型的泛化力,其細節(jié)如圖3 所示。
圖2 Mosaic 數(shù)據(jù)增強流程
圖3 Mosaic-8 數(shù)據(jù)增強細節(jié)
在原始YOLOv5 骨干網(wǎng)絡中,使用3 種不同尺寸的特征圖來檢測不同大小的目標,如圖4 所示,該網(wǎng)絡將原始輸入圖像通過8 倍下采樣、16 倍下采樣、32 倍下采樣得到3 種不同尺寸大小的特征圖,將其輸入到特征融合網(wǎng)絡中。根據(jù)特征金字塔網(wǎng)絡(feature pyramid network, FPN)[19]的思想可以看出,經過深層次卷積后的特征圖雖然擁有豐富的語義信息,但在多次卷積的過程中會丟失掉目標的一些位置信息,不利于小目標的檢測;而淺層卷積后得到的特征圖語義信息雖然不夠豐富,但目標的位置信息卻比較精確。
圖4 原始YOLOv5 特征提取模型
在密集人群的條件下,大部分人臉檢測目標占整幅圖像的比例較小。因此,本文在YOLOv5 骨干網(wǎng)絡的基礎上對原始輸入圖片增加一個4 倍下采樣的過程,如圖5 所示。原始圖片經過4 倍下采樣后送入到特征融合網(wǎng)絡得到新尺寸的特征圖,該特征圖感受野較小,位置信息相對豐富,可以提升檢測小目標的檢測效果。在卷積神經網(wǎng)絡中,經過不同的卷積層得到的特征圖包含不同的目標特征信息。淺層卷積后得到的特征圖分辨率較高,目標位置信息相對豐富,但語義信息不明顯;深層卷積后得到的特征圖分辨率低,語義信息豐富,但丟失了較多的目標位置信息。因此,淺層特征圖能區(qū)分較為簡單的目標,深層特征圖能區(qū)分復雜的目標,將淺層特征圖與深層特征圖進行信息融合更有利于目標的區(qū)分。如圖6所示,將特征金字塔網(wǎng)絡與路徑聚合網(wǎng)絡(path aggregation network, PAN)[20]相結合,特征金字塔網(wǎng)絡自頂向下傳遞深層次語義特征,路徑聚合網(wǎng)絡自底向上傳遞目標的位置信息,通過自頂向下和自底向上的特征信息融合有利于模型更好地學習特征,增強模型對小目標的敏感度。
圖5 改進后的特征提取模型
圖6 改進后的特征融合網(wǎng)絡
原始YOLOv5 損失函數(shù)如式(1)所示,由定位損失、置信度損失和類別損失3 部分構成。其中置信度損失和類別損失采用二元交叉熵損失函數(shù)進行計算:
圖7 預測框P 與真實框GT
原始YOLOv5 中使用GIoU[21]來計算定位損失:與原始IoU 不同,GIoU 不僅關注真實框與預測框之間的重疊面積,還關注其他的非重疊區(qū)域,因此GIoU 相較于原始IoU 能更好的反應兩者之間的重合度,但GIoU 始終只考慮真實框與預測框之間的重疊率這一個因素,不能很好地描述目標框的回歸問題。如圖8 所示,當預測框在真實框內部時,且預測框的大小相同時,此時GIoU 會退化為IoU,無法區(qū)分各個預測框之間的位置關系。
圖8 GIoU 退化為IoU 示例
本文選擇CIoU 替代GIoU 作為目標框回歸的損失函數(shù),其計算式為:
式中, α是一個平衡參數(shù),不參與梯度計算;v是用來衡量長寬比一致性的參數(shù)。CIoU 綜合考慮了真實框與預測框之間的重疊率、中心點距離、長寬比,使得目標框回歸過程中更加穩(wěn)定,收斂的精度更高。
目標框回歸的目的是要尋找某種映射關系,使得候選目標框(region proposal)的映射無限接近于真實目標框(ground truth)。對真實目標框的預測是采用相對位置的方式回歸出目標框相對于某個網(wǎng)格左上角的相對坐標。先驗框與預測框的關系如圖9所示,其中,虛線框表示先驗框,實線框表示預測框。預測框通過先驗框平移縮放得到。將原始圖片根據(jù)特征圖尺寸劃分成S×S個網(wǎng)格單元,每個網(wǎng)格單元會預測3 個預測框,每個預測框包含4 個坐標信息和1 個置信度信息。當真實框中某個目標中心坐標落在某個網(wǎng)格中時,就由該網(wǎng)格預測這個目標。
圖9 目標框回歸原理圖
目標框的坐標預測計算公式為:
式中,tx、ty、tw、th為偏移; σ表示Sigmoid 激活函數(shù),用于將網(wǎng)絡預測值tx、ty、tw、th映射到[0,1]之間;cx、cy是單元網(wǎng)格中相對于圖片左上角的偏移量;pw、ph是先驗框寬高;bx、by和寬高bw、bh為預測目標框的中心坐標;σ(to)是預測框的置信度,由預測框的概率和預測框與真實框的IoU 值相乘得到。對σ(to)設定閾值,過濾掉置信度較低的預測框,然后再對剩下的預測框用非極大值抑制算法(non-maximum suppression, NMS)[22]得到最終的預測框。
在最小的特征圖上,由于其感受野最大,故應該用其來檢測大目標,所以大尺度的特征圖應該應用小尺寸的先驗框,小尺寸的特征圖應該應用大尺度的先驗框來進行預測框的回歸。本文采用4 尺度檢測結構,4 個尺度的特征圖大小與先驗框尺寸的對應關系如表1 所示。
表1 特征圖大小與先驗框尺寸對應關系
將改進后的算法應用在密集人群的防護面具佩戴場景下,并與文獻[23] 提出的算法、AIZOO 算法(https://github.com/aky15/AIZOO_torch) 和原始YOLOv5 算法進行對比實驗。防護面具主要包括醫(yī)療口罩、電焊面具、鋼化玻璃面罩等,本文主要以醫(yī)療口罩(以下簡稱口罩) 為研究對象進行識別。由于密集人群條件下往往人物眾多,且容易出現(xiàn)人與人之間相互遮擋的現(xiàn)象,檢測難度大,且單個人員的口罩占整幅圖像的比例遠遠小于20%,因此可以將其作為小目標對待。
本文數(shù)據(jù)集來源于WIDER FACE、MAPA(Masked Faces) 這兩個公開數(shù)據(jù)集和網(wǎng)絡,從中手動篩選出密集人群場景下的佩戴口罩和未佩戴口罩的圖片,最終得到訓練集4 000 張,測試集1 320張,共計5 320 張。
利用標記軟件LabelImg 對數(shù)據(jù)集進行YOLO格式的標注,共有兩個標記類別,分別是bad(未佩戴口罩) 和good(佩戴口罩)。標注完成后,每一張圖片都對應著一個與該圖片名稱相同的txt 文件,txt 文件中的每一行表示一個標記實例,共5 列,從左到右分別表示標簽類別、標記框中心橫坐標與圖片寬度的比值、標記框中心縱坐標與圖片高度的比值、標記框寬度與圖片寬度的比值、標記框高度與圖片高度的比值。
實驗環(huán)境使用Ubuntu20.04 操作系統(tǒng),使用GeForce GTX 1080Ti 顯卡進行運算,顯存大小為11 GB,CPU 配置為Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz,CUDA 版本為11.4.0,Pytorch 版本為1.9.0,Python 語言環(huán)境為3.7.4。
本實驗總迭代次數(shù)為140 次,迭代批量大小設置為32,優(yōu)化器選擇SGD。模型訓練時學習率使用Warmup[24]訓練預熱,減緩模型在初始階段對小批量數(shù)據(jù)的過擬合現(xiàn)象,避免模型振蕩以便保證模型深層次的穩(wěn)定性。在Warmup 階段,偏置層的學習率由0.1 下降至0.01,其他的參數(shù)學習率由0 增加至0.01,Warmup 結束之后,采用余弦退火學習算法[25]對學習率進行更新。
本文評估指標采用平均精度(average precision,AP)、平均精度均值(mean AP, mAP)以及每秒檢測圖片的幀數(shù)(frames per second, FPS)這3 種在目標檢測算法中較為常見的評價指標來評估本文算法的性能。平均精度與精確率(precision) 和召回率(recall)有關,精確率是指預測數(shù)據(jù)集中預測正確的正樣本個數(shù)除以被模型預測為正樣本的個數(shù);召回率是指預測數(shù)據(jù)集中預測正確的正樣本個數(shù)除以實際為正樣本的個數(shù)。上述衡量指標的計算公式分別為:
式中,AP 值是指P-R 曲線面積,本文采用插值計算的方法來計算式(11)中的積分;mAP 的值是通過所有類別的AP 求均值得到;N表示檢測的類別總數(shù),本實驗中N=2,mAP 的值越大,表示算法檢測效果越好,識別精度越高;TP、FP 和FN 分別表示正確檢測框、誤檢框和漏檢框的數(shù)量。
在訓練140 個迭代周期過程中,平均精度均值、精確率和召回率的變化曲線如圖10 所示。可以看出,模型在訓練的過程中,在Warmup 階段結束后的幾個迭代周期中,平均精度均值、精確率和召回率有些許下降,隨后隨著余弦退火算法對學習率的調整,模型逐漸達到收斂狀態(tài)。
圖10 模型在數(shù)據(jù)集上的訓練過程
為進一步驗證本文算法的有效性,將本文算法與文獻[23] 方法、AIZOO 方法、原始YOLOv5 算法在同一測試集上進行測試,各項性能指標比較結果如表2 所示。
表2 不同算法性能對比結果
從表2 中可以看出,相較于文獻[23] 方法、AIZOO 方法和原始YOLOv5 算法,本文算法在密集人群場景下對口罩這個小目標的檢測表現(xiàn)效果更好,mAP 值可以達到94.88%,在原始YOLOv5 的基礎上,bad 和good 類別的AP 值分別提高了3.72%和5.38%,mAP 值提高了4.55%。本文算法在檢測速率上不及其他算法,F(xiàn)PS 為30.3,與原始YOLOv5相比,F(xiàn)PS 下降了11.3,檢測單張圖片的時間增加了9 ms,由于實時檢測一般要求檢測幀率大于25 幀/s,故本文算法仍能滿足實時性要求。本文算法與文獻[23] 方法、AIZOO 方法、原始YOLOv5算法進行對比的檢測效果如圖12 所示。
從圖11 中可以看出,文獻[23] 方法在小目標異常角度、人臉區(qū)域有遮擋的條件下表現(xiàn)較差;AIZOO 方法在檢測效果上整體表現(xiàn)稍好于文獻[23]方法,單幀檢測時間最少,F(xiàn)PS 最高;原始YOLOv5算法相較于前兩種方法表現(xiàn)相對較好,但在一些小目標和存在遮擋條件下仍存在誤判或者漏檢的情況;與其他算法相比,本文算法在密集人群口罩佩戴檢測效果中表現(xiàn)突出,檢測精度有明顯上升,誤檢、漏檢現(xiàn)象明顯減少,對小目標異常角度、人臉區(qū)域存在遮擋的魯棒性明顯提升。
圖11 檢測效果對比圖
本文在原有YOLOv5 算法的基礎上,分別從Mosaic 數(shù)據(jù)增強、特征提取器、損失函數(shù)和目標框回歸4 個方面進行改進,有效地增強了YOLOv5網(wǎng)絡模型對小目標物體的檢測精度,改進后的算法檢測速率相較于原始YOLOv5 算法有所降低,但仍能滿足實時性要求,可以直接應用在醫(yī)學圖像、遙感圖像分析和紅外圖像中的小目標檢測等實際場景中。