资料介绍
描述
介绍
Xilinx 推出 Kria SOM 令人兴奋!KV260 Vision AI 入门套件是用于开发和原型设计加速算法的绝佳平台,包括但不限于机器学习、计算机视觉和信号处理。Kria App Store中有几个预建的加速应用程序,可以下载并在 KV260 上运行。Xilinx 的智能相机和 NLP-SmartVision 应用程序使用 AR1335 图像传感器和 AP1302 ISP(AR1335 传感器包含在KV260 配件包中,并且是图像处理应用程序的一个很好的补充)。在测试了一些预构建的应用程序之后,您可能会问,“我如何创建自己的应用程序”。该项目将描述可用于创建用于加速 ML 推理任务的基本设计的步骤。
在我们开始之前,回顾一些 KV260 术语会很有帮助
- 平台:用作基础设计的 Vitis 平台。定义与片外组件(如图像传感器)的物理接口。还定义了加速器时钟和内存接口。
- Overlay:加速应用程序的秘方。这是我们添加 ML 加速器(即 DPU)以及我们需要的任何其他加速器的地方。使用术语“覆盖”是因为我们将这些加速器覆盖在平台上。
该项目将为支持 AR1335 传感器的平台创建自定义叠加层。
要求
项目成立
对于这个项目,我们将从 KV260 BSP 和一些参考设计开始。从那里我们将修改 BSP 和参考设计以创建我们的自定义加速 ML 推理应用程序。
mkdir ~/kv260_ml_accel
export PROJ_DIR=~/kv260_ml_accel
-
使用以下命令从 GitHub克隆示例项目
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 协处理器。
- 从 GitHub 克隆 Vitis_Libraries 存储库。Vitis Vision 库将用于添加 ML 预处理加速器(图像大小调整)
cd $PROJ_DIR
git clone https://github.com/Xilinx/Vitis_Libraries
cd Vitis_Libraries
git checkout 2020.2
- 获取 Vitis 和 PetaLinux 环境设置脚本。如果关闭这些脚本的源终端,则需要在新终端中重复此步骤
source /2020.2/settings64.sh
source /2020.2.2/settings.sh
注意:前面命令中显示的设置脚本位于工具安装目录中,例如 Vitis 可能安装在/tools/Xilinx/Vitis/2020.2
您机器上的目录中。
-
下载 KV260 板文件(如果尚未完成)。以下命令中显示的脚本将在
$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 预处理加速器
在大多数情况下,传感器数据需要先降低分辨率,然后才能执行 ML 推理。输入捕获管道设置为捕获最大 4K 的图像大小,但大多数 ML 网络不支持这么大的输入大小。为了在 ML 推理之前缩放图像,我们将使用 Vitis Vision 库将图像缩放器 IP 添加到 PL 作为加速器。
- 修改默认调整大小加速器配置以支持彩色 (RGB) 图像
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
- 使用 Vitis v++ 命令编译 Vitis Vision 库调整大小功能
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
-
编译过程的输出是 Xilinx 目标文件 (
resize_accel.xo
),这是我们将加速器添加到我们的 PL 覆盖层所需要的。
创建 ML 推理加速叠加层
我们将使用 Vitis-AI DPU-TRD 将 DPU IP 添加到设计中。DPU 是用于加速 CNN 推理任务的 IP。对于这个项目,我们将使用最大的 DPU——B4096 DPU。
- 导航到 DPU-TRD 目录
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
- 使用配置文件定义 DPU 时钟和内存连接。这个项目提供了一个配置文件。以下命令将下载配置文件并将其放置在 DPU-TRD 项目中。
cd config_file
mv prj_config prj_config.orig
wget https://www.hackster.io/code_files/542906/download -O prj_config
cd ..
-
修改 DPU-TRD 项目 Makefile 以包含预处理加速器 (
resize_accel.xo
)
sed -i '53i kernel_xo += ${PROJ_DIR}/Vitis_Libraries/vision/L2/examples/resize/resize_accel.xo' Makefile
- 使用以下命令构建 DPU-TRD 以将 DPU 和调整大小加速器添加到平台
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
从 BSP 创建 PetaLinux 项目
在项目设置部分,我们从 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
将包含 DPU 的自定义 PL 覆盖添加到 PetaLinux 项目
自定义 PL 覆盖将被打包为 PetaLinux 项目中的应用程序,并添加到目标根文件系统。这允许 xmutil 实用程序在 Linux 在 KV260 上启动后将自定义覆盖加载为“加速应用程序”。
- 从 GitHub 下载 kv260_ispMipiRx_DP 平台的平台设备树定义
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
- 从设备树中删除标量特定属性,因为我们从捕获管道中删除了缩放功能(注意:如果需要,AP1302 ISP 仍然能够执行缩放)。
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
- 创建 PetaLinux 应用配方。这将创建将我们的自定义覆盖添加到 PetaLinux 项目所需的文件/目录。
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 项目并创建 SD 卡 wic 映像
以下命令将构建 PetaLinux 项目,然后将输出文件打包为 wic 映像,可以将其写入 SD 卡。
- 构建项目
petalinux-build
- 生成wic镜像文件
petalinux-package --wic --bootfiles "ramdisk.cpio.gz.u-boot boot.scr Image system.dtb"
将 wic 映像写入 SD 卡
可以使用 BalenaEtcher 等映像实用程序或在 Linux 上使用命令将 wic 映像文件写入 SD 卡dd
。可以在 Linux 机器上使用以下命令将 wic 映像写入 SD 卡。在继续之前,请务必阅读以下免责声明:
- 将 SD 卡映像写入空白 SD 卡。以下命令可用于使用 Linux 写入 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
不正确)。
- 当 SD 卡写入过程完成后,您可以使用以下命令弹出设备
sudo eject /dev/sd
注意:上一步中关于 SD 卡设备枚举的说明也适用于此步骤。
设置 KV260
启动 KV260
将上一节镜像中的micro-SD卡插入KV260 micro-SD卡槽,给板子上电。该板应该开始启动,完成后您将看到登录提示。使用用户名“petalinux”登录,然后根据提示更改密码。有关串行端口控制台示例,请参见下图。
从 Xilinx Vitis-AI Model Zoo 下载预编译的 DenseBox 人脸检测模型
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 上轻松进行机器学习
- Kria KV260视觉AI入门套件用户指南
- 教程 2:添加特征-自定义配置文件创建
- 使用KV260进行事故检测
- Vitis ai 1.4 KV260镜像开源
- 在KV260上运行Yolov4 tiny
- 教程 2:添加特征-自定义配置文件创建
- 为Kria KV260添加USB WiFi
- Kria KV260 AI视觉套件入门
- Xilinx Kria KV260套件的第一个硬件项目
- Vivado 2021.1中的Kria KV260入门
- 使用Xilinx Kria KV260进行AI火灾探测
- Kria KV260上的动态交通灯系统
- 使用Microsoft AJAX Library创建自定义客户端脚本的资料说明 6次下载
- 远程网络处理器应用程序和与自定义应用程序的详细资料免费下载 3次下载
- 在NI Multisim中创建自定义元器件 0次下载
- TSMaster 自定义 LIN 调度表编程指导 389次阅读
- AMD Kria KR260 DPU配置教程 862次阅读
- 博途用户自定义库的使用 639次阅读
- IAR下手动拷贝自定义程序段到RAM中执行的方法分享 1349次阅读
- 怎样为显示器创建自定义分辨率呢? 5897次阅读
- 如何在KV260上快速体验Vitsi AI图像分类示例程序 1289次阅读
- 添加自定义属性控制fridaserver启动和停止 1350次阅读
- 自定义特性能做什么? 700次阅读
- 如何自定义函数或局部脚本 1305次阅读
- 创建自定义的u-boot命令 988次阅读
- 如何在Vivado中更改自定义的Interface 2660次阅读
- Glib创建自定义事件源的方法 2834次阅读
- 如何给EOS账号设置自定义权限 1414次阅读
- Qt自定义窗口部件的创建 2368次阅读
- erlang如何自定义_ERLANG环境搭建 1467次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多