李小迪,王天一
(貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴陽(yáng) 550000)
隨著智能信息處理技術(shù)的快步發(fā)展,羊養(yǎng)殖業(yè)方式從傳統(tǒng)的個(gè)體散養(yǎng)模式逐漸轉(zhuǎn)變?yōu)橐?guī)?;⒅悄芑B(yǎng)殖。在傳統(tǒng)養(yǎng)殖方式中多采用人工觀測(cè)法[1]和無(wú)線射頻[2]的方式,對(duì)羊只個(gè)體進(jìn)行目標(biāo)檢測(cè)。人工觀測(cè)法需要耗費(fèi)大量的人力和時(shí)間,不僅檢測(cè)效率低,且檢測(cè)錯(cuò)誤率高;無(wú)線射頻的方式需要額外的設(shè)備與同步的識(shí)別方法,一定程度上提高了養(yǎng)殖場(chǎng)的運(yùn)營(yíng)成本,影響?zhàn)B殖場(chǎng)的經(jīng)濟(jì)效益。傳統(tǒng)的姿態(tài)識(shí)別多使用回歸出精確關(guān)節(jié)點(diǎn)坐標(biāo)的方式或無(wú)線傳感網(wǎng)絡(luò)來(lái)對(duì)姿態(tài)進(jìn)行判別,在運(yùn)動(dòng)靈活的個(gè)體識(shí)別上可擴(kuò)展性較差,且識(shí)別成本較高。
近年來(lái),基于深度學(xué)習(xí)的目標(biāo)檢測(cè)[3]和姿態(tài)識(shí)別的方法,已成為國(guó)內(nèi)外研究熱點(diǎn),其典型算法為YOLO 系列算法。YOLO 系列算法利用了回歸的思想,能夠在原圖片中的位置上,回歸出目標(biāo)檢測(cè)的邊框和目標(biāo)的類別。為了實(shí)時(shí)對(duì)羊只狀況進(jìn)行了解,本文以羊只養(yǎng)殖場(chǎng)監(jiān)控視頻為研究對(duì)象,使用YOLOv3[4-6]網(wǎng)絡(luò)。YOLOv3 主干網(wǎng)絡(luò)采用殘差結(jié)構(gòu),其目的是為了防止連續(xù)下采樣導(dǎo)致的特征丟失。但是該方法仍然保持了傳統(tǒng)的卷積操作,帶來(lái)了巨大的flpos 計(jì)算量,雖保證了特征提取的多尺度性,但是卻一定程度的增加了模型推理的時(shí)間。在監(jiān)控視頻的羊只檢測(cè)與識(shí)別的視覺(jué)任務(wù)中,羊只整體呈現(xiàn)白色,RGB 3 通道值均接近255,其大部分本體并不包含足夠的視覺(jué)信息。同時(shí),目標(biāo)本體一定程度上存在周?chē)h(huán)境的遮擋,即使是人眼視覺(jué)都很難辨認(rèn)。從深度學(xué)習(xí)層面可以認(rèn)為這種監(jiān)督信號(hào)比較稀疏,給檢測(cè)和識(shí)別任務(wù)增加了難度。
在人腦對(duì)于羊只的感知中,當(dāng)一張圖片中存在羊只時(shí),人眼看到后會(huì)下意識(shí)地將注意力轉(zhuǎn)移到羊只上,而忽略周?chē)h(huán)境。此外,人眼并不需要看全羊只整體,通過(guò)羊只犄角,腿部等局部特征便可辨認(rèn)目標(biāo),還可以結(jié)合周?chē)h(huán)境的全局線索去推理出羊只的具體位置。另一方面,對(duì)于骨干網(wǎng)絡(luò)來(lái)說(shuō),占據(jù)整張圖中絕大部分還是周?chē)鷨握{(diào)的環(huán)境信息,計(jì)算機(jī)對(duì)于不同通道之間的特征會(huì)等價(jià)處理。
受此啟發(fā),為了實(shí)現(xiàn)骨干網(wǎng)絡(luò)對(duì)于多尺度特征提取的性能,去除單調(diào)的環(huán)境對(duì)目標(biāo)的干擾,同時(shí)減少模型的計(jì)算量,本文選擇循環(huán)特征移位聚合器(Recurrent Feature-Shift Aggregator,RESA)[7]來(lái)替代YOLOv3 主干網(wǎng)絡(luò)中的Resblock[8]部分,且增加了通道注意力[9]模塊壓縮激勵(lì) 網(wǎng) 絡(luò)(Squeeze-and -Excitation Networks,SENet),使網(wǎng)絡(luò)在訓(xùn)練過(guò)程中將更多的權(quán)重轉(zhuǎn)移到重要的通道信息上。此外,本文采用余弦退火學(xué)習(xí)率[10-11],在整個(gè)訓(xùn)練過(guò)程中控制模型的收斂性。通過(guò)在訓(xùn)練初期設(shè)置較大的學(xué)習(xí)率來(lái)避免陷入局部最優(yōu)解,并在訓(xùn)練過(guò)程中逐漸降低學(xué)習(xí)率,使得模型能夠穩(wěn)定的學(xué)習(xí),進(jìn)而收斂到全局最優(yōu)解。
如圖1 所示,YOLOv3 由darknet53、特征金字塔(Feature Pyramid Network,F(xiàn)PN)及YOLO Head 3 部分構(gòu)成。
圖1 YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Yolov3 network structure
Darknet53 被稱作YOLOv3 的主干特征提取網(wǎng)絡(luò),輸入的圖片首先會(huì)在Darknet53 中進(jìn)行特征提取。該模塊由一個(gè)普通卷積模塊和5 個(gè)殘差塊組成,輸入圖片首先會(huì)被調(diào)整成416×416×3 的大小,卷積過(guò)程對(duì)圖片進(jìn)行下采樣處理,每經(jīng)過(guò)一個(gè)卷積模塊圖片的寬和高就會(huì)被壓縮至原圖片的1/2,通道數(shù)在卷積過(guò)程中不斷擴(kuò)張,以此獲得一系列特征層,用來(lái)表示輸入圖片的特征。
FPN 被稱作YOLOv3 的加強(qiáng)特征提取網(wǎng)絡(luò),在主干部分獲得的3 個(gè)有效特征層,會(huì)在這一部分進(jìn)行特征融合,特征融合的目的是結(jié)合不同尺度的特征信息。在獲得3 個(gè)有效特征層后,利用其進(jìn)行FPN 層的構(gòu)建。
YOLO Head 實(shí)際上就是YOLOv3 的分類器與回歸器,其所做的工作就是進(jìn)行分類預(yù)測(cè)與回歸預(yù)測(cè)。因此,整個(gè)YOLOv3 網(wǎng)絡(luò)所作的工作就是特征提取-特征加強(qiáng)-獲得預(yù)測(cè)結(jié)果。
如圖2 所示為SENet 的結(jié)構(gòu)圖,SENet 可以分為壓 縮(squeeze),激 勵(lì) excitation)和 重 標(biāo) 定(reweight)3 個(gè)部分。
圖2 SENet 結(jié)構(gòu)圖Fig.2 Structure of SENet
輸入一張大小為H*W*C的特征圖(H、W、C分別為該特征圖的高、寬、通道數(shù)),經(jīng)過(guò)squeeze 模塊,將特征圖順著空間維度進(jìn)行壓縮,通過(guò)全局平均池化操作,將每個(gè)二維的特征通道變成一個(gè)實(shí)數(shù),這個(gè)實(shí)數(shù)某種程度上具有全局的感受野,最終輸出1*1*C的特征圖。輸出的維度和輸入的特征通道數(shù)相匹配,實(shí)現(xiàn)每個(gè)通道的所有特征求均值,旨在得到通道級(jí)的全局特征。
excitation 部分包括兩個(gè)全連接層和兩個(gè)激活函數(shù)。輸入圖片經(jīng)過(guò)第一個(gè)全連接層時(shí),通道數(shù)降為C/r(r為衰減因子,參照文獻(xiàn)[12]中驗(yàn)證,r取值為16),然后使用ReLU激活函數(shù)激活;經(jīng)過(guò)第二個(gè)全連接層時(shí),恢復(fù)至C通道數(shù),接著使用Sigmoid函數(shù)激活?;谕ǖ篱g的相關(guān)性,每個(gè)通道生成一個(gè)權(quán)重,用來(lái)代表特征通道的重要程度。通過(guò)訓(xùn)練過(guò)程中學(xué)習(xí)權(quán)重,使得每一層通道獲得非線性,即學(xué)習(xí)各個(gè)通道之間的主次關(guān)系。
最后,在reweight 部分,將excitation 輸出的權(quán)重看做每個(gè)特征通道的重要性,通過(guò)乘法逐通道加權(quán)到之前的特征上,完成通道維度上對(duì)原始特征的重標(biāo)定,從而實(shí)現(xiàn)不同通道特征重要性的區(qū)分。
RESA 算法是通過(guò)一個(gè)介于編碼器(用于特征提?。┖徒獯a器(用于目標(biāo)恢復(fù))之間的RESA 模塊,將骨干網(wǎng)絡(luò)中提取到的空間信息(局部信息與全局信息)進(jìn)行聚合,使得原始特征得到增強(qiáng)。該模塊在特征傳遞之前會(huì)將特征圖中的特征進(jìn)行切片,若要將特征進(jìn)行左右傳遞,則先將特征圖在列方向分為很多個(gè)切片,隨后不同特征加權(quán)疊加。同理,在行方向上進(jìn)行特征切片以及加權(quán),左右及上下方向的信息傳遞均能夠增強(qiáng)羊只不同特征部位以及周?chē)h(huán)境的關(guān)聯(lián)性。通過(guò)信息傳遞,理論上能夠有助于目標(biāo)的推理。從網(wǎng)絡(luò)結(jié)構(gòu)來(lái)看,RESA 模塊采用了大量切片特征加權(quán),因此這種非常規(guī)卷積的特征傳遞方式,能夠減少時(shí)間消耗,且經(jīng)過(guò)不同步長(zhǎng)的特征迭代,最終輸出的特征圖上,每個(gè)像素整合了全局的每一處特征信息,能夠有效防止傳播過(guò)程中信息的丟失。
RESA 模塊如圖3 所示,其中包含了4 種子模塊。分別為左->右、上->下、右->左、下->上,每部分模塊均為n次迭代。圖3(a)為左->右模塊1-n次迭代的結(jié)構(gòu)圖,其中包含了不同步長(zhǎng)下的信息傳遞示意圖。特征圖被縱向分為許多切片,當(dāng)步長(zhǎng)為1 時(shí),由左數(shù)第一個(gè)切片的特征經(jīng)卷積操作后,疊加至第二個(gè)切片。同理,當(dāng)步長(zhǎng)為2 的時(shí)候會(huì)疊加至第三個(gè)切片,以此類推。圖3(b)為從下->上的模塊,處理過(guò)程同上。
圖3 RESA 模塊結(jié)構(gòu)圖Fig.3 Structure diagram of RESA module
本文在YOLOv3 的主干網(wǎng)絡(luò)上進(jìn)行了模型的優(yōu)化,當(dāng)?shù)谝淮瓮瓿商卣鲗犹崛『螅度隨ENet 模塊,如圖4 所示。首先,輸入圖片的尺寸會(huì)被調(diào)整為416×416×3,經(jīng)過(guò)一次1×1 卷積后,特征圖的通道數(shù)得到擴(kuò)展,尺寸變?yōu)?16×416×32;隨后,特征圖進(jìn)入SE 模塊進(jìn)行壓縮,經(jīng)過(guò)全局平均池化操作后,特征圖的大小被壓縮為1×1×32;經(jīng)過(guò)全連接層,特征圖的大小變?yōu)?×1×2,衰減因子r為16。使用ReLU激活函數(shù)進(jìn)行激活,此時(shí)的通道數(shù)不變;再經(jīng)過(guò)一層全連接層,恢復(fù)通道數(shù)為32;最后使用Sigmoid函數(shù)進(jìn)行激活,此時(shí)每個(gè)通道都分配到了不同的權(quán)重;再通過(guò)乘法,逐通道加權(quán)到之前的特征上,權(quán)重值越大,說(shuō)明網(wǎng)絡(luò)對(duì)該通道的關(guān)注度越高;其次,去除YOLOv3 主干網(wǎng)絡(luò)中的殘差結(jié)構(gòu),將分配好權(quán)重的特征圖輸入到RESA 模塊中,進(jìn)行行方向和列方向的切片處理,使得空間通道特征得以豐富。
圖4 YOLOv3-SE-RE 模型結(jié)構(gòu)圖Fig.4 Structure diagram of Yolov3-SE-RE model
在訓(xùn)練網(wǎng)絡(luò)時(shí),學(xué)習(xí)率會(huì)隨著訓(xùn)練而發(fā)生變化。在訓(xùn)練網(wǎng)絡(luò)的后期,若學(xué)習(xí)率過(guò)高,則會(huì)造成損失的振蕩,而學(xué)習(xí)率衰減過(guò)快,則會(huì)造成模型收斂變慢的情況。由于模型在訓(xùn)練初期對(duì)于圖像是完全未知的,即模型對(duì)于像素信息的理解相當(dāng)于均勻分布,因此訓(xùn)練初期模型非常容易陷入過(guò)擬合?;诖?,本文采用余弦退火方式對(duì)學(xué)習(xí)率進(jìn)行調(diào)整,余弦退火學(xué)習(xí)率整體符合余弦函數(shù)的變化方式。余弦函數(shù)中,隨著x的變化,函數(shù)值先緩慢下降然后加速下降,以此為一個(gè)周期循環(huán)。當(dāng)模型經(jīng)過(guò)幾個(gè)輪次的訓(xùn)練后,逐漸對(duì)于數(shù)據(jù)集有所了解,此時(shí)需要降低學(xué)習(xí)率,使得模型能夠穩(wěn)定的學(xué)習(xí),從而向著全局最優(yōu)解去收斂。這種下降模式與學(xué)習(xí)率結(jié)合,能輕松讓模型跳出局部最優(yōu)解。學(xué)習(xí)率定義如下:
這兩個(gè)值限制了學(xué)習(xí)率的范圍,使學(xué)習(xí)率能夠在一定范圍內(nèi)衰減。Tcur表示當(dāng)前執(zhí)行了多少個(gè)輪次(epoch),由于Tcur在每個(gè)批次(batch)運(yùn)行后將會(huì)更新,而此時(shí)的epoch 還沒(méi)有執(zhí)行完,因此Tcur可以為小數(shù)。Ti表示第i次運(yùn)行時(shí)總的epoch 數(shù)。本文中,模型的初始學(xué)習(xí)率設(shè)置為0.01,隨著epoch 的增加,學(xué)習(xí)率按照余弦規(guī)律減小,開(kāi)始下降速度緩慢,當(dāng)訓(xùn)練到第20 個(gè)epoch 時(shí),學(xué)習(xí)率下降速度變快,最終大小為5×10-4。
3.1.1 數(shù)據(jù)集構(gòu)成
為了獲取高質(zhì)量的羊只圖片,需要對(duì)獲取到的羊舍監(jiān)控視頻進(jìn)行預(yù)處理操作,首先將獲得的3 047個(gè)監(jiān)控視頻進(jìn)行手動(dòng)裁剪,裁剪出合適的角度后手動(dòng)刪除無(wú)效片段。由于羊只在監(jiān)控視頻中多出現(xiàn)站立和坐臥的姿勢(shì),于是將裁剪出的有效監(jiān)控按照羊的姿勢(shì)分為站立(stand)和坐臥(lie down)兩個(gè)類別,共計(jì)309 個(gè)有效監(jiān)控視頻。然后對(duì)有效監(jiān)控視頻進(jìn)行關(guān)鍵幀的提取,由于羊只在羊舍內(nèi)的活動(dòng)范圍較小,在短時(shí)間內(nèi)羊只的姿態(tài)不會(huì)發(fā)生明顯的變化,因此每隔50 幀提取一張關(guān)鍵幀圖片。此外,通過(guò)手動(dòng)刪除關(guān)鍵幀中羊只肢體不全、遮擋嚴(yán)重、無(wú)羊只等無(wú)效圖像,最終得到808 張羊只站立圖片和1 192張羊只坐臥圖片,共計(jì)2 000 張圖片。
3.1.2 數(shù)據(jù)集的標(biāo)注
本文使用Labelimg 標(biāo)注工具對(duì)羊只數(shù)據(jù)集圖像進(jìn)行標(biāo)注,標(biāo)注過(guò)程中為了不引入太多的背景,只對(duì)羊只主體進(jìn)行標(biāo)注,數(shù)據(jù)集按照訓(xùn)練集和測(cè)試集8 ∶2 的方式劃分,模型優(yōu)化前后均在相同的數(shù)據(jù)集下訓(xùn)練測(cè)試40 輪次。
實(shí)驗(yàn)均在Ubuntu18.04.4LTS 操作系統(tǒng)上進(jìn)行,python3.7,tensorflow2.0 深度學(xué)習(xí)框架,cpu 為i7-9700,顯卡為RTX 2080Ti,使用Labelimg 對(duì)自建數(shù)據(jù)集進(jìn)行標(biāo)記,總共2 000 張圖片,按照8 ∶2 的比例劃分為訓(xùn)練集和測(cè)試集。
本文將基于通道注意力機(jī)制的YOLOv3 模型稱為YOLOv3-SE 模型、基于RESA 算法的YOLOv3 模型稱為YOLOv3-RE 模型、基于通道注意力機(jī)制及RESA 算法的模型稱為YOLOv3-SE-RE 模型。
3.3.1mAP及檢測(cè)速度對(duì)比
將上述4 個(gè)模型在自建數(shù)據(jù)集上訓(xùn)練40 個(gè)epoch 后,對(duì)訓(xùn)練好的模型進(jìn)行測(cè)試實(shí)驗(yàn)。測(cè)試集圖片共400 張,在相同的測(cè)試集下分別測(cè)試了算法優(yōu)化前后模型的推理速度,即前向傳播一次,推理一張圖片所用的時(shí)間及模型在測(cè)試集上的mAP值見(jiàn)表1。
表1 YOLOv3 算法與改進(jìn)后系列算法在測(cè)試集上的實(shí)驗(yàn)結(jié)果Tab.1 Experimental results of YOLOv3 algorithm and a series of improved algorithms on the test set
由此可見(jiàn),YOLOv3 模型的mAP為86.02%,YOLOv3-SE 模型的mAP達(dá)到了88.37%,相比YOLOv3 模型增加了2.35%;YOLOv3-RE 模型的mAP達(dá)到了91.26%,相比于YOLOv3 模型增加了5.24%。
實(shí)驗(yàn)表明,增加了注意力機(jī)制的YOLOv3 模型,以及增加了RESA 模塊的YOLOv3 模型,目標(biāo)檢測(cè)均值平均精度略高于YOLOv3 模型。而結(jié)合了兩個(gè)模塊的YOLOv3-SE-RE 模型的目標(biāo)檢測(cè)的均值平均精度為96%,明顯高于YOLOv3 模型,且單張圖片推理速度也明顯高于YOLOv3 模型。
3.3.2 精確度與召回率對(duì)比
模型優(yōu)化前后,精確度與召回率的對(duì)比結(jié)果如圖5 所示。
圖5 精確度與召回率比較Fig.5 Comparison between accuracy and recall
由圖5(a)、(b)所見(jiàn),YOLOv3 模型的精確率與召回率穩(wěn)定在0.75 與0.7,當(dāng)模型在訓(xùn)練到第15 個(gè)epoch 時(shí),精確度達(dá)到最高,然后開(kāi)始下降。而YOLOv3-SE-RE 模型兩項(xiàng)測(cè)試指標(biāo)在模型訓(xùn)練至40 epoch分別提升至0.79 與0.97。由此可見(jiàn),無(wú)論是精確率還是召回率,優(yōu)化后的模型更加平穩(wěn),且收斂速度更快。
3.3.3 Loss 的對(duì)比
模型在訓(xùn)練過(guò)程中損失函數(shù)可視化結(jié)果如圖6所示。由圖6(a)可見(jiàn),obj_loss 在第40 個(gè)epoch 時(shí)損失達(dá)到了2.5e-3。而從模型優(yōu)化后的損失函數(shù)曲線(圖6(b))可以看到,當(dāng)模型訓(xùn)練到第40 個(gè)epoch 時(shí),損失可降低至2e-3。由于余弦退火學(xué)習(xí)率的加入,使得整個(gè)訓(xùn)練過(guò)程中損失函數(shù)收斂的更快且更加平滑。
圖6 損失函數(shù)比較Fig.6 Loss function comparison
3.3.4 站立姿態(tài)檢測(cè)效果對(duì)比
如圖7 所示,在站立姿態(tài)下,與YOLOv3 算法相比,YOLOv3-SE 算法的預(yù)測(cè)框?qū)⒂蚁陆茄蛱阃暾蛉肫渲?,且預(yù)測(cè)框緊貼羊只個(gè)體;YOLOv3-RE 算法預(yù)測(cè)框?qū)⒀蛑坏淖笥覂芍谎蛱阃暾蛉肫渲?,且預(yù)測(cè)框緊貼羊只個(gè)體;YOLOv3-SE-RE 算法預(yù)測(cè)框?qū)⒀蛑粋€(gè)體完整框入其中,且預(yù)測(cè)框緊貼羊只個(gè)體且沒(méi)有將過(guò)多的背景框入其中。實(shí)驗(yàn)證明,通道注意力機(jī)制,可以使模型更加關(guān)注包含重要信息的通道,減少對(duì)背景的關(guān)注度。RESA 算法可以增加羊只不同部位之間的關(guān)聯(lián)性,通道注意力機(jī)制與RESA 模塊均可以提升模型的檢測(cè)精度。
3.3.5 坐臥姿態(tài)檢測(cè)效果對(duì)比
如圖8 所示,在坐臥姿態(tài)中,與YOLOv3 算法相比,YOLOv3-SE 算法的預(yù)測(cè)框更完全的將羊只框入其中,且預(yù)測(cè)框緊貼羊只個(gè)體沒(méi)有框入過(guò)多背景;YOLOv3-RE 算法預(yù)測(cè)框的準(zhǔn)確率以及置信度均略高于YOLOv3 模型;YOLOv3-SE-RE 算法預(yù)測(cè)框,將兩只緊貼的羊只個(gè)體完全框入其中,預(yù)測(cè)框緊貼羊只個(gè)體并沒(méi)有將過(guò)多背景,且置信度也有所提高。實(shí)驗(yàn)證明,在坐臥姿態(tài)下,改進(jìn)后的網(wǎng)絡(luò)識(shí)別效果明顯優(yōu)于原模型。
圖8 坐臥姿態(tài)檢測(cè)效果Fig.8 Sitting and lying posture detection effect
本文通過(guò)對(duì)YOLOv3 算法的優(yōu)化,實(shí)現(xiàn)了對(duì)視頻監(jiān)控中羊只姿態(tài)的高效識(shí)別。首先在主干網(wǎng)絡(luò)darknet53 中增加通道注意力機(jī)制,增加不同通道的特征相關(guān)性,讓網(wǎng)絡(luò)重點(diǎn)關(guān)注權(quán)重值較大的通道信息,以提高網(wǎng)絡(luò)的檢測(cè)精度。其次通過(guò)增加RESA模塊,對(duì)特征圖進(jìn)行行方向和列方向的切片和聚合,增加目標(biāo)檢測(cè)物體不同部位之間的關(guān)聯(lián)性,同時(shí)提高了檢測(cè)精度和速度。實(shí)驗(yàn)結(jié)果表明,YOLOv3-SE-RE 模型在檢測(cè)精度和檢測(cè)速度上都超過(guò)了原始YOLOv3 模型,對(duì)于不同姿態(tài)的識(shí)別,效果也有明顯的優(yōu)化,本應(yīng)用在智能養(yǎng)殖方面有較好的應(yīng)用前景。