AI戰「疫」:百度開源業界首個口罩人臉檢測及分類模型

  • 2020 年 2 月 24 日
  • 筆記

機器之心原創

參與:澤南、思

開工上班,各地應該如何做好疫情防護?人工智慧技術正在為抗擊新冠肺炎疫情的工作提供必要的幫助。

2019 新冠肺炎疫情爆發,讓人們的出行發生了很大的變化——自 1 月 24 日武漢宣布封城之後,各省市陸續啟動重大突發公共衛生事件一級響應以控制人口流動。很多城市都已規定必須佩戴口罩、測量體溫才能搭乘公共交通。2 月 10 號返工日之前,上海、北京等重點城市也陸續放出新規:出入機場、軌道交通、長途汽車站、醫療衛生機構、商場超市等公共場所,未佩戴口罩者將被勸阻。

正確佩戴口罩出門是為了防止疫情擴散,此舉得到了人們的廣泛支援。但也帶來了很多挑戰——高密度的人流讓基層排查人員面臨著人手不足,以及接觸疑似患者的風險,只有適應新情況的人工智慧技術才能減輕他們的工作壓力。

2 月 13 日,百度飛槳宣布開源業界首個口罩人臉檢測及分類模型。基於此模型,可以在公共場景檢測大量的人臉同時,把佩戴口罩和未佩戴口罩的人臉標註出來,快速識別各類場景中不重視、不注意防護病毒,甚至存在僥倖心理的人,減少公眾場合下的安全隱患。同時構建更多的防疫公益應用。

大災面前,這家科技公司可謂用行動回應了民政部司長陳越良的呼籲:「一個有益的公益軟體比捐 10 個億還管用!」

業內首度開源口罩人臉檢測及分類模型

口罩人臉檢測及分類模型,由兩個功能單元組成,可以分別完成口罩人臉的檢測和口罩人臉的分類。經過測試,口罩人臉檢測部分在準確度上達到了 98%,且口罩人臉分類部分準確率同樣達到了 96.5%,性能上也是屬於業界領先水平。

同時,它做到了模型的極致輕量化,可在大部分端邊雲設備上實現實時處理(海思 3559 晶片耗時僅需 17ms)。百度也將持續更新這一模型,不斷提升效果。

百度表示,如此高的準確率是大量數據訓練的結果,新模型採用了超過十萬張圖片的訓練數據,確保樣本量足夠且有效。另一方面,人臉檢測模型基於百度自研的冠軍演算法,整個研發過程都是基於百度開源的飛槳深度學習平台,能夠進行高效、便捷的模型開發、訓練、部署。

我們可以先看看口罩人臉檢測及分類模型的效果,其中綠色邊界框為戴口罩人臉、紅色邊界框為不戴口罩人臉。百度團隊還提供了在線演示頁面,我們可以自己上傳圖片,並測試模型的效果:

在線演示地址:https://www.paddlepaddle.org.cn/hub/scene/maskdetect

預訓練模型,立即部署

如果我們自己有需求且有數據,那麼使用深度學習框架從頭開始訓練也是非常不錯的選擇。但是毫無疑問成本較高,而與此同時,百度將自己訓練出來的口罩人臉檢測及分類模型,通過預訓練模型的方式開放,可以極大的幫忙開發者節省資源,提升效率。

百度飛槳通過預訓練模型管理工具 PaddleHub,將口罩人臉檢測及分類預訓練模型開源出來。只要開發者有基本的 Python 編程能力,即可快速搭建本地或者 serving 服務調用模型。如果具有一定的移動端 APP 開發能力,也可以快速將模型部署到移動端上。

  • 預訓練模型介紹:https://www.paddlepaddle.org.cn/hubdetail?name=pyramidbox_lite_server_mask&en_category=ObjectDetection
  • 預訓練模型示例程式碼:https://aistudio.baidu.com/aistudio/projectDetail/267322

頂尖演算法與數據

這一方案中,用於識別人臉的模型基於 2018 年百度在國際頂級電腦視覺會議 ECCV 2018 的論文 PyramidBox 而研發,基於自研的飛槳開源深度學習平台進行訓練,並通過 paddle-slim 等模型小型化技術使得演算法能夠高效運行在一些算力有限的設備上。

  • 演算法程式碼地址:https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/face_detection

口罩人臉檢測及分類模型,可在公共場所高密度人流的環境中,對佩戴口罩和未佩戴口罩的人臉進行快速識別標註。基於此預訓練模型,開發者僅需使用少量程式碼,便可快速完成自有場景模型開發。

該模型可廣泛適用于海關、火車站、園區小區入口等不同類型的區域,同時提供伺服器和移動端版本,便於開發商集成到不同類型硬體平台上滿足不同場景要求。非常適合於重點區域的布控,以及未佩戴口罩人員的及時預警。

如果口罩人臉檢測及分類模型獲得廣泛應用,對於檢測結果的統計數據還可以為更加深入的研究提供基礎。百度表示,檢測結果可以可以在疫情分析、智慧城市、智慧社區等場景發揮較大作用。

在這段時間裡,很多科技公司陸續推出了有關體溫檢測、人臉識別等工作的 AI 演算法。而百度提出的方法,是首個開源的口罩人臉檢測及分類模型。從飛槳深度學習技術平台,到高效精確的人臉檢測及識別演算法,再到硬體部署方案等,百度提出的方法可以與和其他工具實現完整、高效的整體協同。

實踐怎麼用

整個預訓練模型只要求安裝 PaddlePaddle 與 PaddleHub,只需要了解基礎 Python 就能跑得動。如下短影片展示了我們測試戴口罩人臉檢測模型:

如上展示了最簡單的本地推斷,只要五行程式碼,我們就可以在自己的電腦處理口罩人臉檢測。為了展示效果,我們設置了每張影像停留 2 秒。實際在我們採用 CPU 的情況下,檢測基本是實時的,推斷速度非常快。以下為調用預訓練模型的核心程式碼,其中我們在當前文件夾下放了一張測試影像:

import paddlehub as hub    # 載入模型,本例為伺服器端模型pyramidbox_lite_server_mask  # 移動端模型參數可以換成pyramidbox_lite_mobile_mask  module = hub.Module(name="pyramidbox_lite_server_mask")    # 設置輸入數據  input_dict = {"image": ["test.jpg"]}  for data in module.face_detection(data=input_dict):      print(data)  

百度提供了口罩人臉檢測及分類的示例程式碼,通過 Notebook 文件,我們能更形象地了解模型使用的完整過程:

地址:https://aistudio.baidu.com/aistudio/projectDetail/267322

更重要的是,作為一項完善的開源工作,除了本地推斷以外,其還需要考慮如何將模型部署到伺服器或移動設備中。若能快速部署到各平台,那麼才真正意味著它可以作為「戰疫」的基礎工具。

目前,百度提供了兩個預訓練模型,即伺服器埠罩人臉檢測及分類模型「pyramidbox_lite_server_mask」、以及移動埠罩人臉檢測及分類模型「pyramidbox_lite_mobile_mask」,這兩者能滿足各種下游任務。

1. 一步部署伺服器

藉助 PaddleHub,伺服器端的部署也非常簡單,直接用一條命令行在伺服器啟動口罩人臉檢測與分類模型就行了:

hub serving start -m pyramidbox_lite_server_mask -p 8866  

是的,在伺服器端這就完全沒問題了。相比手動配置各種參數或者調用各種框架,PaddleHub 部署伺服器實在是太好用了。

只要在伺服器端完成部署,剩下在客戶端調用就不會有多大問題了。如下百度展示了調用伺服器做推斷的示例:制定要預測的影像列表、發出推斷請求、返回並保存推斷結果。

# coding: utf8  import requests  import json  import base64  import os    # 指定要檢測的圖片並生成列表[("image", img_1), ("image", img_2), ... ]  file_list = ["test.jpg"]  files = [("image", (open(item, "rb"))) for item in file_list]    # 指定檢測方法為pyramidbox_lite_server_mask並發送post請求  url = "http://127.0.0.1:8866/predict/image/pyramidbox_lite_server_mask"  r = requests.post(url=url, files=files)    results = eval(r.json()["results"])    # 保存檢測生成的圖片到output文件夾,列印模型輸出結果  if not os.path.exists("output"):      os.mkdir("output")  for item in results:      with open(os.path.join("output", item["path"]), "wb") as fp:          fp.write(base64.b64decode(item["base64"].split(',')[-1]))          item.pop("base64")  print(json.dumps(results, indent=4, ensure_ascii=False))  

相信只要有一些 Python 基礎,在本地預測、以及部署到伺服器端都是沒問題的,飛槳的 PaddleHub 已經幫我們做好了各種處理過程。

2. 部署到移動端

Paddle Lite 是飛槳的端側推理引擎,專門面向移動端的模型推理部署。如果我們需要把口罩人臉檢測及分類模型嵌入到手機等移動設備,那麼 Paddle Lite 這樣的端側推理引擎能幫我們節省很多工作。

在移動端部署口罩人臉檢測及分類模型,也只需要三步:①下載預測庫,Paddle Lite 會提供編譯好的預測庫;②優化模型,使用 model_optimize_tool 工具實現模型優化;③通過預測 API 實現調用。

Paddle Lite 介紹:https://github.com/PaddlePaddle/Paddle-Lite/

其中比較重要的是移動端 API 調用方法,具體實現請參考下文給出的 Paddle Lite 的示例地址。

// 讀取圖片  cv::Mat img = imread(img_path, cv::IMREAD_COLOR);  // 載入人臉檢測或者口罩佩戴判別模型  MobileConfig config;  config.set_model_dir(model_dir);  PaddlePredictor* predictor =        CreatePaddlePredictor<MobileConfig>(config);  // 設置輸入  Tensor* input_tensor = predictor->GetInput(0);  input_tensor->Resize({1, 3, img.rows,img.cols});  set_input(img, input_tensor); //調用自定義函數  // 執行  predictor->Run();  // 輸出結果  Tensor* output_tensor = predictor->GetOutput(0);  show_output(img, output_tensor); //調用自定義函數  

人臉識別和佩戴口罩判斷在移動端部署的示例地址為:https://github.com/PaddlePaddle/Paddle-Lite/tree/develop/lite/demo/cxx

助力開發者,共同抗擊疫情

口罩人臉檢測及分類模型項目的研發人員向機器之心介紹道,百度在春節期間就已頻繁接觸到來自社區和合作夥伴回饋的技術需求,並快速啟動了對接和應用開發的行動。對此,百度專門成立了針對新冠疫情的技術研發團隊,經過論證,開發者們一致認為最終完成的產品應通過開源的方式來賦能更多開發者。

百度很快組織了多部門組成的產研團隊,在多個部門的配合下,工程師們快速進入了方案實施落地的階段。

由於很多城市對於交通進行了管制,在項目的開發過程中,大多數人都是以遠程開發的形式參與的。百度研發人員表示,得益於百度內部高效的協同辦公、開發系統,整體研發進度可以保持快速迭代。

此前,僅有少數廠商能夠提供口罩人臉檢測模型的可落地方案,這些技術在密集人流下的識別效果不盡相同。而由於缺乏數據集和模型開發經驗,很多解決方案在面臨園區、關口等細分場景時顯得無從下手。

口罩人臉檢測及分類模型可以成為很多應用的基礎,除了篩查公共場所佩戴情況之外,檢測口罩佩戴是否正確、監測體溫的應用都可以通過藉助這項能力更快實現落地。此次百度除了開源模型以外,還提供了二次開發工具組件,我們可以開發更適合自己的模型。

在支援的硬體方面,該模型可以高效運行在百度官方和經過第三方認證的硬體平台上。此外,這一模型也支援目前市面上多類主流硬體平台。

除了剛剛開源的演算法,百度的 AI 技術已在對抗新冠疫情的很多領域發揮了作用。這家公司與政府部門積極合作,推出了北京官方新型肺炎醫生諮詢平台,上線了「發熱門診地圖」,開通疫情闢謠頻道,並將智慧外呼平台開放給各地一線疫情防控機構,為基層提供 AI 技術的支援。

春節期間,百度發布了完整的百度 AI 測溫系統,並迅速將其投入到新型冠狀病毒疫情的防控中。在北京清河火車站,百度 AI 測溫系統自 1 月底部署以來,截止 2 月 8 日已完成超過 3.2 萬人次的快速體溫檢測,累計發現了逾 190 人次的體溫疑似異常案例,並由工作人員進行了人工複檢。

百度研發人員告訴我們,從目前接到的需求來看,在防治疫情的工作中,電腦視覺、語音、自然語言處理三大重點領域都有正在開展的應用。其中,自動識別 CT 結果用於輔助診斷等工具已經在確診病例的工作中起到了重要的作用。

開源的方式,可以讓整個社區以最快的速度展開合作。希望通過開發者們的努力,這項新技術可以影響到更多的人和企業,為抗擊新冠疫情做出更多貢獻。

我們正在尋找AI戰疫中優秀的人工智慧公司和應用案例,歡迎提供報道線索,請聯繫[email protected]

本文為機器之心原創,轉載請聯繫本公眾號獲得授權。

✄————————————————

加入機器之心(全職記者 / 實習生):[email protected]

投稿或尋求報道:[email protected]

廣告 & 商務合作:[email protected]