前言
??在上篇文章中,我们已经了解并学会如何使用yolov5这个开源项目,在这篇文章中,我们将会进行模型训练,使用自己训练出的权重文件实现我们的垃圾分类功能。
一、基本概念
1、什么是权重文件?
??权重文件保存的就是训练好的网络各层的权值,也就是通过训练集训练出来的。训练好之后,应用时只要加载权值就可以,不再需要训练集了.
2、GPU与CPU的区别
参考学习:https://zhuanlan.zhihu.com/p/106385370?ivk_sa=1024320u
??CPU更为灵活能胜任更多的任务。GPU能做什么?关于图形方面的以及大型矩阵运算,如机器学习算法、挖矿、暴力破解密码等,GPU会大幅提高计算效率。简单地说,CPU擅长分支预测等复杂操作,GPU擅长对大量数据进行简单操作。一个是复杂的劳动,一个是大量并行的工作。
3、深度学习框架
参考学习:https://baike.baidu.com/item/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A1%86%E6%9E%B6/22718084?fr=aladdin
??在开始深度学习项目之前,选择一个合适的框架是非常重要的,因为选择一个合适的框架能起到事半功倍的作用。研究者们使用各种不同的框架来达到他们的研究目的,侧面印证出深度学习领域百花齐放。全世界最为流行的深度学习框架有PaddlePaddle、Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。
??在深度学习初始阶段,每个深度学习研究者都需要写大量的重复代码。为了提高工作效率,这些研究者就将这些代码写成了一个框架放到网上让所有研究者一起使用。接着,网上就出现了不同的框架。随着时间的推移,最为好用的几个框架被大量的人使用从而流行了起来。 [1] 全世界最为流行的深度学习框架有PaddlePaddle、Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。
---------以上内容来源于百度百科
4、PyTorch
PyTorch官方教程中文版:https://www.pytorch123.com/
PyTorch官方网址:https://pytorch.org/
??PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够 实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。 PyTorch提供了两个高级功能: 1.具有强大的GPU加速的张量计算(如Numpy) 2.包含自动求导系统的深度神经网络 除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch。
二、下载和安装nvidia显卡驱动
参考学习:https://zhuanlan.zhihu.com/p/266652844
安装教程文档:
链接:https://pan.baidu.com/s/1p4lu2AxepDtn9eu81we73g
提取码:l3xz
--来自百度网盘超级会员V5的分享
三、训练自己的模型并分析
一、YOLOv5代码修改(为支持中文标签)
1)train.py文件
with open(opt.data) as f:
改为
with open(opt.data, encoding='UTF-8') as f:
2)test.py文件
with open(opt.data) as f:
改为
with open(opt.data, encoding='UTF-8') as f:
3) utils/general.py文件
导入包from PIL import Image, ImageDraw, ImageFont
4) utils/plots.py文件
(1) 修改 plot_one_box 函数,if label之后的代码改为
if label:
tf = max(tl - 1, 1)
t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]
font_size = t_size[1]
font = ImageFont.truetype('msyh.ttc', font_size)
t_size = font.getsize(label)
c2 = c1[0] + t_size[0], c1[1] - t_size[1]
cv2.rectangle(im, c1, c2, color, -1, cv2.LINE_AA)
img_PIL = Image.fromarray(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img_PIL)
draw.text((c1[0], c2[1] - 2), label, fill=(255, 255, 255), font=font)
return cv2.cvtColor(np.array(img_PIL), cv2.COLOR_RGB2BGR)
(2) plot_images 函数中
plot_one_box(box, mosaic, label=label, color=color, line_thickness=tl)
改为
mosaic = plot_one_box(box, mosaic, label=label, color=color, line_thickness=tl)
5) detect.py文件
plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3)
改为
im0 = plot_one_box(xyxy, im0, label=label, color=colors(c, True),
line_thickness=3)
二、 准备训练集和验证集
1)下载和解压数据集
解压VOCdevkit_trash.zip和testfiles.zip
数据集使用PASCAL VOC数据集的目录结构:
建立文件夹层次为 VOCdevkit\VOC2007
VOC2007下面建立两个文件夹:Annotations和JPEGImages
JPEGImages放所有的训练和测试图片;Annotations放所有的xml标记文件
2)使用python脚本对数据集进行训练集和验证集划分
执行python脚本:python prepare_data.py
在VOCdevkit/VOC2007目录下可以看到生成了文件夹YOLOLabels
YOLOLabels下的文件是images文件夹下每一个图像的yolo格式的标注文件,这是由
annotations的xml标注文件转换来的;
在VOCdevkit目录下生成了images和labels文件夹:
images文件夹下有train和val文件夹,分别放置训练集和验证集图片;
labels文件夹有train和val文件夹,分别放置训练集和验证集标签(yolo格式)
在yolov5下生成了两个文件yolov5_train.txt和yolov5_val.txt。
yolov5_train.txt和yolov5_val.txt分别给出了训练图片文件和验证图片文件的
列表,含有每个图片的路径和文件名
三、剩余步骤
??由于版权问题,剩下的步骤及开发文档无法公开发表,有兴趣的朋友可以根据我上边图片展示出的步骤,搜索别人的博客实现接下来的步骤,也可私信我留下自己的邮箱,我给需要的朋友发一份,仅用作技术交流。
本文章参考了百度百科,他人技术文章以及哔哩哔哩免费教程,综合整理而来,如有侵权联系删除,小白一个,欢迎大家指导交流!
|