在这里,我们将引导您逐步完成深度学习环境的完整安装,助您踏上从Python到PyTorch的探索之旅。通过本博客,您将轻松掌握如何设置Python环境、使用Pycharm进行开发以及安装Pytorch,成为一名具备完整深度学习环境的实践者。让我们一起开始吧!
文章目录(如果有会的可以略过)
一、Python安装
(一)Python下载
(二)Python安装
(三)Python验证
二、PyCharm安装
(一)PyCharm下载
(二)PyCharm安装
(三)PyCharm配置
三、PyTorch安装
(一)PyTorch安装
(二)PyTorch验证
四、深度学习案例:YOLOv5训练数据集、图像检测与识别
(一)YOLOv5下载及解压
(二)YOLOv5训练数据集
1.准备工作(新建文件夹)
(1)新建VOCData
(2)新建Annotation、images
2.使用labelImg标注图片
(1)安装labelImg
(2)使用labelImg
(3)相关问题
①No module named 'sip'报错
②No module named 'libs.resources'报错
3.划分数据集及配置文件修改
(1)划分训练集、验证集及测试集
(2)xml格式转txt格式
(3)配置文件
4.模型训练
(1)开始训练
(2)训练过程
(3)训练时间
(4)相关问题
(5)检测效果
五、参考链接
Python是一种流行的高级编程语言,以其易学易用、可读性强和强大的标准库而受到广泛欢迎。Python支持多种编程范式,包括面向对象、过程式和函数式编程,可以用于开发各种类型的应用程序。Python的简洁语法和动态类型系统使其成为快速原型开发和数据分析的理想选择。此外,Python还具有丰富的第三方库支持,可以轻松地与其他编程语言集成。无论您是初学者还是经验丰富的开发人员,Python都是一种功能强大且易于使用的编程语言。
Python官网,显示下面这个界面。
因为大家都是都是初级程序员,学习的环境都还是比较新手的windows系统,将鼠标光标移动到 Downloads ,点击Windows ,意思就是选择Python安装在你的电脑上的系统类型,之后显示下面这个界面。
看到这个界面有很多很多的版本,给大家简单介绍一下,这里的Latest Python 3 Release - Python 3.11.5,表明的意思是最新的Python3版本 3.11.5,如果大家说噢我就想要最新的,那就无脑冲这个版本!
点击链接之后,等待网页响应,滑到网页最下面,可以看到以下界面。
这里有很多个不同配置的Python安装包,博主这边主要给大家介绍自动安装的安装包。
点击 Windows installer (64-bit) ,就可以下载Python3 3.11.5版本的安装包。
因为这是在Python官网加载的链接并下载,下载速度会比较慢,大家也可以点击我这里的链接去下载。有网盘链接和迅雷种子文件。
出自之外,博主个人还建议使用Python3 3.8.10版本,这个版本相对其他版本来说比较稳定。
Python3 3.11.5安装包 Python3 3.8.10安装包
大家下载好后,双击安装包 ,就显示以下界面。
勾选 Add Python 3.8 to PATH ,并点击下面的 Customize installation ,显示以下界面。
继续点击 Next 。
这里要更改一下安装目录,因为之后要安装深度学习的环境会占比较大的空间,安装在C盘是不切实际的做法,这里我选择安装在D盘目录下的Python文件夹下,可以按照我下面的图进行操作。
修改好后的界面是这样子的。
然后点击 Install ,就可以等待程序自动安装完毕。
当显示这个界面,就说明安装成功,点击 Close 就可以关闭界面了。
Python安装完毕后,大家可以在Windows命令终端输入命令去验证自己的Python环境是否搭建成功。
首先,键盘按住 Win+R键(大家可能不知道Win键是哪个,在键盘上是在左侧下方Alt旁边,呈现四个方框的那一个),打开 运行界面 。
在输入框内,输入 cmd ,点击 确定/回车 ,即可打开Windows终端界面。
输入命令 python --version ,并回车,如果显示以下界面即安装完毕。
PyCharm是一种流行的集成开发环境(IDE),专门为Python开发人员设计。它提供了强大的代码编辑器、调试器、自动代码完成和语法高亮等功能,帮助开发人员更高效地编写、测试和调试Python代码。PyCharm支持多种Python虚拟环境,可以轻松进行项目管理和跨平台开发。其丰富的插件库还可以扩展支持其他编程语言和工具,使得PyCharm成为Python开发人员的首选工具之一。
我们先找到PyCharm官方网站:JetBrains,我这里是根据网页提示显示了中文翻译,原本是英文界面的,大家跟着我的步骤去一步一步来。
点击头部的 Developer Tools ,展开一个很大的界面是这样的,点击 PyCharm 进入介绍界面。
进入后点击界面正中间的 DOWNLOAD 。
进入后,有PyCharm Professional(Pycharm专业版)和PyCharm Community Edition(Pycharm社区版)选择,博主这边建议初学者以社区版为起步,首先是因为社区版是免费的,不需要付费激活,其次专业版功能较为齐全,有很多的功能初学者暂时用不上。博主这里就以社区版为例。点击这里的 Download 即可开始下载
博主这里也附上个人的百度网盘下载链接供大家下载。PyCharm社区版安装包
下载好后鼠标双击打开安装包。
点击 Next 。
这里还是像刚刚那样点击 Browse 去修改安装路径。博主这边仍然是建议大家安装在D盘目录下的JetBrains文件夹下,如下图所示,选择好后点击 确定 。
到这里后继续点击 Next ,勾选下图中所有的选项,继续点击 Next 。
到如下图界面后即可点击 Install 进行安装。
当出现以下界面即安装成功,点击 Finish 即可关闭安装界面。
在桌面此电脑中,找到刚刚安装Pycharm的文件夹,博主这里的目录是 D:\JetBrains\PyCharm Community Edition 2023.2.1 ,进入目录下的bin文件夹,右箭选择下面图上箭头指示的可执行文件pycharm64.exe,选择 发送到->桌面快捷方式 ,这样就可以把PyCharm放到桌面,方便使用。
打开Pycharm后,显示以下界面,勾选Do not import settings ,如果点击OK后有弹窗防火墙的一些相关提示,可以直接 点击允许访问 。
这样子咱们就正式进入Pycharm编辑器的使用了。
首先先点击界面上的 Plugins ,在 Type / to see options 方框内输入“ chinese ”,在搜索后的结果中选择一个以“ 汉 ”字为图标的插件,然后再点击 Install ,等待一会之后我们的PyCharm界面就已经全部汉化了。(如果有不想汉化的网友们可以跳过这一步)
安装好汉化包并重新打开PyCharm后,点击新建项目。
之后,就显示了很多参数能够自定义我们的项目。首先博主这里修改了一下位置,改成了D盘目录下的Study文件夹(大家可以先去创建一下Study文件夹),然后就到配置Python解释器。
一定要勾选先前配置的解释器!!!
一定要勾选先前配置的解释器!!!
一定要勾选先前配置的解释器!!!
重要的事情强调三遍,因为我们之前有安装过Python的环境,如果选择“ 使用此工具新建环境 ”,那么表示的意思就是你要用PyCharm编辑器自己去帮你安装另一个Python,这样子虽然说少去了先前下载安装Python的环节,但是坏处就是难以很好的去管理我们的Python环境,所以这也是博主大费周章跟大家讲前面Python的安装教程的原因。
博主这里是Pycharm软件有自动识别到我的Python环境目录,如果大家点解释器后面的下拉框没有像博主这样子的选项,可以点击 右侧的添加解释器 ,选择 添加本地解释器 ,然后就会出现这样子的界面。
勾选现有,再点击 右侧的...框框 ,然后找到我们的Python安装目录,选择目录下的python.exe并点击确认。
然后再点击创建就配置好python环境了。
PyTorch是一个广泛使用的开源机器学习框架,由Facebook人工智能研究院(FAIR)开发并维护。它支持动态计算图,使得模型的构建和调试更加直观,同时也提供了高效的GPU加速功能,使得深度学习应用的训练和推理速度更快。PyTorch具有广泛的社区支持和丰富的文档资源,方便开发人员学习和使用。它支持多种操作系统和编程语言,如Python、C++等,并提供了丰富的预训练模型库和工具,使得开发人员可以快速构建和优化深度学习模型。PyTorch已经成为机器学习领域的流行框架之一,被广泛应用于计算机视觉、自然语言处理、语音识别等领域。
首先我们先进入PyTorch官网:PyTorch
往下滑找到下图这个界面,并且按博主这样子一样的选择。
博主这里也直接给出命令。
pip3 install torch torchvision torchaudio
然后在我们的Pycharm界面下方点击 Terminal(如果是中文的就像博主这样叫终端)
然后输入刚刚的安装代码,回车即可进行Pytorch安装。下载安装会比较久,请耐心等待一下噢~~~有出现Successfully installed...的字眼,就说明已经安装成功啦。
补充:这里出现了黄色的提示,意思就是我们的pip版本是21.1.1版本,最新版本23.2.1允许安装,博主这里也给出命令共大家去升级自己的pip(pip类似是一个python内置的一个命令,用于安装、卸载等)。
python.exe -m pip install --upgrade pip
博主这里以个人的专业版Pycharm作为演示(大家的社区版也是一样的)。
首先右箭我们的Study目录->新建->点击Python文件,输入Study作为python文件的名字,然后回车就创建好一个名为Study的python文件。
在我们的编辑器下输入以下代码。
import torch
print(torch.__version__)
然后点击右上角绿色向右的箭头,即可运行当前Python文件中的代码。
如果运行结束后显示如下图就说明大家的PyTorch已经安装成功啦。
YOLOv5是一种目标检测模型,用于在视频或图像中识别和定位物体。它是YOLO算法的最新版本,在YOLOv4的基础上进行了改进。
YOLOv5由美国加州大学伯克利分校的研究者Alexey Bochkovskiy和Chien-Yao Wang开发。YOLOv5使用了一个新的骨干网络,即CSPNet,该网络可以更好地提取特征。另外,YOLOv5也采用了更高效的训练技术,如自适应训练、数据增强和多尺度训练,从而使得它在实际应用中具有更好的性能表现。
YOLOv5可以检测多种物体,并且可以在不同的硬件上运行,包括CPU、GPU和TPU等。
YOLOV5源码网址:https://github.com/ultralytics/yolov5
在此,因为github这个网站对于国内用户去访问会有时候连接不上,博主给大家一个访问github网站的加速器,这样子大家访问起来就比较顺畅。FastGitHub压缩包
大家下载好这个加速器并解压、运行后,就可以直接挂着在后台了。(建议大家不访问的时候还是关闭着好一些哦)。
来到YOLOv5源码网址,点击右边的 Code ,再点击下面的 Download ZIP 就可以开始下载YOLOv5源码的压缩包了。
这里博主也放上压缩包和种子文件供大家下载。
YOLOv5压缩包
下载好后,解压到我们刚刚的Study目录下,如下图所示。
在yolov5文件目录下,新建一个空白文件夹 VOCData(博主习惯这样子命名,大家可以自定义命名)。
在VOCData文件夹下再新建两个空白文件夹 Annotations 和 images(建议尽量不要修改文件名,否则会有一些路径上的错误)。
这里给大家说明一下这两个文件夹的用途:
Annotations:用于存放图片标注后产生的内容(以XML格式存放)
images:用于存放要标注的图片(虽然YOLO开始训练的时候会检测并自动更正格式,但是仍然建议以jpg格式存放)
labelImg下载:https://github.com/HumanSignal/labelImg
附上本人百度网盘链接:labelImg
这里还是照上文YOLOv5下载及解压一样的方法去操作,解压到yolov5的文件目录下。
首先,双击鼠标左键 进入到labelImg文件夹下。
然后,鼠标左键点击 顶部的输入框,按退格键清除掉原有内容,并 输入cmd,然后回车 ,弹出以下两个图片就算成功在该文件夹路径下打开Windows命令终端。
之后,输入以下命令并回车 就可以打开我们的标注程序labelImg。
python labelImg.py
来到labelImg的使用界面后,左侧的打开目录对应存放标注图片的文件夹(images),改变存放目录对应标注图片产生的xml数据文件夹(Annotations)。
大家点击左侧的创建区块即可进行标注。
博主这里给大家整理一下labelImg使用的快捷键以方便大家进行大数据量的图片标注。
Ctrl + u | 从一个目录加载所有图像 | d | 下一张图片 |
Ctrl + r | 更改默认的注释目标目录 | a | 上一张图片 |
Ctrl + s | 保存 | del | 删除选中的矩形框 |
Ctrl + d | 复制当前标签和矩形框 | Ctrl++ | 放大 |
Ctrl + Shift + d | 删除当前图像 | Ctrl-- | 缩小 |
Space | 将当前映像标记为已验证 | ↑→↓← | 键盘箭头移动选定的矩形框 |
w | 创建一个矩形框 |
这是因为我们的Python环境下没有PyQt5包里面的sip包,这时候只需在 PyCharm终端 或者 Windows命令终端 输入以下代码即可解决问题。
pip install PyQt5
这是因为我们下载下来的labelImg文件夹下的包库里面没有resources.py,大家可以在labelImg文件夹下去运行以下命令。
Pyrcc5 -o resources.py resources.qrc
运行后会在当前目录生成一个 resources.py 文件,将这个文件剪切/复制到当前目录下的 libs 文件夹下即可解决问题。
在VOCData目录下创建python程序 split_train_val.py 并运行,代码如下(不用修改代码)。
import os
import random
import argparse
parser = argparse.ArgumentParser()
#xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='Annotations', type=str, help='input xml label path')
#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()
trainval_percent = 1.0 # 训练集和验证集所占比例。 这里没有划分测试集
train_percent = 0.9 # 训练集所占比例,可自己进行调整
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
os.makedirs(txtsavepath)
num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)
file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')
for i in list_index:
name = total_xml[i][:-4] + '\n'
if i in trainval:
file_trainval.write(name)
if i in train:
file_train.write(name)
else:
file_val.write(name)
else:
file_test.write(name)
file_trainval.close()
file_train.close()
file_val.close()
file_test.close()
运行完毕后,会生成 ImagesSets/Main 文件夹,且在其下生成测试集、训练集、验证集来存放图片的名字(都是纯名字,没有文件格式后缀.jpg)。
由于没有分配测试集,所以测试集为空。若要分配,更改12,13这两行代码,更改所在比例即可。
在VOCData目录下创建python程序 xml_to_yolo.py 并运行,代码如下(需要修改代码)。
这里需要修改的 第6行classes = ["light", "post"] ,要把中括号内的标签名就改成你自己需要的,比如博主个人有标有 classes = ["ripe"] ;除此之外还要修改的地方就是像 第24、25、53、54、55、57、58、63行 中出现的类似'D:/Yolov5/yolov5/VOCData/Annotations/%s.xml',这里大家就需要把它改成自己的路径,比如博主个人的路径是 D:/Study/yolov5/VOCData/Annotations ,大家就直接复制粘贴就好(注意:最好只修改 D:/Study/yolov5/VOCData/ 这一段,因为这些路径多多少少是有一些不同,博主也是出于方便才特意说明)。
import xml.etree.ElementTree as ET
import os
from os import getcwd
sets = ['train', 'val', 'test']
classes = ["light", "post"] # 改成自己的标签类别
abs_path = os.getcwd()
print(abs_path)
def convert(size, box):
dw = 1. / (size[0])
dh = 1. / (size[1])
x = (box[0] + box[1]) / 2.0 - 1
y = (box[2] + box[3]) / 2.0 - 1
w = box[1] - box[0]
h = box[3] - box[2]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return x, y, w, h
def convert_annotation(image_id):
in_file = open('D:/Yolov5/yolov5/VOCData/Annotations/%s.xml' % (image_id), encoding='UTF-8')
out_file = open('D:/Yolov5/yolov5/VOCData/labels/%s.txt' % (image_id), 'w')
tree = ET.parse(in_file)
root = tree.getroot()
size = root.find('size')
w = int(size.find('width').text)
h = int(size.find('height').text)
for obj in root.iter('object'):
difficult = obj.find('difficult').text
#difficult = obj.find('Difficult').text
cls = obj.find('name').text
if cls not in classes or int(difficult) == 1:
continue
cls_id = classes.index(cls)
xmlbox = obj.find('bndbox')
b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
float(xmlbox.find('ymax').text))
b1, b2, b3, b4 = b
# 标注越界修正
if b2 > w:
b2 = w
if b4 > h:
b4 = h
b = (b1, b2, b3, b4)
bb = convert((w, h), b)
out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
wd = getcwd()
for image_set in sets:
if not os.path.exists('D:/Yolov5/yolov5/VOCData/labels/'):
os.makedirs('D:/Yolov5/yolov5/VOCData/labels/')
image_ids = open('D:/Yolov5/yolov5/VOCData/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()
if not os.path.exists('D:/Yolov5/yolov5/VOCData/dataSet_path/'):
os.makedirs('D:/Yolov5/yolov5/VOCData/dataSet_path/')
list_file = open('dataSet_path/%s.txt' % (image_set), 'w') # 这行路径不需更改,这是相对路径
for image_id in image_ids:
list_file.write('D:/Yolov5/yolov5/VOCData/images/%s.jpg\n' % (image_id))
convert_annotation(image_id)
list_file.close()
运行后会生成如下 labels 文件夹和 dataSet_path 文件夹。
其中 labels 中为不同图像的标注文件,每个图像对应一个txt文件,文件每一行为一个目标的信息,包括class, x_center, y_center, width, height格式,这种即为yolo_txt格式。
dataSet_path 文件夹包含三个数据集的txt文件,train.txt等txt文件为划分后图像所在位置的路径,如train.txt就含有所有训练集图像的路径(博主这里的路径和大家的不一样,需要注意一下)。
在 yolov5 目录下的 data 文件夹下 新建一个 myvoc.yaml 文件(可以自定义命名)并用记事本打开,输入以下内容。
给大家解释一下,这里的内容是 训练集以及验证集(train.txt和val.txt)的路径(可以改为相对路径)以及 目标的类别数目(nc) 和 类别名称(name) 。
注意:这里的类别名称顺序和 xml_to_yolo.py 中的类别名称顺序得一致,如果训练的结果是反的,这里修改重新训练;还有,冒号后面都需要加一个空格。
train: D:/Yolov5/yolov5/VOCData/dataSet_path/train.txt
val: D:/Yolov5/yolov5/VOCData/dataSet_path/val.txt
# number of classes
nc: 2
# class names
names: ["light", "post"]
接下来修改模型配置文件,选择一个模型,在yolov5目录下的model文件夹下是模型的配置文件,有n、s、m、l、x版本,逐渐增大(随着架构的增大,训练时间也是逐渐增大),博主这里放上一些官方数据。
Model | size (pixels) |
mAPval 50-95 |
mAPval 50 |
Speed CPU b1 (ms) |
Speed V100 b1 (ms) |
Speed V100 b32 (ms) |
params (M) |
FLOPs @640 (B) |
YOLOv5n | 640 | 28.0 | 45.7 | 45 | 6.3 | 0.6 | 1.9 | 4.5 |
YOLOv5s | 640 | 37.4 | 56.8 | 98 | 6.4 | 0.9 | 7.2 | 16.5 |
YOLOv5m | 640 | 45.4 | 64.1 | 224 | 8.2 | 1.7 | 21.2 | 49.0 |
YOLOv5l | 640 | 49.0 | 67.3 | 430 | 10.1 | 2.7 | 46.5 | 109.1 |
YOLOv5x | 640 | 50.7 | 68.9 | 766 | 12.1 | 4.8 | 86.7 | 205.7 |
博主这里就选用 yolov5s.yaml 并使用记事本打开,更改标注类别数目nc。
使用PyCharm打开yolov5 目录下的 train.py 程序,我们可以多看看这些参数使用。
常用参数解释如下:
weights:权重文件路径
cfg:存储模型结构的配置文件
data:存储训练、测试数据的文件
epochs:指的就是训练过程中整个数据集将被迭代(训练)了多少次,显卡不行你就调小点。
batch-size:训练完多少张图片才进行权重更新,显卡不行就调小点。
img-size:输入图片宽高,显卡不行就调小点。
device:cuda device, i.e. 0 or 0,1,2,3 or cpu。选择使用GPU还是CPU
workers:线程数。默认是8。
在我们的yolov5目录下打开Windows命令终端。训练命令如下:
python train.py --weights --cfg models/yolov5s.yaml --data data/myvoc.yaml --epoch 100 --batch-size 1 --img 640 --device cpu
--weights:这个在训练的时候会自动下载一个 yolov5s.pt 到yolov5目录下。
--cfg:选择models目录下的yolov5s.yaml模型。
--data:选择data目录下的myvoc.yaml数据源,也就是在上文配置文件那里创建的文件。
--epoch:训练100次。
--batch-size:训练1张图片后进行权重更新。
--img:图片训练尺寸为640。
--device:使用CPU训练。
如果出现问题,查看后面相关问题说明!
博主这边暂时没有时间去找数据集以及标注和训练,就对大家也说一声抱歉没法给出训练的图片。
训练好的模型会被保存在 yolov5 目录下的 runs/train/exp/weights/ 下(注意:如果重复执行命令训练,会产生多个exp,注意区别就好)。
如果出现问题,查看后面相关问题说明!
博主这里就跟大家说一下我的个人的实际经验吧,之前训练过单标签,--epoch 200,--batch-size 1 , --device cpu 训练了大概8个小时,大概一张图片训练一次2-3s,我也用过GPU去训练,是桌面级RTX3050Ti,训练一张图片大概0.5s,快了好几倍,所以建议大家还是选择GPU训练。
出现缺少模块(类似No module named 'cv2')
可以在PyCharm终端或者Windows命令终端去pip install opencv-python,这里的opencv-python是举一个例子,大家要看自己环境缺什么就安装什么。
页面太小,无法完成操作
虚拟内存不足,调小 --batch-size,降低 --epoch,可以多尝试尝试,直到成功不报错为止。
我们使用刚刚训练出的最好的模型 best.pt 来测试,在yolov5目录下的 runs/train/exp/weights
python detect.py --weights runs/train/exp/weights/best.pt --source video/VID_20211106_160222.mp4
博主在这里给大家解释一下:
runs/train/exp/weights/best.pt:意思是选择刚刚我们训练好的模型 best.pt 来检测。
--source video/VID_20211106_160222.mp4:意思是要检测的视频是yolov5目录下的VID_20211106_160222.mp4视频,如果大家要检测的是图片,救修改--source后的路径就好。
这里附上之前做过一个火龙果识别的视频。
因为本文篇幅有点长,博主在这里将所有用到的资源全部放到这里。
Python3 3.11.5安装包 Python3 3.8.10安装包 PyCharm社区版安装包 FastGitHub压缩包 YOLOv5压缩包 labelImg
Yolov5训练自己的数据集(详细完整版)
如果大家觉得有用的话,就拜托点点赞咯!大家有什么问题都可以在反馈评论区哦!