在ROS中实现darknet_ros(YOLO V3)检测以及训练自己的数据集

2023-05-16

 

目录

1.darknet_ros介绍

2.darknet_ros原始项目编译测试

3.yolov3训练自己的数据集

 4.使用自己训练好的数据集


1.darknet_ros介绍

Darknet概述 https://blog.csdn.net/u010122972/article/details/83541978

https://github.com/leggedrobotics/darknet_ros

darknet-ros 相关开源项目 https://github.com/topics/darknet-ros

2.darknet_ros原始项目编译测试

参考:ROS下实现darknet_ros(YOLO V3)检测https://blog.csdn.net/qq_42145185/article/details/105730256

————————————————
版权声明:本文为CSDN博主「pd很不专业」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42145185/article/details/105730256

一. 代码下载
代码Github主页:https://github.com/leggedrobotics/darknet_ros
下载命令:

mkdir -p catkin_workspace/src
cd catkin_workspace/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
cd ../

注意:使用git下载时可能出现编译错误,darknet_ros编译错误CMake Error at /usr/share/cmake-3.5/Modules/FindCUDA.cmake:1649问题解决办法。参照以下链接解决https://blog.csdn.net/timothy_liu0114/article/details/104743194

 二. 编译
在ROS工作空间目录下,执行命令:

catkin_make -DCMAKE_BUILD_TYPE=Release

此时会开始编译整个项目,编译完成后会检查{catkin_ws}/darknet_ros/darknet_ros/yolo_network_config/weights文件下有没有yolov2-tiny.weights和yolov3.weights两个模型文件,默认下载好的代码里面为了节省体积是不带这两个模型文件的。因此编译之后会自动开始下载模型文件,此时又是一段漫长的等待时间。
如果刚好你之前已经下载好了模型文件,那就好了,在开始编译之前就把模型文件拷贝到上述文件夹下,就不会再次下载了。
三. 运行代码
1. 图像话题发布
因为darknet_ros会直接订阅指定的图像话题名,然后对图像进行检测,绘制检测框,并发布相应的检测话题,因此首先需要找一个能够发布图像话题的ROS包,这里推荐使用ROS官方提供的usb_cam驱动包,可以直接将电脑自带摄像头或连接电脑的USB摄像头采集的图像发布为ROS图像话题。
下载摄像头驱动:
 

sudo apt-get install ros-kinetic-usb-cam

然后发布摄像头图像话题:

roslaunch usb_cam usb_cam-test.launch

打开rviz 添加Image主题,可查看摄像头显示界面;

2. 运行darknet_ros
然后执行darknet_ros进行检测,在运行检测之前需要更改一下配置文件,使得darknet_ros订阅的话题与usb_cam发布的图片话题对应。
打开darknet_ros/config/ros.yaml文件,修改:

subscribers:
  camera_reading:
    topic: /usb_cam/image_raw
    queue_size: 1

修改 darknet_ros.launch

arg name="network_param_file"         default="$(find darknet_ros)/config/yolov2-tiny.yaml"/
 
改为
 
arg name="network_param_file"         default="$(find darknet_ros)/config/yolov3.yaml"/

回到darknet的工作空间根目录,执行:

source devel/setup.bash
roslaunch darknet_ros darknet_ros.launch

检测FPS很低,需要GPU加速,安装NVIDIA驱动并安装CUDA,来使用GPU加速进行检测,这样的话速度就会快很多,安装步骤会方法如下:(安装步骤在我的另外一片文章:https://blog.csdn.net/qq_42145185/article/details/105793983)

安装完成之后只需要修改/darknet_ws/src/darknet_ros/darknet文件下的Makefile文件

GPU=1

重新catkin_make

3.yolov3训练自己的数据集

参考文章训练自己的数据集进行测试(链接:https://blog.csdn.net/qq_42145185/article/details/105816128)

需要注意:

可修改训练的配置文件my_yolov3.cfg  

yolov3.cfg参数解读 https://www.cnblogs.com/shierlou-123/p/11152623.html

  1. max_batches 为2000*N次,N为训练的类别(默认为max_batches = 50200 #迭代次数,1000次以内,每训练100次保存一次权重,1000次以上,每训练10000次保存一次权重)
  2. random=1 #如果显存小,设置为0,关闭多尺度训练,random设置成1,可以增加检测精度precision,每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致

 

在Windows环境中下标注土图片,训练时出现can‘t fopen Cannot load image时,需要

windows下标注的放到linux下训练的:需要用notepad++修改,先点击视图->显示符号->显示所有字符,然后点编辑->文档格式转换->转liunx,保证每一行最后都只有一个LF,一般是最后一行的问题。

参考链接:https://www.jianshu.com/p/a85cda3257d4

训练时,若无GPU加速,则速度非常慢,可租用云服务器进行训练 我是用的矩池云https://matpool.com/host-market/gpu

 训练100张图片,每训练100次大约7分钟

 

 4.使用自己训练好的数据集

可参考

Darknet——yolo3训练自己的数据集+在ros环境下实现目标检测实战教程(三)——应用在ROS上https://blog.csdn.net/weixin_46187561/article/details/119893696?spm=1001.2014.3001.5501 除此外还有(一)(二)--未测试

1.在路径catkin_workspace/src/darknet_ros/darknet_ros/yolo_network_config里面有两个文件夹cfg和weights,把之前用到的yolov3-tiny.cfg文件和训练好的权重文件赋值到相应的文件夹。

2.在路径catkin_workspace/src/darknet_ros/darknet_ros/config中修改ros.yaml文件,主要是修改订阅的话题和发布的话题,这里订阅的话题要改成摄像头发布出来的话题:
 

subscribers:
 
  camera_reading:
    topic: /usb_cam/image_raw
    queue_size: 1

3.新建一个.yaml文件yolov3-tiny.yaml,自定义内容框架如下:

yolo_model:
  config_file:
    name: yolov3-tiny.cfg
  weight_file:
    name: yolov3-tiny_900.weights
  threshold:
    value: 0.3
  detection_classes:
    names:
      - sanbing
      - ball

4.修改launch文件,进入路径catkin_workspace/src/darknet_ros/darknet_ros/launch

将darknet_ros.launch里面network_param_file修改为自己的yolov3-tiny.yaml,如下:

<!-- ROS and network parameter files -->
  <arg name="ros_param_file"             default="$(find darknet_ros)/config/ros.yaml"/>
  <arg name="network_param_file"         default="$(find darknet_ros)/config/yolov3-tiny.yaml"/>

 

5.在ROS系统下运行效果

在ros下运行:

$ roslaunch usb_cam usb_cam-test.launch//开启摄像头驱动
$ roslaunch darknet_ros darknet_ros.launch//启动darknet

输入如下命令可以看到darknet_ros发布出来的bounding_boxes节点消息:

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

在ROS中实现darknet_ros(YOLO V3)检测以及训练自己的数据集 的相关文章

随机推荐

  • 用proxychains4解决rosdep init问题教程

    在终端下载源码 sudo git clone https github com rofl0r proxychains ng git 进入安装目录 cd proxychains ng 配置 configure prefix 61 usr sy
  • 使用 TX2 和 realsense D435i 相机运行 ORBSLAM3

    非 ROS 版本 之后可能会更新 ROS 版本的 ORBSLAM3 配置指南 TODO 目录 TX2 刷机JetPack 4 6 1安装 realsense SDK 2 0编译 opencv 4 5 0编译 Pangolin 0 5编译运行
  • 解决 cv_bridge 与 opencv4 版本冲突问题

    解决了在 ROS melodic noetic 下 cv bridge 与 opencv4 版本冲突导致的 opencv 操作 导致 Segmentation fault core dumped 的问题 目录 问题描述解决方法参考 问题描述
  • 我对onSizeChange方法的源码解析

    如果当前的自定义控件是继承ViewGroup xff0c 那么在ViewGroup重写的layout方法中 xff1a 可知调用父类也就是View的layout方法 再看View的layout方法 xff1a 查看设置自己坐标的setFra
  • 5 个你不知道的关于 Python 类的技巧

    5 个你不知道的关于 Python 类的技巧 1 创建 一个 常量值2 多个类构造函数3 创建枚举4 迭代器5 以列表的形式访问一个类 Python 有许多强大的特性 xff0c 在处理类时提供了极大的灵活性 在这里 xff0c 我将向您展
  • 激光雷达和RTK的标定(无人小车)

    总结一下最近的标定工作 xff0c 标定平台是实验室的无人小车 xff0c 目标是实现激光雷达 lidar 和RTK的标定 xff0c 也就是求解lidar到RTK的位姿变换矩阵 采用的代码是ETH的lidar align https gi
  • 虚拟机安装Ubuntu20.04 + VCS2018

    虚拟机安装Ubuntu20 04 43 VCS2018 前言正文1 准备内容Vmware Workstation 16 prounbuntu 20 04 安装包vcs 43 scl 43 verdi等安装包 2 Ubuntu系统的安装ope
  • input里面file实现上传图片及预览功能

    在这里插入简单的HTML代码片 lt form action 61 34 34 gt 文件 xff1a lt input type 61 34 file 34 name 61 34 myFile 34 id 61 34 myFile 34
  • 创建ROS-wrapper

    创建ROS wrapper 对高博的ygz stereo inertial的开源算法添加ROS node源文件的编写CMakeLists文件的编写分目录下的CMakeLists完整CMakeLists路径 home fei devv ygz
  • 新买了块翼联的AX200的网卡,结果开移动热点的时候遇到了点问题

    买网卡这事的起因要从入手了switch说起 xff0c 直连网不是不能用 xff0c 就是太难用了 xff0c 下载个东西要几十个小时 xff0c 玩个马造2连地图都下载不了 然后试用了3天的网易uu加速器 xff0c 好用是真的好用 xf
  • HDU 1085(Holding Bin-Laden Captive!)

    题意 xff1a 有三种价值分别为 1 2 5 的硬币 xff0c 每一种分别由 a b c 个 xff0c 求这些硬币不能组成的最小价值 分析 xff1a 生成函数板子题 xff08 贴一个讲生成函数的链接https blog csdn
  • 大电流的走线和过孔

    工程师在设计的时候 xff0c 很容易忽略走线宽度的问题 xff0c 因为在数字设计时 xff0c 走线宽度不在 考虑范围里面 通常情况下 xff0c 都会尝试用最小的线宽去设计走线 xff0c 这时 xff0c 在大电流时 xff0c 将
  • c++ 实现基本数据结构代码

    数据结构是计算机科学的一个重要的分支 xff0c 主要研究如何有效地存储和组织数据以便于快速访问和操作 常见的数据结构有 xff1a 数组 xff1a 是一种线性的数据结构 xff0c 可以通过索引来访问数组中的元素 链表 xff1a 是一
  • Jetson开发实战记录(二):Jetson Xavier NX版本区别以及烧录系统

    Jetson开发实战记录 xff08 二 xff09 xff1a Jetson Xavier NX版本区别以及烧录系统 一 Jetson Xavier NX类型1 SD卡槽的版本 xff08 官方版本 xff09 2 带eMMC存储芯片的版
  • ZYNQ7000(AX7020)移植Linux操作系统(二):u-boot的编译和启动

    总述 我们已经在 PC 上已经安装了 Ubuntu 客户操作系统 xff0c 以及在 Ubuntu 操作系统里安装了 SDK 2015 4 工具 要想在 Zynq 平台上运行 Ubuntu 操作系统 xff0c 必项预先制作作镜像文件 xf
  • 10个让你的 Python 代码更具 pythonic 风格的示例

    10个让你的 Python 代码更具 pythonic 风格的示例 1 变量交换 2 函数返回元组 xff08 自动打包 解包 xff09 3 多重比较 4 多重比较 5 列表推导式 6 将 Python 字典当做缓存 7 关键字参数 8
  • 进程的调度算法

    先来先服务调度算法 xff1a 先来先服务调度算法是一种最简单的调度算法 xff0c 也称为先进先出或严格排队方案 当每个进程就绪后 xff0c 它加入就绪队列 当前正运行的进程停止执行 xff0c 选择在就绪队列中存在时间最长的进程运行
  • 华为云服务器购买及使用指南

    前言 作者参与牛客网的买服务器返现活动 xff0c 以某个奇妙的价格价格购入了一个一年的华为云服务器 xff0c 具体多少钱就不透露了 xff0c 不然会被当作广告性能参数如下 xff1a 购买 偶然看到这个活动 xff0c 然后点进去 x
  • JS 简单的事件

    实现鼠标滑过按钮时显示文本 xff0c 滑出时隐藏文本 span class token doctype lt DOCTYPE html gt span span class token tag span class token tag s
  • 在ROS中实现darknet_ros(YOLO V3)检测以及训练自己的数据集

    目录 1 darknet ros介绍 2 darknet ros原始项目编译测试 3 yolov3训练自己的数据集 4 使用自己训练好的数据集 1 darknet ros介绍 Darknet概述 https blog csdn net u0