XTDrone目标检测

编译Darkent_ROS

方法一:(推荐)
直接clone,记得加–recurse-submodules,防止文件缺失

cd ~/catkin_ws/src

git clone --recurse-submodules https://gitee.com/robin_shaun/darknet_ros_yolov4.git

下载完成后,将darknet_ros_yolov4文件改名darknet_ros_yolov4,我也不知道为什么,不修改的话会报错。

然后编译:

catkin_make -DCMAKE_BUILD_TYPE=Release

方法二:
由于以前版本作者上传的submodule有问题,没有上传权重文件,我们可以pull一下submodule,更新一下XTDrone。

cd ~/XTDrone
git submodule update --init --recursive  //获取了自工程代码
git pull
git submodule update

首先将XTDrone文件中的object_detection_and_tracing文件放到ROS的工作空间中:

cp -r ~/XTDrone/sensing/object_detection_and_tracking/ ~/catkin_ws/src/

cd ~/catkin_ws
//编译
catkin_make -DCMAKE_BUILD_TYPE=Release

执行上述操作后,会开始下载权重(yolov2-tiny.weights、yolov3.weights和yolov2.weights)
也可以打开darknet_ros文件夹下的CMakeLists.txt文件,搜索找到execute_process,这是weights权重文件下载的指令,可以屏蔽掉(句首添加#号即可),提前将下载好的权重放到对应的位置(即darknet_ros/yolo_network_config/weights/路径下)
注:编译的时候会报一些错误,可看这个博客,如果遇到cuda问题,可以建立一个软连接来解决你cuda文件名的问题:

sudo ln -s /usr/local/cuda-你的版本号 /usr/local/cuda

启动YOLO

source devel/setup.bash 

roslaunch darknet_ros task1.launch

此时先是加载网络参数,然后等待图像到来
然后启动PX4室外场景仿真,此时YOLO收到了图像,开始进行目标检测

cd PX4_Firmware

roslaunch px4 outdoor1.launch

然后建立通信:

cd XTDrone/communication

python multirotor_communication.py typhoon_h480 0

控制无人机起飞

cd XTDrone/control

python multirotor_keyboard_control.py typhoon_h480 1 vel

然后可以选择在原地等待行人走过来,也可以主动控制飞机去找杏仁。等目标出现后,先关闭multirotor_keyboard_control.py (不然两个指令会冲突),然后启动(注意该脚本中的sys.path.append(’/home/robin/catkin_ws/devel/lib/python2.7/dist-packages’)路径要对应修改)

cd XTDrone/control

python yolo_human_tracking.py typhoon_h480 0

然后飞机会自动跟踪检测到的行人。

训练属于自己的数据集

首先我们训练是在darknet文件夹下,因此我们首先要会去编译darknet文件夹,前面的编译是在ros下的编译,是为了将darknet_ros的相关ros文件生成,并能调用(个人理解)。

编译darknet

// CPU

cd catkin_ws/src/darknet_ros/darknet

sudo make 

//下载训练权重文件
sudo wget https://pjreddie.com/media/files/yolov3.weights

//测试
sudo ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

以上是编译 darknet_cpu ,为了追求速度,接下来配置GPU版本。首先我们需要去安装显卡驱动和CUDA、CUDNN,可以查看这篇博客,千万要注意开头那里,一定要去禁用 Bios 。
以上显卡准备工作做好以后,需要去修改两个地方:

  1. 在darknet目录下修改Makefile文件:
//修改前先做个备份
sudo cp Makefile Makefile.bak
//修改文件命令
sudo gedit Makefile

如下图:
在这里插入图片描述设置好之后需要重新对darknet进行编译

sudo make

如果运行测试的时候出现out of memory的错误则需要修改cfg目录下的yolov3.cfg文件

sudo vim cfg/yolov3.cfg

在这里插入图片描述使用GPU之后都是毫秒级
在这里插入图片描述

制作数据集
截图获取数据
在/XTDrone/sitl_config/worlds路径下打开终端,用gazebo打开需要制作数据集的world文件

cd ~/XTDrone/sitl_config/worlds    //具体路径位置根据自己实际情况

gazebo robcup.world

找到眼检测的物体或行人,点击右上角从右数第四个相机图标进行截图。
对于robocup.world,由于检测目标是五个行人,可以通过预先设置行人的初始位置,来得到想要的图片,只需将robocup.world中actor部分的init_pose(x y z 俯仰 滚转 偏航)修改即可。

    <actor name="actor_1">
      <skin>
        <filename>model://walker/walk_1.dae</filename>
        <scale>1.0</scale>
      </skin>
      <animation name="walking">
        <filename>model://walker/walk_1.dae</filename>
        <scale>1.000000</scale>
        <interpolate_x>true</interpolate_x>
      </animation>
      <plugin name="actor1_plugin" filename="libros_actor_cmd_pose_plugin.so">
        <init_pose>0 0 1.25 1.57 0 0</init_pose>
        <animation_factor>5.1</animation_factor>
      </plugin>
    </actor>

截取的图片都存放在~/.gazebo/pictures文件夹下,我们把他全部复制到另一个文件夹中。

cd catkin_ws/src/darknet_ros/darknet/xtdrone
mkdir data xml
cp  ~/.gazebo/pictures/* ~/catkin_ws/src/darknet_ros/darknet/data/xtdrone/JPEGImages/

对数据进行标注
使用labelimg这个工具来进行数据的标注

git clone https://github.com/tzutalin/labelImg.git
cd labelImg
sudo apt-get install pyqt5-dev-tools
sudo pip3 install -r requirements/requirements-linux-python3.txt
make qt5py3
python3 labelImg.py

通过"打开目录"将输入目录设置成刚才的 catkin_ws/src/darknet_ros/darknet/data/xtdrone/VOC2007/JPEGImages/ , 通过"更改保存目录"将输出目录设置成 catkin_ws/src/darknet_ros/darknet/data/xtdrone/VOC2007/Annotations
在这里插入图片描述用快捷键W创建区块,把所有检测目标框起来,然后打上对应的标签,Ctrl+S保存,点击下一个图片,重复上述操作直至所有图标标注完成。

训练YOLO
先新建目录

cd catkin_ws/src/darknet_ros/darknet/data/xtdrone/VOC2007/
mkdir -p ImageSets/Main

运行xml2voc.py,将标注得到的xml转为voc格式

cd catkin_ws/src/darknet_ros/darknet/scripts
python3 xml2voc.py

再运行voc_label_xtdrone.py,获得YOLO训练所需的标签

python3 voc_label_xtdrone.py

最终,数据集的结构如下
在这里插入图片描述根据需要修改darknet/cfg 文件夹中的文件:obj.names 中保存目标的类别标签,每个标签单独一行。obj.data 中保存数据集位置。obj_yolov4.cfg 为网络的配置文件。
网络的配置需注意以下几点
• 根据 GPU 性能修改 subdivisions, width 和 height。对于 2080ti, batch=32, subdivision=16, width=640, height=352。width 和 height 必须为 32 的倍数。
• 修改每一个 yolo 层中的 classes 为目标类别的数量,三处。
• 修改 yolo 层前的 convolution 层中的 filters, filters = (classes+5) * 3,三处。
• 修改 max_batches=classes*2000,最小 6000。
• 修改 steps=max_batches0.8, max_batches0.9。
• 单 GPU 训练时,learning_rate=0.001,burn_in=1000。

下载预训练权重 yolov4.conv.137📎yolov4_conv.zip,并放入 darknet/backup 中,然后开始训练

cd catkin_ws/src/darknet_ros/darknet
./darknet detector train cfg/xtdrone/obj.data cfg/xtdrone/obj_yolov4.cfg backup/yolov4.conv.137 -map

网络权重参数会每隔一段时间保存在~/darknet/backup中,当训练收敛时,即可以停止训练。
然后,需要对应修改darknet_ros中的配置文件。将您的网络cfg文件和weights文件,对应放入到darknet_ros/yolo_network_config/cfg/和darknet_ros/yolo_network_config/weights/下
根据您的配置修改config/yolov4.yaml

yolo_model:

  config_file:
    name: human.cfg
  weight_file:
    name: human.weights
  threshold:
    value: 0.8
  detection_classes:
    names:
      - human
      - car
      - fire hydrant
      - street sign

修改launch文件,将launch文件中的yaml文件修改成自己的配置文件。
然后按照启动YOLO,即可以测试你的网络,来追踪目标了。

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值