AI戰(zhàn)「疫」:百度開源口罩人臉檢測及分類模型
開工上班,各地應(yīng)該如何做好疫情防護?人工智能技術(shù)正在為抗擊新冠肺炎疫情的工作提供必要的幫助。
2019 新冠肺炎疫情爆發(fā),讓人們的出行發(fā)生了很大的變化——自 1 月 24 日武漢宣布封城之后,各省市陸續(xù)啟動重大突發(fā)公共衛(wèi)生事件一級響應(yīng)以控制人口流動。很多城市都已規(guī)定必須佩戴口罩、測量體溫才能搭乘公共交通。2 月 10 號返工日之前,上海、北京等重點城市也陸續(xù)放出新規(guī):出入機場、軌道交通、長途汽車站、醫(yī)療衛(wèi)生機構(gòu)、商場超市等公共場所,未佩戴口罩者將被勸阻。
正確佩戴口罩出門是為了防止疫情擴散,此舉得到了人們的廣泛支持。但也帶來了很多挑戰(zhàn)——高密度的人流讓基層排查人員面臨著人手不足,以及接觸疑似患者的風(fēng)險,只有適應(yīng)新情況的人工智能技術(shù)才能減輕他們的工作壓力。
2 月 13 日,百度飛槳宣布開源業(yè)界首個口罩人臉檢測及分類模型?;诖四P?,可以在公共場景檢測大量的人臉同時,把佩戴口罩和未佩戴口罩的人臉標(biāo)注出來,快速識別各類場景中不重視、不注意防護病毒,甚至存在僥幸心理的人,減少公眾場合下的安全隱患。同時構(gòu)建更多的防疫公益應(yīng)用。
大災(zāi)面前,這家科技公司可謂用行動回應(yīng)了民政部司長陳越良的呼吁:「一個有益的公益軟件比捐 10 個億還管用!」
業(yè)內(nèi)首度開源口罩人臉檢測及分類模型
口罩人臉檢測及分類模型,由兩個功能單元組成,可以分別完成口罩人臉的檢測和口罩人臉的分類。經(jīng)過測試,口罩人臉檢測部分在準(zhǔn)確度上達到了 98%,且口罩人臉分類部分準(zhǔn)確率同樣達到了 96.5%,性能上也是屬于業(yè)界領(lǐng)先水平。
同時,它做到了模型的極致輕量化,可在大部分端邊云設(shè)備上實現(xiàn)實時處理(海思 3559 芯片耗時僅需 17ms)。百度也將持續(xù)更新這一模型,不斷提升效果。
百度表示,如此高的準(zhǔn)確率是大量數(shù)據(jù)訓(xùn)練的結(jié)果,新模型采用了超過十萬張圖片的訓(xùn)練數(shù)據(jù),確保樣本量足夠且有效。另一方面,人臉檢測模型基于百度自研的冠軍算法,整個研發(fā)過程都是基于百度開源的飛槳深度學(xué)習(xí)平臺,能夠進行高效、便捷的模型開發(fā)、訓(xùn)練、部署。
我們可以先看看口罩人臉檢測及分類模型的效果,其中綠色邊界框為戴口罩人臉、紅色邊界框為不戴口罩人臉。百度團隊還提供了在線演示頁面,我們可以自己上傳圖片,并測試模型的效果:
在線演示地址:https://www.paddlepaddle.org.cn/hub/scene/maskdetect
預(yù)訓(xùn)練模型,立即部署
如果我們自己有需求且有數(shù)據(jù),那么使用深度學(xué)習(xí)框架從頭開始訓(xùn)練也是非常不錯的選擇。但是毫無疑問成本較高,而與此同時,百度將自己訓(xùn)練出來的口罩人臉檢測及分類模型,通過預(yù)訓(xùn)練模型的方式開放,可以極大的幫忙開發(fā)者節(jié)省資源,提升效率。
百度飛槳通過預(yù)訓(xùn)練模型管理工具 PaddleHub,將口罩人臉檢測及分類預(yù)訓(xùn)練模型開源出來。只要開發(fā)者有基本的 Python 編程能力,即可快速搭建本地或者 serving 服務(wù)調(diào)用模型。如果具有一定的移動端 APP 開發(fā)能力,也可以快速將模型部署到移動端上。
預(yù)訓(xùn)練模型介紹:https://www.paddlepaddle.org.cn/hubdetail?name=pyramidbox_lite_server_mask&en_category=ObjectDetection
預(yù)訓(xùn)練模型示例代碼:https://aistudio.baidu.com/aistudio/projectDetail/267322
頂尖算法與數(shù)據(jù)
這一方案中,用于識別人臉的模型基于 2018 年百度在國際頂級計算機視覺會議 ECCV 2018 的論文 PyramidBox 而研發(fā),基于自研的飛槳開源深度學(xué)習(xí)平臺進行訓(xùn)練,并通過 paddle-slim 等模型小型化技術(shù)使得算法能夠高效運行在一些算力有限的設(shè)備上。
算法代碼地址:https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/face_detection
口罩人臉檢測及分類模型,可在公共場所高密度人流的環(huán)境中,對佩戴口罩和未佩戴口罩的人臉進行快速識別標(biāo)注?;诖祟A(yù)訓(xùn)練模型,開發(fā)者僅需使用少量代碼,便可快速完成自有場景模型開發(fā)。
該模型可廣泛適用于海關(guān)、火車站、園區(qū)小區(qū)入口等不同類型的區(qū)域,同時提供服務(wù)器和移動端版本,便于開發(fā)商集成到不同類型硬件平臺上滿足不同場景要求。非常適合于重點區(qū)域的布控,以及未佩戴口罩人員的及時預(yù)警。
如果口罩人臉檢測及分類模型獲得廣泛應(yīng)用,對于檢測結(jié)果的統(tǒng)計數(shù)據(jù)還可以為更加深入的研究提供基礎(chǔ)。百度表示,檢測結(jié)果可以可以在疫情分析、智慧城市、智慧社區(qū)等場景發(fā)揮較大作用。
在這段時間里,很多科技公司陸續(xù)推出了有關(guān)體溫檢測、人臉識別等工作的 AI 算法。而百度提出的方法,是首個開源的口罩人臉檢測及分類模型。從飛槳深度學(xué)習(xí)技術(shù)平臺,到高效精確的人臉檢測及識別算法,再到硬件部署方案等,百度提出的方法可以與和其他工具實現(xiàn)完整、高效的整體協(xié)同。
實踐怎么用
整個預(yù)訓(xùn)練模型只要求安裝 PaddlePaddle 與 PaddleHub,只需要了解基礎(chǔ) Python 就能跑得動。如下短視頻展示了我們測試戴口罩人臉檢測模型:
如上展示了最簡單的本地推斷,只要五行代碼,我們就可以在自己的計算機處理口罩人臉檢測。為了展示效果,我們設(shè)置了每張圖像停留 2 秒。實際在我們采用 CPU 的情況下,檢測基本是實時的,推斷速度非???。以下為調(diào)用預(yù)訓(xùn)練模型的核心代碼,其中我們在當(dāng)前文件夾下放了一張測試圖像:
- import paddlehub as hub
- # 加載模型,本例為服務(wù)器端模型pyramidbox_lite_server_mask
- # 移動端模型參數(shù)可以換成pyramidbox_lite_mobile_mask
- module = hub.Module(name="pyramidbox_lite_server_mask")
- # 設(shè)置輸入數(shù)據(jù)
- input_dict = {"image": ["test.jpg"]}
- for data in module.face_detection(data=input_dict):
- print(data)
百度提供了口罩人臉檢測及分類的示例代碼,通過 Notebook 文件,我們能更形象地了解模型使用的完整過程:
地址:https://aistudio.baidu.com/aistudio/projectDetail/267322
更重要的是,作為一項完善的開源工作,除了本地推斷以外,其還需要考慮如何將模型部署到服務(wù)器或移動設(shè)備中。若能快速部署到各平臺,那么才真正意味著它可以作為「戰(zhàn)疫」的基礎(chǔ)工具。
目前,百度提供了兩個預(yù)訓(xùn)練模型,即服務(wù)器端口罩人臉檢測及分類模型「pyramidbox_lite_server_mask」、以及移動端口罩人臉檢測及分類模型「pyramidbox_lite_mobile_mask」,這兩者能滿足各種下游任務(wù)。
1. 一步部署服務(wù)器
借助 PaddleHub,服務(wù)器端的部署也非常簡單,直接用一條命令行在服務(wù)器啟動口罩人臉檢測與分類模型就行了:
- hub serving start -m pyramidbox_lite_server_mask -p 8866
是的,在服務(wù)器端這就完全沒問題了。相比手動配置各種參數(shù)或者調(diào)用各種框架,PaddleHub 部署服務(wù)器實在是太好用了。
只要在服務(wù)器端完成部署,剩下在客戶端調(diào)用就不會有多大問題了。如下百度展示了調(diào)用服務(wù)器做推斷的示例:制定要預(yù)測的圖像列表、發(fā)出推斷請求、返回并保存推斷結(jié)果。
- # 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并發(fā)送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文件夾,打印模型輸出結(jié)果
- 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 基礎(chǔ),在本地預(yù)測、以及部署到服務(wù)器端都是沒問題的,飛槳的 PaddleHub 已經(jīng)幫我們做好了各種處理過程。
2. 部署到移動端
Paddle Lite 是飛槳的端側(cè)推理引擎,專門面向移動端的模型推理部署。如果我們需要把口罩人臉檢測及分類模型嵌入到手機等移動設(shè)備,那么 Paddle Lite 這樣的端側(cè)推理引擎能幫我們節(jié)省很多工作。
在移動端部署口罩人臉檢測及分類模型,也只需要三步:①下載預(yù)測庫,Paddle Lite 會提供編譯好的預(yù)測庫;②優(yōu)化模型,使用 model_optimize_tool 工具實現(xiàn)模型優(yōu)化;③通過預(yù)測 API 實現(xiàn)調(diào)用。
Paddle Lite 介紹:https://github.com/PaddlePaddle/Paddle-Lite/
其中比較重要的是移動端 API 調(diào)用方法,具體實現(xiàn)請參考下文給出的 Paddle Lite 的示例地址。
- // 讀取圖片
- cv::Mat img = imread(img_path, cv::IMREAD_COLOR);
- // 加載人臉檢測或者口罩佩戴判別模型
- MobileConfig config;
- config.set_model_dir(model_dir);
- PaddlePredictor* predictor =
- CreatePaddlePredictor<MobileConfig>(config);
- // 設(shè)置輸入
- Tensor* input_tensor = predictor->GetInput(0);
- input_tensor->Resize({1, 3, img.rows,img.cols});
- set_input(img, input_tensor); //調(diào)用自定義函數(shù)
- // 執(zhí)行
- predictor->Run();
- // 輸出結(jié)果
- Tensor* output_tensor = predictor->GetOutput(0);
- show_output(img, output_tensor); //調(diào)用自定義函數(shù)
人臉識別和佩戴口罩判斷在移動端部署的示例地址為:https://github.com/PaddlePaddle/Paddle-Lite/tree/develop/lite/demo/cxx
助力開發(fā)者,共同抗擊疫情
口罩人臉檢測及分類模型項目的研發(fā)人員向機器之心介紹道,百度在春節(jié)期間就已頻繁接觸到來自社區(qū)和合作伙伴反饋的技術(shù)需求,并快速啟動了對接和應(yīng)用開發(fā)的行動。對此,百度專門成立了針對新冠疫情的技術(shù)研發(fā)團隊,經(jīng)過論證,開發(fā)者們一致認(rèn)為最終完成的產(chǎn)品應(yīng)通過開源的方式來賦能更多開發(fā)者。
百度很快組織了多部門組成的產(chǎn)研團隊,在多個部門的配合下,工程師們快速進入了方案實施落地的階段。
由于很多城市對于交通進行了管制,在項目的開發(fā)過程中,大多數(shù)人都是以遠(yuǎn)程開發(fā)的形式參與的。百度研發(fā)人員表示,得益于百度內(nèi)部高效的協(xié)同辦公、開發(fā)系統(tǒng),整體研發(fā)進度可以保持快速迭代。
此前,僅有少數(shù)廠商能夠提供口罩人臉檢測模型的可落地方案,這些技術(shù)在密集人流下的識別效果不盡相同。而由于缺乏數(shù)據(jù)集和模型開發(fā)經(jīng)驗,很多解決方案在面臨園區(qū)、關(guān)口等細(xì)分場景時顯得無從下手。
口罩人臉檢測及分類模型可以成為很多應(yīng)用的基礎(chǔ),除了篩查公共場所佩戴情況之外,檢測口罩佩戴是否正確、監(jiān)測體溫的應(yīng)用都可以通過借助這項能力更快實現(xiàn)落地。此次百度除了開源模型以外,還提供了二次開發(fā)工具組件,我們可以開發(fā)更適合自己的模型。
在支持的硬件方面,該模型可以高效運行在百度官方和經(jīng)過第三方認(rèn)證的硬件平臺上。此外,這一模型也支持目前市面上多類主流硬件平臺。
除了剛剛開源的算法,百度的 AI 技術(shù)已在對抗新冠疫情的很多領(lǐng)域發(fā)揮了作用。這家公司與政府部門積極合作,推出了北京官方新型肺炎醫(yī)生咨詢平臺,上線了「發(fā)熱門診地圖」,開通疫情辟謠頻道,并將智能外呼平臺開放給各地一線疫情防控機構(gòu),為基層提供 AI 技術(shù)的支持。
春節(jié)期間,百度發(fā)布了完整的百度 AI 測溫系統(tǒng),并迅速將其投入到新型冠狀病毒疫情的防控中。在北京清河火車站,百度 AI 測溫系統(tǒng)自 1 月底部署以來,截止 2 月 8 日已完成超過 3.2 萬人次的快速體溫檢測,累計發(fā)現(xiàn)了逾 190 人次的體溫疑似異常案例,并由工作人員進行了人工復(fù)檢。