基于Colab训练的yolov4-tiny自定义数据集(可用于OpenCV For Unity)

参考资料文档和视频,Google colab、Goolge云端硬盘

1.打开文档,点击【文件】【在云端硬盘中保存一份副本】,即将文档复制到自己云端硬盘。

2.打开该文件,按文中提示进行。

【代码执行程序】【更改运行时类型】修改运行时为GPU(免费的GPU不好用,收费的好用,某宝上几十元就可用一个月)

步骤1)

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

步骤2)在云盘上新建文件夹yolov4-tiny,在yolov4-tiny中再新增training文件夹

步骤3a)将数据集上传到yolov4-tiny文件夹下

这里说明一下数据集的处理注意事件

(1)这里用的图像标注工具为labelImg(注:labelImg经常闪退,可以使用其他标记工具,可以见这篇博客《几种Yolo图像标注工具》)

(2)切换到YOLO模式

(3)在View中开启自动保存模式

(4)当图片文件夹改变时,txt保存文件夹也要改变(【File】【Change Save Dir】)

(5)图片格式只能为jpg(小写),大写的JPG,或jepg、png等都不行。

(6)训练集中的图片尺寸可以一样,比如500*550,300*400都可以

步骤3b)下载 darknet/cfg下的yolov4-tiny-custom.cfg

修改yolov4-tiny-custom.cfg(与文档中的说明有差异)

两处yolo需要改

修改完后上传到yolov4-tiny文件夹

步骤3c)在yolov4-tiny文件夹,新建文件obj.data、obj.names

classes = 2
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = /mydrive/yolov4-tiny/training

步骤3d)在github下载process.py,然后上传到yolov4-tiny

import glob, os# Current directory
current_dir = os.path.dirname(os.path.abspath(__file__))print(current_dir)current_dir = 'data/obj'# Percentage of images to be used for the test set
percentage_test = 10;# Create and/or truncate train.txt and test.txt
file_train = open('data/train.txt', 'w')
file_test = open('data/test.txt', 'w')# Populate train.txt and test.txt
counter = 1
index_test = round(100 / percentage_test)
for pathAndFilename in glob.iglob(os.path.join(current_dir, "*.jpg")):title, ext = os.path.splitext(os.path.basename(pathAndFilename))if counter == index_test:counter = 1file_test.write("data/obj" + "/" + title + '.jpg' + "\n")else:file_train.write("data/obj" + "/" + title + '.jpg' + "\n")counter = counter + 1

4)步加载云盘

#mount drive
%cd ..
from google.colab import drive
drive.mount('/content/gdrive')# this creates a symbolic link so that now the path /content/gdrive/My\ Drive/ is equal to /mydrive
!ln -s /content/gdrive/My\ Drive/ /mydrive# list contents in yolov4-tiny folder in your drive
!ls /mydrive/yolov4-tiny

5)步开启OpenCV和GPU

# change makefile to have GPU and OPENCV enabled
# also set CUDNN, CUDNN_HALF and LIBSO to 1%cd /content/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
!sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile
!sed -i 's/LIBSO=0/LIBSO=1/' Makefile

6)步构建darknet

# build darknet
!make

7)复制文件到darknet文件夹下

# Clean the data and cfg folders first except the labels folder in data which is required%cd data/
!find -maxdepth 1 -type f -exec rm -rf {} \;
%cd ..%rm -rf cfg/
%mkdir cfg

#copy the datasets zip file to the root darknet folder
!cp /mydrive/yolov4-tiny/obj.zip ../# unzip the datasets and their contents so that they are now in /darknet/data/ folder
!unzip ../obj.zip -d data/
#copy the custom cfg file from the drive to the darknet/cfg folder
!cp /mydrive/yolov4-tiny/yolov4-tiny-custom.cfg ./cfg
# copy the obj.names and obj.data files so that they are now in /darknet/data/ folder
!cp /mydrive/yolov4-tiny/obj.names ./data
!cp /mydrive/yolov4-tiny/obj.data  ./data
#copy the process.py file from the drive to the darknet directory
!cp /mydrive/yolov4-tiny/process.py ./

8)运行process.py,创建train.txt和test.txt在data目录下

# run process.py ( this creates the train.txt and test.txt files in our darknet/data folder )
!python process.py# list the contents of data folder to check if the train.txt and test.txt files have been created
!ls data/

9)下载预训练文件 

# Download the yolov4-tiny pre-trained weights file
!wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.conv.29

10)开始训练

# train your custom detector! (uncomment %%capture below if you run into memory issues or your Colab is crashing)
# %%capture!./darknet detector train data/obj.data cfg/yolov4-tiny-custom.cfg yolov4-tiny.conv.29 -dont_show -map

如果提示错误:./darknet: error while loading shared libraries: libcuda.so.1: cannot open shared object file: No such file or directory

运行时类型改为GPU,参照上文。

训练成功是这样的

如果中途退出了,接着上次的断点继续训练

#to restart training your custom detector where you left off(using the weights that were saved last)!./darknet detector train data/obj.data cfg/yolov4-tiny-custom.cfg /mydrive/yolov4-tiny/training/yolov4-tiny-custom_last.weights -dont_show -map

11)查看训练结果

# define helper function imShow
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('')
#only works if the training does not get interrupted
imShow('chart.png')

在Unity For Unity2.5.9(Unity2021.3.35f1)中使用

在菜单【Tools】【OpenCV for Unity】【Open Setup Tools】,将“OpenCVForUnity/StreamingAssets”移动到“Assest下/StreamingAssets"

将训练用的coco.names、yolov4-tiny-custom.cfg、yolov4-tiny-custom_best.weights放到Assets\StreamingAssets\OpenCVForUnity\dnn下

打开ObjectDetectionYOLOv4Example

配置识别文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/576424.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习JavaEE的日子 Day32 线程池

Day32 线程池 1.引入 一个线程完成一项任务所需时间为: 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 2.为什么需要线程池(重要) 线程池技术正是关注如何缩短或调整Time1和Time3的时间,从而提高程序的性能。项目中可以把Time…

【文本】正则 | 正则表达式收录

1、匹配数字加右括号 1)正则 \d\) 2)效果 ~~

FPGA 图像边缘检测(Canny算子)

1 顶层代码 timescale 1ns / 1ps //边缘检测二阶微分算子:canny算子module image_canny_edge_detect (input clk,input reset, //复位高电平有效input [10:0] img_width,input [ 9:0] img_height,input [ 7:0] low_threshold,input [ 7:0] high_threshold,input va…

蓝桥杯23年第十四届省赛真题-填充|DFS,贪心

题目链接: 1.填充 - 蓝桥云课 (lanqiao.cn) 蓝桥杯2023年第十四届省赛真题-填充 - C语言网 (dotcpp.com) 说明: dfs就不再多说了,对于每个?都有0和1两个分支,数据范围是: 那么有m个 ?,时间复杂度就是…

C++初阶:2_类与对象(下)

类与对象(下) 一.再谈构造函数 1. 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _ye…

38.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-解码器类的优化调试

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:37.解码器细化类…

“光学行业正被量子颠覆”——行业巨头齐聚,展示量子成果

OFC是全球最大的光网络和通信盛会,代表一系列产品,从光学元件和设备到系统、测试设备、软件和特种光纤,代表整个供应链,并提供业界学习、连接、建立网络和达成交易的首要市场,于2024年3月24日至28日在圣地亚哥会议中心…

excel中批量插入分页符

excel中批量插入分页符,实现按班级打印学生名单。 1、把学生按照学号、班级排序好。 2、选择班级一列,点击数据-分类汇总。汇总方式选择计数,最后三个全部勾选。汇总结果一定要显示在数据的下发,如果显示在上方,后期…

Science Robotics 逼真面部表情的机器人

人类可以产生数千种不同的面部表情来传达无数微妙的情绪状态,这种能力是人类社会互动中最有效和最有效的界面之一。在 2019 年冠状病毒病流行期间,口罩使社交互动变得尴尬,因为它们掩盖了面部表情。同时,当摄像机打开时&#xff0…

成都市酷客焕学新媒体科技有限公司:实现品牌的更大价值!

成都市酷客焕学新媒体科技有限公司专注于短视频营销,深知短视频在社交媒体中的巨大影响力。该公司巧妙地将品牌信息融入富有创意和趣味性的内容中,使观众在轻松愉悦的氛围中接受并传播这些信息。凭借独特的创意和精准的营销策略,成都市酷客焕…

火车头通过关键词采集文章的原理

随着互联网信息的爆炸式增长,网站管理员和内容创作者需要不断更新和发布新的文章,以吸引更多的用户和提升网站的排名。而火车头作为一款智能文章采集工具,在这一过程中发挥着重要作用。本文将探讨火车头如何通过关键词采集文章,以…

SAP BTP云上一个JVM与DB Connection纠缠的案例

前言 最近在CF (Cloud Foundry) 云平台上遇到一个比较经典的案例。因为牵扯到JVM (app进程)与数据库连接两大块,稍有不慎,很容易引起不快。 在云环境下,有时候相互扯皮的事蛮多。如果是DB的问题,就会找DB…