YOLOv4在ROS-Melodic上的部署-libtorch(附源码,非Darknet)

2023-05-16

有关YOLOv4-LibTorch的部署可以看我的这篇博客。

然后移植到ROS-Melodic上就相对简单了。

直接上GitHub链接吧。

初版可能有点乱,但是注释挺详细,欢迎交流经验哈~

2020.12.16 更新 YOLO4-libtorch GPU版本的ROS实现

CPU版:GitHub - wsx000/YOLOv4-LibTorch-CPU-ROS-deployment: this is a Deployment of YOLOv4 on ROS-Melodic with LibTorch

GPU版:https://github.com/wsx000/YOLO4-ROS-GPU

wawawawawaT_T眼泪都要出来了!!终于成功地把GPU版本的YOLO4-libtorch移植到了ROS-Melodic上了,一个bug卡了四五天了T_T,一直在崩溃的边缘疯狂试探,终于成了T_T。

改bug的心酸历程:

因为最近出了torch1.7.1版本的,所以我就想尝鲜一下,用最新版本的libtorch1.7.1-cuda10.2来实现yolo4的GPU加速。刚开始很顺利,中间出了一些小bug但都好解决,单纯ubuntu18环境下的部署很快就完成了,我已经上传到github上了,这次对代码的可读性做了一些优化,不想上一版那么乱了,,感兴趣的朋友可以查看YOLOv4-LibTorch-GPU。

但!!问题就在我往Melodic上移植上面,配置反反复复检查了无数遍,真心没啥问题了。。总是catkin_make无法通过,一直在报错如下:

CMakeFiles/detect_node.dir/src/detect_node.cpp.o: In function `main':
detect_node.cpp:(.text+0x118): undefined reference to `ros::init(int&, char**, std::string const&, unsigned int)'
detect_node.cpp:(.text+0x1aa): undefined reference to `ros::NodeHandle::NodeHandle(std::string const&, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&)'
detect_node.cpp:(.text+0x28d): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
detect_node.cpp:(.text+0x372): undefined reference to `ros::console::print(ros::console::FilterBase*, void*, ros::console::levels::Level, std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
CMakeFiles/detect_node.dir/src/detect_node.cpp.o: In function `void ros::Publisher::publish<yolo4::box_<std::allocator<void> > >(yolo4::box_<std::allocator<void> > const&) const':
detect_node.cpp:(.text._ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_[_ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_]+0xb0): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
detect_node.cpp:(.text._ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_[_ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_]+0x1dc): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
detect_node.cpp:(.text._ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_[_ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_]+0x2fa): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
detect_node.cpp:(.text._ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_[_ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_]+0x440): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
detect_node.cpp:(.text._ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_[_ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_]+0x56c): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
CMakeFiles/detect_node.dir/src/detect_node.cpp.o:detect_node.cpp:(.text._ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_[_ZNK3ros9Publisher7publishIN5yolo44box_ISaIvEEEEEvRKT_]+0x6a1): more undefined references to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)' follow
collect2: error: ld returned 1 exit status
yolo4/CMakeFiles/detect_node.dir/build.make:196: recipe for target '/home/curious/code/ROS/yolo4-ros/devel/lib/yolo4/detect_node' failed
make[2]: *** [/home/curious/code/ROS/yolo4-ros/devel/lib/yolo4/detect_node] Error 1
CMakeFiles/Makefile2:1064: recipe for target 'yolo4/CMakeFiles/detect_node.dir/all' failed
make[1]: *** [yolo4/CMakeFiles/detect_node.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

这个问题一般都是在cmakelists.txt中没有加入相应的链接库导致的,但是我明明加了!在网上找了解决方法,还有把ROS重装了三四遍依然没有解决问题!!想到之前用libtorch1.5.0就没遇到过这样的问题,所以考虑是不是libtorch出版本的问题,因此换了以下libtorch1.7.0,在极度绝望的心情中一点都不怀希望的试了试,结果!!竟然成功编译通过了啊啊!!果然是libtorch版本的问题!可能最新的1.7.1版本的libtorch库跟ROS的库一起链接的时候会不兼容吧,啊啊啊快一周了这个破问题真的令人伤心欲绝,曾经还一度想更换部署的框架。。。。

有关问题我还一度在在GitHub上问了下,有相似问题的小伙伴可以参考一下。

GitHub搬运工:

 

具体用什么方法自己看着办哈哈哈 

废话不多说了,直接上源代码链接吧:YOLO4-ROS-GPU。使用方法晚些我会更新在Github中。目前实测帧率大概21FPS左右,因为还没对代码进行性能优化,所以后续还有很大的提升空间。

另外补充一点—libtorch中 Pre-cxx11 ABI 与 cxx11 ABI 的区别:

记录一下一些小的知识点:libtorch的下载链接不是有两种嘛,如下:

一种是 Pre-cxx11 ABI  另外一种是  cxx11 ABI  ,在使用过程中从没见过有人说过这俩的区别,只是简单地贴了俩链接上来也没说要用哪个。。。最近改bug的同时也学到了不少小知识。这里的Pre-cxx11 ABI其实就是C++11之前的ABI,cxx11 ABI 是C++11的ABI,因为现在基本都用C++11之后的版本了,所以一般情况下是下载cxx11 ABI版本的使用的。即下载下来后因该是类似这样的命名:

libtorch-cxx11-abi-shared-with-deps-version.zip

其实两种版本的区别很小,我目前找到的唯一的区别就是两者在其文件share/cmake/Torch/TorchConfig.cmake文件中第122行那一句话的设置上,这点区别很明显,如下:

Pre-cxx11 ABI

cxx11 ABI

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLOv4在ROS-Melodic上的部署-libtorch(附源码,非Darknet) 的相关文章

  • 关于相机与激光雷达数据采集与标定

    最近在做一个关于车路协同的项目 需要做一个路侧系统 传感器有摄像头和激光雷达 相机和激光雷达联合标定费了老半天劲 在此记录一下 雷达时间戳不对 导致摄像头和雷达的数据无法对齐 解决办法 修改雷达驱动发布点云消息时的时间戳 相机内参标定可以使
  • Yolox_s可视化网络结构图

    Yolox共有七种网络结构 包含2种轻量级网络 和5种标准网络 轻量级网络 1 Yolox Nano可视化网络结构图 点击查看 2 Yolox Tiniy可视化网络结构图 点击查看 标准网络 1 Yolox s可视化网络结构图 点击查看 2
  • 1-如何安装ROS

    如何安装ROS 大家好 我是如何 今天尝试在Ubantu下安装ROS Robot Operating System 测试环境 虚拟机VMware Ubantu20 04 准备步骤 添加ROS软件源 sudo sh c echo deb ht
  • 线速度和角速度

    转自 https baike baidu com item E7 BA BF E9 80 9F E5 BA A6 1532652 fr aladdin https baike baidu com item E8 A7 92 E9 80 9F
  • ModuleNotFoundError: No module named ‘rosbag‘

    1 ModuleNotFoundError No module named rosbag File opt ros kinetic lib python2 7 dist packages roslib launcher py line 42
  • 清华大学开源软件镜像站网址

    清华大学 TUNA 协会原名清华大学学生网管会 注册名清华大学学生网络与开源软件协会 是由清华大学网络技术和开源软件爱好者 技术宅组成的团体 现阶段向校内外提供开源软件镜像等服务 清华大学 TUNA 协会清华大学 TUNA 协会原名清华大学
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 程序“catkin_init_workspace”尚未安装。 您可以使用以下命令安装: sudo apt install catkin

    程序 catkin init workspace 尚未安装 您可以使用以下命令安装 sudo apt install catkin 问题如图 先贴上解决后的效果 运行环境 ubuntu 16 04 ros版本 kinetic 问题解释 这个
  • ubuntu18.04命令安装ros2

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2
  • 在 Python 3 中导入 Rosbag

    我正在尝试从 Python 3 读取 rosbag 文件 我安装了 ROS2 Eloquent Elusor 它应该支持 Python 3 当我跑步时 import rosbag bag rosbag Bag test bag 从Pytho
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • cmake - 链接静态库 pytorch 在构建过程中找不到其内部函数

    我正在尝试使用 cmake 构建一个程序 由于多种原因 必须使用静态库而不是动态库构建程序 并且我需要使用 PyTorch 所以这就是我所做的 下载并安装 PyTorch 静态库 我发现libtorch a在正确的道路上 在 home me
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 在 ROS - Python 中使用来自多个主题的数据

    我能够显示来自两个主题的数据 但无法在 ROS 中实时使用和计算这两个主题的数据 用 Python 代码编写 您有想法存储这些数据并实时计算吗 谢谢 usr bin env python import rospy import string
  • 为什么 PyTorch 无法使用 MinGW 构建?

    我尝试在win11上使用C 版本的Pytorch 版本2 0 即LibTorch 但是当我执行mingw32 make操作时 出现丢失文件错误 如下所示 示例目录的布局如下 example app build CMakeLists txt
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告

随机推荐

  • Element实现行合并

    效果图 完整代码 span class token tag span class token tag span class token punctuation lt span template span span class token p
  • @EnableAsync @Async

    一直不太忙白线程池在实际应用中到底扮演什么样得角色 xff0c 有什么场景可以使用到 xff0c 只有真正做项目中使用到了才逐渐理解 使用多线程 xff0c 往往是创建Thread xff0c 或者是实现Runnable接口 xff0c 用
  • Java实现QQ邮箱发送给网易邮箱,发送邮件+附件

    实现功能 xff1a Java实现 QQ邮箱 给网易邮箱发送邮件获取邮件信息并下载邮件的附件 前置功能 案例以QQ邮箱为例说明 xff1a 首先登录QQ邮箱将SMTP服务开启 xff0c 会得到一个授权码 创建一个Springboot项目
  • kubernetes(v1.21.10)简介

    学习视频地址 xff1a https www bilibili com video BV13Q4y1C7hS 1 背景 1 部署方式的演变 传统部署时代 xff1a 在物理机服务器上运行应用程序 无法为应用程序定义资源边界 导致资源分配问题
  • Kubernetes(v1.21.10)集群安装

    视频中安装的是v1 20 9 xff0c 我们安装kubernetes的v1 21 10版本 1 环境规划 1 集群类型 Kubernetes 集群大致分为两类 xff1a 一主多从和多主多从 一主多从 xff08 单 master xff
  • Kubernetes(v1.21.10)实战入门与组件说明

    文章目录 一 资源管理1 资源管理介绍2 YAML语言介绍3 资源管理方式3 1 命令式对象管理kubectl命令资源类型 type 操作 command 3 2 命令式对象配置3 3 声明式对象配置3 4 总结 二 kubernetes组
  • 嵌入式系统(一):鸿蒙系统

    本文为期末复习笔记 xff0c 内容仅供参考 x1f600 鸿蒙系统是一款面向万物互联时代的 全新的分布式操作系统 鸿蒙提出了基于同一套系统能力 适配多种终端形态的分布式理念提供全场景 xff08 移动办公 运动健康 社交通信 指挥出行 媒
  • 【机组】--总线-例题

    例题1 某总线时钟频率为 66 M H z 66MHz 6 6 M H z xff0c 在一个
  • ROS:运行usb摄像头报错 No JPEG data found in image

    将usb cam功能包从GitHub上clone到ROS的工作空间 xff0c 编译后运行如下命令 xff1a rosrun usb cam usb cam node 然后报错如下 mjpeg 64 0x55e5f4e34120 No JP
  • breakpad简单使用

    breakpad简单使用 文章目录 1 breakpad简介2 源码下载3 源码编译3 1 编译遇到的问题 4 In Process测试程序 xff1a 4 1 测试程序编译4 2 生成sym文件4 3 产生minidump文件4 4 分析
  • 树莓派+PX4固件+T265+MAVROS+QGC实现室内定位

    树莓派 43 PX4固件 43 T265 43 MAVROS 43 QGC实现室内定位 整了整整两礼拜 终于稍微搞明白了一点PX4和MAVROS 因为APM固件下MISSIONPLANNER地面站只能windows下 觉得windows和U
  • Python调用sumo,解决自定义vehicle颜色等问题

    Python调用SUMO接口 xff0c 解决vehicle颜色设置问题 1 Python调用sumo 的traci接口 xff0c 通过 traci vehicle setColor进行设置 以下是 示例代码 span class tok
  • 反向散射通信

    原文 xff1a Ambient Backscatter Communications A Contemporary Survey 反向散射通信 反向散射通信系统根据其体系结构可分为三大类 xff1a a 单基地反向散射通信系统 xff08
  • ESP8266+Micropython+OLED网络天气和时钟

    在网上查了很多的资料 xff0c 打算做一个可以按键显示网络时间和天气预报的东西 手头有WeMos nodeMCU和I2C接口的OLED12864 xff0c 不打算用时钟模块 xff0c 因为ESP8266可以上网 xff0c 完全可以借
  • ros入门与控制无人机

    一 概述 总体来说 xff0c 分为三步 step1 xff1a roscore step2 xff1a 发布话题 step3 xff1a 订阅话题并显示 二 roscore roscore 是你在运行所有ROS程序前首先要运行的命令 现理
  • Oracle创建新用户

    Oracle 创建新用户 SQL语句 span class token operator span span class token operator span span class token operator span 创建用户 cre
  • Centos8.2安装配置 VNC 远程桌面Xfce、解决输入法VNC无法使用的问题、解决浏览器无法播放视频的问题

    本文使用MobaXterm Xshell Xfce TightVNC来搭建百度智能云Centos8 2 同时解决解决输入法VNC无法使用的问题 解决浏览器无法播放视频的问题 目录 一 Windows软件列表 MobaXterm TightV
  • python自定义函数 def 的奇妙世界

    自定义函数 def注意事项案例分析作死挑战函数参数形参与实参位置参数关键字参数默认参数必选参数可变参数可变关键字参数 参数问题解答 这里是三岁 xff0c 来和大家唠唠自定义函数 xff0c 这一个神奇的东西 xff0c 带大家白话玩转自定
  • Qt 怎么设置黑色背景/黑色主题?

    目录 整体分为三步1 更改主题颜色1 1 更改颜色 xff1a 1 2 重启 Qt1 3 第一阶段完成 xff0c 效果如下所示 2 更改编辑器颜色2 1 更改颜色2 2 第二阶段完成 xff0c 效果如下所示 3 更改 Qt 窗口上边框颜
  • YOLOv4在ROS-Melodic上的部署-libtorch(附源码,非Darknet)

    有关YOLOv4 LibTorch的部署可以看我的这篇博客 然后移植到ROS Melodic上就相对简单了 直接上GitHub链接吧 初版可能有点乱 xff0c 但是注释挺详细 xff0c 欢迎交流经验哈 2020 12 16 更新 YOL