yolov3的训练(七)使用darknet_ros框架进行识别与模型导入


##################################
同学们,这个系列的文件不要直接就跟着我操作了,因为这个是踩坑的记录,不是教程,我只是将整个流程记录下来,让后面的同学操作的时候能够避开这些坑,希望你能将整个系列的操作流程看了一遍斟酌后进行操作
##################################

使用darknet_ros框架进行识别

那么现在训练的模型时可以使用的,但是我这里想要用ROS的框架进行操作

首先需要下载安装darknet_ros的功能包
参考文件
ubuntu20 ros darknet 安装记录

安装功能包

cd catkin_ws/src/
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git

yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第1张图片
结果下载失败

jetson agx xavier +darknet ros——编译出错

重新下载

cd ~/catkin_ws/src
git clone --recursive https://github.com/leggedrobotics/darknet_ros

yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第2张图片


到工作空间后单独编译darknet_ros这个功能包

cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES="darknet_ros"

yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第3张图片


编译进行到后面,会下载识别模型yolov2-tiny.weights,可能有网速原因会慢一点
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第4张图片


如果你不想下载的话,打开README.md文件,将这些下载操作进行注释或删除(不确定这个是否正确)
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第5张图片

重新进行编译
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第6张图片

编译完成
如果是个新的工作空间那就得记得环境变量
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第7张图片

模型导入darknet_ros

当darknet_ros下载编译完成后,我们就要将训练的模型导入

首先打开【/home/heying/catkin_ws/src/darknet_ros-master/darknet_ros/config】目录

新建一个yaml配置文件,这里取名为yolov3-voc.yaml

roscd darknet_ros/config/
touch yolov3-voc.yaml
gedit yolov3-voc.yaml

yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第8张图片
然后进行编辑

yolo_model:

#指定的cfg的配置文件名称
  config_file:
    name: yolov3-voc.cfg

#指定的进行识别的权重文件名称
  weight_file:
    name: yolov3-voc_5000.weights

#检测阈值的设定,只显示0.3或更高置信度检测的对象
  threshold:
    value: 0.3

#当前模型识别的类别
  detection_classes:
    names:
      - red
      - green
      - 'null'

yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第9张图片

####################注意了####################

标签的错误转义

要注意在这里的其中一个类别【- ‘null’】中,如果直接写上【- null】的话,识别终端会报错。如果将【 - null】置于首位,在后面的流程中运行识别后你会看到如下信息
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第10张图片

可以看到在

	 * /darknet_ros/yolo_model/detection_classes/names: [None, 'red', 'gr…`

这本应该是【null】变成了【None】,这说明可能null被转义成了None,造成了程序的错误,这里便是数据集标注的其中一个坑

补救方法是添加单引号,使之成为字符。
不过最好的方法是在标注流程中就不要使用特别的字符,如null,none等

添加单引号后
再次运行便可以看到应用的是正确的

 * /darknet_ros/yolo_model/detection_classes/names: ['null', 'red', '...

检测类型的对调

在上述中,为了方便终端的信息查看,特地将【yolov3-voc.yaml】中的检测类别进行了位置的对调,如图
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第11张图片

那么如果进行位置的对调后没有重新更换回来的话便会出现错误的情况
运行识别后
可以看到原本应该显示的【null】被显示出了【green】这是由于在yaml配置文件中的识别类别排序错误的原因

将yaml进行修改后

	#当前模型识别的类别
	  detection_classes:
	    names:
	      - red
	      - green
	      - 'null'

可以看到此时便是正常的


顺序判断的依据是在进行训练时,我认为是在训练时编写的【voc2021.names】
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第12张图片


继续流程

然后在文件中相对应的配置文件与权重文件移动到/home/heying/catkin_ws/src/darknet_ros-master/darknet_ros/yolo_network_config/相对应的文件中
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第13张图片

将生成的权重文件复制到/home/heying/catkin_ws/src/darknet_ros-master/darknet_ros/yolo_network_config/weights
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第14张图片

然后将训练过程中使用的yolov3-voc.cfg文件移动到/home/heying/catkin_ws/src/darknet_ros-master/darknet_ros/yolo_network_config/cfg
yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第15张图片

打开/home/heying/catkin_ws/src/darknet_ros-master/darknet_ros/launch目录下的yolo_v3.launch文件,这是我们使用识别的launch文件

然后修改 network_param_file参数,使用刚刚编写的yaml文件

  <arg name="network_param_file"         default="$(find darknet_ros)/config/yolov3-voc.yaml"/>

yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第16张图片
完成后保存并退出


测试

首先连接摄像头

然后启动摄像头的驱动

roslaunch usb_cam usb_cam-test.launch

yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第17张图片

正常会呼出摄像头的信息


然后启动识别

roslaunch darknet_ros yolo_v3.launch

yolov3的训练(七)使用darknet_ros框架进行识别与模型导入_第18张图片
识别的效果


此时也可移动查看识别效果


至此,darknet版本使用yolov3进行红绿灯训练与识别的流程结束

你可能感兴趣的:(ubuntu,深度学习,linux,目标检测,人工智能)