YOLOv3 训练自己的数据

ubuntu16.04下使用YOLOV3训练自己做的VOC数据集(VOC数据集制作+模型训练步骤+训练参数解析和问题解决+训练日志可视化(loss、IOU)+模型测试(单张、摄像头、批量测试)) 前序 1、环境配置 请自行参考其他博客 本机环境 ubuntu16.04 python3 英伟达显卡驱动:nvidia-396 OpenCV3.4.5 CUDNN7.0.5 CUDA9.0 2、ubuntu16.... 阅读详情

改作者都在讲解yolov3:https://blog.youkuaiyun.com/holmes_MX/article/details/81235687:

YOLOv3 训练自己的数据(解决网上提供的文章不能一次成功的问题)

置顶 2018年07月27日 15:33:03 holmes_MX 阅读数:2688

 版权声明:原创博客未经允许请勿转载! https://blog.youkuaiyun.com/holmes_MX/article/details/81235687

0. 写本博客的目的

对于使用yolov3训练自己的数据,网上虽然文章多,但是经过实验发现,基本没有能一次运行的成功的。因此特写此文,记录自己在使用yolov3训练自己的数据时遇到的坑。

环境:ubuntu14 + CUDA8.0 + cudnn5.0  + GTX1050Ti (4G)

1. 制作数据

      为了便于在多个目标检测框架(如Faster R-CNN,SSD等)中训练,制作数据时,推荐使用类似VOC(VOC-LIKE)数据。windows可以使用labelImg.exe来进行标注。具体这里不详细介绍了。

2. 下载+编译yolov3

      从官方网址中下载yolov3源码。具体编译过程作者有介绍。这里简要介绍一下自己编译的过程。

假设yolov3在ubuntu中的路径为/home/XXX/darknet

  1) 修改配置文件(Makefile)

    Makefile文件中(下面是配置文件中的修改部分,或者需要注意的部分) 

需要注意的是:是否使用GPU,是否使用CUDNN进行进一步加速,是否使用opencv。如果使用GPU时,需要注意CUDA的安装位置,如果使用opencv,需要注意opencv的位置。有关opencv的ubuntu安装,推荐一个靠谱的安装方式。对于需要注意的地方,在下面的Makefile中有相关注释。

 
  1. GPU=1 ## using GPU for train or test

  2. CUDNN=0 ## using CUDNN to improve speed

  3. OPENCV=1 ## using opencv

  4. OPENMP=0

  5. DEBUG=0

  6.  
  7.  
  8. ## the arch of your GPU

  9. ARCH = -gencode arch=compute_60,code=sm_60 \

  10. -gencode arch=compute_61,code=sm_61 \

  11. -gencode arch=compute_62,code=compute_62

  12.  
  13. #ARCH= -gencode arch=compute_30,code=sm_30 \

  14. # -gencode arch=compute_35,code=sm_35 \

  15. # -gencode arch=compute_50,code=[sm_50,compute_50] \

  16. # -gencode arch=compute_52,code=[sm_52,compute_52] \

  17. # -gencode arch=compute_60,code=sm_60 \

  18. # -gencode arch=compute_61,code=sm_61 \

  19. # -gencode arch=compute_61,code=compute_61

  20. # -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?

  21.  
  22. # This is what I use, uncomment if you know your arch and want to specify

  23. # ARCH= -gencode arch=compute_52,code=compute_52

  24.  
  25.  
  26.  
  27. CFLAGS+=$(OPTS)

  28.  
  29. ifeq ($(OPENCV), 1)

  30. COMMON+= -DOPENCV

  31. CFLAGS+= -DOPENCV

  32. LDFLAGS+= `pkg-config --libs opencv2.4` ## the position of your opencv

  33. COMMON+= `pkg-config --cflags opencv2.4` ## the position of your opencv

  34. endif

  35.  

2) 编译

首先进入darknet所在目录,然后进行编译: make。为了提高编译速度可以使用make -j4 或者make -j8。(-j4 或者-j8依据自己的电脑配置)

注意:在训练自己的数据时,每次修改.c文件后,需要重新编译(修改配置文件不需要)。具体过程为:make clean 清除之前的编译,然后make或者make -j4。

3. 测试安装成功与否

1) 下载作者训练好的权重(在/home/XXX/darknet目录下)

具体为: 

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

2) 进行测试

 注意:如果出现问题,一般在下面命令前加上sudo,重新运行一下就可以了。

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

也可以使用该命令进行测试: 

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

4. 训练自己的数据        

           在/home/XXX/darknet/目录下建立自己的数据集存放文件: myData

1) 将数据转为yolov3所需要的数据

这里给出VOC-LIKE数据中的格式:  在/home/XXX/darknet/myData中存放以下文件:

  JEPGImages —— 存放图像

  Annotations   ——  存放图像对应的xml文件

  ImagesSets/Main —— 存放训练/验证图像的名字(格式如 000001.jpg或者000001),里面包括train.txt。这里给出的格式是: 000000,因为下面的代码中给出了图像的格式。

2) yolov3提供了将VOC数据集转为YOLO训练所需要的格式的代码。这里提供一个修改版本的。

 
  1. import xml.etree.ElementTree as ET

  2. import pickle

  3. import os

  4. from os import listdir, getcwd

  5. from os.path import join

  6.  
  7. sets=[('myData', 'train')]

  8.  
  9. classes = ["plane", "boat", "person"] # each category's name

  10.  
  11.  
  12. def convert(size, box):

  13. dw = 1./(size[0])

  14. dh = 1./(size[1])

  15. x = (box[0] + box[1])/2.0 - 1

  16. y = (box[2] + box[3])/2.0 - 1

  17. w = box[1] - box[0]

  18. h = box[3] - box[2]

  19. x = x*dw

  20. w = w*dw

  21. y = y*dh

  22. h = h*dh

  23. return (x,y,w,h)

  24.  
  25. def convert_annotation(year, image_id):

  26. in_file = open('myData/Annotations/%s.xml'%(image_id))

  27. out_file = open('myData/labels/%s.txt'%(image_id), 'w')

  28. tree=ET.parse(in_file)

  29. root = tree.getroot()

  30. size = root.find('size')

  31. w = int(size.find('width').text)

  32. h = int(size.find('height').text)

  33.  
  34. for obj in root.iter('object'):

  35. difficult = obj.find('difficult').text

  36. cls = obj.find('name').text

  37. if cls not in classes or int(difficult)==1:

  38. continue

  39. cls_id = classes.index(cls)

  40. xmlbox = obj.find('bndbox')

  41. b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))

  42. bb = convert((w,h), b)

  43. out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

  44.  
  45. wd = getcwd()

  46.  
  47. for year, image_set in sets:

  48. if not os.path.exists('myData/labels/'):

  49. os.makedirs('myData/labels/')

  50. image_ids = open('myData/ImageSets/Main/%s.txt'%(image_set)).read().strip().split()

  51. list_file = open('myData/%s_%s.txt'%(year, image_set), 'w')

  52. for image_id in image_ids:

  53. list_file.write('%s/myData/JPEGImages/%s.jpg\n'%(wd, image_id))

  54. convert_annotation(year, image_id)

  55. list_file.close()

运行后,会在/home/XXX/darknet/myData目录下生成一个labels文件夹一个txt文件(myData_train.txt)(内容是: 类别的编码和目标的相对位置)。

2) 修改配置文件

     i) 修改/home/XXX/darknet/cfg下的voc.data和yolov3-voc.cfg文件

        voc.data修改为:

 
  1. classes= 3 ## the number of classes

  2. train = /home/XXX/darknet/myData/myData_train.txt ## depend on your choise

  3. names = /home/XXX/darknet/myData/myData.names ## depend on your choise

  4. backup = /home/XXX/darknet/myData/weights ## restore the trained model

      yolov3-voc.cfg修改的地方为: .cfg文件中涉及[yolo]层的地方(共3处):

 
  1. [convolutional]

  2. size=1

  3. stride=1

  4. pad=1

  5. filters=24 ## anchors_num * (classes_num + 5)

  6. activation=linear

  7.  
  8. [yolo]

  9. mask = 6,7,8

  10. anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326

  11. classes=3 ## classes_num

  12. num=9

  13. jitter=.3

  14. ignore_thresh = .5

  15. truth_thresh = 1

  16. random=0 ## multi-scale training (1 indicates using)

训练时,需要将yolov3-voc.cfg 修改为训练阶段:

 
  1. [net]

  2. # Testing

  3. # batch=1

  4. # subdivisions=1

  5. # Training

  6. batch=16 ## depend on your GPU's size

  7. subdivisions=4 ## depend on your GPU's size

  8. #batch=8

  9. #subdivisions=2

  10. width=416

  11. height=416

  12. channels=3

  13. momentum=0.9

  14. decay=0.0005

  15. angle=0

  16. saturation = 1.5

  17. exposure = 1.5

  18. hue=.1

 ii) 在/home/XXX/darknet/myData目录下添加文件: myData.names

     在本博客中为:

 
  1. plane

  2. boat

  3. person

             注意:如果此时开始训练,会出现不能找到图像的问题(这是许多其他博客没有涉及的问题)。

            解决方式为: 将训练所用的图像拷贝至/home/XXX/darknet/myData/labels中,然后运行就可以了。

刚开始训练时,loss值很大,这个是正常的现象(本博客开始训练时1000多,经过5000多次降到了3左右)。

 

There may be some mistakes in this blog. So, any suggestions and comments are welcome!

 

注释: 由于查看的文章过多,忘记了部分,导致不能一一列出来,还请见谅!

【Reference】

https://pjreddie.com/darknet/yolo/

使用yolov3训练自己的数据--详细过程及问题总结 环境说明 Ubuntu16.04/GPU 1080Ti/Cuda8 1. 下载YOLOv3 git clone https://github.com/pjreddie/darknet cd darknet 2. 修改Makefile配置 GPU=1 #如果使用GPU设置为1,CPU设置为0 CUDNN=1 #如果使用CUDNN设置为1,否则为0 OPENCV=0 #如果调用摄像头,还需... 阅读详情

相关推荐

谷歌Colab训练自己YOLOv3数据集

谷歌Colab用免费GPU训练自己的YOLOv3数据 简介 在迫不得已使用windows作为自己训练数据环境的情况下,可能会遇到以下问题: windows下配置相关环境较为复杂 自己电脑的GPU算力较低或者不支持cuda,GPU显存不足 在此情况下,推荐使用云GPU来实现数据的训练,而Google的Colabortory就提供免费的云端GPU计算服务,并且提供的云服务器中已经配置好了所需的cu...

longlong068的博客 1万+

YOLOv3训练自己的数据集

1.机器配置 系统:Ubuntu 18.04 显卡:GeForce GTX 1060 6GB/PCIe/SSE2 CPU:Intel® Core™ i5-8400 CPU @ 2.80GHz × 6 内存:15.5 GiB 2.环境配置 Opencv 3.4.4 CUDA 9.0 cuDNN NVIDIA显卡驱动  YOLOv3环境配置参考资料 3.制作自己的数据集(VOC格式) (1)创...

少年独剑倚清秋的博客 3338

WIN10 +pytorch版yolov3训练自己数据集

pytorch版yolov3训练自己数据集 目录 1. 环境搭建 2. 数据集构建 3. 训练模型 4. 测试模型 5. 评估模型 6. 可视化 7. 高级进阶-网络结构更改 1. 环境搭建 将github库download下来。 git clone https://github.com/ultralytics/yolov3.git 建议在linux环境下使用anaconda...

python深度学习笔记,一起学习的加QQ2737499951 1万+

项目笔记:ubantu上用yolov3训练自己的数据集

在ubantu上用yolov3训练自己的数据集一、数据准备(标注用来训练的数据)二、制作VOC数据集三、下载YOLOV3四、加入自己的数据集并修改部分文件五、下载预训练好的模型开始训练 一、数据准备(标注用来训练的数据) 因为我这个项目的目的是识别工人有没有佩戴安全帽,所以相对打标签工作比较简单,我用的是LabelImg图像标注工具,至于怎么用可以在网上一下看教程。用这个生成与图片文件名相同的.xml文件。 二、制作VOC数据集 创建文件夹VOCdevkit,在VOCdevkit文件夹下创建VOC2020,

Z_F_H的博客 563

Windows下使用Yolov3(GPU)训练+测试自己的数据集

Windows下使用Yolov3(GPU)训练+测试自己的数据集 1、配置Yolov3 参考:Windows下使用darknet.exe跑通Yolov3 Window10+VS2017+CUDA10.0+OpenCV3.2.0配置Yolov3生成darknet.exe 2、制作VOC数据集 参考:Labelimg制作数据集 制作完成的数据集如下: ...

clover_my的博客 2万+

使用YOLOv3训练自己的数据集

声明:本文使用的YOLOv3来自github中的AlexeyAB大神的代码。 系统环境:ubuntu18.04,GTX1660ti github上有完整的实现步骤,博主只是记录一下。 目录1.准备自己的数据集2.下载及修改代码2.1下载代码并编译2.2根据自己的数据集修改cfg文件3.训练4.预测5.配合ZED相机实现实时检测 1.准备自己的数据集 准备好自定义的训练集/验证集/测试集,本文按照PASCAL VOC(COCO也可以)数据集格式进行存储数据,VOC格式如何存储百度一下即可。参考:制作自己.

科研鬼才的博客 4049

yolov3-tiny(yolov3)训练自己的数据集(一):DarkNet + Ubuntu16.04 + GPU + OpenCV3.4.0 配置篇

1. 配置显卡驱动、cuda 和 cudnn 2. 配置DarkNet环境

y459541195的博客 5142

超详细教程:YOLO_V3(yolov3)训练自己的数据

前言:最近刚好做一个项目需要做detection,选择的算法是yolo v3,因为它既有速度又有精度,还非常灵活,简直是工业界良心。做项目免不了需要用到自己的数据集,所以的从头一个脚印的来,走通了之后决定写一个帖子,以免需要用的人少走歪路,节约时间。 官网上已经教我们如何跑起来yolo v3,因此大部分时间其实花在制作数据集上。总体来说,分为四个步骤,分别是:标注数据,利用voc制作自己的数据集,...

qq_21578849的博客 12万+

【YOLOv3初探】之 keras-yolov3训练自己数据集

写在前面 如何使用官方数据集参看上一篇文章《【YOLO初探】之 使用官方数据集做目标分类》 传送门:https://blog.youkuaiyun.com/plSong_优快云/article/details/85108256 这里,笔者使用了260张训练数据,完成了人脸中“眼睛”、“鼻子”、“嘴巴”的检测,可以成功检测出,虽效果不是很好,但是起码方法是对的,特在此与与大家分享、在文章末尾完全共享了自...

倔强的大萝卜的博客 1万+

小白教程:Ubuntu下使用Darknet/YOLOV3训练自己的数据集

小白教程:Ubuntu下使用Darknet/YOLOV3训练自己的数据集 我先跑了一遍YOLOV3官网教程:https://pjreddie.com/darknet/yolo/ 1.获取数据与标签 将图片转换为xml格式,随后再转换为txt. 1.1获取图片并使用labelimg标注图片生成xml数据 使用标注工具labelimg手动给每一张图片加标签生成xml文件格式放入xml文件夹中,准备好你...

weixin_43981221的博客 1万+

Darknet-Yolov3训练自己的数据

题记:YOLOv3训练自己的数据集,可参考官方指导,点这里,简答易懂。 一、下载代码 git clone https://github.com/pjreddie/darknet cd darknet 二、编译 修改Makefile配置,需要改的地方注释了 Makefile修改如下: GPU=1 #使用GPU设置为1,CPU设置为0 CUDNN=1 #使用CUDNN设置为1,否则为0 OPENCV=1 #使用OPENCV设置为1,否则为0 OPENMP=0 #使用OPENMP设置为1,

Sunny_Darker的博客 3908

使用YOLOV3训练自己的数据集

使用YOLOV3训练自己的数据集 1、下载源码 YOLOv3 github 2、标注数据集 3、将数据集放入代码目录中 其中,Annotations 放置 标注文件 xml, 和 JPEGImages 为训练图片。 4、分割数据集 创建make_txt.py文件,放到和data的同级目录下。 # -*- coding:utf-8 -* import os import random trainval_percent = 0.1 train_percent = 0.9 xmlfilepath = '

FlyDremever 2万+

Ubuntu16.04下YOLO V3训练自己的数据集(超详细))

Ubuntu16.04下YOLO-V3的配置方法,里面添加了一些配置成功的网址,实测有效

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

工具:labelimg、MobaXterm 1.标注自己的数据集。用labelimg进行标注,保存后会生成与所标注图片文件名相同的xml文件,如图。我们标注的是各种表,名称就简单的按外观大小分了s、m、l、xl、xxl共5类标签名 2.下载yolov3项目工程。按照YoLo官网下载 git clone https://github.com/pjreddie/darknet cd darkn...

不知小姐 11万+

Vitis HLS 学习指南与实践教程

Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F

weixin_44707118的博客 1401

nRF5340双核实战:从Zephyr环境搭建到蓝牙协议栈部署

本文详细介绍了nRF5340双核处理器的开发实践,包括Zephyr环境搭建、蓝牙协议栈部署及双核协同工作配置。通过实战案例展示了如何利用nRF5340的双核异构架构提升蓝牙应用性能,并提供了调试技巧与资源优化建议,帮助开发者高效实现低功耗蓝牙设备开发。

weixin_42525385的博客 380

YOLOv3训练KITTI数据集

YOLOv3训练KITTI数据集——Wiznote笔记 部分参考SSD: Single Shot MultiBox Detector 训练KITTI数据集(1),感谢博主的贡献。 目录 1 获取KITTI数据集及标签 2 将KITTI的标签格式转换为VOC数据格式的标签xxx.xml 2-1 使用modify_annotations_txt.py调整原来的8类为现在的3类 2-2 将原来KI...

Xavier丶 2万+

SLAM工程师面试避坑指南:2025年最新高频考点与实战代码解析

本文为SLAM工程师提供2025年最新面试避坑指南,涵盖高频技术考点如VINS初始化、三维几何处理、多传感器融合架构设计等,并包含实战代码解析。特别针对算法工程师面试中的常见陷阱,提供系统设计框架和代码模板,帮助求职者提升通过率。

metaverse5vr的博客 246

如何用YOLOv3训练自己的数据集

首先注意自己的需要的系统,Windows和ubuntu不互通,选择自己系统,本文为Windows10及pycharmYOLOv3下载地址注意选定版本1.在下载的根目录下,新建VOCdevkit文件夹2.在VOCdevkit文件夹,新建images,labels,VOC2007文件夹3.在images文件夹新建train和val文件夹4.在labels文件夹新建train和val文件夹5.在VOC2007文件夹新建Annotations,JPEGImages,YOLOLabels文件夹。

zhuweida000的博客 2884

【从零搭建到实战运行】基于PX4-1.13与XTDrone的FAST-LIVO2 Gazebo仿真全流程解析

本文详细解析了从零开始搭建基于PX4-1.13飞控、XTDrone仿真框架与Gazebo的FAST-LIVO2无人机仿真平台的全流程。内容涵盖环境配置、Livox雷达插件定制、算法部署与参数调试,旨在帮助开发者快速构建完整的激光-惯性-视觉SLAM仿真环境,并解决集成过程中的常见问题。

weixin_29218509的博客 520

基于IC617下Layout XL的使用

基于IC617下Layout XL的使用

weixin_43816759的博客 1万+

YOLOV3训练自己的数据集(PyTorch版本)

由于这一段时间从事目标检测相关工作,因而接触到yolov3,进行目标检测,具体原理大家可以参考大神的博客目标检测(九)--YOLO v1,v2,v3,我就不细讲了,直接进入正题,如何利用深度学习框架PyTorch对自己的数据进行训练以及最后的预测。 一、数据集 首先我们要对自己的数据进行标注,标注的工具LabelImg,如果是windows用户的话,可以直接下载...

sinat_27634939的博客 5万+

信息安全管理与评估赛题解析-单机取证(含环境)

链接:https://pan.baidu.com/s/1OMzIq884dW2vAiUp0k2Ppg。链接:https://pan.baidu.com/s/1i5daMqhD53wYeQ6hYzRK6Q。链接:https://pan.baidu.com/s/1QFAjdQZK4sJ-gGRP42XPKA。链接:https://pan.baidu.com/s/1BSXvqN2ZGCQXewgFULoeyQ。链接:https://pan.baidu.com/s/1g9zu5ngBz_KMjW1eBMkJAw。

Brucye 1834

Yolov3训练自己的数据集(新手小白)

Yolov3训练自己的数据集 暑假参加一个比赛用到了Yolov3 darknet训练数据,第一篇blog就是你啦~ 环境配置 Ubuntu 18.04; cpu(电脑太垃圾啦,没有独显,惨兮兮); 下载安装darknet yolo官网 here https://pjreddie.com/ 1、下载darknet,有提示哟,这里也贴出来吧 git clone https://github.com...

qq_41967963的博客 8559

uniapp - 最新实现APP连接使用MQTT流程及源码教程,uniapp app端接入mqtt发布订阅和接收消息队列传送消息、断开重连等各种示例代码(完美兼容安卓Android与苹果ios手机)

uniapp app端接入mqtt示例代码教程,uni-app中使用mqtt,uniapp安卓app接入mqtt,uniApp苹果ios集成MQTT教程,uniapp vue3 mqtt app端的接入流程,uniapp开发安卓和ios如何在项目里集成mqtt,Mqtt协议,uniapp开发APP,主动连接mqtt,订阅消息,实现发布,订阅和接收消息,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,搭建MQTT通讯做聊天项目,uniapp与设备通信 通过mqtt实现

🏆 前端领域优质创作者 6570

基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程

利用STM32单片机移植NES游戏模拟器,完成NES游戏开发,可以玩标准的NES游戏,已测试超级玛丽、魂斗罗之类的都可以正常运行。

4万+
上一篇: docker实践(1) 在ubuntu15.10里面安装docker
下一篇: CTPN(tensorflow)+CRNN(pytorch)+CTC
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值