資料介紹
描述
介紹
Xilinx Model Zoo 包含許多預構建的卷積神經(jīng)網(wǎng)絡模型。
該項目利用了其中幾個模型,以實現(xiàn)創(chuàng)建面部應用程序的基礎。
- 人臉檢測:densebox_640_360
- 人臉地標檢測:facelandmark

檢測到面部并識別面部標志后,我們可以添加額外的處理,例如頭部姿勢估計。
- Satya Mallick,使用 OpenCV 和 DLIB 進行頭部姿勢估計,LearnOpenCV https://learnopencv.com/head-pose-estimation-using-opencv-and-dlib/ https://github.com/spmallick/learnopencv/blob/master/頭部姿勢/headPose.cpp

讓我們開始吧 !
第 1 步 - 創(chuàng)建 SD 卡
為以下 Avnet 平臺提供了預構建的 Vitis-AI 1.3 SD 卡映像:
- u96v2_sbc_base : Ultra96-V2 開發(fā)板
- uz7ev_evcc_base:UltraZed-EV SOM (7EV) + FMC 載卡
- uz3eg_iocc_base:UltraZed-EG SOM (3EG) + IO 載卡
可在此處找到預構建 SD 卡映像的下載鏈接:
- 適用于 Avnet Vitis 平臺的 Vitis-AI 1.3 流程:https ://avnet.me/vitis-ai-1.3-project
下載并解壓后,.img 文件可以編程到 16GB 微型 SD 卡。
0.解壓壓縮包得到.img文件
1. 將開發(fā)板特定的 SD 卡映像編程到 16GB(或更大)的 micro SD 卡
一個。在 Windows 機器上,使用 Balena Etcher 或 Win32DiskImager(免費開源軟件)
灣。在 linux 機器上,使用 Balena Etcher 或使用 dd 實用程序
$ sudo dd bs=4M if=Avnet-{platform}-Vitis-AI-1-3-{date}.img of=/dev/sd{X} status=progress conv=fsync
其中 {X} 是一個小寫字母,用于指定 SD 卡的設備。您可以使用“df -h”來確定您的 SD 卡對應的設備。
第 2 步 - 克隆源代碼存儲庫
本項目中使用的源代碼可以從以下存儲庫中獲?。?/font>
- https://github.com/AlbertaBeef/vitis_??ai_cpp_examples
- https://github.com/AlbertaBeef/vitis_??ai_python_examples
如果您有活動的互聯(lián)網(wǎng)連接,您可以簡單地將存儲庫克隆到嵌入式平臺的根目錄:
$ cd ~
$ git clone https://github.com/AlbertaBeef/vitis_ai_cpp_examples
$ git clone https://github.com/AlbertaBeef/vitis_ai_python_examples
第 3 步 - 人臉檢測示例概述
為了實現(xiàn)頭部姿態(tài)估計示例,我們修改了一個現(xiàn)有示例facedetect ,該示例可以在以下目錄中找到:
~/Vitis-AI/demo/Vitis-AI-Library/samples/facedetect
如果我們查看 test_video_facedetect.cpp 源代碼,我們可以看到它非常?。?/font>
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ù)使用了一個通用的 main_for_video_demo() 函數(shù),并向它傳遞了一個 FaceDetect 類的實例,該類提供了 create() 和 run() 方法,以及一個 process_result() 函數(shù)。
該示例可以使用以下命令運行:
1. 啟動后,啟動 dpu_sw_optimize.sh 腳本,該腳本將優(yōu)化 DDR 內(nèi)存的 QoS 配置
$ cd ~/dpu_sw_optimize/zynqmp
$ source ./zynqmp_dpu_optimize.sh
2. 禁用 dmesg 詳細輸出:
$ dmesg -D
3.定義DISPLAY環(huán)境變量
$ export DISPLAY=:0.0
4.將DP顯示器的分辨率改為較低的分辨率,比如640x480
$ xrandr --output DP-1 --mode 640x480
5.使用以下參數(shù)啟動面部檢測應用程序:
- 指定“densebox_640_360”作為第一個參數(shù)
- 指定“0”作為第二個參數(shù),指定 USB 攝像頭)
$ cd ~/Vitis-AI/demo/Vitis-AI-Library/samples/facedetect
$ ./test_video_facedetect densebox_640_360 0

第 4 步 - 創(chuàng)建頭部姿勢估計應用程序
我們可以使用這個通用的 main_for_video_demo(),以及一個定義我們修改后的用例的自定義類,如下圖所示:

對于頭部姿態(tài)估計示例,對面部檢測示例進行了以下修改:
- 添加人臉地標
- 添加頭部姿勢估計
下圖說明了此示例的修改代碼。

修改后的代碼可以在以下位置找到:
~/vitis_ai_cpp_examples/facedetectwithheadpose/test_video_facedetectwithheadpose.cpp
1. 構建頭部姿態(tài)估計應用程序
$ cd ~/vitis_ai_cpp_examples/facedetectwithheadpose
$ ./build.sh
2.啟動頭部姿勢估計應用程序
$ cd ~/vitis_ai_cpp_examples/facedetectwithheadpose
$ ./test_video_facedetectwithheadpose 0

對于頭部姿勢估計示例,我重用了以下代碼:
頭部姿勢估計:
- Satya Mallick,使用 OpenCV 和 DLIB 進行頭部姿勢估計,LearnOpenCV https://learnopencv.com/head-pose-estimation-using-opencv-and-dlib/https://github.com/spmallick/learnopencv/blob/master/頭部姿勢/headPose.cpp
我不會描述這個算法背后的數(shù)學原理,因為 Mallick 先生做得很好。我們需要知道的是,在我們的 2D 檢測到的面部上需要以下 6 個標志點,以便估計頭部位置。

Xilinx 的 facelandmark 模型為我們提供了 5 個界標,分別對應兩只眼睛、鼻子和嘴角,因此我們?nèi)鄙俚?6 個界標,對應下巴。
在我的實現(xiàn)中,我粗略估計了下巴的位置:
- 相對于嘴的位置與相對于眼睛的鼻子的位置大致相同
第 5 步 - Python 實現(xiàn)
python中也提供了類似的實現(xiàn)。
1.啟動頭部姿態(tài)估計示例的python版本:
$ cd ~/vitis_ai_python_examples/face_applications
$ python3 face_headpose.py
?
已知限制
在這個項目中實現(xiàn)的頭部姿勢估計有一定的局限性。當頭部姿勢向上或向下看時,它不能很好地工作。有兩個因素可能導致這種情況:
- 用于眼睛的界標對應于眼睛的中心,而頭部姿勢源代碼假設眼睛的外角
- 估計用于下巴的地標,可能并不總是正確的
你能改進這個實現(xiàn)嗎?
- 你會以不同的方式計算下巴位置嗎?
- 你會使用一個替代的面部標志,包括面部
第 6 步 - 使用 DLIB 改進結果
為了改善結果,我嘗試了 DLIB 提供的功能,這是一個非常流行的人臉檢測和地標庫。
為了加快速度,我將在 python(而不是 C++)中執(zhí)行此操作。
1.首先需要做的是安裝DLIB
安裝 dlib 包(僅與 python 一起使用)的最快方法是使用 pip3 命令:
$ pip3 install dlib
安裝 dlib(供 python 和 C++ 使用)的較長方法是從源代碼構建:
# 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)連接并且需要很長時間,因為需要為我們的嵌入式平臺構建包。
2. 確保您擁有最新版本的存儲庫內(nèi)容
$ cd ~/vitis_ai_python_examples
$ git pull
3.接下來,運行以下腳本
$ cd ~/vitis_ai_python_examples/face_applications_dlib
$ python3 face_headpose_dlib.py
此版本的腳本具有以下附加功能:
- 添加了狀態(tài)顯示,其中包括 FPS
- 按“d”在人臉檢測算法之間切換(VART 與 DLIB)
- 按“l(fā)”在人臉界標算法之間切換(VART 與 DLIB)
請注意,VART 是 Vitis-AI 運行時的縮寫,此處用于表示使用 Vitis-AI 預構建模型。
首先要觀察的是,VART 人臉檢測的運行速度比 DLIB 人臉檢測快 5 倍,但結果相似。

可以進行的第二個觀察是 VART 面部標志與 DLIB 面部標志不在同一個位置,這可能解釋了為什么使用 DLIB 面部標志可以獲得更好的頭部姿勢結果:
- 眼睛標志物:VART 位于眼睛中心,DLIB 位于外角
- 鼻子標志:VART 位于鼻子底部,DLIB 位于鼻尖
- 下巴地標:為 VART 估計,為 DLIB 正確定位

可以觀察到的第三個觀察結果是,當人臉不是正面時,VART 人臉界標更好。

那么,有贏家嗎?
就性能而言,絕對是基于 Vitis-AI 的人臉檢測和地標實現(xiàn)。
對于頭部姿勢結果:
對于正面用例,基于 Vitis-AI 的人臉檢測和基于 DLIB 的地標可提供更好的結果。
對于側面用例,基于 Vitis-AI 的人臉檢測和地標可提供更好的結果。
第 7 步 - 進一步使用 DLIB 面部標志
我鼓勵您運行顯示每種算法的所有地標的腳本版本,如下所示:
$ cd ~/vitis_ai_python_examples/face_applications_dlib
$ python3 face_landmark_dlib.py

您還能想到哪些其他使用面部標志的應用程序?在下面的評論中分享您的想法。
結論
我希望本教程能幫助您開始在 Ultra96-V2 和其他 Avnet 平臺上使用人臉應用程序。
如果您還想看到任何其他相關內(nèi)容,請在下面的評論中分享您的想法。
修訂記錄
2021/03/15 - 第一版
2021/03/18 - 添加了“第 6 步 - 使用 DLIB 改進結果”
- Ultra96硬件用戶指南
- Ultra96 CSI-2視頻輸出到Raspberry Pi攝像頭輸入
- Ultra96上的實時攝像頭饋送網(wǎng)頁
- 使用Tensil、TF-Lite和PYNQ在Ultra96板上運行YOLO v4 Tiny
- 在Ultra96 V2平臺上用Python實現(xiàn)人臉檢測和人臉跟蹤
- 用于Ultra96的夾層板96AnalogXperience
- Ultra96 FPGA上的Live NYC Subway Monitor應用程序
- 關于Ultra96的Xilinx DDS編譯器IP教程
- 與Ultra96聯(lián)網(wǎng)端口轉發(fā)
- Ultra96 V2上基于標記的增強現(xiàn)實
- 使用Ultra96 PYNQ測定織物GSM
- Ultra96皮膚癌AI構建
- 基于Bagging-SVM集成分類器的頭部姿態(tài)估計方法 4次下載
- 一種采用深度殘差網(wǎng)絡的頭部姿態(tài)估計方法 8次下載
- 一起玩Ultra96之GPIO操作
- CD74ACT540M96 具有 TTL 兼容型 CMOS 輸入和三態(tài)輸出的 8 通道 4.5V 至 5.5V 反相器 76次閱讀
- 深入剖析P82B96:I2C總線緩沖器的卓越之選 559次閱讀
- 在樹莓派5上開啟YOLO姿態(tài)估計識別之旅! 2.3k次閱讀
- 如何在RZ/V2L評估板套件上使用AI SDK 1.9k次閱讀
- Meta研究:基于頭顯攝像頭進行姿態(tài)估計的方法和優(yōu)缺點 1.7k次閱讀
- 基于OnePose的無CAD模型的物體姿態(tài)估計 2.2k次閱讀
- iNeRF對RGB圖像進行類別級別的物體姿態(tài)估計 2k次閱讀
- JD和OPPO的研究人員們提出了一種姿勢引導的時尚圖像生成模型 3.1k次閱讀
- 一份深度學習“人體姿勢估計”全指南,從DeepNet到HRNet 1.7w次閱讀
- 如何用Python實現(xiàn)極大似然估計? 9.7k次閱讀
- 如何使用fpga實現(xiàn)數(shù)字基帶中環(huán)路延時估計 2.2k次閱讀
- 基于Arm技術的16nm MPSoC開發(fā)套件Ultra96 6.7k次閱讀
- 基于DensePose的姿勢轉換系統(tǒng),僅根據(jù)一張輸入圖像和目標姿勢 1.1w次閱讀
- 圖像遷移最新成果:人體姿勢和舞蹈動作遷移 7k次閱讀
- 從圖像數(shù)據(jù)中提取非常精準的姿勢數(shù)據(jù) 1w次閱讀
下載排行
本周
- 1矽力杰 Silergy SY7215A 同步升壓調(diào)節(jié)器 規(guī)格書 Datasheet 佰祥電子
- 1.12 MB | 5次下載 | 免費
- 2HT81696H 內(nèi)置升壓的30W立體聲D類音頻功放數(shù)據(jù)手冊
- 1.21 MB | 1次下載 | 免費
- 3HTA6863 3W超低噪聲超低功耗單聲道D類音頻功率放大器數(shù)據(jù)手冊
- 0.87 MB | 次下載 | 免費
- 4南芯 Southchip SC8802C 充電控制器 規(guī)格書 Datasheet 佰祥電子
- 88.16 KB | 次下載 | 免費
- 5矽力杰 Silergy SY7065 同步升壓轉換器 規(guī)格書 Datasheet 佰祥電子
- 910.67 KB | 次下載 | 免費
- 6矽力杰 Silergy SY7066 同步升壓轉換器 規(guī)格書 Datasheet 佰祥電子
- 989.14 KB | 次下載 | 免費
- 7WD6208A產(chǎn)品規(guī)格書
- 631.24 KB | 次下載 | 免費
- 8NB685 26 V,12 A,低靜態(tài)電流,大電流 同步降壓變換器數(shù)據(jù)手冊
- 1.64 MB | 次下載 | 2 積分
本月
- 1EMC PCB設計總結
- 0.33 MB | 12次下載 | 免費
- 2PD取電芯片 ECP5702規(guī)格書
- 0.88 MB | 5次下載 | 免費
- 3矽力杰 Silergy SY7215A 同步升壓調(diào)節(jié)器 規(guī)格書 Datasheet 佰祥電子
- 1.12 MB | 5次下載 | 免費
- 4氮化鎵GaN FET/GaN HEMT 功率驅(qū)動電路選型表
- 0.10 MB | 3次下載 | 免費
- 5PD取電芯片,可取5/9/12/15/20V電壓ECP5702數(shù)據(jù)手冊
- 0.88 MB | 3次下載 | 免費
- 6SY50655 用于高輸入電壓應用的偽固定頻率SSR反激式穩(wěn)壓器英文資料
- 1.01 MB | 3次下載 | 免費
- 7怎么為半導體測試儀選擇精密放大器
- 0.65 MB | 2次下載 | 免費
- 8SY52341 次級側同步整流英文手冊
- 0.94 MB | 2次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233095次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191469次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183360次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81606次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73832次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論