AI戰「疫」:百度開源口罩人臉檢測及分類模型
開工上班,各地應該如何做好疫情防護?人工智能技術正在為抗擊新冠肺炎疫情的工作提供必要的幫助。
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 人次的體溫疑似異常案例,并由工作人員進行了人工復檢。