0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Vitis-AI加速YOLOX模型实现视频中的目标检测

电子发烧友论坛 来源: 电子发烧友论坛 2023-10-16 15:43 次阅读

本文将介绍如何使用Vitis-AI加速YOLOX模型实现视频中的目标检测,并对相关源码进行解读。由于演示的示例程序源码是Vitis-AI开源项目提供的,本文演示之前会介绍所需要的准备工作。演示之后会对关键源码进行解析。

一、Vitis AI Library简介

上一篇帖子中,我们了解了Vitis统一软件平台和Vitis AI,并体验了Vitis AI Runtime的Resnet50图像分类示例程序。本篇文章我们将会介绍Vitis AI Library,并体验基于Vitis AI Library的YOLOX视频目标检测示例程序。

Vitis AI User Guide中的一张图可以很好的理解Vitis AI Library和Vitis AI Runtime的关系:

d721f4ce-6700-11ee-939d-92fbcf53809c.png

简单来说,Vitis AI Library是在Vitis AI Runtime之上构建出来的。

二、YOLOX视频目标检测示例体验

参考此前的帖子:【KV260视觉入门套件试用体验】部署DPU镜像并运行Vitis AI图像分类示例程序

首先需要部署DPU镜像,DPU镜像系统启动过程中会加载DPU IP到FPGA侧,并且系统本身已经集成了Vitis AI所需的各种库文件。

2.1 准备测试所需视频文件

赛灵思官方文档里面提供了测试视频资源

在开发板上下载、解压的命令为:

# 跳转到HOME目录
cd ~


# 下载 tar.gz 文件
TGZ=[vitis_ai_library_r3.0.0_video.tar.gz](https://china.xilinx.com/bin/public/openDownload?filename=vitis_ai_library_r3.0.0_video.tar.gz)
wget -O $TGZ "[https://china.xilinx.com/bin/public/openDownload?filename=](https://china.xilinx.com/bin/public/openDownload?filename=vitis_ai_library_r3.0.0_video.tar.gz)$TGZ"


# 解压 tar.gz 文件
DIR=[vitis_ai_library_r3.0.0_video](https://china.xilinx.com/bin/public/openDownload?filename=vitis_ai_library_r3.0.0_video.tar.gz)
mkdir $DIR
tar -C $DIR -xvf $TGZ

(左右移动查看全部内容)

2.2 准备KV260套件和DPU镜像SD

和上一篇帖子一样,使用Vitis-AI之前需要先准备好KV260套件和写入DPU镜像的SD卡,具体可以参考上一篇帖子中的第二章“部署DPU镜像到KV260”:【KV260视觉入门套件试用体验】部署DPU镜像并运行Vitis AI图像分类示例程序

2.3 编译YOLOX视频目标检测示例程序

KV260使用DPU镜像的SD卡启动后,跳转到Vitis-AI/目录下,可以看到如下文件及目录:

d735daca-6700-11ee-939d-92fbcf53809c.png

其中,蓝色的为目录,绿色的为可执行文件,白色的为没有执行权限的文件。

执行build.sh脚本,可以重新编译文件(可以尝试将可执行文件删除掉再重新执行build.sh脚本)。

该脚本文件内的代码为:

d7503bd6-6700-11ee-939d-92fbcf53809c.png

重新编译后,可以看到时间戳全部更新了:

d7612df6-6700-11ee-939d-92fbcf53809c.png

2.4 运行YOLOX视频目标检测示例程序

接下来,运行YOLOX视频目标检测程序——test_video_yolox,命令为:

VIDEO_PATH=~/vitis_ai_library_r3.0.0_video/apps/seg_and_pose_detect/seg_960_540.avi
MODEL_NAME=yolox_nano_pt
./test_video_yolovx $MODEL_NAME $VIDEO_PATH

(左右移动查看全部内容)

可以看到,画面中的目标被框起来了。

三、YOLOX视频目标检测原理解析

YOLOX视频目标检测示例程序源码非常简短(test_video_yolovx.cpp文件):

d789637a-6700-11ee-939d-92fbcf53809c.png

这段代码中:

model是模型名称;

vitis::create(model) 用于创建模型;

3.1 main_for_video_demo 源码分析

main_for_video_demo 核心代码如下:

d78d6ec0-6700-11ee-939d-92fbcf53809c.png

其中,关键代码行如下:

parse_opt 用于解析命令行参数,包括线程数(例如-t 4指定4个线程)和视频文件名

decode_queue 是解码队列,用于传递已经解码的图像;

decode_thread 是解码任务线程,读取视频文件,并解码每一帧画面,放入解码队列;

dpu_thread 是DPU任务线程,从解码队列取出图像,如果-t 参数指定的大于1,会创建多个DPU线程(不指定-t参数,默认为1个DPU线程);

gui_thread 是图形用户界面(GUI)线程,调用cv::imshow显示每一帧结果画面;

gui_queue 是结果图像队列,GUI线程会从这个队列取出图像再显示出来;

sorting_thread 是排序线程,用于确保传递给gui_queue的图像和视频中出现的顺序一致,从而保证视频显示的画面正常。

这段代码搭建了一个多线程的视频处理流水线,流水线结构如下图所示:

d7b8974e-6700-11ee-939d-92fbcf53809c.png

3.2 DecodeThread 源码分析

DecodeThread的构造函数:

d7bca62c-6700-11ee-939d-92fbcf53809c.png

构造函数中调用open_stream,open_stream创建了OpenCV的VideoCapture对象指针,用于后续视频文件读取操作。

d7c52ab8-6700-11ee-939d-92fbcf53809c.png

DecodeThread::run函数:

d7e11d9a-6700-11ee-939d-92fbcf53809c.png

DecodeThread::run函数的关键代码为:

cap >> image 实现了从视频读取画面,

queue_->push(…) 实现了给帧画面编号,并将其放入队列。

3.3 SortingThread 源码分析

SortingThread::run函数关键代码如下:

d7ffa0e4-6700-11ee-939d-92fbcf53809c.png

SortingThread::run中的关键代码为:

queue_in_->pop(…) 等待特定frame_id的图像到来;

queue_out_->push(…) 再将其放入输出队列(gui_queue)。

3.4 GuiThread 源码分析

GuiThread::run函数源码:

d827ddac-6700-11ee-939d-92fbcf53809c.png

其中关键的代码为:

调用queue_->pop()从队列取出一帧画面;

调用cv::imshow显示图像画面。

3.5 DpuThread 源码解析

DpuThread::run函数源码:

d850cf82-6700-11ee-939d-92fbcf53809c.png

其中关键代码为:

调用queue_in_->pop(frame)取出画面;

调用filter_->run(frame.mat)处理画面;

调用queue_out_->push(frame)传出画面;

要解读filter到底是什么,还需要看DpuThread构造函数的声明:

d871dae2-6700-11ee-939d-92fbcf53809c.png

以及DpuThread类型实例化的代码:

d88de4e4-6700-11ee-939d-92fbcf53809c.png

以及main函数:

d89d4308-6700-11ee-939d-92fbcf53809c.png

这里可以看到:

factory_method是一个C++11的lamba表达式,

其中调用了vitis::create(model);

vitis::create的具体实现代码较多,感兴趣的可以自行查阅Vitis-AI源码,它主要实现了模型加载,以及调用Vitis-AI-Runtime接口执行推理,这里不再解读。

process_result函数定义:

d8a652e0-6700-11ee-939d-92fbcf53809c.png

可以看到,process_result的作用主要是画出方框,以及打印日志。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    87

    文章

    26464

    浏览量

    264091
  • DPU
    DPU
    +关注

    关注

    0

    文章

    294

    浏览量

    23968
  • 模型
    +关注

    关注

    1

    文章

    2706

    浏览量

    47699
  • 目标检测
    +关注

    关注

    0

    文章

    185

    浏览量

    15455
  • Vitis
    +关注

    关注

    0

    文章

    144

    浏览量

    7159

原文标题:【试用报告】Vitis-AI加速的YOLOX视频目标检测示例体验和原理解析

文章出处:【微信号:gh_9b9470648b3c,微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在ultrascale+上利用VCU和DPU实现的智能零售系统

    整个系统是以DPU为核心,在 DPU 上部署对象检测模型实现实时智能检测,该系统视频输入可以来自 VCU 解码的
    发表于 02-20 17:35

    基于YOLOX目标检测算法的改进

    并应用于边界框回归损失,提高了 YOLOX 在 KITTI 数据集上的检测精度,检测出更多的遮挡目标;采用动态锚框来优化置信度标签分配,
    发表于 03-06 13:55

    【KV260视觉入门套件试用体验】部署vitis-ai环境以及测试demo

    /usr/share/vitia_ai_library能找到样例所需要的全部models 此时目标环境已经搭建完成。但是想要正式使用,还要有交叉编译环境 开始程序需要如下文档指导: Viti
    发表于 08-27 23:35

    【KV260视觉入门套件试用体验】部署DPU镜像并运行Vitis AI图像分类示例程序

    Model Composer 是一款基于模型的设计工具,不仅可在 MathWorks MATLAB® 和 Simulink® 环境实现快速设计探索与验证 ,而且还可加速 AMD 器
    发表于 09-10 23:01

    【KV260视觉入门套件试用体验】五、VITis AI (人脸检测和人体检测)

    都已编译到预构建的 Vitis AI 开发板镜像。您可直接运行示例。如有新程序,请在主机侧对其进行编译并将可执行程序复制到目标。 1. 使用 scp 命令将
    发表于 09-26 16:22

    【KV260视觉入门套件试用体验】六、VITis AI车牌检测&车牌识别

    。下图显示了车牌检测的结果。 将图片中的车牌进行了框选,同事标准位置。 4.2、车牌识别 cd ~/Vitis-AI/examples/vai_library/samples/platenum
    发表于 09-26 16:28

    【KV260视觉入门套件试用体验】七、VITis AI字符和文本检测(OCR&Textmountain)

    4.1、字符检测 使用命令运行代码程序。 cd ~/Vitis-AI/examples/vai_library/samples/ocr ./test_jpeg_ocr ocr_pt
    发表于 09-26 16:31

    【KV260视觉入门套件试用体验】八、VITis AI自动驾驶多任务执行MultiTask V3

    是一种模型,旨在同时执行自动驾驶场景的不同任务,同时实现优异的性能和效率。这些任务包括对象检测、分割、车道检测、可行驶区域分割和深度估算,
    发表于 09-26 16:43

    【KV260视觉入门套件试用体验】基于Vitis AI的ADAS目标识别

    AI模型商城。 Vitis AI Model Zoo 包含经过最优化的深度学习模型,可在赛灵思平台上
    发表于 09-27 23:21

    【KV260视觉入门套件试用体验】Vitis-AI加速YOLOX视频目标检测示例体验和原理解析

    本文将介绍如何使用Vitis-AI加速YOLOX模型实现视频
    发表于 10-06 23:32

    【KV260视觉入门套件试用体验】Vitis AI 构建开发环境,并使用inspector检查模型

    FFT运算(Vivado) 四、硬件加速之—使用PL加速矩阵乘法运算(Vitis HLS) 五、Vitis AI 构建开发环境,并使用ins
    发表于 10-14 15:34

    基于紫光同创FPGA的多路视频采集与AI轻量化加速的实时目标检测系统

    基于紫光同创FPGA的多路视频采集与AI轻量化加速的实时目标检测系统#2023集创赛#紫光同创#小眼睛科技助力紫光同创高校生态建设@小眼睛科
    发表于 11-02 17:51

    YOLOX目标检测模型的推理部署

    旷视科技开源了内部目标检测模型-YOLOX,性能与速度全面超越YOLOv5早期版本!
    的头像 发表于 04-16 23:00 2626次阅读

    Xilinx KV260 Vitis-AI 1.4人脸检测

    电子发烧友网站提供《Xilinx KV260 Vitis-AI 1.4人脸检测.zip》资料免费下载
    发表于 06-14 10:34 0次下载
    Xilinx KV260 <b class='flag-5'>Vitis-AI</b> 1.4人脸<b class='flag-5'>检测</b>

    使用Vitis-AI进行车牌识别

    电子发烧友网站提供《使用Vitis-AI进行车牌识别.zip》资料免费下载
    发表于 06-27 09:49 2次下载
    使用<b class='flag-5'>Vitis-AI</b>进行车牌识别