当前位置:   article > 正文

windows下无人机+yolov3项目(一)前置操作_如何将yolo算法部署到无人机中

如何将yolo算法部署到无人机中

windows下无人机+yolov3项目(一)前置操作

yolo项目地址:https://github.com/AlexeyAB/darknet
下载,解压。
(制作自己的数据集)yolo_mark项目地址:https://github.com/AlexeyAB/Yolo_mark

数据集下载

因为项目和无人机相关,而航拍数据集比较稀少,一些数据集在国外下载也比较有难度,因此做个收集备忘。

  1. visdrone2019(需要高校/企业邮箱注册)(有标注)
    http://www.aiskyeye.com/views/index
  2. visdrone2018
    https://www.jianshu.com/p/62e827306fca
  3. 斯坦福69G大规模无人机(校园)图像数据集
    http://cvgl.stanford.edu/projects/uav_data/

流程概述

因为使用的是visdrone数据集,尽管自带标注,但标注和yolo需要的标注有差异,需要进行转换。如果使用yolo_mark标注自己的数据集就不需要麻烦了,但是自己标注目标会花去大量的时间。所以花费点时间在转换上还是值得的。
流程如下:

  1. 图像按序号重命名,标注txt文件按序号重命名
  2. txt标注转换为VOC格式的XML标注
  3. XML标注转换为适合yolo的txt标注

数据集处理

相关代码传上来格式全乱了,放个度娘盘在这吧,感兴趣自己下载。
https://pan.baidu.com/s/1nzehW-FBtOkLPnP0AVbKWg roj1

  1. 图像和标注排序命名(参考[1])
    因为visdrone数据集已经有标注,因此选择这个数据集。为了符合VOC数据集的规范也为了使用方便,使用 rename.py 对图像文件进行重命名,对标注文件进行重命名。注意修改程序中的路径。
    windows下复制的路径是反斜杠的,可能会造成转义字符的错误,使用双反斜杠“\\”或正斜杠“/”替代就可以了。
  2. visdrone标注转换为VOC格式(参考[2])
    visdrone的标注方式与yolo标注不一样,因此需要转换。此处将先txt将标注转换为VOC格式的xml,复制数据到Txt2XML文件夹后,使用 main.py 进行转换,同样注意修改程序中的路径。
  3. 生成用于train、val的图像名字列表txt(参考[3][4])
    这部分的工作简而言之,将数据库中的图像进行随机抽取,分成2-3部分,一部分作为train(训练),一部分作为validation(验证),有需要可以再加个test(测试),最后将这几部分图像的名字写入txt,形成“名单”。各部分作用和所占比例可以搜索或参考[3]。
    在darknet文件夹所在文件夹下建立myData文件夹,在myData文件夹下建立如下文件夹并放入数据:
    JPEGImages —— 存放.jpg图像
    Annotations —— 存放图像对应的xml文件
    ImagesSets/Main —— 存放用于train/test图像的名字列表txt
    参照[4]的第4步的代码,运行 trainnamelist.py 形成了用于train的图像名字列表txt。因为只用于train,所以注释了一部分代码。代码比较简单,可以自己根据需要修改。同样的注意修改路径。
    文章[4]最后得出的txt文件格式并不是yolo适用的,总之只看第4步的代码就行,别的部分不要看。或者可以自己写一个随机数字的程序,因为图像名字都是有序数字,程序应该不难。
    获取图片名字列表txt后放入ImagesSets/Main文件夹
  4. VOC格式转换为yolov3的标注格式(参考[5][6])
    darknet框架提供了将voc数据集标注修改为yolo格式的python程序,在darknet-master\build\darknet\x64\data\voc或者darknet-master\scripts有程序voc_label就是转换程序。但是使用自己的数据集的话,需要对程序进行一些修改。
    参考[5]的第4步运行就会在darknet/myData目录下生成一个labels文件夹一个txt文件(myData_train.txt),labels文件夹中就是适合yolov3的标注文件了,和图像名称一一对应,内容意义是:
    <object-class>  <x center>   <y center>   <width>   <height>
    目标类别      标注框中心x轴相对坐标   标注框长宽相对长度
    因为坐标和长宽都是相对整幅图像长宽的比例,所以数值应该是0-1。
    而myData_train.txt里存放的是图像的绝对路径。如果只需要输出路径而不需要xml转txt,可以使用参考[6]的代码。

后续处理


visdrone标注如图所示,其实代码能力强的同学可以直接根据这张图从visdrone的标注txt转换到yolo的txt。
图中第6项表示类别,0类是需要被忽视的标注,所以在 label.py 里是输出到txt文件时需要加一句if判断语句,其他类别的id数值也需要-1。这样就少了第0类,整体只有11类了。
第7项表示标注物体在画面外的比例,第8项表示物体被遮挡的比例,有需要的话可以先剔除这两项数值比较高的数据。

参考链接

[1] https://blog.csdn.net/Angela_qin/article/details/80930267
[2] https://github.com/zhpmatrix/VisDrone2018
[3] https://www.zhihu.com/question/26588665
[4] http://www.cnblogs.com/blog4ljy/p/9195752.html
[5] https://blog.csdn.net/holmes_MX/article/details/81235687
[6] https://blog.csdn.net/gusui7202/article/details/82114180

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/593030
推荐阅读
相关标签
  

闽ICP备14008679号