Xilinx 推出 Kria SOM 令人兴奋!KV260 Vision AI 入门套件是用于开发和原型设计加速算法的绝佳平台,包括但不限于机器学习、计算机视觉和信号处理。Kria App Store中有几个预建的加速应用程序,可以下载并在 KV260 上运行。Xilinx 的智能相机和 NLP-SmartVision 应用程序使用 AR1335 图像传感器和 AP1302 ISP(AR1335 传感器包含在KV260 配件包中,并且是图像处理应用程序的一个很好的补充)。在测试了一些预构建的应用程序之后,您可能会问,“我如何创建自己的应用程序”。该项目将描述可用于创建用于加速 ML 推理任务的基本设计的步骤。
在我们开始之前,回顾一些 KV260 术语会很有帮助
该项目将为支持 AR1335 传感器的平台创建自定义叠加层。
对于这个项目,我们将从 KV260 BSP 和一些参考设计开始。从那里我们将修改 BSP 和参考设计以创建我们的自定义加速 ML 推理应用程序。
~/Downloads
目录kv260_ml_accel
mkdir ~/kv260_ml_accel
export PROJ_DIR=~/kv260_ml_accel
KV260-Vitis
cd $PROJ_DIR
git clone https://github.com/xilinx/kv260-vitis
cd kv260-vitis
git checkout release-2020.2.2_k26
Vitis-AI
从 GitHub克隆存储库。该Vitis-AI
存储库将用于将深度学习处理单元 (DPU) 添加到设计中。
cd $PROJ_DIR
git clone https://github.com/xilinx/Vitis-AI
cd Vitis-AI
git checkout v1.3
注意:DPU 是位于 KV260 SOM 上的 Xilinx Zynq UltraScale+ MPSoC 芯片中 ARM A53 处理器复合体的软 CNN 协处理器。
cd $PROJ_DIR
git clone https://github.com/Xilinx/Vitis_Libraries
cd Vitis_Libraries
git checkout 2020.2
source /2020.2/settings64.sh
source /2020.2.2/settings.sh
注意:前面命令中显示的设置脚本位于工具安装目录中,例如 Vitis 可能安装在/tools/Xilinx/Vitis/2020.2
您机器上的目录中。
$XILINX_VIVADO/data/boards/board_files
目录中安装板文件。
cd $PROJ_DIR
wget https://www.hackster.io/code_files/543211/download -O get_kv260_boards.sh
dos2unix get_kv260_boards.sh
sh ./get_kv260_boards.sh
NLP-SmartVision 平台提供基本时钟(100、300、600 MHz)和内存连接,用于向 PL 添加加速器。该平台还提供与 AR1335 和 AP1302 接口所需的捕获管道。这将是该项目的基础平台。
修改平台以删除捕获管道中的标量 IP。如果需要执行传感器数据缩放,可以使用 AP1302 ISP 完成。此修改对于适合 KV260 设备 URAM 资源是必要的。
cd $PROJ_DIR/kv260-vitis/platforms/vivado/kv260_ispMipiRx_DP/scripts
cp config_bd.tcl config_bd.tcl.orig
sed -i 's/C_TOPOLOGY {0}/C_TOPOLOGY {3}/g' config_bd.tcl
sed -i '132i\ \ \ CONFIG.C_CSC_ENABLE_WINDOW {false} \\' config_bd.tcl
sed -i 's/v_proc_ss_0\/aclk_axis/v_proc_ss_0\/aclk/g' config_bd.tcl
sed -i 's/\[get_bd_pins v_proc_ss_0\/aclk_ctrl\]//g' config_bd.tcl
sed -i 's/v_proc_ss_0\/aresetn_ctrl/v_proc_ss_0\/aresetn/g' config_bd.tcl
以下命令将构建平台:
cd $PROJ_DIR/kv260-vitis
make platform PFM=kv260_ispMipiRx_DP
平台构建完成后,输出将位于$PROJ_DIR/kv260-vitis/platforms/xilinx_kv260_ispMipiRx_DP_202022_1
在大多数情况下,传感器数据需要先降低分辨率,然后才能执行 ML 推理。输入捕获管道设置为捕获最大 4K 的图像大小,但大多数 ML 网络不支持这么大的输入大小。为了在 ML 推理之前缩放图像,我们将使用 Vitis Vision 库将图像缩放器 IP 添加到 PL 作为加速器。
cd $PROJ_DIR/Vitis_Libraries/vision/L2/examples/resize
sed -i 's/RGB 0/RGB 1/g' build/xf_config_params.h
sed -i 's/GRAY 1/GRAY 0/g' build/xf_config_params.h
v++ -c -t hw xf_resize_accel.cpp \
--platform $PROJ_DIR/kv260-vitis/platforms/xilinx_kv260_ispMipiRx_DP_202022_1/kv260_ispMipiRx_DP.xpfm \
--kernel_frequency 300 \
-I../../../L1/include \
-I./build \
--save-temps \
-k resize_accel \
-o resize_accel.xo
resize_accel.xo
),这是我们将加速器添加到我们的 PL 覆盖层所需要的。我们将使用 Vitis-AI DPU-TRD 将 DPU IP 添加到设计中。DPU 是用于加速 CNN 推理任务的 IP。对于这个项目,我们将使用最大的 DPU——B4096 DPU。
cd $PROJ_DIR/Vitis-AI/dsa/DPU-TRD/prj/Vitis
dpu_conf.vh
文件以使用 UltraRAM。以下sed
命令将更新dpu_conf.vh
文件以启用 UltraRAM
sed -i 's/^`define URAM_DISABLE/`define URAM_ENABLE/' dpu_conf.vh
cd config_file
mv prj_config prj_config.orig
wget https://www.hackster.io/code_files/542906/download -O prj_config
cd ..
resize_accel.xo
)
sed -i '53i kernel_xo += ${PROJ_DIR}/Vitis_Libraries/vision/L2/examples/resize/resize_accel.xo' Makefile
export SDX_PLATFORM=$PROJ_DIR/kv260-vitis/platforms/xilinx_kv260_ispMipiRx_DP_202022_1/kv260_ispMipiRx_DP.xpfm
make binary_container_1/dpu.xclbin KERNEL=DPU DEVICE=kv260
构建完成后,您将看到位于目录中的dpu.xclbin
文件$PROJ_DIR/Vitis-AI/dsa/DPU-TRD/prj/Vitis/binary_container_1
和位于$PROJ_DIR/Vitis-AI/dsa/DPU-TRD/prj/Vitis/binary_container_1/link/vivado/vpl/prj/prj.runs/impl_1
目录中的位文件。
mkdir -p $PROJ_DIR/overlay_files
cd binary_container_1
cp dpu.xclbin $PROJ_DIR/overlay_files
cp link/vivado/vpl/prj/prj.runs/impl_1/*.bit $PROJ_DIR/overlay_files/kv260-ml-accel.bit
在项目设置部分,我们从 Xilinx 下载站点下载了 BSP。我们将使用下载的 BSP 创建 PetaLinux 项目。以下命令将从 BSP 创建项目。
cd $PROJ_DIR
petalinux-create -t project -s ~/Downloads/xilinx-k26-starterkit-v2020.2.2-final.bsp
cd xilinx-k26-starterkit-2020.2.2
echo 'BOARD_VARIANT = "kv"' >> project-spec/meta-user/conf/petalinuxbsp.conf
petalinux-config --silentconfig
自定义 PL 覆盖将被打包为 PetaLinux 项目中的应用程序,并添加到目标根文件系统。这允许 xmutil 实用程序在 Linux 在 KV260 上启动后将自定义覆盖加载为“加速应用程序”。
wget https://raw.githubusercontent.com/Xilinx/kv260-firmware/release-2020.2.2_k26/nlp-smartvision/kv260-nlp-smartvision.dtsi -O $PROJ_DIR/overlay_files/kv260-ml-accel.dtsi
cd $PROJ_DIR/overlay_files
sed -i 's/scaler-2.2/csc/g' kv260-ml-accel.dtsi
sed -i 's/clock-names = "aclk_axis", "aclk_ctrl"/clock-names = "aclk"/g' kv260-ml-accel.dtsi
sed -i 's/clocks = <\&misc_clk_2>, <\&misc_clk_2>/clocks = <\&misc_clk_2>/g' kv260-ml-accel.dtsi
sed -i '/xlnx,num-hori-taps = <6>;/d' kv260-ml-accel.dtsi
sed -i '/xlnx,num-vert-taps = <6>;/d' kv260-ml-accel.dtsi
cd $PROJ_DIR/xilinx-k26-starterkit-2020.2.2
petalinux-create -t apps --template fpgamanager --name kv260-ml-accel --enable --srcuri "$PROJ_DIR/overlay_files/kv260-ml-accel.bit $PROJ_DIR/overlay_files/kv260-ml-accel.dtsi $PROJ_DIR/overlay_files/dpu.xclbin"
该应用程序将在中创建$PROJ_DIR/xilinx-k26-starterkit-2020.2.2/project-spec/meta-user/recipes-apps/kv260-ml-accel.
如果您需要更新比特流、设备树或 xclbin,则只需替换位于该目录中的文件即可。但是,请确保保留相同的名称,因为 .bb 文件正在寻找特定的名称。
向项目添加额外的软件包将创建一个目标根文件系统,其中包含用于 ML 推理的必要库。这些库包括 Vitis-AI 和 OpenCV 以及其他各种实用程序。此外,还有用于编程 AP1302 ISP 的固件文件也需要添加到项目中。
以下命令会将包添加到项目中:
mkdir -p project-spec/meta-user/recipes-core/packagegroups
echo '
DESCRIPTION = "KV260 ML inference app related packages"
inherit packagegroup
KV260_ML_ACCEL_PACKAGES = " \
ap1302-ar1335-single-firmware \
dnf \
e2fsprogs-resize2fs \
parted \
resize-part \
packagegroup-petalinux-vitisai \
packagegroup-petalinux-vitisai-dev \
packagegroup-petalinux-gstreamer \
cmake \
libgcc \
gcc-symlinks \
g++-symlinks \
binutils \
xrt \
xrt-dev \
zocl \
opencl-clhpp-dev \
opencl-headers-dev \
packagegroup-petalinux-opencv \
packagegroup-petalinux-opencv-dev \
packagegroup-petalinux-v4lutils \
"
RDEPENDS_${PN} = "${KV260_ML_ACCEL_PACKAGES}"
COMPATIBLE_MACHINE = "^$"
COMPATIBLE_MACHINE_k26-kv = "${MACHINE}"
PACKAGE_ARCH = "${BOARDVARIANT_ARCH}"
' > project-spec/meta-user/recipes-core/packagegroups/packagegroup-kv260-ml-accel.bb
echo "CONFIG_packagegroup-kv260-ml-accel" >> project-spec/meta-user/conf/user-rootfsconfig
echo "CONFIG_packagegroup-kv260-ml-accel=y" >> project-spec/configs/rootfs_config
以下命令将构建 PetaLinux 项目,然后将输出文件打包为 wic 映像,可以将其写入 SD 卡。
petalinux-build
petalinux-package --wic --bootfiles "ramdisk.cpio.gz.u-boot boot.scr Image system.dtb"
可以使用 BalenaEtcher 等映像实用程序或在 Linux 上使用命令将 wic 映像文件写入 SD 卡dd
。可以在 Linux 机器上使用以下命令将 wic 映像写入 SD 卡。在继续之前,请务必阅读以下免责声明:
sudo dd if=images/linux/petalinux-sdimage.wic of=/dev/sdstatus=progress
注意:上面提到的 SD 卡/dev/sd
对于您的系统将是唯一的。您需要将 替换为sd
适合您系统的驱动器映射。例如,sd
可能等于sda
、sdb
、sdc
等,具体取决于您的系统如何枚举 SD 卡设备。确保在of=
上面的参数中指定的名称是设备名称,而不仅仅是一个分区(即of=/dev/sd
正确,但of=dev/sd1
不正确)。
sudo eject /dev/sd
注意:上一步中关于 SD 卡设备枚举的说明也适用于此步骤。
将上一节镜像中的micro-SD卡插入KV260 micro-SD卡槽,给板子上电。该板应该开始启动,完成后您将看到登录提示。使用用户名“petalinux”登录,然后根据提示更改密码。有关串行端口控制台示例,请参见下图。
Xilinx Vitis-AI Model Zoo 具有针对 B4096 DPU 架构的预编译模型。我们正在创建的示例应用程序使用 DenseBox 人脸检测模型。以下命令将下载预训练和预编译的模型,然后将其安装在 KV260 根文件系统中。请在 KV260 上执行以下命令。
cd /home/petalinux
wget https://www.xilinx.com/bin/public/openDownload?filename=densebox_640_360-zcu102_zcu104-r1.3.0.tar.gz -O densebox_640_360-zcu102_zcu104-r1.3.0.tar.gz
sudo mkdir -p /usr/share/vitis_ai_library/models
提取模型:
sudo tar -xvzf densebox_640_360-zcu102_zcu104-r1.3.0.tar.gz -C /usr/share/vitis_ai_library/models
以下命令将下载并提取示例应用程序代码
wget https://hacksterio.s3.amazonaws.com/uploads/attachments/1393631/face_detect_px1rBmdftj.zip -O face_detect.zip
unzip face_detect.zip
示例应用程序代码使用编译 ML 预处理加速器部分中创建的硬件加速器执行图像缩放。DenseBox 人脸检测模型的输入层大小为 640x360,但捕获分辨率为 1920x1080。调用硬件加速器以使用 OpenCL API 调整图像大小。硬件加速器管理由头文件中定义的类处理。resize_accel.hpp
在我们编译应用程序之前,我们必须加载 kv260-ml-accel Kria 应用程序。在 KV260 上执行以下命令将卸载默认应用程序,然后加载 kv260-ml-accel 应用程序。
sudo xmutil unloadapp
sudo xmutil loadapp kv260-ml-accel
加载 kv260-ml-accel 后,您应该在终端中看到以下内容
加载应用程序后,您可能需要按键盘上的“返回或输入”以返回提示。执行以下命令来设置 MIPI 捕获管道。
cd /home/petalinux/face_detect
./setup_media_pipe.sh
运行脚本后,如果您将 MIPI 摄像头连接到连接器 J7,您应该会看到类似于以下内容的输出。
。该值将需要作为参数传递给示例应用程序。
执行以下命令来运行应用程序。您应该会看到 1920x1080 的捕获图像以及覆盖在 HDMI 监视器上的人脸检测。
cd /home/petalinux/face_detect
./facedetect.exe /dev/video2
请注意,这是一个非常简单的示例应用程序,并未针对性能进行优化(即它是单线程的)。
该项目为 Kria KV260 Vision AI 入门套件创建了自定义机器学习加速应用程序。加速应用程序包括与 B4096 DPU CNN 和图像缩放加速器的叠加。
我希望你喜欢这个项目。 请关注我,以便及时了解我的最新项目。我正在开展一个项目,该项目描述了如何将此加速应用程序添加到Xilinx Kria KV260 Vision AI 入门套件的认证 Ubuntu 映像中。
更新2/9/2022 - 请查看我的其他项目,该项目使用 KV260 的官方 Canonical Ubuntu 映像 -使用 Xilinx Kria KV260 在 Ubuntu 上轻松进行机器学习
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !