Step 3 - Installing the Vitis-AI runtime packages

ทำการเตรียมความพร้อมที่จะใช้งาน Vitis-AI บนบอร์ด FPGA

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

โครงสร้างการทำงานของ DPU
การต่อ DPU ให้สามารถทำงานได้บนชิพ

เมื่อผู้ทดลองสามารถเข้าถึงบอร์ด 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
ติดตั้ง library และ runtime ที่ต้องใช้
  1. ทำการตรวจสอบโมดูล DPU บนชิพ FPGA ว่าพร้อมทำงานไหม

WSL Terminal SSH to U96v2
$ xdputil query
สภานะการทำงานของ DPU

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

Was this helpful?