(復旦大學體教部 上海 200433)
在健身、健美運動中,對于肌肉外形和發達程度的評價,主要依靠個人主觀經驗判斷,對于初學者來說,這一方法缺乏一定的準確性。卷積神經網絡(Convolutional Neural Networks,CNN)在計算機圖像識別、分類工作上具有強大的優勢,利用CNN識別胸肌發達程度具有可行性[1]。
CNN在體育領域主要應用于圖像識別和目標檢測,圖像識別是指利用計算機對圖像進行處理、分析和理解,以識別各種不同模式的目標和對象的技術[2]。例如,利用卷積神經網絡對體育技術動作關鍵環節進行識別和特征提取,為運動技術識別、生物力學分析、運動損傷診斷等工作提供依據[3-5]。目標檢測是一種基于目標幾何和統計特征的圖像分割,可利用計算機圖像處理技術對目標進行實時跟蹤定位[6]。體育比賽中,識別運動員、球的位置和軌跡,具有重要的戰術利用價值[7-8]。

圖1 卷積神經網絡拓撲結構

圖2 卷積層與卷積核

圖3 線性整流層及ReLU激活函數

圖4 池化層(Max Pooling)
VGGNet是由牛津大學計算機視覺組和Google DeepMind公司的研究員共同研發的一例經典CNN模型,VGGNet在圖像分類、識別工作中具有較好的泛化能力,是提取圖像特征工程中較為常用的網絡模型[9]。該研究采用VGGNet-16遷移學習方式構建胸肌發達程度的識別模型,探索利用計算機圖像識別技術智能化評價肌肉外形的可行性,為健身、健美愛好者提供一個方便的評價工具。

圖5 全連接層

圖6 VGGNet-16 的結構圖

圖7 胸肌圖像數據集
卷積神經網絡(CNN)是一種具有多層結構的深度神經網絡,它是一種有監督的學習網絡,CNN帶有深層次卷積運算,能夠自動提取和學習圖像特征,運用帶有標簽(類別)的數據樣本對網絡加以訓練,能夠逐漸形成輸入與輸出之間的映射關系,具有了對新樣本進行預測和識別的能力[10]。CNN的一般結構包括輸入層(Input)、卷積層(Convolutional layer)、線性整流層(Rectified Linear Units layer)、池化層(Pooling layer)、全連接層(Fully-Connected layer)和輸出層(outputs)(見圖1)。
輸入層(Input)用于數據的輸入,對于圖像分類任務,輸入層是由圖像像素灰度值構成的矩陣。
卷積層是圖像特征提取和特征映射的關鍵結構。卷積層中包含一個m×n矩陣的卷積核,卷積核在輸入矩陣(源像素)上逐步滑動,每滑動一步就與源像素上對應的局部像素值相乘并相加,并映射到目標像素值矩陣中,從而完成特征提取工作(見圖2)。

圖8 胸肌發達程度等級

圖9 圖像RGB三通道

圖10 采用VGGNet-16預訓練模型(ImageNet)進行遷移學習

圖11 遷移學習完成后的模型效果
線性整流層是將卷積層的輸出結果做非線性運算,包含非線性的激勵函數,常用的激勵函數有sigmoid、tanh、ReLU等(見圖3)。
池化層計算方式有最大池化和均值池化,池化層的作用是對圖像進行降維,減小網絡的計算量,防止過擬合現象產生(見圖4)。
全連接層通常是一個BP神經網絡,在模型訓練過程中,全連接層通過不斷調整權值,逐漸形成圖像特征與輸出目標之間的關系映射,從而具備圖像識別能力(見圖5)。
輸出層用于最后輸出結果,對于圖像識別任務,輸出層可使用softmax函數輸出對應類別標簽。
VGGNet是在傳統的CNN網絡上進行了深度的增加,網絡層數達到16~19層,VGGNet包括VGGNet-16(見圖6)和VGGNet-19,16和19為網絡層數[11]。與以往的卷積網絡不同,VGGNet的每一個卷積層采用了多個3×3小卷積核,從而對圖像特征提取更加細致,準確率大大提升。
2.1.1 數據收集
通過現場拍照和網絡征集的方式采集不同發達程度的胸肌照片,采集對象為18~30歲的男性。要求上半身裸露的正面照,圖像光線充足、輪廓清晰、背景整潔,胸肌部分無遮擋(見圖7)。最終篩選出1500張照片建立數據集。
2.1.2 數據分級

圖12 混淆矩陣

圖13 分類錯誤案列
將胸肌發達程度分成5個等級,1~4級的胸肌發達程度依次增大,第5級為肥胖人群(見圖8)。聘請5名專家對1500張照片進行逐一等級識別,定為該照片對應的胸肌發達程度。
數據集歸類結果如表1所示。
2.1.3 訓練集、測試集的劃分及數據集加權
劃分數據集為訓練集和測試集,訓練集用于對VGGNet-16進行訓練,測試集在訓練完成后對模型的準確率進行評估,測試集不參與模型訓練過程,否則會導致過度擬合。數據集劃分過程中,先將數據集隨機化,使得各等級圖片在數據集中均勻分布,然后按照75%訓練集、25%測試集的比例劃分,最終得到訓練集和測試集數據如表2所示。
2.1.4 數據增強
深度學習算法需要大量的訓練數據,而該研究訓練集僅有1125張照片,是一個極小的樣本數據,容易造成模型過擬合現象,因此采用數據增強手段來增加樣本。對原始圖片進行隨機的裁剪、旋轉、翻轉、縮放、亮度變換、模糊變換、標準化等一些列操作,人為地擴充樣本數量,從而提升模型的泛化能力。該研究采用以下數據增強手段(見表3)。
VGGNet-16的輸入層是一個224×224×3的矩陣,即一張寬224像素、高224像素、3通道(RGB)的圖片。經過尺度變換后矩陣中的像素值由[0,255]縮放到[0,1]范圍內(見圖9)。
遷移學習(Transfer Learning)是一種機器學習方法,是把源領域的知識,遷移到目標領域,使得目標領域能夠取得更好的學習效果[12]。該研究采用ImageNet的VGGNet-16預訓練模型作為源領域進行遷移學習,目標領域為胸肌發達程度識別。ImageNet的VGGNet-16預訓練模型是指已經用ImageNet數據集訓練好的VGGNet-16模型,模型中的參數是在ImageNet圖像集上學習到的,使用預訓練模型進行遷移學習,可以耗費較少的資源,減少訓練時間[12]。
該研究借助開源人工神經網絡庫Keras完成模型的構建、訓練與識別任務,進行遷移學習時,復用原始VG GNe t-16預訓練模型的卷積層部分(Block1~Block5),并將卷積層部分設置為不可學習,而全連接層部分(Dense1、Dense2、Output Layer)替換為自己設置的全連接層(見圖10)。自設的全連接層包含一個隱藏層,神經元個數為1024,采用ReLU激活函數,隨機失活函數dropout=0.5,輸出層采用softmax分類函數,損失函數采用交叉熵(crossentropy),學習率為lr=1e-5,訓練迭代次數為30次。
圖11為模型分類效果,從圖中看到,在不斷地迭代訓練過程中,在訓練集上的分類準確率(Training Acc)和在測試集上分類的準確率(Test Acc)都在不斷上升,而在訓練集上的損失率(Training Loss)和在測試集上的損失率(Test Loss)連續下降,在第15次迭代時逐漸達到平穩。最終,模型在測試集上的準確率達到84.0%,損失達到0.65,準確率較原始的預訓練模型有很大程度提高。
圖12是遷移學習完成后的模型在測試集上分類結果的混淆矩陣,矩陣中縱軸代表圖片真實等級,橫軸代表模型識別的等級。理想情況下,矩陣中的數值分布在左上角到右下角的對角線上,即左圖中灰色區域(右圖中亮色區域),代表著預測準確率達到100%。若其他區域數值不為0,說明在該類別上出現預測錯誤,數值代表出現錯誤的數目。例如,當在真實等級為1級的87張圖片中,模型識別結果出現了12次錯誤,其中8張圖片錯誤的識別為2級,4張圖片識別為3級。從矩陣中可見,模型對各個等級圖片的識別均有錯誤,對角線邊緣模糊,說明模型在識別相鄰等級的圖片時容易出現混淆。
圖13為隨機抽取的9張預測錯誤案列。通過觀察案例并結合混淆矩陣可得,模型對相鄰級別的圖片容易發生混淆,預測結果存在偏差,由于模型卷積層部分并沒有參與訓練,因此可能是卷積層提取特征不全面導致。
對原始的VGGNet-16預訓練模型(ImageNet)進行微調,開放部分卷積層。設置原始模型卷積部分Block1~Block3仍為不可學習,而Block4和Block5設置為可學習,使得部分卷積層為提取胸肌圖片特征而調整參數。全連接層部分(Dense1、Dense2、Output Layer)仍采用包含1024個神經元的單隱藏層,學習率為lr=1e-5,訓練迭代次數為30次(見圖14)。

圖14 Block4和Block5設置為可學習
圖15為進行微調后的模型效果,從圖中看到,模型預測的準確率逐漸提高,損失率逐漸下降,在第20次迭代時逐漸達到平穩。最終,進行微調后的模型在測試集上的準確率達到95.2%,結果趨近完美,符合該研究對胸肌發達程度識別的需求。

圖15 遷移學習完成后的模型效果
圖16是對模型進行微調后在測試集上預測結果的混淆矩陣,從圖中可見,大多數數值分布在對角線上,僅有極少數等級出現預測錯誤,說明使用微調后的VGGNet-16對胸肌數據進行遷移學習,能夠很好地提取胸肌圖像特征,并能夠較為準確地識別胸肌發達程度。借助Keras的相關方法可以查看模型中各個卷積層與池化層對圖像的特征提取據結果。VGGNet-16網絡層數達16層,隨著網絡的深入,圖像像素數目減少,卷積核數量增加,從而提取更加細致的特征。圖17為模型對某胸肌圖片進行識別,查看模型中第2層、第5層、第8層的卷積層對該圖片的特征提取結果,從圖中看到,模型經過反復迭代訓練,已經能夠很好地適應胸肌樣本,并成功地提取出胸肌的輪廓、顏色、紋理等特征,基于這些特征,將胸肌歸為等級3。

圖16 混淆矩陣

圖17 部分卷積層特征提取結果(部分圖片)
使用VGGNet-16預訓練模型(ImageNet)對胸肌圖像進行遷移學習,經過30次迭代訓練后,模型識別胸肌發達程度的準確率達到95.2%,損失達到0.0658,能夠很好地提取胸肌圖像特征,并能夠較為準確地識別胸肌發達程度。

表1 各個等級胸肌圖像數量

表2 各個等級圖像數量

表3 對胸肌圖片進行數據增強