資料介紹
描述
介紹
Xilinx Model Zoo 包含許多預(yù)構(gòu)建的卷積神經(jīng)網(wǎng)絡(luò)模型。
該項(xiàng)目利用了其中幾個(gè)模型,以實(shí)現(xiàn)創(chuàng)建面部應(yīng)用程序的基礎(chǔ)。
檢測(cè)到面部并識(shí)別面部標(biāo)志后,我們可以添加額外的處理,例如頭部姿勢(shì)估計(jì)。
- Satya Mallick,使用 OpenCV 和 DLIB 進(jìn)行頭部姿勢(shì)估計(jì),LearnOpenCV https://learnopencv.com/head-pose-estimation-using-opencv-and-dlib/ https://github.com/spmallick/learnopencv/blob/master/頭部姿勢(shì)/headPose.cpp
讓我們開(kāi)始吧 !
第 1 步 - 創(chuàng)建 SD 卡
為以下 Avnet 平臺(tái)提供了預(yù)構(gòu)建的 Vitis-AI 1.3 SD 卡映像:
- u96v2_sbc_base : Ultra96-V2 開(kāi)發(fā)板
- uz7ev_evcc_base:UltraZed-EV SOM (7EV) + FMC 載卡
- uz3eg_iocc_base:UltraZed-EG SOM (3EG) + IO 載卡
可在此處找到預(yù)構(gòu)建 SD 卡映像的下載鏈接:
- 適用于 Avnet Vitis 平臺(tái)的 Vitis-AI 1.3 流程:https ://avnet.me/vitis-ai-1.3-project
下載并解壓后,.img 文件可以編程到 16GB 微型 SD 卡。
0.解壓壓縮包得到.img文件
1. 將開(kāi)發(fā)板特定的 SD 卡映像編程到 16GB(或更大)的 micro SD 卡
一個(gè)。在 Windows 機(jī)器上,使用 Balena Etcher 或 Win32DiskImager(免費(fèi)開(kāi)源軟件)
灣。在 linux 機(jī)器上,使用 Balena Etcher 或使用 dd 實(shí)用程序
$ sudo dd bs=4M if=Avnet-{platform}-Vitis-AI-1-3-{date}.img of=/dev/sd{X} status=progress conv=fsync
其中 {X} 是一個(gè)小寫(xiě)字母,用于指定 SD 卡的設(shè)備。您可以使用“df -h”來(lái)確定您的 SD 卡對(duì)應(yīng)的設(shè)備。
第 2 步 - 克隆源代碼存儲(chǔ)庫(kù)
本項(xiàng)目中使用的源代碼可以從以下存儲(chǔ)庫(kù)中獲?。?/font>
- https://github.com/AlbertaBeef/vitis_??ai_cpp_examples
- https://github.com/AlbertaBeef/vitis_??ai_python_examples
如果您有活動(dòng)的互聯(lián)網(wǎng)連接,您可以簡(jiǎn)單地將存儲(chǔ)庫(kù)克隆到嵌入式平臺(tái)的根目錄:
$ cd ~
$ git clone https://github.com/AlbertaBeef/vitis_ai_cpp_examples
$ git clone https://github.com/AlbertaBeef/vitis_ai_python_examples
第 3 步 - 人臉檢測(cè)示例概述
為了實(shí)現(xiàn)頭部姿態(tài)估計(jì)示例,我們修改了一個(gè)現(xiàn)有示例facedetect ,該示例可以在以下目錄中找到:
~/Vitis-AI/demo/Vitis-AI-Library/samples/facedetect
如果我們查看 test_video_facedetect.cpp 源代碼,我們可以看到它非常小:
int main(int argc, char *argv[]) {
string model = argv[1];
return vitis::ai::main_for_video_demo(
argc, argv,
[model] {
return vitis::ai::FaceDetect::create(model);
},
process_result, 2);
}
此代碼的可視化表示如下圖所示:
我們可以看到 main 函數(shù)使用了一個(gè)通用的 main_for_video_demo() 函數(shù),并向它傳遞了一個(gè) FaceDetect 類(lèi)的實(shí)例,該類(lèi)提供了 create() 和 run() 方法,以及一個(gè) process_result() 函數(shù)。
該示例可以使用以下命令運(yùn)行:
1. 啟動(dòng)后,啟動(dòng) dpu_sw_optimize.sh 腳本,該腳本將優(yōu)化 DDR 內(nèi)存的 QoS 配置
$ cd ~/dpu_sw_optimize/zynqmp
$ source ./zynqmp_dpu_optimize.sh
2. 禁用 dmesg 詳細(xì)輸出:
$ dmesg -D
3.定義DISPLAY環(huán)境變量
$ export DISPLAY=:0.0
4.將DP顯示器的分辨率改為較低的分辨率,比如640x480
$ xrandr --output DP-1 --mode 640x480
5.使用以下參數(shù)啟動(dòng)面部檢測(cè)應(yīng)用程序:
- 指定“densebox_640_360”作為第一個(gè)參數(shù)
- 指定“0”作為第二個(gè)參數(shù),指定 USB 攝像頭)
$ cd ~/Vitis-AI/demo/Vitis-AI-Library/samples/facedetect
$ ./test_video_facedetect densebox_640_360 0
第 4 步 - 創(chuàng)建頭部姿勢(shì)估計(jì)應(yīng)用程序
我們可以使用這個(gè)通用的 main_for_video_demo(),以及一個(gè)定義我們修改后的用例的自定義類(lèi),如下圖所示:
對(duì)于頭部姿態(tài)估計(jì)示例,對(duì)面部檢測(cè)示例進(jìn)行了以下修改:
- 添加人臉地標(biāo)
- 添加頭部姿勢(shì)估計(jì)
下圖說(shuō)明了此示例的修改代碼。
修改后的代碼可以在以下位置找到:
~/vitis_ai_cpp_examples/facedetectwithheadpose/test_video_facedetectwithheadpose.cpp
1. 構(gòu)建頭部姿態(tài)估計(jì)應(yīng)用程序
$ cd ~/vitis_ai_cpp_examples/facedetectwithheadpose
$ ./build.sh
2.啟動(dòng)頭部姿勢(shì)估計(jì)應(yīng)用程序
$ cd ~/vitis_ai_cpp_examples/facedetectwithheadpose
$ ./test_video_facedetectwithheadpose 0
對(duì)于頭部姿勢(shì)估計(jì)示例,我重用了以下代碼:
頭部姿勢(shì)估計(jì):
- Satya Mallick,使用 OpenCV 和 DLIB 進(jìn)行頭部姿勢(shì)估計(jì),LearnOpenCV https://learnopencv.com/head-pose-estimation-using-opencv-and-dlib/https://github.com/spmallick/learnopencv/blob/master/頭部姿勢(shì)/headPose.cpp
我不會(huì)描述這個(gè)算法背后的數(shù)學(xué)原理,因?yàn)?Mallick 先生做得很好。我們需要知道的是,在我們的 2D 檢測(cè)到的面部上需要以下 6 個(gè)標(biāo)志點(diǎn),以便估計(jì)頭部位置。
Xilinx 的 facelandmark 模型為我們提供了 5 個(gè)界標(biāo),分別對(duì)應(yīng)兩只眼睛、鼻子和嘴角,因此我們?nèi)鄙俚?6 個(gè)界標(biāo),對(duì)應(yīng)下巴。
在我的實(shí)現(xiàn)中,我粗略估計(jì)了下巴的位置:
- 相對(duì)于嘴的位置與相對(duì)于眼睛的鼻子的位置大致相同
第 5 步 - Python 實(shí)現(xiàn)
python中也提供了類(lèi)似的實(shí)現(xiàn)。
1.啟動(dòng)頭部姿態(tài)估計(jì)示例的python版本:
$ cd ~/vitis_ai_python_examples/face_applications
$ python3 face_headpose.py
?
已知限制
在這個(gè)項(xiàng)目中實(shí)現(xiàn)的頭部姿勢(shì)估計(jì)有一定的局限性。當(dāng)頭部姿勢(shì)向上或向下看時(shí),它不能很好地工作。有兩個(gè)因素可能導(dǎo)致這種情況:
- 用于眼睛的界標(biāo)對(duì)應(yīng)于眼睛的中心,而頭部姿勢(shì)源代碼假設(shè)眼睛的外角
- 估計(jì)用于下巴的地標(biāo),可能并不總是正確的
你能改進(jìn)這個(gè)實(shí)現(xiàn)嗎?
- 你會(huì)以不同的方式計(jì)算下巴位置嗎?
- 你會(huì)使用一個(gè)替代的面部標(biāo)志,包括面部
第 6 步 - 使用 DLIB 改進(jìn)結(jié)果
為了改善結(jié)果,我嘗試了 DLIB 提供的功能,這是一個(gè)非常流行的人臉檢測(cè)和地標(biāo)庫(kù)。
為了加快速度,我將在 python(而不是 C++)中執(zhí)行此操作。
1.首先需要做的是安裝DLIB
安裝 dlib 包(僅與 python 一起使用)的最快方法是使用 pip3 命令:
$ pip3 install dlib
安裝 dlib(供 python 和 C++ 使用)的較長(zhǎng)方法是從源代碼構(gòu)建:
# download source code from dlib.net
wget http://dlib.net/files/dlib-19.21.tar.bz2
tar xvf dlib-19.21.tar.bz2
cd dlib-19.21
# build/install for use with C++
mkdir build
cd build
cmake ..
cmake --build . --config Release
sudo make install
# build/install for use with python
python setup.py install
這兩種方法都需要有效的互聯(lián)網(wǎng)連接并且需要很長(zhǎng)時(shí)間,因?yàn)樾枰獮槲覀兊那度胧狡脚_(tái)構(gòu)建包。
2. 確保您擁有最新版本的存儲(chǔ)庫(kù)內(nèi)容
$ cd ~/vitis_ai_python_examples
$ git pull
3.接下來(lái),運(yùn)行以下腳本
$ cd ~/vitis_ai_python_examples/face_applications_dlib
$ python3 face_headpose_dlib.py
此版本的腳本具有以下附加功能:
- 添加了狀態(tài)顯示,其中包括 FPS
- 按“d”在人臉檢測(cè)算法之間切換(VART 與 DLIB)
- 按“l(fā)”在人臉界標(biāo)算法之間切換(VART 與 DLIB)
請(qǐng)注意,VART 是 Vitis-AI 運(yùn)行時(shí)的縮寫(xiě),此處用于表示使用 Vitis-AI 預(yù)構(gòu)建模型。
首先要觀察的是,VART 人臉檢測(cè)的運(yùn)行速度比 DLIB 人臉檢測(cè)快 5 倍,但結(jié)果相似。
可以進(jìn)行的第二個(gè)觀察是 VART 面部標(biāo)志與 DLIB 面部標(biāo)志不在同一個(gè)位置,這可能解釋了為什么使用 DLIB 面部標(biāo)志可以獲得更好的頭部姿勢(shì)結(jié)果:
- 眼睛標(biāo)志物:VART 位于眼睛中心,DLIB 位于外角
- 鼻子標(biāo)志:VART 位于鼻子底部,DLIB 位于鼻尖
- 下巴地標(biāo):為 VART 估計(jì),為 DLIB 正確定位
可以觀察到的第三個(gè)觀察結(jié)果是,當(dāng)人臉不是正面時(shí),VART 人臉界標(biāo)更好。
那么,有贏家嗎?
就性能而言,絕對(duì)是基于 Vitis-AI 的人臉檢測(cè)和地標(biāo)實(shí)現(xiàn)。
對(duì)于頭部姿勢(shì)結(jié)果:
對(duì)于正面用例,基于 Vitis-AI 的人臉檢測(cè)和基于 DLIB 的地標(biāo)可提供更好的結(jié)果。
對(duì)于側(cè)面用例,基于 Vitis-AI 的人臉檢測(cè)和地標(biāo)可提供更好的結(jié)果。
第 7 步 - 進(jìn)一步使用 DLIB 面部標(biāo)志
我鼓勵(lì)您運(yùn)行顯示每種算法的所有地標(biāo)的腳本版本,如下所示:
$ cd ~/vitis_ai_python_examples/face_applications_dlib
$ python3 face_landmark_dlib.py
您還能想到哪些其他使用面部標(biāo)志的應(yīng)用程序?在下面的評(píng)論中分享您的想法。
結(jié)論
我希望本教程能幫助您開(kāi)始在 Ultra96-V2 和其他 Avnet 平臺(tái)上使用人臉應(yīng)用程序。
如果您還想看到任何其他相關(guān)內(nèi)容,請(qǐng)?jiān)谙旅娴脑u(píng)論中分享您的想法。
修訂記錄
2021/03/15 - 第一版
2021/03/18 - 添加了“第 6 步 - 使用 DLIB 改進(jìn)結(jié)果”
- Ultra96硬件用戶指南
- Ultra96 CSI-2視頻輸出到Raspberry Pi攝像頭輸入
- Ultra96上的實(shí)時(shí)攝像頭饋送網(wǎng)頁(yè)
- 使用Tensil、TF-Lite和PYNQ在Ultra96板上運(yùn)行YOLO v4 Tiny
- 在Ultra96 V2平臺(tái)上用Python實(shí)現(xiàn)人臉檢測(cè)和人臉跟蹤
- 用于Ultra96的夾層板96AnalogXperience
- Ultra96 FPGA上的Live NYC Subway Monitor應(yīng)用程序
- 關(guān)于Ultra96的Xilinx DDS編譯器IP教程
- 與Ultra96聯(lián)網(wǎng)端口轉(zhuǎn)發(fā)
- Ultra96 V2上基于標(biāo)記的增強(qiáng)現(xiàn)實(shí)
- 使用Ultra96 PYNQ測(cè)定織物GSM
- Ultra96皮膚癌AI構(gòu)建
- 基于Bagging-SVM集成分類(lèi)器的頭部姿態(tài)估計(jì)方法 4次下載
- 一種采用深度殘差網(wǎng)絡(luò)的頭部姿態(tài)估計(jì)方法 8次下載
- 一起玩Ultra96之GPIO操作
- 如何在RZ/V2L評(píng)估板套件上使用AI SDK 766次閱讀
- 基于PoseDiffusion相機(jī)姿態(tài)估計(jì)方法 1126次閱讀
- Meta研究:基于頭顯攝像頭進(jìn)行姿態(tài)估計(jì)的方法和優(yōu)缺點(diǎn) 638次閱讀
- 異步電機(jī)速度估計(jì)學(xué)習(xí) 986次閱讀
- 基于OnePose的無(wú)CAD模型的物體姿態(tài)估計(jì) 1424次閱讀
- iNeRF對(duì)RGB圖像進(jìn)行類(lèi)別級(jí)別的物體姿態(tài)估計(jì) 1331次閱讀
- JD和OPPO的研究人員們提出了一種姿勢(shì)引導(dǎo)的時(shí)尚圖像生成模型 2472次閱讀
- 一份深度學(xué)習(xí)“人體姿勢(shì)估計(jì)”全指南,從DeepNet到HRNet 1.6w次閱讀
- 如何用Python實(shí)現(xiàn)極大似然估計(jì)? 8955次閱讀
- 如何使用fpga實(shí)現(xiàn)數(shù)字基帶中環(huán)路延時(shí)估計(jì) 1631次閱讀
- UC Berkeley大學(xué)的研究人員們利用深度姿態(tài)估計(jì)和深度學(xué)習(xí)技術(shù) 2691次閱讀
- 基于Arm技術(shù)的16nm MPSoC開(kāi)發(fā)套件Ultra96 6099次閱讀
- 基于DensePose的姿勢(shì)轉(zhuǎn)換系統(tǒng),僅根據(jù)一張輸入圖像和目標(biāo)姿勢(shì) 1w次閱讀
- 圖像遷移最新成果:人體姿勢(shì)和舞蹈動(dòng)作遷移 6195次閱讀
- 從圖像數(shù)據(jù)中提取非常精準(zhǔn)的姿勢(shì)數(shù)據(jù) 9250次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多