本網站使用Cookies 以優化閣下的用戶體驗。繼續瀏覽網頁,以示閣下同意本站使用Cookies。詳情請參閱Cookie政策私隱政策

確定

網誌

中信國際電訊CPC > 網誌
2020-05-29

如何實現AI人臉識別及口罩佩戴檢測功能?

By 中企通信高級AI應用開發工程師 曾曉斌先生

我們依然採用以上三個階段來逐步闡述實現細節。


第一階段:資料收集



事實上,收集的原始口罩資料是包含多餘的額外背景資訊。為了僅保留面部區域的照片,我們用到了MTCNN演算法進行人臉檢測。MTCNN演算法不僅可以判斷當前照片是否有人,而且若有人出現,能相應地檢測出人臉的座標位置。







通過MTCNN進行人臉檢測,我們可以對所有的原始資料進行處理,僅保留臉部資訊,最後還需要對圖片的尺寸統一縮放到112×112。MS-Celeb-1M的圖片資料也需要進行同樣的檢測、截取、縮放操作。



我們將口罩資料按如下劃分為訓練集(訓練模型參數)和驗證集(驗證模型精度)

訓練集:1,300張口罩照片、1,300張無口罩照片

驗證集:300張口罩照片、300張無口罩照片

人臉識別資料的訓練集使用了MS-Celeb-1M,驗證集則選用了LFW (Labeled
Faces in the Wild)
,後者是業界普遍用於評判一個識別模型精度的基準圖像庫。


第二階段:訓練

我們選用了MobileNet V2作為口罩判斷模型的網絡,MobileNet V2是一個羽量級的卷積神經網絡,該網絡的設計原則是預測精度有略微的減少的同時,顯著地減少模型參數和數學計算量,最終使模型的運算性能達到較佳的狀態。MobileNet V2的網絡架構使用到的兩種block設計,另外,我們把該網絡的資料登錄層的尺寸設定為112×112(原網絡的輸入為224×224),這也是在資料處理時需要把圖片尺寸統一為112×112的原因。



我們使用了MrCPlusPlus提供的預訓練模型作為口罩檢測模型的初始化模型,將原網絡的輸出層修改為2(因為只有戴口罩和沒戴口罩兩個類別),然後再進行微調訓練。訓練參數設置為batch

size=32(每次取32張照片同時進行訓練),使用ADAM優化器用作網絡參數的更新,初始學習率設置為0.1,損失函數我們選用了Softmax
Loss並加入了權重L2正則化。參數更新反覆運算了40次後,模型的驗證集精度已經達到了98%,並趨於穩定。


在專案mask_wear_detection路徑下,包含以下檔結構:




./data/主要存放口罩的圖片資料

./output/存放預訓練的模型檔以及訓練後得到的模型檔

至於目錄下的Python腳本,則對應以下功能:

data_process.py:將原有的jpg檔轉換成Tensorflow的特定檔案格式tfrecords。

train_nets_transfer_learning.py:訓練口罩佩戴檢測模型。

eval_ckpt_file.py:評估模型的識別精度

freeze_graph.py:凍結模型。將訓練所得的.ckpt格式的模型轉換成最終部署的.pb格式。

inference_predict_pb.py:對單張圖片進行推理運算。

common.py:包含一些模型訓練的設置。

MobileFaceNet.py:使用的MobileNet V2神經網絡結構。


首先需要進行檔案格式轉換,打開data_process.py可以看到:




我們分別對使用預設定的clear_train.txt和clear_val.txt生成了沒戴口罩的訓練集和驗證集,mask_train.txt和mask_val.txt生成了戴口罩的訓練集和驗證集。


打開train_nets_transfer_learning.py,我們需要在腳本的開頭導入以下開發包



我們設置了如下訓練超參數


優化器默認選擇了Adam


將data_process.py中已生成的訓練集和驗證集的tfrecords檔路徑設置為train_file_path和validate_file_path,然後使用Tensorflow的iterator函數每次獲取訓練/驗證資料。



我們對網絡的卷積權重參數進行了L2正則化處理,加上頂層的Softmax Loss,構成最終的總損失total_loss



因為我們此次訓練使用了遷移學習,我們需要導入設定的pretrained_model, 並且載入除了頂層以後的所有網路層參數作為初始化參數。


通過執行Tensorflow的會話session,我們可以針對images_train(訓練集圖片資料)和labels_train(訓練集標籤)進行參數訓練了。通過觀察total_loss_train和acc_train獲知當前訓練集的損失值(越低越好)和準確率(越高越好)。



我們設定了每訓練次數達到10次(validate_interval的值),就進行驗證集損失(inference_loss)和準確率(acc_val)計算,即時獲知當前模型的泛化能力。



若當前的驗證集準確率有提升,則以ckpt的格式保存當前的模型。



我們選用了ResNet50作為人臉識別模型的網絡,

ResNet50歸屬於Residual
Network
系列。 Residual Network的設計思路是首次提出了直連接,即底層的特徵與高層的特徵進行迭加融合,這種設計解決了訓練過程中的梯度消失和梯度爆炸問題,使底層的網絡參數也能得到有效的訓練更新。同樣地,網絡的資料登錄層也設定為112×112。

我們參考了deepinsight的ResNet50模型,並選用了該模型作為預訓練模型,然後進行微調訓練。訓練參數設置為batch

size=8,epoch=10(訓練集的資料訓練10次),使用ADAM優化器用作網絡參數的更新,學習率按下表設置:

epoch

1

2

3

4

5

6

7

8

9

10

學習率

0.1

0.01

0.01

0.01

0.001

0.001

0.0001

0.0001

0.00001

0.00001

損失函數我們選用了Softmax Loss並加入了權重L2正則化。最終訓練得到的ResNet50在LFW的準確率能到達99.8%。

在專案InsightFace_Tensorflow路徑下,包含以下檔結構:

./data/存放了MS-Celeb-1M資料(train.rec和train.idx)、LFW數據(lfw.bin)以及tfrecords資料

./output/存放預訓練的模型檔以及訓練後得到的模型檔

至於目錄下的Python腳本,則對應以下功能:

data_process.py:將train.rec和train.idx轉換成Tensorflow的特定檔案格式tfrecords。

train_nets.py:訓練人臉識別模型。

eval_ckpt_file.py:評估模型在LFW的識別精度

freeze_graph.py:凍結模型。將訓練所得的.ckpt格式的模型轉換成最終部署的.pb格式。

inference_extract_pb.py:對單張圖片進行推理運算。

common.py:包含一些模型訓練的設置。

ResNet50.py:使用的ResNet50神經網絡結構。

首先需要進行檔案格式轉換,打開data_process.py可以看到:




我們把train.rec和train.idx檔路徑賦值給idx_path和bin_path,可以生成Tensorflow指定的檔案格式tfrecords,該生成的檔作為模型的訓練集檔。

打開train_nets.py,我們需要在腳本的開頭導入以下開發包


我們設置了如下訓練超參數

優化器默認選擇了Adam

將data_process.py中已生成的訓練集tfrecords檔路徑設置為tfrecords_file_path,然後使用Tensorflow的iterator函數每次獲取訓練資料。

损失函数我们选用了Softmax Loss



我們此次訓練使用了遷移學習,導入設定的pretrained_model, 然後載入除了頂層以後的所有網路層參數作為初始化參數。此處,我們需要預先將deepinsight [6]的提供的pb檔裡的網路層參數另存為npy檔。



通過執行Tensorflow的會話session,我們可以針對images_train(訓練集圖片資料)和labels_train(訓練集標籤)進行參數訓練了。通過觀察total_loss_train和acc_train獲知當前訓練集的損失值(越低越好)和準確率(越高越好)。

我們設定了每訓練次數達到10次(validate_interval的值),就評估模型在LFW的準確率,我們使用了verification.py的evaluate函數進行準確率評估。



我們主要關注np.mean(accuracy)這項指標,假如該值有所提升,則以ckpt的格式保存當前的模型。




值得注意的是,我們本次選用的MTCNN模型是源自OAID提供的預訓練後的人臉檢測模型。


第三階段:部署

我們選用了FLIR C3作為本專案的圖像採集攝像機,該款攝像頭能通過熱成像原理測量當前畫面目標的表面溫度。FLIR C3 SDK的開發語言是C#,因此我們選用C#作為軟體發展語言,並將AI功能編譯成dll的形式提供給軟體載入並調用。

在上一階段,我們已經訓練得到了口罩判斷模型、人臉識別模型以及現有的人臉檢測模型。我們使用Neargye編譯的Tensorflow C庫對以上三個模型進行載入、推理等操作運算。最後,我們把這些C++實現的AI功能函數編譯成了dll(因為C#調用C++源碼,需要將後者編譯成dll)。軟體最終運行的系統平臺是Windows
10。



返回閱讀更多




引用

[1] Guo, Yandong, et al. "MS-Celeb-1M: A Dataset and Benchmark for Large-Scale Face Recognition." european conference on computer vision (2016): 87-102.

[2] G. B. Huang, M. Ramesh, T. Berg, and E. Learned-Miller. Labeled faces in the wild: A database for studying face recognition in unconstrained environments. Technical report, 2007.

[3] Sandler, Mark, et al. "MobileNetV2: Inverted Residuals and Linear Bottlenecks." computer vision and pattern recognition (2018): 4510-4520.

[4] Open source code. Available from https://github.com/MrCPlusPlus/MobileFaceNet_Tensorflow_Pretrain.

[5] He, Kaiming, et al. "Deep Residual Learning for Image Recognition." computer vision and pattern recognition (2016): 770-778.

[6] Open source code. Available from https://github.com/deepinsight/insightface.

[7] Open source code. Available from https://github.com/OAID/FaceDetection.

[8] Open source code. Available from https://github.com/Neargye/hello_tf_c_api.

熱門文章

遙距工作新常態:網絡安全威脅

商業活動新常態:線上模式嶄露頭角

雲端轉移之旅 – 7個成功法則

SD-WAN的機遇與挑戰

醫藥無小事 現代製藥如何重塑網絡「現代化」

分享這個帖子
選擇標籤

所有 人工智能 大數據 雲端 連接 數據中心 資料私隱 教育科技 大灣區 資訊安全 創新 一帶一路 SD-WAN 數碼轉型 專題 商業視野
相關產品

如果您想了解更多有關以上的資訊,歡迎提供您的聯絡資料,我們會盡快與您聯絡。

聯絡我們

產品與服務
專用網絡 信息安全管理 雲端運算方案 雲數據中心 互聯網服務 管理平台 歐洲及CIS方案
解決方案
建築、工程及建造 汽車 銀行及金融 電子商貿 物流及運輸 製造 專業服務 零售 貿易 其他
客戶服務
客戶登錄 客戶服務熱線 服務中心
資源中心
產品單頁 最新優惠 視頻 白皮書 成功案例
關於我們
我們公司 合作夥伴 新聞中心 認証及獎項 成功案例 視頻 聯絡我們 職位招聘 網誌 COVID-19
聯絡我們

一般查詢
886 2 6600 2588

銷售熱線 886 2 6600 2588

聯絡我們

網站地圖 | 免責聲明 | 防止濫用網絡政策 | 私隱政策 | Cookie 政策

中信集團品牌認證 | 中信雲賦能
Copyright © 中信國際電訊(信息技術)有限公司 CITIC Telecom International CPC Limited

關注我們

歡迎來到中信國際電訊CPC

你即將前往我們的網站

請選擇地點:

南非

南美

美國及加拿大

中企通信

亞太區
歐洲及CIS
南非
南美
美國及加拿大
需要幫忙?聯絡CPC聊天機械人
瀏覽器支援:IE11、Firefox、Chrome及Safari 的最新版本
條款及細則
歡迎來到中信國際電訊(信息技術)有限公司。閣下與CPC聊天機器人的對話内容可能會被記錄,以作培訓、質量監控和糾紛處理之用。如閣下點擊「繼續」並使用CPC聊天機器人,即表示閣下接受並同意受本公司之私隱政策約束,並同意本站使用Cookies。詳情請參閱Cookie政策私隱政策
繼續