Jetson Xavier NX 实现 darknet_ros

文章目录

  • 一、下载 darknet_ros 与 darknet?
    • 1.darknet_ros源码包下载
  • 二、darknet 编译,GPU和CUDA加速, 训练
    • 1.darknet 编译
    • 2.GPU和CUDA加速
    • 3.训练
  • 三、编译darkenet_ros
    • 1.catkin_make
    • 2.添加环境变量
    • 3.修改launch文件
    • 4运行


本文主要记录在NX(Ubuntu18.04+ROS Melodic)上使用darknet的过程,供有需要的朋友进行参考。如行文不当或内容有误,欢迎指出。


一、下载 darknet_ros 与 darknet?

1.darknet_ros源码包下载

git clone https://github.com/leggedrobotics/darknet_ros

可以进入网站下载。下载后进行解压。
因为darknet_ros调用了darknet的源码,但下载后这个文件夹是空的,需要自行下载darknet的源码。并将其内容复制darknet文件夹中。
Jetson Xavier NX 实现 darknet_ros_第1张图片
这里主要用到两种版本:

https://github.com/pjreddie/darknet
https://github.com/AlexeyAB/darknet

pjreddie/darkenet 支持yolov3和yolov2 ,AlexeyAB/darknet 是在其基础上进行修改进而支持yolov4。
两个版本依赖的opencv版本不同,由于本人opencv版本是opencv4.1.1,所用使用前者

二、darknet 编译,GPU和CUDA加速, 训练

1.darknet 编译

进入dakrnet_ros/dakrnet,编译取决于Makefile文件。最简单的办法就是不做任何增行编译。
Jetson Xavier NX 实现 darknet_ros_第2张图片

cd darkent_ros/darknet
make

2.GPU和CUDA加速

参考文章:darknet_ros加速–使用GPU和CUDA
根据该文对Makefile进行修改,本系统装了opencv4,所以将45、46行中改为opencv4,对于其他版本根据实际进行修改。修改后如下(1~47):

GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0

ARCH= -gencode arch=compute_30,code=sm_30 \
      -gencode arch=compute_35,code=sm_35 \
      -gencode arch=compute_50,code=[sm_50,compute_50] \
      -gencode arch=compute_72,code=[sm_52,compute_72]
#      -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?
ARCH= -gencode arch=compute_72,code=compute_72
# This is what I use, uncomment if you know your arch and want to specify
# ARCH= -gencode arch=compute_52,code=compute_52

VPATH=./src/:./examples
SLIB=libdarknet.so
ALIB=libdarknet.a
EXEC=darknet
OBJDIR=./obj/

CC=gcc
CPP=g++
NVCC=/usr/local/cuda-10.2/bin/nvcc
AR=ar
ARFLAGS=rcs
OPTS=-Ofast
LDFLAGS= -lm -pthread 
COMMON= -Iinclude/ -Isrc/
CFLAGS=-Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC

ifeq ($(OPENMP), 1) 
CFLAGS+= -fopenmp
endif

ifeq ($(DEBUG), 1) 
OPTS=-O0 -g
endif

CFLAGS+=$(OPTS)

ifeq ($(OPENCV), 1) 
COMMON+= -DOPENCV
CFLAGS+= -DOPENCV
LDFLAGS+= `pkg-config --libs opencv4` -lstdc++
COMMON+= `pkg-config --cflags opencv4` 
endif

3.训练

参考官网 darknet


三、编译darkenet_ros

1.catkin_make

mkird darknet_ws
cd darknet_ws
mkird src

建立一个darknet_ws文件夹,把darknet_ros放在src目录下,进行编译

catkin_make -DCMAKE_BUILD_TYPE=Release

Jetson Xavier NX 实现 darknet_ros_第3张图片

2.添加环境变量

sudo vim .bashrc

添加 source ~/darknet_ws/devel/setup.bash

3.修改launch文件

cd darknet_ws/src/darknet_ros/darknet_ros/launch

打开 darknet_ros.launch:

<?xml version="1.0" encoding="utf-8"?>

<launch>
  <!-- Console launch prefix -->
  <arg name="launch_prefix" default=""/>
  <arg name="image" default="/camera/rgb/image_raw" />

  <!-- Config and weights folder. -->
  <arg name="yolo_weights_path"          default="$(find darknet_ros)/yolo_network_config/weights"/>
  <arg name="yolo_config_path"           default="$(find darknet_ros)/yolo_network_config/cfg"/>

  <!-- 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/yolov2-tiny.yaml"/>

1.“image"参数用于订阅相机,修改为"usb_cam/image_raw”

arg name ="image" default="usb_cam/image_raw"

2."yolo_weights_path"和"yolo_config_path"是确定 yoloweightcfg的路径,不用更改。不过记得将自己的权重和cfg放置到相应的文件夹。

3."network_param_file"默认是yolov2-tiny.yaml,在config文件夹下,可以复制一份改为自己的模型名称。

yolo_model:

  config_file:
    name: new.cfg                                       #用于训练的cfg
  weight_file:
    name: new.weights								    #训练出来的weights
  threshold:										    #用于ROS识别的阈值
    value: 0.3
  detection_classes:
    names:
      - target class

4运行

roslaunch darknet_ros darknet_ros.launch
roslaunch usb_cam usb_cam-test.launch

你可能感兴趣的:(目标检测,深度学习,图像处理)