Step 3 - Installing the Vitis-AI runtime packages
ทำการเตรียมความพร้อมที่จะใช้งาน Vitis-AI บนบอร์ด FPGA
หลังจากที่เราทำการติดตั้ง Package ที่จะใช้งานในการ Compile โปรแกรม รวมถึงการใช้งานผ่าน Hardware module ที่เขียนไว้ โดยตัวโมดูลที่จะใช้งานกันบน FPGA วันนี้คือ DPU (Deep processing unit)


เมื่อผู้ทดลองสามารถเข้าถึงบอร์ด Ultra96v2 ได้แล้ว เราจะเริ่มทำการติดตั้ง Package และเตรียม Hardware module เพื่อใช้งานร่วมกับโปรแกรมโดยเริ่มจาก
Step 3-1 : Setting Package for compile program
ไปที่ WSL ที่ ssh ไปที่ Ultra96v2 แล้วพิมคำสั่งด้านล่าง เพื่อ copy ไฟล์ที่เรียกการใช้งาน Hardware module DPU ไปเตรียมทำงาน
$ cp /media/sd-mmcblk0p1/dpu.xclbin /usr/lib/.
ทำการติดตั้งแพคเกจ Vitis-AI 1.4 runtime เพื่อใช้ในการ compile AI application ในการทำงานร่วมกับโมดูล DPU
$ cd ~/install/vitis-ai-runtime-1.4.0
$ source ./setup.sh

ทำการตรวจสอบโมดูล DPU บนชิพ FPGA ว่าพร้อมทำงานไหม
$ xdputil query

Step 3-2 : Inference Vitsi-AI on U96v2
ทำการ optimize โมดูล DPU ให้เกิดข้อผิดพลาดในการแสดงผลลดลง
$ cd ~/dpu_sw_optimize/zynqmp
$ source ./zynqmp_dpu_optimize.sh
โดยทำการ รัน script นี้จะแก้ไขปัญหาสองอย่างคือ
แก้ไขพื้นที่ partition rootfs ให้เหมาะสมกับการใช้งาน
แก้ปัญหา Qos ในการใช้งานหน่วยความจำ DDR เพื่อให้สามารถทำงานในการแสดงภาพได้

สำหรับกลุ่มทดลองที่มีสาย Display port ให้ทำการตั้งค่าตัวแปรในการแสดงภาพ
$ export DISPLAY=:0.0
โดยตัว command นี้จะเป็นการตั้งค่าตัวแปรที่ใช้ใน LinuxOS เพื่อใช้ในการแสดงผลออกที่ตัว Display Port
ตั้งค่า resolution ของจอแสดงผล
$ xrandr --output DP-1 --mode 800x600
ทำการปิด Debug message
$ dmesg -D
ทำการทดสอบ Vitis-AI-Library ในการทำงานของ AI application ร่วมกับ DPU
$ cd ~/Vitis-AI/demo/Vitis-AI-Library/samples/facedetect
$ ./test_jpeg_facedetect densebox_640_360 sample_facedetect.jpg
# ถ้ามีกล้องสามารถทดสอบกล้องได้ด้วยคำสั่ง
# $ ./test_video_facedetect densebox_320_320 0
Step 3-3 : Inference Point cloud 3D detection on U96v2
แต่ในการทดลองนี้เราจะโฟกัสไปที่การใช้งาน Poinpillars เพื่อทำการทดสอบการวิเคราะห์ข้อมูลบนท้องถนนด้วย sensor Lidar ขั้นตอนต่อไปจะทดสอบเฉพาะผู้ที่กำลังต่อสายสาย DP และจออยู่เท่านั้น
Command WSL2 ที่จะใช้ในการโยนไฟล์ pp_3d_detect.tar.gz ที่ดาวน์โหลดมาในตอนแรก ไปที่บอร์ด
จากตัวอย่างไฟล์เก็บไว้ใน Download สิ่งที่ต้องแก้ไขคือ
[Name of your user] --> ชื่อของ User ที่เราใช้งานอยู่บน Windows แตกต่างกันไปตามแต่ละเครื่อง
[IP board] --> IP ของบอร์ด Ultra96v2 ที่เราจดไว้จาก step ที่ 2
# Secure copy file Point Pillar detection
$ scp -r /mnt/c/User/[Name of your user]/Downloads/pp_3d_detect.tar.gz root@[IP board]:~/.
# Secure shell to the Ultra96v2 board
$ ssh root@[IP board]
กลับไปที่ command ssh ของบอร์ด Ultra96v2 บนเครื่องคอมพิวเตอร์ของนิสิตแล้วทำการแตกไฟล์
# cd to the home and extract file
$ cd ~
# Exatrac tar file
$ tar -zxvf pp_3d_detect.tar.gz
# Go to Extracted directory
$ cd ~/ppdemo1216
แก้ไขไฟล์ demo.cpp เพื่อแก้ไขโปรแกรม demo.cpp เพื่อใช้งาน Vitis-AI 1.4. โดยการเปลี่ยน header ของโปรแกรม
# Open text editer
$ sudo vim demo.cpp
แก้ไข Header ทำการ comment และเติม header ดัง code ด้านล่าง
//#include <iostream>
#include <fstream>
ออกจาก Vim โดยการกด Esc แล้วทำการพิมคำสั่ง
# กดปุ่ม Esc แล้วพิมคำสั่งข้างล่าง
:wq!
แก้ไขไฟล์ build.sh เพื่อแก้ไขการ compile c++ และ OPENCV_FLAGS เป็น version ใหม่
$ vim build.sh
แก้ไขการ compile ดัง code ด้านล่าง
#g++ -std=c++11 -I. -o demo demo.cpp -lopencv_core -lopencv_video -lopencv_videoio -lopencv_imgproc -lopencv_imgcodecs -lopencv_highgui -lvitis_ai_library-pointpillars -lvart-util -pthread -lglog
result=0 && pkg-config --list-all | grep opencv4 && result=1
if [ $result -eq 1 ]; then
OPENCV_FLAGS=$(pkg-config --cflags --libs-only-L opencv4)
else
OPENCV_FLAGS=$(pkg-config --cflags --libs-only-L opencv)
fi
g++ -std=c++17 -I. ${OPENCV_FLAGS} -o demo demo.cpp -lopencv_core -lopencv_video -lopencv_videoio -lopencv_imgproc -lopencv_imgcodecs -lopencv_highgui -lvitis_ai_library-pointpillars -lvart-util -pthread -lglog

ออกจาก Vim โดยการกด Esc แล้วทำการพิมคำสั่ง
# กดปุ่ม Esc แล้วพิมคำสั่งข้างล่าง
:wq!
ทำการ compile code เพื่อเตรียมสำหรับการรัน
# Build the application
$ source ./build.sh
ทำการรัน Application Point pillar detection
แสดงภาพ Object detection จาก application
./demo ./ppd/vlist.txt ./ppd/ 1
แสดงภาพ Point pillar detection จาก application
./demo ./ppd/vlist.txt ./ppd/ 2
แสดงทั้งสองผลลัพธ์ในหน้าจอ
./demo ./ppd/vlist.txt ./ppd/ 3
จบกันไปแล้วสำหรับแลปในวันนี้นะครับ คิดว่าได้ความรู้อะไรไปบ้าง ลองไปเขียนอธิบายในบันทึกผลการทดลองดูนะครับ ซึ่งในคาบหน้าเราจะมาแกะเจ้าตัวโปรแกรมและ AI ที่รันกันไปในคาบนี้เพื่อให้เพิ่มความเข้าใจและทักษะโปรแกรม Embedded programing กันมากขึ้น
Last updated
Was this helpful?