yolov4训练数据

  • 简介
  • 运用google Colab训练自己的Yolov4数据集
    • google colab的使用
  • 项目使用流程
    • 1.设置GPU可用
    • 2.clone项目构建Darknet
      • git clone项目
      • 修改项目的makefile文件,使编译生成的程序可以使用GPU和OpenCV
      • 验证CUDA版本
      • 编译项目生成darknet运行程序
    • 3.设置谷歌云盘路径简写——方便上传文件到云端
      • 装载谷歌云盘——便于将谷歌云盘中的文件传到云端服务器中
      • 设置谷歌云盘路径的简写
      • 在谷歌云盘中创建存放训练相关文件的文件夹
    • 4.运行demo显示bbox
      • 下载训练好的coco数据集权重
      • 定义imshow函数,方便显示图片
      • 运行demo
    • 5.训练自己的数据集
      • 上传训练所需文件
      • 将相关文件上传到谷歌云盘
      • 将云盘中的相关文件拷贝到云端
      • 下载预训练权重并上传到darknet文件下
      • 开始训练
      • 根据map选择权重文件
    • 6.测试

简介

前段时间YOLO系列(v1-v3)作者 Joe Redmon在推特上宣布不再继续CV方向的研究,但最近由 Alexey Bochkovskiy大神接管并更新了yolov4的项目,项目地址https://github.com/AlexeyAB/darknet。此项目之前为yolov3项目支持windows的版本,由于官方darknet并不能很好得支持windows环境,便采用了支持windows的此项目,并且此项目一直在更新,用起来比大多数yolov3项目都顺手。

对于yolov4部分的训练流程和测试,同yolov3的过程。
yolov3及标注生成方法可参考:https://blog.csdn.net/longlong068/article/details/105384712
https://blog.csdn.net/longlong068/article/details/105088304

运用google Colab训练自己的Yolov4数据集

google colab的使用

  1. 首先需要创建谷歌云盘账号:https://drive.google.com

  2. 打开谷歌云盘

    右键选择创建一个Colab的.ipynb文件,如果没有上图的Googel Colab选项,点击关联更多应用添加。

  3. 将.ipynb文件装载谷歌云盘,方便Googel云盘和Colab分配的云GPU进行文件相互传输。

    点击装载Google云端硬盘,或者直接在左边的命令行输入指令进行装载,指令如下:

    from google.colab import drive
    drive.mount('/content/drive')
    

    装载成功后可见:

    其中的My Drive中的文件即为Google云盘中的文件。

  4. 在生成的ipynb文件中进行设置GPU可用、项目的git、训练等后续操作。

项目使用流程

此部分的Yolov4项目基于https://github.com/AlexeyAB/darknet

1.设置GPU可用

2.clone项目构建Darknet

git clone项目

输入并运行以下命令来git项目:

!git clone https://github.com/AlexeyAB/darknet

成功后在左边的文件列表可以找到项目文件darknet。

修改项目的makefile文件,使编译生成的程序可以使用GPU和OpenCV

运行以下命令,将会自动修makefile

# 修改makefile 将OpenCV和GPU设置为可用
%cd darknet
!sed -i 's/OPENCV=0/OPENCV=1/' Makefile
!sed -i 's/GPU=0/GPU=1/' Makefile
!sed -i 's/CUDNN=0/CUDNN=1/' Makefile
验证CUDA版本
#验证CUDA版本
!/usr/local/cuda/bin/nvcc --version

输出结果如下:

编译项目生成darknet运行程序
!make

编译生成可执行文件darknet

3.设置谷歌云盘路径简写——方便上传文件到云端

装载谷歌云盘——便于将谷歌云盘中的文件传到云端服务器中

因为服务器与云盘的装载经常掉,前面装载过也最好再运行以下代码

from google.colab import drive
drive.mount('/content/gdrive')
设置谷歌云盘路径的简写
#将谷歌云盘路径简写为mydrive
!ln -s /content/gdrive/My\ Drive/ /mydrive
!ls /mydrive

运行以上代码,以后输入mydrive即代表谷歌云盘的路径

在谷歌云盘中创建存放训练相关文件的文件夹

回到谷歌云盘中创建一个文件夹,来存放我们训练所要用到的文件,我创建了一个名为yolov4的文件夹,来存放obj.name、obj.zip(训练图片和.txt的压缩文件)等训练所需文件。

!ls /mydrive/yolov4

4.运行demo显示bbox

此步只为了检验环境和编译成功与否,可以跳过此步直接训练自己的数据集。

下载训练好的coco数据集权重

yolov4训练好的coco数据集下载地址:https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT

也可以通过我的百度云盘下载:链接:https://pan.baidu.com/s/1L5OMQCWcKc76stKj1uaiGQ

提取码:cqhx

要将下载好的权重文件上传到云端的darknet文件下,我是将权重文件上传到Google云盘中的yolov4(自己创建的)文件中,再将其从谷歌云盘copy到云端,copy指令执行以下:

#将谷歌云盘中的yolov4上传到darknet目录下
!cp /mydrive/yolov4/yolov4.weights ./
定义imshow函数,方便显示图片
#定义imshow 调用opencv显示图片
def imShow(path):import cv2import matplotlib.pyplot as plt%matplotlib inlineimage = cv2.imread(path)height, width = image.shape[:2]resized_image = cv2.resize(image,(3*width, 3*height), interpolation = cv2.INTER_CUBIC)fig = plt.gcf()fig.set_size_inches(18, 10)plt.axis("off")plt.imshow(cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB))plt.show()
运行demo
!./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights  data/dog.jpg
imShow('predictions.jpg')

结果图:

5.训练自己的数据集

上传训练所需文件

训练所需文件:obj.zip(图片及对应标注的.txt文件压缩包)、yolov4_custom.cfg(自己根据数据集中类修改)、obj.data(相关路径及种类个数设定)、obj.names(自己数据集的类名)、generate_trian.py(运行生成train.txt)

将相关文件上传到谷歌云盘

对自己数据集的图片进行标注和生成.txt文件放到同一文件夹后,将其压缩然后上传到谷歌云盘中,直接上传将十分缓慢。

标注工具:https://github.com/tzutalin/labelImg

上传obj.zip到谷歌云盘:通过标注工具生成项目所需的与图片同名的.txt文件,将原图片与同名.txt文件放在同一文件obj下,将文件夹压缩为obj.zip并上传到谷歌云盘的yolov4文件夹下。

上传obj.data和obj.names到谷歌云盘:obj.data文件在项目中文件的基础上,根据自己数据集的类别个数进行修改而得到。

obj.names中每行写入自己数据集的类名。

上传yolov4_custom.cfg到谷歌云盘:yolov4_custom.cfg在darknet/cfg/yolov4-custom.cfg的基础上,根据自己数据集的类别个数进行修改得到。

修改1:

  • batch =64 subdivisions=16不变
    当训练运行显示“out of memory”时,可以尝试将subdivisions升至32或64。
  • max_batches= ? 为自己数据集种类个数*2000 如果有六类及为12000
  • steps=?,? 分别为max_batches的80%和90%

修改2:

要修改三个以上部分,即三个尺度下都要修改

  • fiters=(5+classes)x3 如数据集种类个数classes为6 fiters=33
  • classes =6(分类个数)

上传generate_trian.py文件到谷歌云盘:此yolov4项目训练自己数据集还需要trian.txt,train.txt文件可通过运行generate_trian.py生成,所以在此之前需要创建generate_trian.py,并上传到谷歌云盘中,以便后续拷贝到云服务中并运行。generate_trian.py文件如下:

import osimage_files = []
os.chdir(os.path.join("data", "obj"))
for filename in os.listdir(os.getcwd()):if filename.endswith(".jpg"):image_files.append("data/obj/" + filename)
os.chdir("..")
with open("train.txt", "w") as outfile:for image in image_files:outfile.write(image)outfile.write("\n")outfile.close()
os.chdir("..")
将云盘中的相关文件拷贝到云端
#确保当前路径在darknet下
!ls
#将数据集图片及标注的txt文件的压缩包上传到服务器
!cp /mydrive/yolov4/obj.zip ../
#解压到data文件下
!unzip ../obj.zip -d data/
#从谷歌云盘上传根据自己数据集修改的.cfg文件
!cp /mydrive/yolov4/yolov4_custom.cfg ./cfg
#从谷歌云盘上传自己数据集的obj.data obj.names
!cp /mydrive/yolov4/obj.names ./data
!cp /mydrive/yolov4/obj.data  ./data
#上传generate_train.py 以在服务器的data下生成train.txt
!cp /mydrive/yolov4/generate_train.py ./
#运行在data文件下生成train.txt
!python generate_train.py
下载预训练权重并上传到darknet文件下

yolov4的预训练权重下载地址:https://drive.google.com/open?id=1JKF-bdIklxOOVy-2Cr5qdvjgGpmGfcbp

也可在我的百度云盘中下载:链接:https://pan.baidu.com/s/1fTxMkvNLEafXmeWXQ47EmA

提取码:c21x

# 介于预训练权重网址为云盘 采用上传方式
!cp /mydrive/yolov4/yolov4.conv.137 ./
开始训练
!./darknet detector train data/obj.data cfg/yolov4_custom.cfg yolov4.conv.137 -dont_show

训练过程中产生的权重文件将保存到darknet/backup下,loss图保存为darknet/chart.png:

如果训练时因不明原因中断,此后想要在上次训练权重的基础上继续训练可采用以下代码

!./darknet detector train data/obj.data cfg/yolov4_custom.cfg backup/yolov4_custom_last.weights  -dont_show
根据map选择权重文件

需要将obj.data中的验证集即valid改为自己验证集生成的.txt文件,同train.txt生成方法相同,如果没有验证集就采用训练集。

将验证集图片和标注信息放到data/test文件下,我是从谷歌云盘拷贝到服务端,如下

#拷贝test.zip到云端
!ls /mydrive
!cp /mydrive/yolov4/image/test.zip  ../
#解压到data文件下
!mkdir  data/test
!unzip ../test.zip -d data/test

以上命令需要根据自己验证集路径,最后只要在data/test生成如下形式即可:

#上传generate_test.py到darknet文件下  以在服务器的data下生成test.txt
!cp /mydrive/olov4/generate_test.py ./
!python generate_train.py

generate_test.py:

import osimage_files = []
os.chdir(os.path.join("data", "test"))
for filename in os.listdir(os.getcwd()):if filename.endswith(".jpg"):image_files.append("data/test/" + filename)
os.chdir("..")
with open("test.txt", "w") as outfile:for image in image_files:outfile.write(image)outfile.write("\n")outfile.close()
os.chdir("..")

如果想要在训练时可以直观看map,可以命令行加-map,采用以下:

! ./darknet detector train data/obj.data cfg/yolov4_custom.cfg yolov4.conv.137 -dont_show -map

其中推荐将权重文件保存在自己的谷歌云盘yolo4/backup/文件下,只需要修改obj.data文件中的backup后面的文件位置,如下:

实际在训练中加-map可能导致出错,可以选择训练不加-map,训练结束后再采用如下指令计算权重文件map:

#不加-iou_thresh 默认计算map@50,即iou=0.5
!./darknet detector map data/obj.data cfg/yolov4_custom.cfg /mydrive/yolov4/backup/yolov4_custom_final.weights
#map@75
!./darknet detector map data/obj.data cfg/yolov4_custom.cfg /mydrive/yolov4/backup/yolov4_custom_final.weights -iou_thresh 0.75

6.测试

上传测试图片到data/obj

#图片测试
!./darknet detector test data/obj.data cfg/yolov4_custom.cfg /mydrive/yolov4/backup/yolov4_custom_final.weights ./data/obj/xxxx.jpg -thresh 0.5
imShow('predictions.jpg')

视频、摄像头等测试见源码GitHub。

yolov4用Google Colab训练自己的数据集相关推荐

  1. 学生党 白嫖之GPU Google colab 训练深度学习模型

    白嫖GPU之Google colab 前言:本人是一名穷且孤单的大学秃头生,跟着老师学习的是计算机视觉领域,学习目标检测到目标跟踪已经有一年的时间了,大多数都是在做论文阅读,很少有机会去实战(因为穷, ...

  2. Colab 快速上传数据集方法

    有时我们想要使用 Colab 训练自己的数据集(非 Colab 自带数据集),那么首先必须要上传数据集到 Colab 平台. Colab 平台直接上传文件速度非常慢,即使你上传的是压缩后的文件.本文将 ...

  3. 利用colab保存模型_在Google Colab上训练您的机器学习模型中的“后门”

    利用colab保存模型 Note: This post is for educational purposes only. 注意:此职位仅用于教育目的. In this post, I would f ...

  4. Yolov4训练自己的数据集

    Yolov4训练自己的数据集 代码运行环境Ubuntu18.04+python3.6+显卡1080Ti+CUDA10.0+cudnn7.5.1+OpenCV3.4.6+Cmake3.12.2,详细环境 ...

  5. 使用Google Colab对PUBG的玩家死亡数据集进行可视化分析

    使用Google Colab对PUBG的玩家死亡数据集进行可视化分析 数据集 数据集可以在Kaggle(https://www.kaggle.com/)中找到.需要注册Kaggle账号后,Accoun ...

  6. 一文多图搞定制作自己的VOC数据集+使用yolov4训练自己的数据集+封装video测试脚本(基于ubuntu)

    一文多图搞定制作自己的VOC数据集+使用yolov4训练自己的数据集+封装video测试脚本(基于ubuntu) 制作VOC数据集 标注自己的数据集 整理数据集路径格式 训练数据集 环境 在Linux ...

  7. (Pytorch) YOLOV4 : 训练自己的数据集【左侧有码】

    项目地址:https://github.com/argusswift/YOLOv4-pytorch 这份代码实现的逻辑非常清楚,主要一些数据集处理的代码需要相应的改动: 这里的数据集label格式: ...

  8. YOLOv4实战尝鲜 --- 教你从零开始训练自己的数据集(安全头盔佩戴识别检测)

    目录 数据准备 划分数据集 xml2yolo 生成train/valid.txt YOLOv4配置 cfg文件修改 data文件修改 names文件修改 模型训练 模型测试 本文代码基于:https: ...

  9. 视频教程-Windows版YOLOv4目标检测实战:训练自己的数据集-计算机视觉

    Windows版YOLOv4目标检测实战:训练自己的数据集 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多 ...

最新文章

  1. AngularJs异步文件上传
  2. [转载]为什么mysql用的是B+树?
  3. 有感而发,恍然大悟。
  4. 快速 Get 面试题中:线程池七个参数和工作原理问题,理解万岁
  5. oracle用户、表空间操作常用命令
  6. Vue项目如何提高效率?大厂2大实践总结告诉你
  7. 网际控制报文协议icmp_网络中的ICMP(Internet控制消息协议)
  8. Python数据分析模块 | pandas做数据分析(一):基本数据对象
  9. Jdk14 都要出了,Jdk9 的新特性还不了解一下?
  10. mysql linux 用户_Linux mysql添加用户,删除用户,以及用户权限
  11. Chapter 1: 使用引用类型
  12. AcWing 1978. 奶牛过马路(前缀和)
  13. ctfmon.exe频繁出错的一个解决办法
  14. 物联网实训Day 06
  15. Posix多线程编程学习笔记(二)—线程属性(3)
  16. 2022年招投标,最加分的资质证书排行榜!
  17. 音视频基本概念和FFmpeg的简单入门(新手友好+FFmpeg资料分享)
  18. fstream、ifstream、ofstream
  19. 利用Instrumentation单元测试模块控制安卓手机进行各项操作(微信)
  20. java websocket实现即时聊天系统

热门文章

  1. (附源码)spring boot图书管理系统 毕业设计 160934
  2. (2020)指代消解ontoNotes_Release_5.0处理详细流程
  3. 我改的程序--打豆豆
  4. 连接 蓝牙调试 MOTO360 Wear
  5. 蓝桥杯真题之青蛙跳杯子
  6. tp管理界面找不到服务器,路由器 tplogin.cn 怎么登录不到管理页面。 | 192路由网...
  7. 经验分享:一个 30 岁的人是如何转行做程序员,进入IT行业的?
  8. 基于通道注意机制联合多尺度卷积神经网络的滚动轴承故障诊断
  9. Excel将另一文件数据导入当前表格内方法详解(文件与文件的连携)
  10. numpy高级教程之np.where和np.piecewise