200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 超强检测RT-DETR | Python/C++ 保姆级部署教程 从入门到精通!

超强检测RT-DETR | Python/C++ 保姆级部署教程 从入门到精通!

时间:2021-05-22 15:57:00

相关推荐

超强检测RT-DETR | Python/C++ 保姆级部署教程 从入门到精通!

作者|派派星 编辑|CVHub

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【目标检测】技术交流群

后台回复【2D检测综述】获取鱼眼检测、实时检测、通用2D检测等近5年内所有综述!

Title: DETRs Beat YOLOs on Real-time Object Detection

Paper: /pdf/2304.08069.pdf

Code: /PaddlePaddle/PaddleDetection/tree/develop/configs/rtdetr

导读

众所周知,在目标检测领域,YOLO 系列模型一直充当着老大哥的角色。虽然其检测性能表现优异,但一直被广为诟病的便是其后处理过于繁琐且耗时,不好优化且不够鲁棒。

最近,基于Transformer的端到端检测器(DETR)取得了显著的性能。然而,DETR的高计算成本问题尚未得到有效解决,限制了它们的实际应用,并阻止它们充分利用无后处理的优点,例如非最大值抑制(NMS)。

于是乎,百度近期又基于 DETR 实现并开源了第一个实时的端到端物体检测器RT-DETR,有效的避免 NMS 导致的推理延迟同时提升性能。

具体来说,作者设计了一个高效的混合编码器,通过解耦内部尺度交互和跨尺度融合来高效地处理多尺度特征,并提出了 IoU 感知的查询选择来改进目标查询的初始化。此外,RT-DETR 支持使用不同的解码器层来灵活调整推断速度,无需重新训练,从而方便实时物体检测器的实际应用。

最终 RTDETR-L 在COCO val上达到了53.0%的AP和114 FPS的速度,而RT-DETR-X达到了54.8%的AP和74 FPS,速度和准确性均优于相同规模的所有YOLO检测器。此外,RTDETR-R50 在精度上比 DINO-Deformable-DETR-R50 高 2.2% 的 AP,在FPS上高出约21倍,达到了 53.1% 的 AP 和 108 FPS!

关于理论部分我们简单介绍到这里,具体的解读可参考:https://mp./s/o03QM2rZNjHVto36gcV0Yw。本文着中教大家如何从零到一完成 RT-DETR 模型的部署。具体的代码可直接在文末点击阅读原文直接跳转到 Github,欢迎点个 star!

安装依赖

新建一个虚拟环境【可选】

condacreate-npaddlepaddlepython=3.8-ycondaactivatepaddlepaddle

下载相应的 paddle 版本【PaddlePaddle >= 2.4.1】

#此处安装了适配CUDA11.7的PaddleGPU2.4.2版本,请根据自己本地环境修改python-mpipinstallpaddlepaddle-gpu==2.4.2.post117-/whl/linux/mkl/avx/stable.html

下载代码仓库

gitclone/PaddlePaddle/PaddleDetection.gitgitcheckoutdevelop#InstallotherdependenciescdPaddleDetectionpipinstall-rrequirements.txt#Compileandinstallpaddledetpythonsetup.pyinstall

下载预训练权重并测试环境是否正常

#下载权重wget/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams&&mkdirweights&&mvrtdetr_r50vd_6x_coco.pdparams./weights#测试看能否正常infer,测试图片自行替换下pythontools/infer.py-cconfigs/rtdetr/rtdetr_r50vd_6x_coco.yml-oweights=/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams--infer_img=bus.jpg

修改配置文件

首先,进入文件路径 【PaddleDetection/configs/rtdetr/base/rtdetr_r50vd.yml】修改 DETR 的导出配置:

其次,进入文件路径 【PaddleDetection/ppdet/modeling/architectures/detr.py】将后处理输出合并下,便于部署

注意,此处输出的 score 默认是没有归一化的,如果想一步到位的可以直接加 sigmoid 处理下。不过问题不大,因为我们的部署代码已经植入了自动判断,可根据输出值动态适配,此处可加可不加。另外,默认的导出方式是静态的,如果想改成动态Shape,只需调用 【PaddleDetection/scripts/paddle_infer_shape.py】函数修改--input_shape_dict="{'image': [-1, 3, -1, -1]"即可,这里 -1 代表动态输入。

最后,直接导出模型权重即可:

pythontools/export_model.py-cconfigs/rtdetr/rtdetr_r50vd_6x_coco.yml\-oweights=/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparamstrt=True\--output_dir=output_inference

转换模型格式

pipinstallonnx==1.13.0pipinstallpaddle2onnx==1.0.5paddle2onnx--model_dir=./output_inference/rtdetr_r50vd_6x_coco/\--model_filenamemodel.pdmodel\--params_filenamemodel.pdiparams\--opset_version16\--save_file./output_inference/rtdetr_r50vd_6x_coco/rtdetr_r50vd_6x_coco.onnx

此处我们仅以 ONNXRUNTIME 进行演示,对于想部署到 TensorRT 平台的可直接参考 PaddleDetection 官方提供的转换脚本,部署流程都差不多,只需要按照此工程写好预处理和后处理即可。

使用 onnxsim 简化输出并用 netron 打开检查下:

pipinstallnetronpip3install-Upip&&pip3installonnxsimonnxsiminput_onnx_modeloutput_onnx_model

左边是不做任何处理的原始导出模型,右边是经过适当调整后的导出模型。

Python 部署

这一块比较简单,经过上面的操作系统应该已经默认安装了onnxruntime库了,接下来我们只需照着下面的代码运行下即可。

$gitclone/CVHub520/rtdetr-onnxruntime-deploy.git$cdrtdetr-onnxruntime-deploy$mkdirweights&&cdweights$wget/CVHub520/rtdetr-onnxruntime-deploy/releases/download/v1.0.0/rtdetr_r50vd_6x_coco_cvhub.onnx$cd../python$python3main.py

C++ 部署

安装编译ONNXRUNTIME,以Linux环境为例。

首先,下载源码:

gitclone/Microsoft/onnxruntimecdonnxruntime/

在安装之前,我们先进入到 onnxruntime 目录,其中 build.sh 文件为编译脚本,先打开看看:

#!/bin/bash#Copyright(c)MicrosoftCorporation.Allrightsreserved.#LicensedundertheMITLicense.#GetdirectorythisscriptisinDIR="$(cd"$(dirname"${BASH_SOURCE[0]}")"&&pwd)"OS=$(uname-s)if["$OS"="Darwin"];thenDIR_OS="MacOS"elseDIR_OS="Linux"fiif[["$*"==*"--ios"*]];thenDIR_OS="iOS"elif[["$*"==*"--android"*]];thenDIR_OS="Android"fi#requirespython3.6orhigherpython3$DIR/tools/ci_build/build.py--build_dir$DIR/build/$DIR_OS"$@"

可以看出,这个处理逻辑只是先判断当前系统环境,针对不同运行平台进行编译,主要编译选项在tools/ci_build/build.py文件下,打开文件后,我们重点看下parse_arguments()函数的参数说明。具体地,我们挑几个比较常见的讲讲:

--build_dir:用于指定编译后的库文件存放路径,不可缺省,此处指定在DIR_O 目录下;

--config:有四种模式,即["Debug", "MinSizeRel", "Release", "RelWithDebInfo"],例如 MinSizeRel 顾名思义便是优化目标文件的大小,而 RelWithDebInfo 则表示带 Debug 信息的原始目标文件,Release 即发行版,其目标文件大小介于这两者之间。一般可直接按默认,或者根据自己需要选择即可,例如我们这里直接选用 Release 版本。

--parallel:是否开启多核编译,建议开启,不然编译速度贼慢;

--skip-tests:单元测试,建议开启,直接跳过;

--use_cuda:如果需要使用 cuda 加速,就开启;注意,如果开启了此项,需要指定 --cuda_home 和 --cudnn_home 的路径,默认存放在 /usr/local 目录下;

--build_shared_lib:是否编译成动态库,默认是编译静态库;

Default behavior is --update --build --test for native architecture builds.

Default behavior is --update --build for cross-compiled builds.

--use_tensorrt:是否使用tensorrt加速,若开启,需要指定 --tensorrt_home 参数。

没问题的我们可以根据自己需要选择合适的编译参数,此处 cuda 和 cudnn 路径需改为自己本地上的路径!:

./build.sh--skip_tests--use_cuda--configRelease--build_shared_lib--parallel--cuda_home/usr/local/cuda-11.7--cudnn_home/usr/local/cuda-11.7

注意,此过程会涉及到很多文件的下载,如果 git 访问很慢会导致多次中断,这时候可以多次重复运行下,若一直网络失败请参考问题汇总。运气不好的话,整个过程可能需要花费数个小时,请耐心等待。

安装编译OpenCV环境。

安装步骤可参考此教程: /p/392751819

下载工程

$cdrtdetr-onnxruntime-deploy$mkdirweights&&cdweights$wget/CVHub520/rtdetr-onnxruntime-deploy/releases/download/v1.0.0/rtdetr_r50vd_6x_coco_cvhub.onnx$cd../cplusplus

注意:要构建项目,请确保正确安装了 onnxruntime 和 opencv。然后,按照指示运行命令。不要忘记更新 CMakeLists.txt 文件中的 ONNXRUNTIME_DIR 和 OpenCV_DIR cmake 选项以匹配您的自定义环境。

$mkdirbuild&&cdbuild$cmake..$make$./main#./main--use_cuda

结果展示

边框坐标完全对齐,精度几乎没有损失。

总结

本文简单的为大家介绍了 RT-DETR 模型的一些基本概括,同时演示了如何基于 Python 和 C++ 在本地环境进行部署。完整的项目代码请访问 Github 地址,有任何疑问请加微信: cv_huber,备注“RTDETR”进入交流群讨论。最后,也欢迎大家点个 star 鼓励支持一下,感谢各位小伙伴长久以来的支持!

视频课程来了!

自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)

(扫码学习最新视频)

国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。