■ 文/ 公安部第一研究所 孟博
關(guān)鍵字:邊緣計(jì)算 模型 機(jī)器人
人工智能技術(shù)在安防領(lǐng)域的應(yīng)用越來越廣泛。隨著視頻結(jié)構(gòu)化分析、語音識(shí)別和智能翻譯等人工智能技術(shù)的引入,智慧安防已經(jīng)能夠精確管控人、車、物,將傳統(tǒng)安防的事后處理變?yōu)橹腔郯卜赖膶?shí)時(shí)與主動(dòng)預(yù)警,并實(shí)現(xiàn)應(yīng)急聯(lián)動(dòng)處置。2023年1月,工信部等十七部委聯(lián)合印發(fā)了《“機(jī)器人+”應(yīng)用行動(dòng)實(shí)施方案》,其中明確提出推動(dòng)機(jī)器人在安保巡邏、緝私安檢、反恐防暴、勘查取證、交通邊防、治安管控、特戰(zhàn)處置、服務(wù)管理等社會(huì)安全場景的應(yīng)用。
邊緣計(jì)算(Edge Computing)是相對云計(jì)算(Cloud Computing)而言的一種新興計(jì)算模式[1]。隨著物聯(lián)網(wǎng)特別是智能物聯(lián)網(wǎng)(AIoT)的發(fā)展,各種新型智能設(shè)備不斷涌現(xiàn),產(chǎn)生了海量的數(shù)據(jù)。全球安防攝像頭每年產(chǎn)生超過10 的17 次方量級的圖片和視頻流。如果把這些視頻數(shù)據(jù)都傳輸?shù)皆浦行纳线M(jìn)行處理,將會(huì)消耗大量的網(wǎng)絡(luò)帶寬資源和計(jì)算資源。相比之下,邊緣計(jì)算可以在前端對這些數(shù)據(jù)進(jìn)行就地處理,大大降低了數(shù)據(jù)傳輸量,減輕了云中心的計(jì)算壓力,提高了計(jì)算效率。
邊緣計(jì)算在智慧警務(wù)場景下有較廣泛的應(yīng)用價(jià)值和市場。一般來說,派出所或警務(wù)站點(diǎn)分布分散,如果將視頻數(shù)據(jù)傳輸至中心節(jié)點(diǎn)統(tǒng)一處理,不但對網(wǎng)絡(luò)帶寬需求大,而且實(shí)時(shí)性較差。同時(shí),警務(wù)場景的智能分析需求也是相對變化的,需要靈活配置分析的視頻源,算法和業(yè)務(wù)邏輯。通過基于邊緣計(jì)算的視頻結(jié)構(gòu)化技術(shù),可以輕松應(yīng)對這些變化的需求,同時(shí)將監(jiān)控視頻中有價(jià)值的信息提取出來,上報(bào)到上一級部門做進(jìn)一步的綜合應(yīng)用。
邊緣計(jì)算也是AI 國產(chǎn)化較好突破的一個(gè)重要方向,相對通用GPU 或AI 推理芯片,邊側(cè)AI 芯片的只負(fù)責(zé)推理,算力較小,芯片的研發(fā)難度較低;此外,邊緣計(jì)算在AI 算法落地上較容易,能做到場景、算法封閉,軟硬一體快速交付,具有易推廣,高性價(jià)比等特點(diǎn)。
邊緣計(jì)算設(shè)備搭載在警用機(jī)器人上,通過部署圖像,視頻和語言等領(lǐng)域的人工智能算法賦予警用機(jī)器人更多的智能化功能,提高異常事件響應(yīng)的實(shí)時(shí)性,且可將結(jié)構(gòu)化信息和數(shù)據(jù)上傳到云平臺(tái)做數(shù)據(jù)的綜合治理和應(yīng)用,降低視頻傳輸對網(wǎng)絡(luò)帶寬造成的壓力,進(jìn)一步優(yōu)化和提升人機(jī)協(xié)同作業(yè)模式。通過數(shù)據(jù)驅(qū)動(dòng)、科技集約、精準(zhǔn)發(fā)力,為警務(wù)工作提供更強(qiáng)戰(zhàn)斗力,運(yùn)用科技力量來防范化解風(fēng)險(xiǎn)。
Atlas 500[2]智能小站是面向廣泛邊緣應(yīng)用場景的輕量邊緣設(shè)備,具有較強(qiáng)計(jì)算性能、大容量存儲(chǔ)、配置靈活、體積小、支持溫度范圍寬、環(huán)境適應(yīng)性強(qiáng)、易于維護(hù)管理等特點(diǎn)。Atlas 500 智能小站依托于昇騰AI 處理器,可為多種邊緣計(jì)算的圖像、視頻智能分析場景打造基礎(chǔ)AI 計(jì)算平臺(tái),增強(qiáng)邊緣側(cè)圖像、視頻分析的實(shí)時(shí)性,降低對網(wǎng)絡(luò)帶寬的依賴度,并可不斷升級算法來提升應(yīng)用體驗(yàn)。
由于它體積小、環(huán)境適應(yīng)性強(qiáng)、配置靈活,而且具有較強(qiáng)計(jì)算性能和可擴(kuò)展的大容量存儲(chǔ),再加上便于管理維護(hù)的優(yōu)點(diǎn),因此滿足了在智慧城市、各類機(jī)房、交通、商場、園區(qū)等區(qū)域的應(yīng)用需求,被廣泛用于數(shù)據(jù)存儲(chǔ)、分析以及智能視頻監(jiān)控等方面。
本文方案對cuda 框架和Python 有詳細(xì)的版本要求,詳情如表1 所示(“——”)表示沒有具體要求。本方案需要安裝10.2 版本的cuda 框架和3.5 版本及以上的Python。
工具 版本Python v3.6 及以上cuda v10.2 Anaconda/miniconda ——git ——
本文使用的Objects365 數(shù)據(jù)集是由北京智源人工智能研究院與曠視科技于2019 年共同推出的一項(xiàng)基準(zhǔn)數(shù)據(jù)集,旨在促進(jìn)計(jì)算機(jī)視覺領(lǐng)域中的目標(biāo)檢測研究。Objects365 在180 萬余張圖像上標(biāo)注了365 個(gè)對象類,包含人、衣物、居室、浴室、廚房、辦公/醫(yī)療、電器、交通、食物 、動(dòng)物、運(yùn)動(dòng)/樂器等。訓(xùn)練集中有超過2900 萬個(gè)邊界框,超越了Pascal VOC、ImageNet 和COCO 數(shù)據(jù)集。數(shù)據(jù)集示例圖片如圖1 所示。
圖1 數(shù)據(jù)集示例
圖2 YOLOv5 算法性能測試圖[3]
圖6 準(zhǔn)備文件列表
圖7 npu 信息
目標(biāo)檢測是計(jì)算機(jī)視覺領(lǐng)域中一項(xiàng)重要的任務(wù),其目標(biāo)是檢測出圖像中物體的類別并將其定位。隨著卷積神經(jīng)網(wǎng)絡(luò)的興起,基于深度學(xué)習(xí)方法的目標(biāo)檢測進(jìn)入了新的階段。主要的技術(shù)發(fā)展路線有anchor—based和anchor—free 系 列 方 法,anchor—based 方 法 包 括 一階段和兩階段檢測算法。兩階段檢測算法精度更高,如Faster—RCNN 系列,但是一階段算法計(jì)算速度更快,如YOLO、SSD 等。
YOLO(You Only Look Once)系列模型是經(jīng)典的一階段算法,在精度滿足要求的同時(shí),保證了模型的速度,使得實(shí)時(shí)目標(biāo)檢測得以廣泛應(yīng)用。Ultralytics 團(tuán)隊(duì)提出了YOLOv5,由于其速度更快、精度更高、體積更小等優(yōu)點(diǎn),成為世界上最受歡迎的視覺AI 模型。綜合考慮部署場景檢測實(shí)時(shí)性、高召回、低誤檢要求,本文選擇YOLOv5 作為檢測模型。YOLOv5 共有4 個(gè)版本可供選擇:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x。其中,s、m、l、x 分別代表模型大小,模型越大,精度越高,速度越慢。下圖是YOLOv5 的算法性能測試圖。
2.2.1 深度學(xué)習(xí)目標(biāo)檢測模型YOLOv5 算法介紹
YOLOv5 的網(wǎng)絡(luò)結(jié)構(gòu)由輸入端、 主干網(wǎng)絡(luò)(Backbone)、連接層(Neck)和輸出端(Prediction)四個(gè)部分組成。
2.2.1.1
YOLOv5 輸入端主要完成了數(shù)據(jù)增強(qiáng)、自適應(yīng)錨框計(jì)算和自適應(yīng)圖片縮放工作。
數(shù)據(jù)增強(qiáng)方法:通過對四張輸入圖像的隨機(jī)縮放、裁剪以及隨機(jī)排布方式將其拼接成一張,這種數(shù)據(jù)增強(qiáng)方法既豐富了檢測背景又提高了模型對小目標(biāo)的檢測能力。
自適應(yīng)錨框計(jì)算:YOLOv5 在訓(xùn)練時(shí)集成了K—means方法來獲取不同訓(xùn)練數(shù)據(jù)集中的最佳錨框值,此功能也可以關(guān)閉。
自適應(yīng)圖片縮放:在目標(biāo)檢測任務(wù)中,輸入圖像的尺寸通常需要被統(tǒng)一,以便模型可以批量處理。然而,不同尺寸的圖像如果直接縮放到相同的尺寸,往往需要在圖像的周圍填充一些額外的像素,這些填充的像素通常為黑色,即所謂的“黑邊”。如果填充過多,不僅會(huì)增加計(jì)算量,還會(huì)引入一些冗余的信息,影響模型處理的效率。YOLOv5 通過自適應(yīng)圖片縮放技術(shù),優(yōu)化了這一過程。它可以根據(jù)輸入圖像的原始尺寸,智能地添加最少的黑邊,使得圖像在高度方向上的兩端黑邊減少,從而減少了信息的冗余和計(jì)算量的浪費(fèi)。
2.2.1.2
Focus 結(jié)構(gòu):主要是對圖像進(jìn)行切片操作,如下圖所示,將4×4×3 的圖像切片成2×2×12 的特征圖。
以YOLOv5s 為 例, 尺 度 為640×640×3 的 輸 入圖像經(jīng)過Focus 結(jié)構(gòu)首先進(jìn)行切片操作得到尺度為320×320×12 的特征圖,再進(jìn)行一次卷積核數(shù)為32 的卷積操作,得到的特征圖尺度為320×320×32。
CSP 結(jié)構(gòu):YOLOv5 中設(shè)計(jì)了兩種CSP 結(jié)構(gòu),以YOLOv5s 網(wǎng)絡(luò)為例,CSP1_X 結(jié)構(gòu)應(yīng)用于主干網(wǎng)絡(luò)中,另一種CSP2_X 結(jié)構(gòu)則應(yīng)用于連接層中。
2.2.1.3
網(wǎng)絡(luò)連接層用于連接主干網(wǎng)絡(luò)與頭部,采用FPN+PAN 的結(jié)構(gòu)進(jìn)行特征融合。
FPN 結(jié)構(gòu)將語義特征從上而下傳遞,PAN 結(jié)構(gòu)接在FPN 之后,從下而上將定位特征傳遞上去,這樣可得到了既含有豐富語義又含有定位信息的特征。
2.2.1.4
損失函數(shù):采用CIoU_loss 作為損失函數(shù),定義如下:
非極大值抑制(NMS):基于錨框的檢測方法對于同一目標(biāo)會(huì)產(chǎn)生大量冗余的候選框,我們需要利用非極大值抑制的方法消除冗余,篩選出最佳的目標(biāo)邊界框,公式如下:
2.2.2 模型訓(xùn)練
訓(xùn)練數(shù)據(jù)經(jīng)過數(shù)據(jù)增強(qiáng)、灰度填充操作形成尺度統(tǒng)一、信息豐富的輸入圖像,再經(jīng)過主干網(wǎng)絡(luò)提取圖像特征,得到的特征經(jīng)過連接層的處理將語義和定位信息融合,最后經(jīng)過檢測頭得到損失,進(jìn)行反向傳播。
訓(xùn)練過程在8 卡NVIDIA TITAN 24G 服務(wù)器上完成,epoch 設(shè)為200,batch—size 設(shè)為32,其余超參默認(rèn)。
模型訓(xùn)練完成后,可以將訓(xùn)練模型在Atlas 500 上對視頻流進(jìn)行推理檢測工作,工作流程如圖5 所示,首先在Ubuntu 系統(tǒng)中安裝CANN—toolkit,包括安裝工具包、下載CANN 軟件包、準(zhǔn)備用戶并安裝和配置環(huán)境變量。第二步是模型轉(zhuǎn)換,主要是將訓(xùn)練得到的權(quán)重文件格式轉(zhuǎn)換為om 模型。之后的操作便在Atlas 500 上進(jìn)行,包括Atlas 500 固件升級、構(gòu)建docker 鏡像等。在完成了上述準(zhǔn)備工作后,便可配置CANN—nnrt 和運(yùn)行環(huán)境,執(zhí)行detect腳本程序開始視頻流的檢測結(jié)構(gòu)化工作。詳細(xì)流程介紹如下。
參考“技術(shù)支持—文檔中心”中的《CANN 5.0.x 軟件安裝指南》等文檔。
(1)安裝anaconda 或miniconda,并創(chuàng)建虛擬環(huán)境。命令如下:
conda create —n atc_yolov5 python=3.7 # ascend—deployer 要求python 版本>=3.6
(2)安裝git 和安裝YOLOv5 所需的第三方庫,如pytorch 等。
(3)獲取ascend—deployer 工具
安裝后“主目錄”下會(huì)出現(xiàn)一個(gè)“ascend—deployer”文件夾(完整路徑為“/home//ascend—deployer”)。
(4)下載CANN 軟件包
在 官 網(wǎng) 下 載“Ascend—cann—toolkit_5.0.3.7_linux—x86_64.zip”、人工驗(yàn)證簽名pgp、自動(dòng)驗(yàn)證簽名cms(需要下載權(quán)限)或者使用命令:
ascend—download ——os—list=Ubuntu_18.04_x86_64——download=CANN
(5)準(zhǔn)備運(yùn)行用戶并安裝,命令如下:
groupadd HwHiAiUser # 新建用戶組HwHiAiUser
adduser {username} HwHiAiUser
cd ~/ascend—deployer
./install.sh ——install=toolkit
安裝完成的toolkit 在“~/Ascend/ascend—toolkit”路徑下。
(6)配置環(huán)境變量,配置前請確認(rèn)set_env.sh 中的toolkit 的路徑是否正確,如與安裝路徑不匹配,則需要修改。
# 安裝toolkit 后配置
.~/Ascend/ascend—toolkit/set_env.sh
# 或者把set_env.sh 的內(nèi)容添加到~/.bashrc 中
# 然后運(yùn)行source ~/.bashrc
(1)安裝onnx
conda activate atc_yolov5
conda install onnx
pip install onnx—simplifier
(2)利用ATC 工具轉(zhuǎn)換為om 模型。生成的.om 文件在yolov5 根目錄下。
主要參考Atlas 500 智能邊緣管理系統(tǒng) (V2.2.200.010版本至21.0.2 版本),下載固件升級包“A500—3000_A500—3010—ESP—FIRMWARE—V2.2.209.020.zip”,瀏覽器訪問Atlas500,選擇“維護(hù)— 固件升級— 系統(tǒng)固件升級” ,上傳固件升級包,升級,等待升級進(jìn)度100%,重啟生效。
(1)在Ubuntu 服務(wù)器上準(zhǔn)備YOLOv5—image 文件
1)將以下文件放置到y(tǒng)olov5—image 文件夾下。其中下載Ascend—cann—nnrt_5.0.3.7_linux—aarch64.run 需要權(quán)限。
2)創(chuàng)建Dockerfile。
3)將“3.2 模型轉(zhuǎn)換”的“yolov5”文件夾去除無用文件并打包。
4)創(chuàng)建install.sh。
#!/bin/bash
#進(jìn)入容器工作目錄
cd /root
#解壓業(yè)務(wù)推理程序壓縮包
tar xf dist.tar
5)創(chuàng)建run.sh。
#!/bin/bash
#進(jìn)入業(yè)務(wù)推理程序的可執(zhí)行文件所在目錄
cd /root/dist
#運(yùn)行可執(zhí)行文件
#./main
python3./detect.py
(2)將上述文件復(fù)制到Atlas 500 上
1) 瀏 覽 器 訪 問Atlas 500, 新 建 分 區(qū) 為“/opt/mount/docker01”。
2)在Ubuntu 服務(wù)器(非昇騰設(shè)備)上,通過scp命令,將yolov5—image 文件夾完整傳輸?shù)紸tlas 500 的/opt/mount/docker01 路徑下。命令如下:
# 訪問yolov5—image 文件夾的上層目錄
s c p —r./y o l o v 5—i m a g e/vision@172.23.0.111:/opt/mount/docker01/
(3)ssh 遠(yuǎn)程Atlas 500
1)在Ubuntu 服務(wù)器(非昇騰設(shè)備)上,ssh 遠(yuǎn)程訪問Atlas 500。登錄后,需要通過timeout 0 和TMOUT=0 重置超時(shí)時(shí)間,否則超時(shí)后,會(huì)話會(huì)自動(dòng)關(guān)閉,退出操作窗口。
2)查看npu 信息。
npu—smi info
其中的 NPU Chip 代表 NPU 芯片,這里的device id為 0 ,Name Device 為 310 ,代表Ascend 310 。Health Bus—Id 為 OK ,則說明正??梢允褂?。
(4)在Atlas 500 上制作鏡像
1)查看docker 版本和現(xiàn)有鏡像。
2)構(gòu)建docker 鏡像。
具體流程如下:
(1)啟動(dòng)docker 容器
(2)配置CANN—nnrt
(3)查看npu 是否可用
(4)配置代碼運(yùn)行環(huán)境
(5)改寫detect.py 文件并運(yùn)行
在完成上述模型訓(xùn)練以及邊緣計(jì)算設(shè)備部署后,可以開始對視頻流進(jìn)行測試,這里使用驗(yàn)證集或測試集數(shù)據(jù)進(jìn)行推理分析,可視化預(yù)測結(jié)果如圖8 所示,畫面中人、海鷗、建筑等物體均可使用不同顏色的目標(biāo)框進(jìn)行標(biāo)識(shí),實(shí)現(xiàn)了圖像中人、物等目標(biāo)的提取,為進(jìn)一步開展視頻結(jié)構(gòu)化提供了基礎(chǔ)。
圖8 模型推理結(jié)果示意
綜上所述,基于國產(chǎn)邊緣計(jì)算設(shè)備Atlas 500 的視頻結(jié)構(gòu)化研究,可以使機(jī)器人具備前端智能,為機(jī)器人賦予“小腦”,實(shí)時(shí)分析前端探測設(shè)備采集數(shù)據(jù),提高機(jī)器人對異常行為異常事件的響應(yīng)處置能力,解決警用機(jī)器人實(shí)戰(zhàn)應(yīng)用的“最后一公里”,助力警用機(jī)器人的普及推廣。