在Linux服务器环境下使用yolov3训练voc数据集

一、通过Xshell等工具连接到Linux服务器

由于我使用的是window电脑,所以需要借助第三方工具来连接服务器,使用mac系统或者Linux系统的话,可以直接在终端使用ssh连接到远程服务器。

可以在服务器中新建一个文件夹来放置项目所需的各种文件。

二、检查服务器中的cuda版本

在服务器终端中输入以下命令,查看cuda的版本,注意V需要大写

nvcc -V

可以看到服务器中的cuda版本是10.0

之所以要检查cuda的版本,是因为之前在cuda9.0版本下,训练数据集后,最后的检测失败了(但也不能排除我操作上的原因),看了许多博客,如果最后的检测不出结果,有可能是cuda版本的原因,这一点需要格外注意一下。

下载安装新的cuda,可以查询相关的博客。

三、下载安装darknet

执行命令:

git clone https://github.com/pjreddie/darknet.git

执行成功后会在当前目录下自动生成一个darknet文件夹

使用命令进入darknet:

cd darknet

文件夹中的文件如下,有些文件是后续生成或者上传进去的,所以你执行后的命令肯定跟下面截图的不一样,后续我会对这些多出来的文件一一讲解

四、更改配置文件Makefile

使用vim编译器打开Makefile文档:

vim Makefile 

将GPU和CUDNN后面的数值0改成1,否则默认用CPU训练数据的话,速度会无比的缓慢,如果有安装OpenCV,那么可以在第三行将OPENCV的值也置为一,这里我只是检测了图片,因此没有安装OpenCV。

修改完成之后,在命令行输入make,否则修改的代码不会生效

make

五、测试一下yolov3的效果

去yolo官网下载一个yolov3.weights的权重,下载命令如下:

wget https://pjreddie.com/media/files/yolov3.weights

下载过程可能会特别缓慢,或者是下载失败,这时候可以去找一些网盘的资源,下载到本地后,输入命令rz上传文件到darknet目录下,如图所示:

上传完成权重文件之后,就可以测试一下yolov3了

确保当前目录在darknet下,执行命令:

./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg

./darknet:当前目录

test:表示是检测,不是训练

cfg/coco.data:配置文件,包括物体总的类别数量,训练和测试文件的路径,生成权重保存在什么目录下等配置信息,在使用yolov3训练自己的数据集的时候是需要创建一个这样的文件的

cfg/yolov3.cfg:训练和测试过程的配置文件,训练voc数据集时,主要是要根据是训练还是测试,打开/关闭相应的注释,后面会再提到这个文件。

yolov3.weights:下载的权重文件,相当于就是已经训练的很好的权重信息,测试图片时可以直接拿来用

data/dog.jpg:要测试的图片,在darknet/data目录下,有一些其他的图片也可以拿来测试。

执行命令以后,会出现如下的结果:

可以看到图片中的三个物体都被检测出来了

由于Linux服务器下不能查看图片,所以可以用sz命令,上传到本地来查看图片

上述的predictions.jpg,就是已经标记好的图片,输入命令:

sz predictions.jpg 

可以在本地查看到图片如下:

六、下载上传VOC数据集

下载VOC数据集,官网如下,如果下载缓慢,也可以去找网盘资源

https://pjreddie.com/projects/pascal-voc-dataset-mirror/

下载如下三个压缩包到本地,使用rz命令上传到服务器中,放到darknet目录下:

七、解包生成相应的文件夹

使用命令进行解包:

tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCtrainval_06-Nov-2007.tar 
tar xvf VOCtrainval_11-May-2012.tar 

操作后,会在当前目录生成一个VOCdevkit文件夹,里面有VOC2007,VOC2012两个子文件夹,拿VOC2012文件夹举例,相应的目录结构如下:

这些文件夹解压时会自动生成,但是训练自己的VOC格式的数据集时需要手动创建

八、执行voc_label.py文件

将scripts文件下的voc_label.py拷贝到darknet目录下

cp scripts/voc_label.py ./

在darknet目录下,运行该py文件

python voc_label.py

运行完成后在VOCdevkit/VOC2007(VOC2012)就可以看到多了一个labels文件

在darknet目录下也会生成一些txt文件:

九、修改配置文件voc.data

修改配置文件voc.data。该文件位于darknet/cfg目录下,修改train和valid后面的路径,改为自己的路径

说明:

classes=20:VOC数据集一共20个类别

train=...:训练文件的路径,train.txt是运行上面的py文件生成的,每行都是训练图片的绝对路径

vaild=...:测试文件的路径,也是运行上面的py文件生成的

names=...:20个类别的名称,voc.name文件是内置在darknet里面的,训练VOC数据集时不用手动修改,但是训练自己的数据集时就要手动修改了

backup=...:训练过程中存放权重文件,有过程中的权重文件和最终训练完成的权重的文件

十、修改配置文件yolov3-voc.cfg

该文件在darknet/cfg目录下,打开yolov3-voc.cfg文件,将第6、7行training下的注释去掉,如果按照默认的batch=1,subdivisions=1,训练时会出现大量的nan

把里面的max_batches调小,可以显著降低训练时间

十一、下载预训练权重并进行训练

终端下执行如下命令,下载预训练权重,注意是在darknet目录下执行该命令。如果速度慢,就找网盘资源。

wget https://pjreddie.com/media/files/darknet53.conv.74

完成上面的所有工作后,就可以进行训练了,训练的代码:

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

train:代表训练

其他的参数在测试yolov3效果时说明过,总之就是指定一些配置文件和权重等

训练的时长在GPU性能较好的情况下大概需要好几个小时,但是训练一段时间,当损失降的比较低时,可以提前终止训练。

训练结束后,在backup文件夹中,可以看到许多过程的权重文件,里面的任何一个都可以用于测试,当然训练的越久,效果也就越好,训练完成后,会有一个后缀为final的文件,那个就是最终的权重文件了(我这里偷懒没有训练到最后),注意yolov3-voc.backup也是可以用的,这个文件保存的是最新的权重信息。

十二、测试

我测试的是单张图片,我是将图片上传到data文件夹下,下面的XXX是图片的名称,当然data文件夹里面有些本来就有的图片,那个也可以用来测试

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_600.weights data/XXX.jpg

测试成功的话,会出现图片中某个物体的概率,(默认的阈值好像是50%),结果图片(也就是物体框起来的图片)就是predictions.jpg,上传到自己电脑就可以查看了。

测试时应该要修改配置文件yolov3-voc.cfg(打开,关闭注释即可),但是经过测试,发现用训练的batch和subdivisions也是可以测试成功的

十三、测试过程指定置信度阈值

测试过程中可以手动指定置信度阈值,在测试代码后加上,数值可以随意指定

-thresh 0.25

最后这个0.25就是置信度,代表相似度为0.25及以上的目标都会被标出

十四、最后

如果需要测试多张图片,可以参考:

YOLOv3批量测试图片并保存在自定义文件夹下

如果想要了解一些参数的效果,可以参考:

Yolov3参数理解

 

 

参考博客:

【学习笔记—Yolov3】Yolov3训练VOC数据集&训练自己的数据集

Yolov3参数理解

YOLOV3训练自己的数据集(VOC数据集格式)

YOLO V3置信度阈值调整

YOLOv3批量测试图片并保存在自定义文件夹下

YoLov3训练自己的数据集(小白手册)

 

 

 

YOLOv3是一种目标检测算法,它可以同时实现目标的检测和分类。训练YOLOv3模型需要使用特定的数据集,其中包括了目标物体的图像和相应的标注信息。在这里,我将为您介绍如何训练YOLOv3模型使用VOC数据集。 1. 下载VOC数据集:首先,您需要下载Pascal VOC数据集,它是一个常用的目标检测数据集。您可以从官方网站上下载VOC2007和VOC2012两个版本的数据集。 2. 数据集准备:解压下载数据集文件,并将图像和标注文件分别放置在不同的文件夹中。确保每个图像文件都有对应的XML格式的标注文件。 3. 数据集标注:使用标注工具(如LabelImg)打开图像,并手动绘制边界框来标注目标物体的位置。保存标注信息为XML格式。 4. 配置YOLOv3模型:下载YOLOv3的源代码,并根据自己的需求进行配置。主要包括修改配置文件中的类别数、训练集和测试集的路径等。 5. 数据集划分:将整个数据集划分为训练集和验证集。通常情况下,80%的数据用于训练,20%用于验证。 6. 数据集转换:将数据集的图像和标注信息转换为YOLOv3所需的格式。可以使用脚本或工具来完成这一步骤。 7. 模型训练使用转换后的数据集进行模型训练。运行训练脚本,指定配置文件、权重文件和数据集路径等参数。 8. 模型评估:训练完成后,可以使用测试集对模型进行评估,计算模型的精度、召回率等指标。 9. 模型优化:根据评估结果,可以对模型进行优化,如调整超参数、增加训练数据等。 10. 模型应用:训练完成的YOLOv3模型可以用于目标检测任务,可以通过调用模型的API或使用训练权重来进行目标检测。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值