摘? 要:后疫情時代的到來,口罩佩戴已經(jīng)成為學(xué)校、商場、食堂等各公共場所的常規(guī)防控手段。為提高防控效率和準(zhǔn)確率,研究搭建一個基于百度飛漿深度學(xué)習(xí)平臺的口罩佩戴圖像識別模型。該文先收集口罩佩戴人像圖片樣本,采用卷積神經(jīng)網(wǎng)絡(luò)VGG算法訓(xùn)練模型,實現(xiàn)判斷該靜態(tài)人像是否規(guī)范佩戴口罩的檢測功能,并對判斷結(jié)果的準(zhǔn)確性進(jìn)行了評估。實驗結(jié)果表明,VGG卷積神經(jīng)網(wǎng)絡(luò)對判斷人像是否佩戴口罩,具有比較快速、準(zhǔn)確的識別能力,具備廣泛應(yīng)用的價值。
關(guān)鍵詞:PaddlePaddle;卷積神經(jīng)網(wǎng)絡(luò);VGG;口罩佩戴
中圖分類號:TP391.4? ? ? ? ?文獻(xiàn)標(biāo)識碼:A文章編號:2096-4706(2022)04-0111-04
A Mask Wearing Image Recognition Model Based on PaddlePaddle
Deep Learning Framework
XIE Meiying
(School of Software, Hunan College of Information, Changsha? 410100, China)
Abstract: With the advent of the post epidemic era, mask wearing has become a routine means of prevention and control in schools, shopping malls, canteens and other public places. In order to improve the efficiency and accuracy of prevention and control, a mask wearing image recognition model based on Baidu flying slurry deep learning platform is studied and built. Firstly, this paper collects the picture samples of the mask wearing portrait, uses the convolutional neural network VGG algorithm to train the model, realizes the detection function of judging whether the static portrait wears the mask normally, and evaluates the accuracy of the judgment results. The experimental results show that VGG convolutional neural network has a relatively fast and accurate recognition ability to judge whether the portrait wears a mask, and has the value of wide application.
Keywords: PaddlePaddle; convolutional neural network; VGG; mask wearing
0? 引? 言
新冠肺炎疫情形勢仍然復(fù)雜多變,國內(nèi)疫情多點散發(fā)、局部暴發(fā)。正確佩戴口罩是有效降低傳播風(fēng)險、防止疫情擴(kuò)散蔓延、保障身體健康最簡單有效的措施。但仍然有些人員抱有僥幸心理和從眾心理,出入商場超市、農(nóng)貿(mào)市場、酒店賓館、交通場站、景區(qū)等各類公共場所,不愿意或忘記佩戴口罩。因此,將深度學(xué)習(xí)技術(shù)結(jié)合具體場景進(jìn)行應(yīng)用開發(fā),搭建更簡便準(zhǔn)確的模型,對疫情防控具有十分重要的意義。實驗中結(jié)合PaddlePaddle應(yīng)用平臺,設(shè)計VGG卷積神經(jīng)網(wǎng)絡(luò)模型,堆疊卷積池,實現(xiàn)是否佩戴口罩的判斷功能。
1? PaddlePaddle深度學(xué)習(xí)框架
目前,Github上流行的深度學(xué)習(xí)框架包括,Google公司的TensorFlow和keras,F(xiàn)acebook公司的PyTorch,國內(nèi)主要是百度的PaddlePaddle框架。PaddlePaddle以百度多年的深度學(xué)習(xí)技術(shù)研究和業(yè)務(wù)應(yīng)用為基礎(chǔ),是中國首個開源開放、技術(shù)領(lǐng)先的產(chǎn)業(yè)級深度學(xué)習(xí)平臺,集深度學(xué)習(xí)核心訓(xùn)練和推理框架、基礎(chǔ)模型庫、端到端開發(fā)套件和豐富的工具組件于一體。
本文在飛漿AI Studio上安裝paddlepaddle-gpu.post版本,構(gòu)建基于VGG卷積神經(jīng)網(wǎng)絡(luò)模型,實現(xiàn)小型公眾場合口罩佩戴識別模型,體驗PaddlePaddle深度學(xué)習(xí)框架的高速性能。
2? 深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)VGG
2.1? VGG模型介紹
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)一般采用5×5,7×7等較大的卷積核,VGG卷積層的最大改進(jìn)是,用多個小尺寸(3×3)卷積層的堆疊來替代大的卷積核(5×5或者7×7)。這樣可以比單個卷積層擁有更強(qiáng)的非線性映射能力,能更好地理解圖片,做更復(fù)雜的圖像分類任務(wù),而且參數(shù)數(shù)量更少,網(wǎng)絡(luò)更加輕便。VGG的結(jié)構(gòu)非常簡潔,整個網(wǎng)絡(luò)都使用同樣大小的卷積核和最大池化尺寸(2×2),方便開發(fā)人員調(diào)試處理。采用堆積的小卷積核優(yōu)于采用大的卷積核,可以增加網(wǎng)絡(luò)深度來保證學(xué)習(xí)更復(fù)雜的模式,而且代價比較小。VGG網(wǎng)絡(luò)模型如圖1所示。
2.2? VGG卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)分析
本實驗中卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)為:5個卷積池,3個全聯(lián)接層,中間加上2個dropout層。卷積層,是一種可行的計算方法,用于從輸入圖像數(shù)據(jù)中提取有效特征。卷積層最重要在于設(shè)計卷積核,本實驗采用3×3大小核,超參數(shù)包括卷積核大小,步長和填充,它們共同決定了卷積層輸出特征圖的大小。因為樣本存在局部相關(guān)的特性,“不全連接,參數(shù)共享”的特點大大降低了網(wǎng)絡(luò)參數(shù),保證了網(wǎng)絡(luò)的稀疏性,可以防止過擬合,卷積運(yùn)算過程如圖2所示。
激活層,對特征進(jìn)行非線性變換,賦予神經(jīng)網(wǎng)絡(luò)深度的意義。不同的激活函數(shù)特性不同。sigmoid函數(shù)輸出在(0,1),符合概率,導(dǎo)數(shù)范圍在[0,0.25]會出現(xiàn)梯度消失,輸出為非0均值,破壞數(shù)據(jù)分布。tanh函數(shù)輸出值在(-1,1),數(shù)據(jù)符合0均值,導(dǎo)數(shù)范圍在[0,1],網(wǎng)絡(luò)層數(shù)多的情況下,易出現(xiàn)梯度消失。relu函數(shù)線性運(yùn)算,效率極高,最常用,也是本實驗中所使用的激活函數(shù)。不同激活函數(shù)如圖3所示。
池化層,對特征圖進(jìn)行壓縮的一種方式,有MaxPool和AveragePool等。其中本實驗使用MaxPool,步長為2,核數(shù)為2,可以減小卷積核的尺寸,同時又可以保留相應(yīng)特征,主要用來降維。最大池化原理如圖4所示。
全連接層,在全連接的過程中丟失位置信息,降低了學(xué)習(xí)過程中的參數(shù)敏感度,很多分類問題需要通過softmax層進(jìn)行輸出,進(jìn)行非線性變換等等。
2.3? 基于PaddlePaddle的VGG實現(xiàn)
2.3.1? 環(huán)境導(dǎo)入
加載實驗中需要用到的基礎(chǔ)庫、第三方庫和深度學(xué)習(xí)框架。主要代碼有:
from __future__ import print_function
import paddle.fluid as fluid # paddle中的tensor
import numpy as np # 科學(xué)計算包
import sys # 提供Python運(yùn)行環(huán)境的變量和函數(shù)
import json # 序列化與反序列化
import random # 隨機(jī)數(shù)
from PIL import Image # 圖像處理
from work.utils import * # 導(dǎo)入工具類
2.3.2? 數(shù)據(jù)預(yù)處理
首先,解壓用于口罩識別的圖片數(shù)據(jù),獲取所有數(shù)據(jù)圖片的地址并保存到指定位置,代碼如下:
!unzip -oq /home/aistudio/data/data97078/maskDetect.zip
然后,制作數(shù)據(jù)讀取器,通過數(shù)據(jù)讀取器可以讀取訓(xùn)練或驗證所需要的圖片數(shù)據(jù)。參數(shù)若設(shè)置為True,則當(dāng)最后一個batch不等于batch_size時,拋棄最后一部分?jǐn)?shù)據(jù)。若為False則不拋棄。代碼如下:
train_reader = paddle.batch( custom_reader(train_list_path),batch_size=batch_size,drop_last=True)
eval_reader = paddle.batch( custom_reader(eval_list_path),batch_size=batch_size,drop_last=True)
2.3.3? 模型構(gòu)建
需要定義VGG模型,堆疊卷積池,參數(shù)分別代表的意義:第1,2個參數(shù)表示輸入、 輸出的通道,接著是卷積核尺寸,池化核數(shù)量,池化層步長,該卷積池含有多少層卷積 。act是激活函數(shù),采用relu激活函數(shù)。同時,已經(jīng)封裝的參數(shù)有:stride步長,pool_type='max'表示池化層用最大池化,conv_padding參數(shù)是在卷積時對邊緣填充的數(shù)量,padding=1表示預(yù)先給圖片邊緣填充0后再卷積,填充的目的是維持輸入尺寸和輸出尺寸的倍率關(guān)系。 比如:卷積核尺寸kernel_size=3,padding=1,stride=1,output_size = (input_size - kernel_size - 2*padding) / stride + 1 。 當(dāng)input_size=128時,output_size = (128 - 3 + 2) / 1 + 1 = 128,即可保持輸入輸出通道數(shù)相同。全連接層激活函數(shù)采用了relu和softmax兩個,softmax用于多分類神經(jīng)網(wǎng)絡(luò)輸出。主要代碼如下:
self._cp = ConvPool(input_channels,output_channels,filter_size,pools,pool_stride,num,conv_padding=1,act=’relu’)
self._fc = fluid.dygraph.Linear(input_dim,output_dim,act=’relu’)
2.3.4? 模型訓(xùn)練
模型構(gòu)建以后開始訓(xùn)練,訓(xùn)練參數(shù)可以優(yōu)化設(shè)置,通過不斷調(diào)參來觀察對訓(xùn)練效果的影響。定義優(yōu)化器,學(xué)習(xí)率,優(yōu)化的參數(shù)為vgg的全部參數(shù)。從訓(xùn)練數(shù)據(jù)讀取器中獲取數(shù)據(jù),其中data[0]是圖片數(shù)據(jù),data[1]是標(biāo)簽。圖片在計算機(jī)中以矩陣形式展現(xiàn),數(shù)據(jù)類型轉(zhuǎn)為浮點型。部分代碼如下:
optimizer = fluid.optimizer.AdamOptimizer(
learning_rate=train_parameters[‘learning_strategy’][‘lr’],parameter_list=vgg.parameters())
模型訓(xùn)練結(jié)束后,需要對模型的準(zhǔn)確率進(jìn)行評測和驗證。為了更準(zhǔn)確地了解模型,可以在實驗中打印出來每次的誤差,再取平均值。
3? 訓(xùn)練結(jié)果分析
準(zhǔn)確率是衡量圖像分類是否有效正確的重要指標(biāo),本實驗中,未佩戴口罩的圖片數(shù)量為2 288張,佩戴口罩的圖片數(shù)量為2 028,在保證正負(fù)樣本數(shù)量大致均勻的前提下,準(zhǔn)確率可以用來檢測口罩佩戴識別的模型效果。準(zhǔn)確率的計算公式為:準(zhǔn)確率=分類正確的樣本數(shù)量/樣本總數(shù)量。實驗繪制的損失值和準(zhǔn)確率圖像如圖5所示。
本實驗中經(jīng)過5次訓(xùn)練輪次,大約5~6分鐘,每次60輪左右的訓(xùn)練,隨著輪次的增加,準(zhǔn)確率逐步提高,并且基本都達(dá)到了平穩(wěn)狀態(tài)。平均準(zhǔn)確率為:0.970 982 13。
通過模型訓(xùn)練結(jié)果可以看出,使用PaddlePaddle構(gòu)建的口罩佩戴圖像識別模型,具有較高的準(zhǔn)確性,展示了圖片預(yù)測值和真實值較好的擬合。模型檢測的正確樣例圖片展示如圖6所示。
4? 結(jié)? 論
首先,針對采集的靜態(tài)人像口罩佩戴問題,將深度學(xué)習(xí)算法應(yīng)用于疫情防控的各個場景,基于PaddlePaddle框架和利用VGG算法,對醫(yī)用口罩佩戴進(jìn)行了識別檢測。通過圖像組成的數(shù)據(jù)集進(jìn)行訓(xùn)練和評估,實驗驗證了該模型的有效性和準(zhǔn)確度,有助于各應(yīng)用場景的疫情防控。
其次,圖像識別算法的研究具有很大的提升空間。實驗并未結(jié)合界面,實現(xiàn)類似攝像頭動態(tài)截取人像功能。下一步的研究目標(biāo),可以結(jié)合Python界面功能,繼續(xù)使用卷積神經(jīng)網(wǎng)絡(luò)VGG算法和理論知識,深入結(jié)合學(xué)校、公司、小區(qū)等具體作業(yè)場景進(jìn)行開發(fā)。
參考文獻(xiàn):
[1] GéRON A. Scikit-Learn與TensorFlow機(jī)器學(xué)習(xí)實用指南 [M].南京:東南大學(xué)出版社,2017.
[2] 邱錫鵬.神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí) [M].北京:機(jī)械工業(yè)出版社,2020.
[3] 婁茹珍,徐麗,蔣正乾,等.基于卷積神經(jīng)網(wǎng)絡(luò)的眼疾識別算法 [J].無線電工程,2021,51(11):1202-1207.
[4] 李亞可,玉振明.級聯(lián)的卷積神經(jīng)網(wǎng)絡(luò)人臉檢測方法 [J].計算機(jī)工程與應(yīng)用,2019,55(24):184-189.
[5] 魏明珠,鄭榮,楊競雄.基于深度學(xué)習(xí)的圖像檢索研究進(jìn)展 [J].情報科學(xué),2021,39(5):184-192.
[6] 鄭耀東,李旭峰.基于Paddlepaddle的新冠疫情期間文本情感分析模型 [J].信息與電腦(理論版),2021,33(7):189-191.
作者簡介:謝美英(1984—),女,漢族,湖南漣源人,講師,碩士研究生,研究方向:軟件技術(shù)、數(shù)據(jù)挖掘、人工智能。