楊海舟,李丹
(四川大學(xué)錦城學(xué)院,四川成都,611371)
隨著時代的快速發(fā)展,目標(biāo)檢測的應(yīng)用在現(xiàn)代生活中占據(jù)了較大比重。如何快速而準(zhǔn)確的實(shí)現(xiàn)目標(biāo)檢測也成為了一個現(xiàn)階段的實(shí)際問題?,F(xiàn)階段,基于深度學(xué)習(xí)的目標(biāo)檢測算法可分為兩類:Two-stage[1-3]和 One-stage。
第一類是,以R-CNN[1]系列為代表的Tow-stage檢測算法,該類算法將檢測過程分成兩個階段,先利用邊界搜索生成預(yù)選框,再利用卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)分類和回歸。該類算法雖然增強(qiáng)了精度,但其檢測速度較低。第二類是,以YOLO為代表的One-stage檢測算法,該類算法通過使用回歸模型,將目標(biāo)定位和分類一體化處理,可以直接獲得結(jié)果,該類算法的最大特點(diǎn)是擁有較高的速度,而精度相對較低。在精度和速度之間獲得更好的平衡,成為衡量目標(biāo)檢測模型綜合性能重要的標(biāo)準(zhǔn)。YOLOv4(You Only Look Once)作為YOLO系列網(wǎng)絡(luò)的最先進(jìn)的工作,YOLOv4 網(wǎng)絡(luò)的檢測準(zhǔn)確率 以及運(yùn)行速度都遠(yuǎn)遠(yuǎn)高于 YOLOv3 網(wǎng)絡(luò)。其結(jié)合了眾多目測檢測的tricks,完美實(shí)現(xiàn)了檢測精度和速度的平衡。
表 1 tricks使用及結(jié)果對比
YOLOv4的網(wǎng)絡(luò)結(jié)構(gòu)有四個重要部分組成,分別是:輸入(Input)、主干(Backbone)、頸部(Neck)和頭部(Head)。輸入(Input):主要包括Mosaic數(shù)據(jù)增強(qiáng)、cmBN、自對抗訓(xùn)練(SAT)。Mosaic數(shù)據(jù)增強(qiáng)采用4張圖片隨機(jī)處理的方式進(jìn)行拼接,這增強(qiáng)了對目標(biāo)的檢測,并且由于目標(biāo)減少,所以也降低了訓(xùn)練成本。自對抗訓(xùn)練(STA)作為一種新型的數(shù)據(jù)增強(qiáng)方式可以改善學(xué)習(xí)的決策邊界中的薄弱環(huán)節(jié),提高模型的魯棒性。主干(Backbone):采用的CSPDarkNet53作為主干網(wǎng)絡(luò),代替了之前的DarkNet53。增強(qiáng)了模型的學(xué)習(xí)能力的同時也解決了梯度消失問題。并且采用了Mish激活函數(shù),使網(wǎng)絡(luò)具有更強(qiáng)的準(zhǔn)確性。頸部(Neck):目標(biāo)檢測網(wǎng)絡(luò)在主干網(wǎng)絡(luò)(Backbone)和最后的輸出層之間插入的一層。頸部網(wǎng)絡(luò)采用了空間金字塔池化(Space Pyramid Pool, SPP)模塊和路徑聚合網(wǎng)絡(luò)(Path Aggregation Network, PANet)的結(jié)構(gòu)。主要是用于對特征進(jìn)行融合。SPP網(wǎng)絡(luò)作為Neck的附加模塊,采用四種不同尺度的最大化操作:1×1,5×5,9×9,13×13,對上層輸出的feature map進(jìn)行處理,再將不同尺度的特征圖進(jìn)行Concat操作。該模塊顯著的增加了主干特征的接收范圍,并且將上下文特征信息分離出來。FPN+PAN結(jié)構(gòu),F(xiàn)PN是自頂向下,將高層的特征通過上采用的方式進(jìn)行傳遞融合,得到進(jìn)行預(yù)測的特征圖。而Neck這部分,除了FPN外,還在此基礎(chǔ)上添加了一個自底向上的特征金字塔,其中包含兩個PAN結(jié)構(gòu)。避免了在傳遞的過程中出現(xiàn)信息丟失的問題,提高了網(wǎng)絡(luò)預(yù)測的準(zhǔn)確性。頭部(Head):沿用了YOLO-v3的多尺度預(yù)測方式。對圖像特征進(jìn)行預(yù)測,生成邊界框和并預(yù)測類別。在損失函數(shù)方面,其損失函數(shù)由三部分組成,分別為:預(yù)測框回歸誤差、置信度誤差、分類誤差。其中預(yù)測框回歸誤差不再使用YOLO-v3的均方誤差,而是采用的CIoU損失。
在YOLOv4的主干網(wǎng)絡(luò)后使用了SPPnet,但漏檢等情況并未得到有效的改善,為此本文在YOLO head2前增加了使用不同大小池化核的SPPnet(命名為SPP-1),同時為了保證SPPnet的網(wǎng)絡(luò)的通道數(shù)在引入前后保持?jǐn)?shù)量一致,故在SPP-1后使用了cocat和卷積層。改進(jìn)后的模型結(jié)構(gòu)如圖1所示。
圖1 改進(jìn)后的模型結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)(CNN)通常由卷積層和全連接層組成。卷積層不需要輸入數(shù)據(jù)的大小。然而,第一個完全連接的層要求輸入大小必須是固定的。以VGG網(wǎng)絡(luò)16為例,其輸入大小固定為224×224,這在一定程度上限制了模型的泛化性能和應(yīng)用場景。
SPP結(jié)構(gòu)是在CSPDarknet53最后一個特征層之后,在對最后一個特征層進(jìn)行三次卷積后,用四個不同尺寸的最大池化進(jìn)行處理,四個不同尺寸的池化核大小分別為13x13、9x9、5x5、1x1。YOLOv4中通過添加SPP結(jié)構(gòu),增大感受野,分離出最重要的上下文特征,并且不會降低檢測速度。通過對SPPnet結(jié)構(gòu)的分析得出,原YOLOv4結(jié)構(gòu)中使用的SPPnet并不能很好的實(shí)現(xiàn)對不同尺度目標(biāo)特征信息的有效提取。為此,本位針對性的提出在以CSPdarknet53為主干網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上融合多個SPPnet結(jié)構(gòu)。分別命名為SPP、SPP_1,其中SPP結(jié)構(gòu)參數(shù)保持不變,SPP_1的卷積核大小調(diào)整為15x15、11x11、7x7、1x1以此滿足淺層神經(jīng)網(wǎng)絡(luò)中的多尺度特征融合,SPP、SPP_1的網(wǎng)絡(luò)結(jié)構(gòu)圖如圖2所示。
圖2 SPPnet結(jié)構(gòu)示意圖
CSPNet 易于實(shí)現(xiàn),且具有很好的通用性,可以構(gòu)造在 ResNet、ResNeXt和 DenseNet等 網(wǎng) 絡(luò)體系中。CSPDar knet53是在 Darknet53基礎(chǔ)上,參考了CSPNet,其主干主要包括五個CSP模塊。CSP模塊先是將特征圖分成兩部分,一個部分是Resblock的結(jié)構(gòu),分別迭代1,2,8,8,4次,另一個部分是經(jīng)過少量操作的殘差邊,最后進(jìn)行通道疊加操作,主要目的是能夠?qū)崿F(xiàn)更豐富的梯度組合,同時減少計算量,用于解決需要大量推理計算的問題。
PANet的概念在Mask R-CNN中也存在。PANet是對特征金字塔網(wǎng)絡(luò)(Feature Pyramid Network, FPN)的進(jìn)一步改進(jìn)。FPNet采用的是自頂向下的傳輸模式,將高層特征傳入下層。因此底層的特征無法對高層特征產(chǎn)生影響。并且在FPNet的這種傳輸模式中,頂部的信息傳入底部是逐層傳輸?shù)?,這也導(dǎo)致了計算量增大,所以提出了PANet來解決這一問題。
在PANet中引入了自底層向頂層向上傳播信息的增強(qiáng)結(jié)構(gòu)路徑,避免了在傳遞過程中部分信息丟失的問題,并使得底層的信息更容易到達(dá)高層頂部。在加入了PANet后,在進(jìn)行從頂層向下層的特征融合后,再進(jìn)行自下層向頂層的特征融合,這樣的特征傳遞方式穿越的特征圖數(shù)量得到了大大的減少,因此減少了計算量。
圖 3 CSPDarketnet53結(jié)構(gòu)
為驗(yàn)證改進(jìn)后的檢測算法的綜合性能,本文使用的數(shù)據(jù)是PASCAL VOC 07+12,其包含16000余張訓(xùn)練數(shù)據(jù)集,和5000張測試數(shù)據(jù)集,并與YOLOv4算法進(jìn)行了對比實(shí)驗(yàn)。我們的方法是在2.2GHz Intel i7-8750 CPU和NVIDIA GeForce RTX 2070S GPU上執(zhí)行的。相應(yīng)的程序在Pytorch框架下使用Python實(shí)現(xiàn)。
在物體檢測中,通常使用 mAP 指數(shù)來評估準(zhǔn)確度?;谠糦OLOv4模型,輸入圖像的分辨率設(shè)置為416 × 416,Batch size為16,初始學(xué)習(xí)率為0.0001,經(jīng)過50個Epoch得到最終的網(wǎng)絡(luò)模型。原YOLOv4算法與改進(jìn)后的算法的20類相比,實(shí)驗(yàn)結(jié)果如圖4、圖5所示。
圖4 左圖為原YOLOv4實(shí)驗(yàn)結(jié)果,右圖為改進(jìn)后的YOLOv4
圖4中,改進(jìn)后的算法相比于原YOLOv4算法,在幾乎所有類別上都有顯著的提升。原YOLOv4對pottedplant的檢測效果本身在二十個類別中就是最低的,主要是因?yàn)檫@個類別物體在圖像屬于通常尺寸比較小,而且在測試集中物體或多或少的受到其他物體的遮擋,對于YOLO算法來說,檢測的難度比較大。圖4中,原YOLOV4和改進(jìn)后的模型,對圖像檢測的情況來看,第一幅圖像中, 改進(jìn)后的模型不僅能檢測YOLOV4檢測出的目標(biāo),還能檢測出YOLOV4沒有檢測出的右邊的男士。第二幅圖像中,原YOLOV4漏檢了diningtable目標(biāo),改進(jìn)后的模型能準(zhǔn)確檢測。第三幅圖像中,原YOLOV4漏檢的比較嚴(yán)重,而且還將目標(biāo)car類別檢測成motorbike類別,而改進(jìn)的算法能減少漏檢的情況,并且能正確檢測目標(biāo)的類別。所以與原YOLOV4相比,改進(jìn)后的模型檢測效果更好。
圖 5 改進(jìn)后的模型與原YOLOV4檢測圖像的對比
YOLOv4中 常 用 的tricks有Mosaic,cosine learning rate,smooth label,以及weight decay。從上述表1中可以看出,只有通過對改進(jìn)后的模型算法進(jìn)行對比驗(yàn)證,才能知道當(dāng)前的設(shè)計是最佳的,我們通過在實(shí)驗(yàn)中調(diào)整mosaic數(shù)據(jù)增強(qiáng)、余弦退火學(xué)習(xí)率、標(biāo)簽平滑和權(quán)重衰減這些訓(xùn)練方法,使得改進(jìn)的算法有最好的結(jié)果。只有當(dāng)Mosaic數(shù)據(jù)增 強(qiáng)、Cosine_Ir打 開,Smooth_label=0,Weight_decay關(guān)閉時,改進(jìn)后的模型才達(dá)到最高89.63%的mAP。
本文在YOLOv4的基礎(chǔ)上,通過嵌入改進(jìn)的SPPnet,提出了改進(jìn)的YOLOv4檢測模型。在相同的數(shù)據(jù)集下進(jìn)行目標(biāo)檢測的實(shí)驗(yàn),改進(jìn)后的YOLOv4檢測模型與YOLOv4等主流檢測模型相比較,改進(jìn)后的模型具有較好的效率和較高的準(zhǔn)確性。此外,在普通非結(jié)構(gòu)化場景下,該算法還能成功檢測出部分被遮擋的物體,包括小尺度和大尺度物體。該改進(jìn)方法是成功且有效果的。在未來的工作中,改進(jìn)后的模型有望應(yīng)用于室內(nèi)場景的目標(biāo)檢測、戴口罩下的人臉檢測、人流量移動下的目標(biāo)檢測……等任務(wù)。關(guān)于本文的研究內(nèi)容,依然存在進(jìn)一步的優(yōu)化空間,在后續(xù)的工作中,還可以開闊思想,進(jìn)一步提升檢測的速度,將該功能廣泛應(yīng)用在更多的領(lǐng)域。