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

  1. ไปที่ WSL ที่ ssh ไปที่ Ultra96v2 แล้วพิมคำสั่งด้านล่าง เพื่อ copy ไฟล์ที่เรียกการใช้งาน Hardware module DPU ไปเตรียมทำงาน

WSL Terminal SSH to U96v2
$ cp /media/sd-mmcblk0p1/dpu.xclbin /usr/lib/.
  1. ทำการติดตั้งแพคเกจ Vitis-AI 1.4 runtime เพื่อใช้ในการ compile AI application ในการทำงานร่วมกับโมดูล DPU

WSL Terminal SSH to U96v2
$ cd ~/install/vitis-ai-runtime-1.4.0
$ source ./setup.sh
  1. ทำการตรวจสอบโมดูล DPU บนชิพ FPGA ว่าพร้อมทำงานไหม

WSL Terminal SSH to U96v2
$ xdputil query

Step 3-2 : Inference Vitsi-AI on U96v2

  1. ทำการ optimize โมดูล DPU ให้เกิดข้อผิดพลาดในการแสดงผลลดลง

WSL Terminal SSH to U96v2
$ cd ~/dpu_sw_optimize/zynqmp
$ source ./zynqmp_dpu_optimize.sh

โดยทำการ รัน script นี้จะแก้ไขปัญหาสองอย่างคือ

  • แก้ไขพื้นที่ partition rootfs ให้เหมาะสมกับการใช้งาน

  • แก้ปัญหา Qos ในการใช้งานหน่วยความจำ DDR เพื่อให้สามารถทำงานในการแสดงภาพได้

  1. สำหรับกลุ่มทดลองที่มีสาย Display port ให้ทำการตั้งค่าตัวแปรในการแสดงภาพ

WSL Terminal SSH to U96v2
$ export DISPLAY=:0.0

โดยตัว command นี้จะเป็นการตั้งค่าตัวแปรที่ใช้ใน LinuxOS เพื่อใช้ในการแสดงผลออกที่ตัว Display Port

  1. ตั้งค่า resolution ของจอแสดงผล

WSL Terminal SSH to U96v2
$ xrandr --output DP-1 --mode 800x600
  1. ทำการปิด Debug message

WSL Terminal SSH to U96v2
$ dmesg -D
  1. ทำการทดสอบ Vitis-AI-Library ในการทำงานของ AI application ร่วมกับ DPU

WSL Terminal SSH to U96v2
$ 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 และจออยู่เท่านั้น

  1. Command WSL2 ที่จะใช้ในการโยนไฟล์ pp_3d_detect.tar.gz ที่ดาวน์โหลดมาในตอนแรก ไปที่บอร์ด

ดูที่เก็บไฟล์ให้ดีเพื่อทำการ copy path ที่เก็บไฟล์ไว้ โดยในหน้า File exporter ให้กด Ctrl + L

จากตัวอย่างไฟล์เก็บไว้ใน Download สิ่งที่ต้องแก้ไขคือ

[Name of your user] --> ชื่อของ User ที่เราใช้งานอยู่บน Windows แตกต่างกันไปตามแต่ละเครื่อง

[IP board] --> IP ของบอร์ด Ultra96v2 ที่เราจดไว้จาก step ที่ 2

WSL terminal
# 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]
  1. กลับไปที่ command ssh ของบอร์ด Ultra96v2 บนเครื่องคอมพิวเตอร์ของนิสิตแล้วทำการแตกไฟล์

WSL Terminal SSH to U96v2
# cd to the home and extract file
$ cd ~
# Exatrac tar file
$ tar -zxvf pp_3d_detect.tar.gz
# Go to Extracted directory
$ cd ~/ppdemo1216
  1. แก้ไขไฟล์ demo.cpp เพื่อแก้ไขโปรแกรม demo.cpp เพื่อใช้งาน Vitis-AI 1.4. โดยการเปลี่ยน header ของโปรแกรม

WSL Terminal SSH to U96v2
# Open text editer 
$ sudo vim demo.cpp
  1. แก้ไข Header ทำการ comment และเติม header ดัง code ด้านล่าง

demo.cpp
//#include <iostream>
#include <fstream>
  1. ออกจาก Vim โดยการกด Esc แล้วทำการพิมคำสั่ง

VIM on WSL Terminal SSH to U96v2
# กดปุ่ม Esc แล้วพิมคำสั่งข้างล่าง
:wq! 
  1. แก้ไขไฟล์ build.sh เพื่อแก้ไขการ compile c++ และ OPENCV_FLAGS เป็น version ใหม่

WSL Terminal SSH to U96v2
$ vim build.sh
  1. แก้ไขการ compile ดัง code ด้านล่าง

build.sh

#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
  1. ออกจาก Vim โดยการกด Esc แล้วทำการพิมคำสั่ง

VIM on WSL Terminal SSH to U96v2
# กดปุ่ม Esc แล้วพิมคำสั่งข้างล่าง
:wq! 
  1. ทำการ compile code เพื่อเตรียมสำหรับการรัน

WSL Terminal SSH to U96v2
# Build the application
$ source ./build.sh
  1. ทำการรัน Application Point pillar detection

  • แสดงภาพ Object detection จาก application

WSL Terminal SSH to U96v2
./demo ./ppd/vlist.txt ./ppd/ 1
  • แสดงภาพ Point pillar detection จาก application

WSL Terminal SSH to U96v2
./demo ./ppd/vlist.txt ./ppd/ 2
  • แสดงทั้งสองผลลัพธ์ในหน้าจอ

WSL Terminal SSH to U96v2
./demo ./ppd/vlist.txt ./ppd/ 3

จบกันไปแล้วสำหรับแลปในวันนี้นะครับ คิดว่าได้ความรู้อะไรไปบ้าง ลองไปเขียนอธิบายในบันทึกผลการทดลองดูนะครับ ซึ่งในคาบหน้าเราจะมาแกะเจ้าตัวโปรแกรมและ AI ที่รันกันไปในคาบนี้เพื่อให้เพิ่มความเข้าใจและทักษะโปรแกรม Embedded programing กันมากขึ้น

Last updated

Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University