##################################
同学们,这个系列的文件不要直接就跟着我操作了,因为这个是踩坑的记录,不是教程,我只是将整个流程记录下来,让后面的同学操作的时候能够避开这些坑,希望你能将整个系列的操作流程看了一遍斟酌后进行操作
##################################
那么现在训练的模型时可以使用的,但是我这里想要用ROS的框架进行操作
首先需要下载安装darknet_ros的功能包
参考文件
ubuntu20 ros darknet 安装记录
安装功能包
cd catkin_ws/src/
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
jetson agx xavier +darknet ros——编译出错
重新下载
cd ~/catkin_ws/src
git clone --recursive https://github.com/leggedrobotics/darknet_ros
到工作空间后单独编译darknet_ros这个功能包
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES="darknet_ros"
编译进行到后面,会下载识别模型yolov2-tiny.weights,可能有网速原因会慢一点
如果你不想下载的话,打开README.md文件,将这些下载操作进行注释或删除(不确定这个是否正确)
当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
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'
####################注意了####################
要注意在这里的其中一个类别【- ‘null’】中,如果直接写上【- null】的话,识别终端会报错。如果将【 - null】置于首位,在后面的流程中运行识别后你会看到如下信息
可以看到在
* /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】中的检测类别进行了位置的对调,如图
那么如果进行位置的对调后没有重新更换回来的话便会出现错误的情况
运行识别后
可以看到原本应该显示的【null】被显示出了【green】这是由于在yaml配置文件中的识别类别排序错误的原因
将yaml进行修改后
#当前模型识别的类别
detection_classes:
names:
- red
- green
- 'null'
可以看到此时便是正常的
顺序判断的依据是在进行训练时,我认为是在训练时编写的【voc2021.names】
然后在文件中相对应的配置文件与权重文件移动到/home/heying/catkin_ws/src/darknet_ros-master/darknet_ros/yolo_network_config/
相对应的文件中
将生成的权重文件复制到/home/heying/catkin_ws/src/darknet_ros-master/darknet_ros/yolo_network_config/weights
中
然后将训练过程中使用的yolov3-voc.cfg文件移动到/home/heying/catkin_ws/src/darknet_ros-master/darknet_ros/yolo_network_config/cfg
中
打开/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"/>
首先连接摄像头
然后启动摄像头的驱动
roslaunch usb_cam usb_cam-test.launch
正常会呼出摄像头的信息
然后启动识别
roslaunch darknet_ros yolo_v3.launch
至此,darknet版本使用yolov3进行红绿灯训练与识别的流程结束