如何使用yolov3训练自己的数据集

博客主要结构

1. 如何在ubuntu18.04上安装yolo

2 .如何配置yolov3

3 .如何制作自己的训练集测试集

4 .如何在自己的数据集上运行yolov3

1. 在ubuntu18.04下安装yolov3

安装darknet

按ctrl+atl+t 打开终端, 并在终端下依次输入以下命令

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

如果成功的话你会看到以下信息

mkdir -p obj
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
.....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm....

编译完成后键入以下命令运行darknet

./darknet

你将会看到以下输出结果

usage: ./darknet <function>

使用GPU编译(可选)

如果想让yolo运行的更快的话, 可以使用GPU 加速。你的电脑中应该有Nvidia GPU并安装cuda。 在安装完cuda后,在本目录下修改 Makefile第一行

GPU=1

然后在终端键入

make

这样就可以使用cuda啦, darknet在默认情况下会使用你系统里第零个块显卡 (如果你成功安装了cuda, 在终端输入nvidia-smi可以看到自己的显卡情况)。 如果你想修改darknet可以使用的显卡,你可以给他一个可选的命令 -i <index>, 例如

./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights

这样darknet就会使用你的第一块显卡。

下载pre-trained model

可以在这里下载预训练模型, 或者在终端输入以下命令

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

然后训练你的detector

./darknet detect cfg/yolov3.cfg yolov3.weights data/eagle.jpg

正常情况下你会看到如下输出

                          

                           

darknet会把他的检测的结果, 以及confidence输出出来,因为我没有在darknet下编译opencv所以检测结果不会直接显示出来, 他会把这个结果保存在你的darknet目录下。

2 .配置yolov3

在darknet目录下创建一个dataset子目录, 并在dataset中创建yolo-tiny-obj.cfg 文件, 文件内容与yolov3_tiny.cfg(在darknet/cfg文件夹下)相同(可以直接把yolov3_tiny.cfg的文件内容复制过去), 然后

  • 把batch所在行修改为batch=64
  • 把subdivision设置为8
  • 在每个[yolo]-层, 把classes=80修改成你要检测的类的数量

https://github.com/pjreddie/darknet/blob/master/cfg/yolov3-tiny.cfg#L135

https://github.com/pjreddie/darknet/blob/master/cfg/yolov3-tiny.cfg#L176

  • 在每个[yolo]-层前的[convolution]-层中,修改filters=255, 改成filters=(classes+5)*3(只适用于yolov3, 对于yolov2如何计算filters,google/百度一下)

    https://github.com/pjreddie/darknet/blob/master/cfg/yolov3-tiny.cfg#L127

https://github.com/pjreddie/darknet/blob/master/cfg/yolov3-tiny.cfg#L171

因此如果classes=1, 那么filters=18, 如果classes=2, 那么filters=21

(不要在cfg文件里这样写:filters=(classes+5)*3)

(一般情况下, filters取决于classes, coords, 以及mask的数量, 例如filters = (classes+coords+1)*<numbers of mask>, 这里的mask就是anchors的索引, 如果没有mask, 那么filters=(classes+coords+1)*num)

比如, 只有两个类, 那么你的yolo-tiny-obj.cfg 在每个yolo层中应该是如下设置

[convolutional]
filters=21

[region]
classes=2

在/darknet/dataset创建obj.names文件, 每行是你的类的名字, 如果你要检测的是猫和狗, 那么你的obj.names文件内容如下

cat
dog

在/darknet/dataset创建obj.data文件, 包含如下内容, (classes=你要检测的类的数量)

classes= 2
train  = dataset/train.txt
valid  = dataset/test.txt
names = dataset/obj.names
backup = backup/

3. 制作自己的训练集测试集

首先把你的训练集(测试集)图片放到/darknet/dataset/Train (/darknet/dataset/Test ) , 图片扩展名为.jpg

然后对你数据集图片上的每个物体作标记,你可以用这个工具在图片上画边框, 并生成标记文件。他会在同一个目录下,给每个.jpg文件生成一个名字相同的.txt文件,文件里应该包含物体的类的编号, 以及物体在图片中的坐标,每一行都表示一个物体 <物体类的编号><x_center> <y_center> <width> <height>

  • <类的编号> :是正整数, 从0-<类的数目-1>
  • <x_center> <y_center> <width> <height> :都是浮点数范围从0到1,通过图片的长宽计算得出,例如<y_center>=<边框中心的纵坐标>/图片的高,<height> = <边框的高>/图片的高
  • 注意<x_center> <y_center>:是你画得边框的中心

比如对于img1.jpg你会创建一个img1.txt文件,包含以下内容

1 0.716797 0.395833 0.216406 0.147222
0 0.687109 0.379167 0.255469 0.158333
1 0.420312 0.395833 0.140625 0.166667

在/darknet/dataset目录下创建train.txt文件,文件中每一行都是到你训练集的地址, 可以使绝对路径, 也可以是相对路径, (相对darknet这个文件夹的路径), 例如文件内容如下

dataset/Train/img1.jpg
dataset/Train/img2.jpg
dataset/Train/img3.jpg

这里你需要重新根据你自己的数据集计算anchors值, 可以参开这个python script来计算, 然后把yolo-tiny-obj.cfg文件中的anchors值替换成你计算的结果

4 .在自己的数据集上运行yolov3

下载yolov3-tiny的权重文件:https://pjreddie.com/media/files/yolov3-tiny.weights 到darknet目录下

在终端输入以下命令得到预训练模型yolov3-tiny.conv.15

./darknet partial dataset/yolo-tiny-obj.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15

输入以下命令开始训练

./darknet detector train dataset/obj.data dataset/yolo-tiny-obj.cfg yolov3-tiny.conv.15

如果一切正常应该是这样的结果  

                    

如果你运行中出现了nan, 这是正常现象,但如果全部都是nan的话,这就是训练过程出了问题,请仔细检查每一步是否按照操作进行

原文地址:https://www.cnblogs.com/laozhanghahaha/p/10527474.html

时间: 2024-11-04 02:00:05

如何使用yolov3训练自己的数据集的相关文章

使用yolo3模型训练自己的数据集

使用yolo3模型训练自己的数据集 本项目地址:https://github.com/Cw-zero/Retrain-yolo3 一.运行环境 1. Ubuntu16.04. 2. TensorFlow-gpu 1.4.0 或更高版本. 3. Keras 2.2.4 . 4. numpy 1.15.2(实测1.16.1会报错). 二.创建数据集 1. 使用VOC2007数据集的文件结构: 文件结构如下图,可以自己创建,也可以下载VOC2007数据集后删除文件内容. 注:数据集中没有 test.p

YOLOv3 训练自己的数据附优化与问题总结

YOLOv3 训练自己的数据附优化与问题总结 环境说明 系统:ubuntu16.04 显卡:Tesla k80 12G显存 python环境: 2.7 && 3.6 前提条件:cuda9.0 cudnn7.0 opencv3.4.0 安装cuda和cudnn教程 安装opencv3.4.0教程 实现YOLOV3的demo 首先安装darknet框架,官网链接 git clone https://github.com/pjreddie/darknet.git cd darknet vim M

可变卷积Deforable ConvNet 迁移训练自己的数据集 MXNet框架 GPU版

[引言] 最近在用可变卷积的rfcn 模型迁移训练自己的数据集, MSRA官方使用的MXNet框架 环境搭建及配置:http://www.cnblogs.com/andre-ma/p/8867031.html 一 参数修改: 1.1  ~/Deformable-ConvNets/experiments/rfcn/cfgs/resnet_v1_101_voc0712_rfcn_dcn_end2end_ohem.yaml  文件中修改两个参数 (yaml文件包含对应训练脚本的一切配置信息和超参数)

Mask R-CNN图像实例分割实战:训练自己的数据集

Mask R-CNN是一种基于深度学习的图像实例分割方法,可对物体进行目标检测和像素级分割. 本课程将手把手地教大家使用VIA图像标注工具制作自己的数据集,并使用Mask R-CNN训练自己的数据集,从而能开展自己的图像分割应用. 课程链接:https://edu.51cto.com/course/18598.html 本课程有三个项目案例实践: (1) balloon实例分割 :对图像中的气球做检测和分割 (2) pothole(单类物体)实例分割:对汽车行驶场景中的路坑进行检测和分割 (3)

DeepLabv3+图像语义分割实战:训练自己的数据集

DeepLabv3+是一种非常先进的基于深度学习的图像语义分割方法,可对物体进行像素级分割. 本课程将手把手地教大家使用labelme图像标注工具制造自己的数据集,并使用DeepLabv3+训练自己的数据集,从而能开展自己的图像分割应用. 课程链接:https://edu.51cto.com/course/18817.html 本课程有两个项目实践: (1) CamVid语义分割 :对CamVid数据集进行语义分割 (2) RoadScene语义分割:对汽车行驶场景中的路坑.车.车道线等进行物体

U-Net图像语义分割实战:训练自己的数据集

U-Net是一种基于深度学习的图像语义分割方法,尤其在医学图像分割中表现优异. 本课程将手把手地教大家使用labelme图像标注工具制作自己的数据集,生成Mask图像,并使用U-Net训练自己的数据集,从而能开展自己的图像分割应用. 课程链接:https://edu.51cto.com/course/18936.html 本课程有三个项目实践: (1) Kaggle盐体识别比赛 :利用U-Net进行Kaggle盐体识别 (2) Pothole语义分割:对汽车行驶场景中的路坑进行标注和语义分割 (

PyTorch版Mask R-CNN图像实例分割实战:训练自己的数据集

Mask R-CNN是一种基于深度学习的图像实例分割方法,可对物体进行目标检测和像素级分割. 课程链接:https://edu.51cto.com/course/19920.html 本课程将手把手地教大家使用Labelme图像标注工具制作自己的数据集,并使用PyTorch版本的Mask R-CNN(Facebook 官方maskrcnn-benchmark)训练自己的数据集,从而能开展自己的图像分割应用. 本课程的具体项目实战案例是:对汽车行驶场景中的路坑.车.车道线等多类物体进行检测和分割

在C#下使用TensorFlow.NET训练自己的数据集

在C#下使用TensorFlow.NET训练自己的数据集 今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分类 ,可以直接移植该代码在 CPU 或 GPU 下使用,并针对你们自己本地的图像数据集进行训练和推理.TensorFlow.NET是基于 .NET Standard 框架的完整实现的TensorFlow,可以支持 .NET Framework 或 .NET CORE , TensorFlow.NET

Faster-RCNN训练自己的数据集——备忘

新手学习,参考了http://www.cnblogs.com/CarryPotMan/p/5390336.html 只是在这篇博客中并没有说明自己训练集文件夹放置的位置以及修改中对应的文件信息.刚刚调通,记下来,以备以后自己少走些弯路. 配置py-faster-rcnn没什么好记的,文档也很多. 先说下数据集,需要准备三个文件夹:Annotations   Images   Imagelist Images文件夹 :存放所有的 train 和 val 的图片 Annotation文件夹  :存放