文章目录

  • 1. 安装
  • 1.1 模型安装
  • 1.2 运行Demo
  • 2.训练自己的数据集
  • 2.1数据集准备
  • 2.2修改配置文件
  • 2.2.1修改cfg/voc.data
  • 2.2.2修改data/voc.names
  • 2.2.3修改cfg/yolo-voc.cfg
  • 2.3 训练
  • 3. 测试
  • 3.1 单张图像测试
  • 3.2多张图像测试
  • 3.3 测试数据集测试mAP、recall等参数
  • 命令参数总结
  • 训练模型
  • 单GPU训练
  • 多GPU训练
  • 测试图片
  • Error
  • /bin/sh: 1: nvcc: not found
  • ./darknet: error while loading shared libraries: libcurand.so.10.0: cannot open shared object file: No such file or directory
  • 参考

1. 安装

1.1 模型安装

YOLO v3的安装与YOLO v2的安装方法一样

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">git</span> clone https://github.com/pjreddie/darknet
</code></span>

直接使用上边的命令下载YOLO安装包。下载完以后,打开进入到安装包路径内

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">cd</span> darknet
</code></span>

如果机器有使用GPU加速的环境,以及安装OPENCV了,需要做一下修改

<span style="color:#000000"><code class="language-shell">gedit Makefile
</code></span>

使用gedit打开编译文件,将文件前几行中,对应的GPU、CUDNN、OPENCV由0变为1;

<span style="color:#000000"><code class="language-shell">GPU<span style="color:#6272a4">=</span>1
CUDNN<span style="color:#6272a4">=</span>1
OPENCV<span style="color:#6272a4">=</span>1
</code></span>

对Makefile修改结束以后,就可以进行安装。

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">make</span> -j
</code></span>

下载YOLO v3权重

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">wget</span> https://pjreddie.com/media/files/yolov3.weights
</code></span>

1.2 运行Demo

运行Demo查看运行是否成功。

<span style="color:#000000"><code class="language-shell">  ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
</code></span>

2.训练自己的数据集

2.1数据集准备

首先将自己的数据集生成为VOC数据集的格式,至少生成如下格式的文件夹

<span style="color:#000000"><code class="language-shell">Annotations
ImageSets--Main--test.txt--train.txt--trainval.txt--val.txt
JPEGImages
</code></span>

接着将上边四个文件夹放在/darknet/scripts/VOCdevkit/VOC2007内,这个文件夹需要自己来创建一个。接着对/darknet/scripts/voc_label.py进行修改。
第一处
修改第7行

<span style="color:#000000"><code class="language-shell"> sets<span style="color:#6272a4">=</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'test'</span><span style="color:#999999">)</span><span style="color:#999999">]</span>
``<span style="color:#ee9900"><span style="color:#ee9900">`</span>shell
将“<span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>,”删除掉,改为
<span style="color:#ee9900">`</span></span>``shellsets<span style="color:#6272a4">=</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'test'</span><span style="color:#999999">)</span><span style="color:#999999">]</span>
</code></span>

第二处
修改第9行

<span style="color:#000000"><code class="language-shell"> classes <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#f1fa8c">"aeroplane"</span>, <span style="color:#f1fa8c">"bicycle"</span>, <span style="color:#f1fa8c">"bird"</span>, <span style="color:#f1fa8c">"boat"</span>, <span style="color:#f1fa8c">"bottle"</span>, <span style="color:#f1fa8c">"bus"</span>, <span style="color:#f1fa8c">"car"</span>, <span style="color:#f1fa8c">"cat"</span>, <span style="color:#f1fa8c">"chair"</span>, <span style="color:#f1fa8c">"cow"</span>, <span style="color:#f1fa8c">"diningtable"</span>, <span style="color:#f1fa8c">"dog"</span>, <span style="color:#f1fa8c">"horse"</span>, <span style="color:#f1fa8c">"motorbike"</span>, <span style="color:#f1fa8c">"person"</span>, <span style="color:#f1fa8c">"pottedplant"</span>, <span style="color:#f1fa8c">"sheep"</span>, <span style="color:#f1fa8c">"sofa"</span>, <span style="color:#f1fa8c">"train"</span>, <span style="color:#f1fa8c">"tvmonitor"</span><span style="color:#999999">]</span>
</code></span>

修改为自己检测目标类别名称


完成修改以后可运行文件,生成YOLO训练时使用的labels

<span style="color:#000000"><code class="language-shell">python voc_label.py
</code></span>

运行结束以后,可以在/darknet/scripts/VOCdevkit/VOC2007文件夹内看到labels文件夹,并且在/darknet/scripts文件夹内会生成2007_train.txt、2007_test.txt、2007_val.txt三个文件。到此,数据准备完成。

2.2修改配置文件

<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23
</code></span>

上边是进行训练的命令,可以按照上边的命令对文件进行修改。

2.2.1修改cfg/voc.data

<span style="color:#000000"><code class="language-shell">classes<span style="color:#6272a4">=</span> 3               //修改为训练分类的个数
train  <span style="color:#6272a4">=</span> /home/ws/darknet/scripts/2007_train.txt          //修改为数据阶段生成的2007_train.txt文件路径
valid  <span style="color:#6272a4">=</span> /home/ws/darknet/scripts/2007_val.txt           //修改为数据阶段生成的2007_val.txt文件路径
names <span style="color:#6272a4">=</span> data/voc.names
backup <span style="color:#6272a4">=</span> backup
</code></span>

2.2.2修改data/voc.names

在上边修改的文件内有一个data/voc.names文件,里边保存目标分类的名称,修改为自己类别的名称即可。

2.2.3修改cfg/yolo-voc.cfg

第一处
文件开头的配置文件可以按照下边的说明进行修改

<span style="color:#000000"><code class="language-cfg"># Testing
#batch=1
#subdivisions=1
# Training
batch=64                //每次迭代要进行训练的图片数量 ,在一定范围内,一般来说Batch_Size越大,其确定的下降方向越准,引起的训练震荡越小。
subdivisions=8          //源码中的图片数量int imgs = net.batch * net.subdivisions * ngpus,按subdivisions大小分批进行训练
height=416              //输入图片高度,必须能被32整除
width=416               //输入图片宽度,必须能被32整除
channels=3              //输入图片通道数
momentum=0.9            //冲量
decay=0.0005            //权值衰减
angle=0                 //图片角度变化,单位为度,假如angle=5,就是生成新图片的时候随机旋转-5~5度
saturation = 1.5        //饱和度变化大小
exposure = 1.5          //曝光变化大小
hue=.1                  //色调变化范围,tiny-yolo-voc.cfg中-0.1~0.1
learning_rate=0.001     //学习率
burn_in=1000
max_batches = 120200    //训练次数
policy=steps            //调整学习率的策略
steps=40000,80000       //根据batch_num调整学习率,若steps=100,25000,35000,则在迭代100次,25000次,35000次时学习率发生变化,该参数与policy中的steps对应
scales=.1,.1             //相对于当前学习率的变化比率,累计相乘,与steps中的参数个数保持一致;
</code></span>

注意:如果修改max_batches总的训练次数,也需要对应修改steps,适当调整学习率。
具体的含义可以查看YOLO网络中参数的解读
第二处
修改107行最后一个卷积层中filters,按照filter=5*(classes+5)来进行修改。如果类目为3,则为5*(3+5)=40。

<span style="color:#000000"><code class="language-cfg">[convolutional]
size=1
stride=1
pad=1
filters=40      //计算公式为:filter=3*(classes+5)
activation=linear
</code></span>

第三处
修改类别数,直接搜索关键词“classes”即可,全文就一个。

<span style="color:#000000"><code> classes=3
</code></span>

2.3 训练

<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 <span style="color:#6272a4">>></span> log.txt
</code></span>

输入上边的指令就可以进行训练,在命令最后的命令>> log.txt是将输出的日志保存到log.txt文件内,这样便于后期训练结果的查看。

3. 测试

3.1 单张图像测试

<span style="color:#000000"><code class="language-shell">./darknet detect cfg/yolo-voc.cfg backup/yolo-voc_final.weights data/dog.jpg
</code></span>
<span style="color:#000000"><code class="language-shell">./darknet detect <span style="color:#999999">[</span>训练cfg文件路径<span style="color:#999999">]</span> <span style="color:#999999">[</span>权重文件路径<span style="color:#999999">]</span> <span style="color:#999999">[</span>检测图片的路径<span style="color:#999999">]</span>
</code></span>

按照上边的规整进行填写即可。

3.2多张图像测试

由于博主能力有限,修改YOLO内部文件失败,只能使用shell写命令来进行重复单张测试的命令

<span style="color:#000000"><code class="language-shell">input_data_folder<span style="color:#6272a4">=</span><span style="color:#f1fa8c">"./data/VOCdevkit/VOC2007/JPEGImages/"</span>
output_data_folder<span style="color:#6272a4">=</span><span style="color:#f1fa8c">"./results/CD8"</span> file_name_tmp<span style="color:#6272a4">=</span><span style="color:#ee9900"><span style="color:#ee9900">`</span><span style="color:#8be9fd">ls</span> $input_data_folder<span style="color:#ee9900">`</span></span>file_names<span style="color:#6272a4">=</span><span style="color:#999999">(</span><span style="color:#ee9900"><span style="color:#ee9900">$(</span><span style="color:#ff79c6">echo</span> $file_name_tmp<span style="color:#ee9900">)</span></span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#ff79c6">for</span> filename <span style="color:#ff79c6">in</span> <span style="color:#ee9900">${file_names[@]}</span>
<span style="color:#ff79c6">do</span><span style="color:#ff79c6">echo</span> <span style="color:#f1fa8c">"testing <span style="color:#ee9900">$file</span> ..."</span>./darknet detector <span style="color:#8be9fd">test</span> cfg/inst25.data cfg/yolo-voc.cfg backup/yolo-voc_final.weights <span style="color:#ee9900">$input_data_folder</span><span style="color:#ee9900">$filename</span> -thresh .3 -gpu 0,1 <span style="color:#6272a4">>></span> result.txt<span style="color:#8be9fd">mv</span> predictions.png ./results/CD8_final_thresh_0.3/<span style="color:#ee9900">$filename</span><span style="color:#f1fa8c">'.png'</span><span style="color:#ff79c6">done</span>
</code></span>

修改相应自己存储图片的路径就可以进行测试 。

3.3 测试数据集测试mAP、recall等参数

<span style="color:#000000"><code class="language-shell">./darknet detector valid cfg/voc.data cfg/voc.cfg backup/voc_final.weights -out result_ -gpu 0 -thresh .5
</code></span>
<span style="color:#000000"><code>./darknet detector valid [data路径] [cfg路径] [权重文件路径] -out [生成txt文件前缀] -gpu [GPU的ID号] -thresh [门限的大小]
</code></span>

按照上边的规则对测试数据集进行测试,会在result文件夹内生成相应的相应检测结果的文件。
下边借助Faster R-CNN中voc_eval.py文件进行参数测试。

<span style="color:#000000"><code class="language-shell">from voc_eval <span style="color:#8be9fd">import</span> voc_eval
rec, prec, ap, fp, tp, nobj <span style="color:#6272a4">=</span> voc_eval<span style="color:#999999">(</span><span style="color:#f1fa8c">'/home/app/darknet/results/result_ {}.txt'</span>, <span style="color:#f1fa8c">'/home/app/darknet/scripts/VOCdevkit/VOC2007/Annotations/{}.xml'</span>,<span style="color:#f1fa8c">'/home/app/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/test.txt'</span>, <span style="color:#f1fa8c">'Target1'</span>, <span style="color:#f1fa8c">'.'</span><span style="color:#999999">)</span>
print<span style="color:#999999">(</span><span style="color:#f1fa8c">"class name: "</span> + classname<span style="color:#999999">)</span>
print<span style="color:#999999">(</span><span style="color:#f1fa8c">"Average Precision: "</span> + str<span style="color:#999999">(</span>ap<span style="color:#999999">))</span>
print<span style="color:#999999">(</span><span style="color:#f1fa8c">"True Positive: "</span> + str<span style="color:#999999">(</span>tp<span style="color:#999999">))</span>
print<span style="color:#999999">(</span><span style="color:#f1fa8c">"False Positive: "</span> + str<span style="color:#999999">(</span>fp<span style="color:#999999">))</span>
</code></span>

首先将上边的命令新建一个python文件,同时将Faster R-CNN中voc_eval.py文件放在一个文件夹内,这个文件可以能在Github中不能找到,可以去CSDN下载。

命令参数总结

训练模型

单GPU训练

<span style="color:#000000"><code class="language-shell">./darknet -i <span style="color:#6272a4"><</span>gpu_id<span style="color:#6272a4">></span> detector train <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>train_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span>
</code></span>

举例:

<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
</code></span>

多GPU训练

格式为:

<span style="color:#000000"><code class="language-shell">./darknet detector train <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>model_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span> -gpus <span style="color:#6272a4"><</span>gpu_list<span style="color:#6272a4">></span>
</code></span>

举例

<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1,2,3
</code></span>

测试图片

测试单张图片

<span style="color:#000000"><code class="language-shell">./darknet detector <span style="color:#8be9fd">test</span> <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>test_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>image_file<span style="color:#6272a4">></span>
</code></span>

<test_cfg>文件中batch和subdivisions两项必须为1。
测试时还可以用-thresh和-hier选项指定对应参数。
生成预测结果

<span style="color:#000000"><code>./darknet detector valid <data_cfg> <test_cfg> <weights> <out_file>
</code></span>

<test_cfg>文件中batch和subdivisions两项必须为1。
结果生成在<data_cfg>的results指定的目录下以<out_file>开头的若干文件中,若<data_cfg>没有指定results,那么默认为<darknet_root>/results。
计算recall(执行这个命令需要修改detector.c文件,修改信息请参考“detector.c修改”)

<span style="color:#000000"><code class="language-shell">./darknet detector recall <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>test_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span>
</code></span>

<test_cfg>文件中batch和subdivisions两项必须为1。
输出在stderr里,重定向时请注意。
RPs/Img、IOU、Recall都是到当前测试图片的均值。
detector.c中对目录处理有错误,可以参照validate_detector对validate_detector_recall最开始几行的处理进行修改。

Error

/bin/sh: 1: nvcc: not found


当安装在CUDA10.1的情况下会报下边的错误,这时候需要将Makefile文件中的NVCC

<span style="color:#000000"><code class="language-txt">NVCC=nvcc
</code></span>
  •  

修改为下边的格式:

<span style="color:#000000"><code class="language-txt">NVCC=/usr/local/cuda-10.1/bin/nvcc
</code></span>
  •  

./darknet: error while loading shared libraries: libcurand.so.10.0: cannot open shared object file: No such file or directory

使用下边的命令进行修正

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/local/lib/libcudart.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig
<span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcublas.so.10.0 /usr/local/lib/libcublas.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig
<span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcurand.so.10.0 /usr/local/lib/libcurand.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig</code></span>

参考

YOLOv3: 训练自己的数据 - CSDN博客

YOLO v3 安装并训练自己数据相关推荐

  1. YOLO V3 一步步训练自己的目标检测

    YOLO 的 Darknet 框架想必大家应该很熟悉,最近出了最新的 V3 版本,也看到网上有很多的"手把手训练自己的数据"的博客,感谢前辈们,自己也从中收益良多.但还是觉得有些粗 ...

  2. 深度学习数据标注_Lableme及标注文件的使用(以YOLO v3为例)

    图像标注工具Lable labelme 是一款图像标注工具,主要用于神经网络构建前的数据集准备工作,因为是用 Python 写的,所以使用前需要先安装 Python 集成环境 anaconda. an ...

  3. 目标检测 YOLO v3 训练 人脸检测模型

    YOLO,是You Only Look Once的缩写,一种基于深度卷积神经网络的物体检测算法,YOLO v3是YOLO的第3个版本,检测算法更快更准. 本文源码:https://github.com ...

  4. 探索 YOLO v3 实现细节 - 第4篇 数据和y_true

    YOLO,即You Only Look Once的缩写,是一个基于卷积神经网络(CNN)的物体检测算法.而YOLO v3是YOLO的第3个版本(即YOLO.YOLO 9000.YOLO v3),检测效 ...

  5. yolo v3制作自己的数据_必看!一文掌握最先进的实时对象检测系统YOLO

    全文共3866字,预计学习时长20分钟或更长 本文将详细分析如何使用YOLO(You Only Look Once)进行对象检测.要想完全理解这一技术,首先应该知道对象分类.检测和分割之间的区别. 对 ...

  6. 基于Mini无人机与改进损失函数的YOLO V3的大豆幼苗自动计数系统V1.0-使用手册

    源代码参见Github:https://github.com/jamie-ji/improved-YOLO-V3-Application-in-automatic-count-soybean 有帮助可 ...

  7. 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现

    本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...

  8. 从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附代码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 1.跟踪基础知识简介 首先要说明一点,现在多目标跟踪算法的效果,与 ...

  9. 【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)...

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|集智书童 1.跟踪基础知识简介 首先要说明一点,现在多目标 ...

最新文章

  1. centos7服务器搭建elasticsearch7.6.0集群
  2. C++学习之路: 单例模板
  3. 《代码大全》阅读笔记-18-表驱动法
  4. 数据库工具Navicat for MySQL
  5. wepe 装linux ubuntu,Ubuntu16.04下安装Wechat的实现方法
  6. SpringMVC4 + Spring + MyBatis3 【转】
  7. java编程简单小游戏_求一个简单又有趣的JAVA小游戏代码
  8. 计算机抓取整个屏幕的按键,技术员搞定电脑截全屏快捷键【搞定方法】
  9. 5分钟学会制作自动化脚本——自动化脚本辅助开发IDE——Selenium IDE介绍(测试工程师必备)
  10. 433MHz无线通信
  11. 基于51单片机GSM模块的家庭防火防盗报警系统
  12. crt计算机显示器,crt显示器最高分辨率_crt显示器最高刷新率
  13. re.sub()用法的详细介绍
  14. 2022-2028全球铝制3D打印机行业调研及趋势分析报告
  15. 一个简单的C语言代码段,逻辑题
  16. python 下载视频文件_python 实现视频流下载保存MP4的方法
  17. 嵌入式系统硬件处理器架构的发展趋势及比较分析
  18. NAT地址转换实验记录
  19. 计算机测试是指,考驾照电脑测试是什么
  20. PHP接入快递鸟查询快递

热门文章

  1. react 16.6 懒加载 Lazy 尝鲜
  2. python测试工具开发面试宝典3web抓取
  3. Thrift源码学习二——Server层
  4. 【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题
  5. Leetcode题目:Valid Anagram
  6. Log4cpp 使用手册
  7. 双击treeView的节点时使不展开不折叠子节点
  8. as3:sprite作为容器使用时,最好不要指定width,height
  9. 中鸣投篮机器人怎么组装_1000余人参加洛阳市青少年机器人竞赛
  10. 三维图形几何变换算法实验_计算机视觉方向简介 | 深度学习视觉三维重建