溫志強,馮向萍,徐 靜
(新疆農業大學 計算機與信息工程學院,新疆 烏魯木齊 830052)
為加快新疆現代馬產業發展,使新疆現代馬業發展盡快與國際馬業管理接軌,區內建立了新疆馬匹登記注冊管理系統,加快了實現區內良種馬資源信息共享[1]。但目前馬品種登記和護照信息中的外貌特征提取方式主要靠手工方式完成,需要對馬匹面部的特征進行文字描述和手工描圖標記,存在工作量大、效率低、準確性低、人工成本高等問題。
近幾年來已經有關于深度學習的動物面部識別、植物實例分割[2-3]等研究成果。由于深度神經網絡在圖像分類和檢測方面取得了巨大的成功,現在成為了幾乎所有計算機視覺應用的“特征提取器的選擇”,主要是因為它們能夠從數據中學習到良好的特征。根據文獻查閱收集了解到目前在人工智能計算機視覺方面還未有與馬匹相關的畜牧業相結合的應用,結合深度學習與計算機視覺在其他動物上的研究方向主要分為四類:
①classification分類任務:如基于CNN的魚類分類[4],王培森[5]基于注意力機制的圖像分類,提出并實現了一種利用卷積層激活輸出獲取多通道注意力的圖像分類模型,龐絲絲等[6]利用遷移學習的方法改進的ResNet50深度學習模型,得到了不錯的分類識別效果。
②object detection目標檢測:Ross Girshick等[7]在PASCAL VOC數據集訓練了R-CNN模型,首次用深度學習CNN的方式,結合region proposal和CNNs進行目標檢測,取得的性能、準確度均大幅高于傳統特征提取方式。趙凱旋等[8]提出對于奶牛目標各區域的檢測和分割方法。在精準養殖方面,針對奶牛精準養殖中的信息獲取問題,趙凱旋[9]針對奶牛運動目標檢測,提出了一種基于背景法的目標檢測方法。
③semantic segmentation語義分割:Jonathan Long等[10]提出了一種全卷積網絡,去除了VGG網絡常規的全連接層(fc)的全卷積(fully conv)網絡,可適應任意尺寸輸入。增大了數據尺寸的反卷積層(deconv),能夠輸出像素級別的結果來進行語義分割。王雅晴[11]通過改進FCN對自然場景圖像中的金絲猴進行分割,為研究金絲猴生物特征信息進行重識別工作奠定基礎。
④instance segmentation實例分割:He Kaiming等[12]在2017年基于Faster R-CNN提出的一種改進算法,在正確找到圖像中目標的同時還要對其進行精確的分割,對Faster R-CNN的每個RoI都要使用FCN進行語義分割,分割任務與定位、分類任務同時進行。
因此,根據上述研究,根據實際任務需要分割的目標為馬匹面部和馬匹面部別征區域,馬匹面部別征識別分割屬于實例分割任務。所以,該文提出一種基于深度學習的馬匹面部及馬匹面部特征的檢測方法,先利用Mask R-CNN網絡分割圖像中馬臉及馬臉特征得到掩膜,在馬臉及馬臉特征檢測的同時實現了馬臉及馬臉特征圖像與背景的分割。論文的主要工作和創新點如下:
·將人工智能計算機視覺與畜牧業相結合;
·構建了一個具有分割標注的馬臉及馬臉特征數據集,從Open Images Dataset V4[13]數據集中選擇了700張包含馬臉及馬臉特征的圖像,在新疆的伊犁昭蘇馬場實地拍攝了700張包含馬臉及馬臉特征的圖像,利用網絡爬蟲技術在unsplash網站爬取了160張包含馬臉及馬臉特征的圖像,并對以上圖像進行標注構建了新的數據集;
·引入RoIAlign算法,在特征圖上保留了浮點型坐標,提高了馬臉及馬臉特征的定位精度;
·利用Mask R-CNN結合ResNet-50網絡[14]與FPN網絡[15]訓練出檢測模型,該模型在現有馬臉及馬臉特征檢測的基礎上,實現了馬臉及馬臉特征定位,增加了分割分支。能夠在馬臉及馬臉特征檢測的同時實現像素級的馬臉及馬臉特征信息分割,并且將預測的實例掩膜映射至馬匹登記系統中的外貌特征圖示中,解決了馬匹面部特征自動標記問題。
實驗數據第一部分采集于新疆伊犁昭蘇縣軍馬場、伊犁地區種馬場。選取馬匹面部具有白色毛色特征的馬匹進行拍攝,主要針對馬匹面部具有大星、小星、細流星、長流星、長廣流星、白面、鼻端白等特征的馬匹進行采集,如圖1所示。將iPhone6s手機相機,距離地面1.5米高度,正視于馬匹面距離約兩人獲取正視彩色圖像。手機拍攝分辨率1 334像素×750像素,按照拍攝日期存入電腦設備。

圖1 馬匹面部別征
實驗數據第二部分來自于Google,CMU和康奈爾大學之間合作的Open Images Dataset V4,從horse標簽類當中選取了700張包含馬匹面部特征的彩色圖像。實驗數據第三部分來自于網絡爬蟲,爬取了免費無版權的攝影師作品網站unsplash,從該網站爬取了140張清晰的包含馬匹面部特征的彩色圖像。
將獲取的1 540張包含馬匹面部特征信息的圖像作為數據集。所選樣本集包含不同場景下、不同曝光度和不同馬匹面部角度的樣本。訓練集采用的是coco數據集格式[16],圖像標識工具采用Labelme,在Labelme圖像標注工具中利用多邊形標注出馬匹面部和馬匹面部特征外輪廓,如圖2所示,保存后得到json格式的標注文件,經轉換后得到coco數據集格式的json、label等文件。

圖2 Labelme中進行面部和大星特征的標記
文中主要通過Mask R-CNN在計算機視覺圖像實例分割任務中優異的表現,檢測圖像中的馬臉以及馬匹面部特征并分割馬臉及馬匹面部特征的區域, 得到每匹馬的馬臉與特征的mask遮罩圖像;將識別分割后的mask遮罩圖像,映射到馬匹登記環節中的馬匹外貌特征圖示上,從而實現馬匹面部別征的識別及分割。
如圖3所示,基于卷積神經網絡的Mask R-CNN馬匹面部別征識別分割網絡分為三部分:(1)主干網絡,主干網絡是共享的卷積層,用于對輸入圖像的特征提取,生成特征映射圖(Featuremaps)。馬匹面部別征識別及分割網絡選用殘差網絡(ResNet50)[17]結合特征金字塔網絡(FPN)作為主干網絡,生成P2、P3、P4、P5等4級大小不同的特征圖。(2)區域建議網絡(RPN),用于生成感興趣區域(RoI)推薦框。本網絡中的RPN網絡通過具有FPN的主干網絡根據3種不同尺度長寬比為0.5、1和2的15種矩形框從特征金字塔的不同級別P2~P6在特征圖中提取RoI特征。(3)回歸檢測物體的類別、邊界框(Bounding-box)及輸出掩膜的mask三分支結構。文中類別包含8類(大星、小星、細流星、長流星、長廣流星、白面、鼻端白和背景),Bounding-box包含4個參數均由全連接層得出。Mask分支由卷積核大小為3*3的5個卷積層和2個反卷積層構成,其中最后一層采用1*1大小的卷積核輸出mask類別為2類。

圖3 基于Mask R-CNN的馬匹面部別征分割網絡結構
2.1.1 RPN網絡
在R-CNN和Fast R-CNN等物體檢測框架中,通常用比較傳統的selective search算法[18]來提取候選框,在CPU上一張圖要耗時2 s,所以Ren Shaoqing 等人[19]提出RPN網絡專門用來提取候選框。
RPN(region proposal network)即候選區域生成網絡,通過一個在共享特征圖(conv feature map)上3×3的滑動窗口(sliding window)生成候選區域。在此過程中,為特征圖上每個特征點生成9種預先設置好長寬比與面積比的目標框或稱為錨點(Anchor),由卷積神經網絡提取特征后得到特征圖,在特征圖上將每一個點映射至原始輸入圖像上,得到一個感受野(receptive field),9種初始Anchor包含三種面積,每種面積包含三種長寬比,面積從小至大依次為128×128,256×256,512×512。RPN對3×3滑動窗口得到的特征圖上每個Anchor進行兩種判斷,分類層(cls layer)判斷是否為物體,2k scores對于9種框都可以判斷是前景還是背景,當IoU≥0.5時,認為其為正例(positive),并對其進行回歸。每一個RPN網絡生成的候選框都做一個2分類回歸,每一個特征點對應9個框,2×9=18個結果,即對9種候選框來說,它是前景和背景的得分。IoU(intersection over union,交并比)計算公式如下:
(1)
其中,A為RPN網絡生成的候選框,B為訓練集中標注的標準目標框,SA∩B為A、B的相重疊處面積,SA∪B為A、B并集面積。
回歸層(Reg layer),對于Anchor的修正主要由4個值完成tx、ty、th、tw,當前RPN網絡生成的候選框的四個坐標的回歸值和訓練集中正確的目標框(ground trues)之間的差異,4k coordinates 4×9=36,每一個anchor對應36個結果。
2.1.2 RoIAlign層
在Faster R-CNN網絡中候選區域池化(region of interest pooling,RoI Pooling)根據候選框的位置坐標,在特征圖中將相應區域池化為固定尺寸的特征圖,送入全連接層進行分類和RoI邊框的修正。①在Region Proposal映射階段,由浮點數表示的RoI特征圖邊界量化為了整數點坐標值;②池化后的特征圖尺寸固定,RoI邊界區域平均分割成k×k個單元(bin),也對每個單元的邊界進行了量化。兩次量化過程造成了RoI和提取特征之間的不對準而產生了位置偏差,影響了檢測和分割的準確度。
為解決上述缺點,RoIAlign層算法取消了生成RoI特征圖過程中的兩次量化操作。①Region Proposal映射階段不進行量化,保持浮點數邊界;②將候選區域(RoI)分割成k×k個單元(bin),每個單元的邊界也不做量化,保持浮點數。使用雙線性插值計算每個RoI bin中四個采樣位置的輸入特征的精確值,并進行平均池化操作,公式如下:

(2)
RoIAlign采用雙線性插值算法,保留浮點型坐標,避免了量化誤差,可以使原圖像像素與特征圖像素相匹配。雙線性插值算法公式如下:
對x方向進行線性插值:

(3)

(4)
對y方向進行線性插值:

(5)
如圖4所示,f(x,y)為待求解點P的像素值,f(Q11)、f(Q12)、f(Q21)、f(Q22)分別為已知四點Q11=(x1,y1),Q12=(x1,y2),Q21=(x2,y1)及Q22=(x2,y2)的像素值,f(R1)、f(R2)為x方向插值得到的像素值。

圖4 雙線性插值算法
2.1.3 FPN網絡
對一般的object detection算法,都是只采用頂層特征做預測,對于高層特征圖而言,語義信息比較豐富,目標位置比較粗略[20]。對于低層特征圖而言,低層特征圖語義信息比較少,目標位置比較準確。FPN(feature pyramid networks)算法同時利用低層特征高分辨率和高層特征的高語義信息[21],通過融合不同層的特征達到預測的效果。為了消除每一層融合過程上采樣的混疊效應(aliasing efect),不同層融合之后對不同層的融合結果采用3×3的卷積(conv)并且在每個融合后的特征層上單獨進行預測。
2.1.4 損失函數
文中的Mask R-CNN模型完成了三個任務,即馬臉與馬匹面部特征框的檢測定位、馬臉與馬匹面部特征與背景的分類、馬臉與馬匹面部特征與背景的分割。因此,損失函數的定義包括了定位損失、分類損失及分割損失三部分。在訓練期間,將每個采樣的RoI上的多任務損失函數定義如下:

(6)

文中通過小樣本馬臉數據集訓練模型,在有限的實驗環境下,獲得了更好的模型參數,使網絡模型能夠更快收斂,利用MS COCO數據集[22]上預訓練好參數的源網絡模型,對目標網絡,文中馬匹面部別征識別網絡模型的權重文件進行初始化。通過標注好的不同別征類別的馬匹面部數據集對整個目標網絡層進行微調訓練fine-tuning[23],得到馬臉及馬匹面部別征識別分割模型。
馬匹面部別征分割模型流程如下:
(1)colab深度學習平臺通過讀取云存儲馬匹圖像輸入至ResNet50殘差網絡進行特征提取。ResNet第1至4階段生成P2~P5共4個尺度特征圖,用于RPN、Bounding-box、class及mask的生成,由P5以步長為2進行下采樣得到大小為5 122的特征圖P6,P6僅用于RPN提供建議區域。
(2)RPN:將不同尺度特征圖P2~P6依次通過卷積核大小為3×3步長為1的卷積層后,為每個特征點生成3個Anchor,對class生成3×2個(馬匹和背景2類)卷積核,對Bounding-box生成3×4個卷積核。在3×3卷積層后接兩個1×1×1 024的全連接層,結果將分別進入cls和reg兩個子網絡用于區域建議,完成每個像素的前后景判別及馬匹面部別征的第1次Bounding-box修正。
(3)RPN網絡將特征圖中生成候選區域RoI的Bounding-box送入特征池化層RoIAlign,在RoIAlign中,根據Bounding-box提取P2~P5特征送入class、Bounding-box、mask三分支網絡。
(4)分類與邊框回歸分支根據RoI進行分類預測及馬匹面部別征Bounding-box第2次修正,Mask分支經過卷積和反卷積層生成馬臉與馬匹面部別征mask,完成馬匹面部別征檢測與分割。
文中實驗算法分為基于Mask R-CNN馬匹面部別征識別及分割以及分割結果的應用。
3.1.1 實驗環境配置
馬匹面部別征識別及分割網絡模型采用Google colab深度學習實驗平臺,操作系統為Ubuntu18.04,CPU為Intel Xeon,主頻2.20 GHz,13 GB內存,GPU為NVIDA Tesla P100,深度學習框架Pytorch1.3.1的硬件平臺。
3.1.2 模型訓練
針對實驗數據集本身很小(一千五百張圖片)的情況,文中采用遷移學習方法,分別對馬臉上的別征大星、小星、細流星、長流星、長廣流星、白面、鼻端白等特征圖像做實例分割并進行提取。特征提取網絡選用ResNet-50網絡,首先使用coco預訓練模型進行訓練,使模型具有一定的泛化能力,進一步提升模型性能。然后利用已標注的具有標簽和mask的數據集,共計1 540幅圖像,抽取1 378圖像訓練樣本數據集,剩余162組作為算法整體測試集,并將數據集的格式轉化為coco數據集標準格式進行模型訓練,通過實驗調試,設置迭代次數(epoach)為10,迭代步數(iteration)為7 500,批尺寸為2,學習率為0.001。針對文中類不平衡數據集(如LVIS)[24]的訓練,訓練集中長流星總計45幅圖片在所有類別中屬于最少類別,訓練集總計1 441張圖片,所以長流星類出現的頻率為45/1 440(0.031)。
3.1.3 識別與分割結果分析
用145個測試集在訓練好的模型上進行測試,部分馬匹面部別征如圖5所示。文中算法在完成馬臉及馬臉特征目標定位框并用不同顏色的二值掩碼將目標信息與背景分割開,實現了對馬臉及馬臉特征圖像檢測定位并進行分割的效果。為有效驗證本模型的性能,分別選取ResNet50-FPN、ResNet101-FPN兩種不同深度的主干網絡模型得到在測試集中的性能曲線,如圖6、圖7所示,其中橫坐標為迭代步數,縱坐標為準確率。如圖6所示,文中算法的準確率隨著迭代次數的增加逐步小幅度震蕩上升,最終保持在94%至96%區間。Mask R-CNN模型包括了定位損失、分類損失及分割損失三部分,三部分損失值的總和(total loss)如圖7所示,其中橫坐標為迭代步數,縱坐標為三部分損失值總和。文中算法的損失值隨著迭代次數的增加逐步小幅度震蕩下降,最終收斂于0.4左右。

圖5 基于Mask R-CNN的馬匹面部別征分割結果

圖6 Mask R-CNN網絡準確率

圖7 Mask R-CNN網絡三部分總損失值
利用coco數據集指標AP(average precision)、MAP(mean average precision),對文中分割算法進行評價,實驗結果如表1所示。

表1 文中算法不同主干網絡對馬匹面部別征分割評價指標
在馬匹鑒定以及馬匹護照生成標記外貌特征的過程中,使用文中算法將圖像中的馬匹面部特征做實例分割,將分割后的實例存儲為list[dict]格式,通過實例中的pred_masks鍵獲取Tensor形式的mask(掩碼區域)并轉換為ndarray格式數據進行保存,根據pred_boxes鍵獲取馬臉實例和特征實例的(box)掩碼包圍框,預測結果中每一個實例包圍框以元組形式儲存的x0,y0,x1,y1四個坐標點,box的寬為:
width=|x1-x0|
(7)
box的高為:
height=|y1-y0|
(8)
映射關系如下:
(9)
預測框與外貌特征圖示馬臉區域目標框的長寬比例如圖8所示,馬匹外貌特征鑒定的馬匹面部區域的mask(掩碼遮罩)區域的長寬比調整比例映射繪制,從而可以完成馬匹面部的特征自動標記工作。

圖8 馬匹面部別征外貌特征圖示映射
針對馬匹外貌特征鑒定實際過程中的面部別征標記問題,通過采集馬匹面部數據,構建了一個具有分割標注信息的馬臉數據集,研究了Mask R-CNN目標實例分割算法,訓練了相應模型。通過測試馬臉、大星、細長流星鼻端白、長流星鼻端白面部特征的AP值分別為86%、43%、39%、30%,均能夠較為準確地完成分割,分割后的特征輪廓清晰邊緣較為平滑,并通過模型輸出映射至馬匹外貌特征圖區域,完成了馬匹別征鑒定工作的自動標記,取得了較好的效果。在今后的工作中將對目前的馬匹面部別征數據集中的別征種類進行擴充,并對算法進行改進,以進一步提高模型的平均精確度。