申明:本文是我自己实际测试蹚坑案例,出现问题查阅了众多网上大咖的案例、问题解决办法总结而来,这里仅供大家学习学习。
一、环境安装
1、python开发环境安装(可选)
个人安装python-3.9.13,可通过访问官网https://www.python.org/进行下载安装,包括windows、linux等版本自行选择,建议不要使用太过新版本,可能导致部分组件不兼容。这里yolov8搭建可以不用独立安装python,在Anaconda3安装里已集成可提供独立的Python环境。
2、Anaconda3介绍与安装、设置下载源
2.1、介绍与安装注意事项
Anaconda3是一款功能强大的Python数据分析软件,专门为了方便使用Python进行数据科学研究而建立的一组软件包。 它汇集了数据科学领域常见的Python库,并自带了专门用来解决软件环境依赖问题的conda包管理系统。Anaconda能够轻松安装在数据科学工作中经常使用的包,提供了一个独立的Python环境,可以轻松创建和管理多个独立的Python环境,以便在不同的项目中使用不同版本的Python和不同的库。此外,它还集成了大量的科学计算和数据分析工具,如NumPy、Pandas、Matplotlib、Scikit-learn等,以及Jupyter Notebook,使得Python科学计算和数据分析更加简单和高效。Anaconda的软件功能主要包括包管理与环境管理,可以很方便地解决多版本Python并存、切换以及各种第三方包安装问题。Anaconda的安装步骤简单,用户可以通过访问Anaconda官网下载并安装(也可访问国内下载源地址进行下载,速度较快,比如清华大学的:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/)。安装完成后,用户可以利用conda和pip来安装、更新、卸载第三方工具包,而无需考虑版本等问题。Anaconda集成了众多数据分析的第三方包,如Numpy、Scipy、pandas等,提供了虚拟环境管理功能,解决Python多版本并存的问题。
注:Anaconda版本选择根据python版本进行选择,这里我选择Anaconda3-2021.11-Windows-x86_64.exe进行安装测试 ,若选择其他高版本,可自行研究相关依赖关系。
安装过程中选项全部勾选,然后一直下一步至最后。
2.2、设置下载源
安装完成后打开如下:
输入conda config --set show_channel_urls yes 回车后,会在当前用户下生成.condarc文件。
使用记事本或其他文本工具打开该文件可修改anaconda下载源为国内的,比如我这设置为清华源,复制如下替换到该.condarc文件:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
2.3、创建anaconda独立环境:
conda create -n 环境名 python=版本号 -y,我这里为:
conda create -n yolo8 python=3.9 -y
注:若多个项目时,这里应该独立创建环境,最好一个环境跑一个项目避免冲突。若python为更高版本时,在后续配置过程中需注意各依赖组件的版本号,后面会介绍,避免各种坑,我反正躺够了。。
3、pycharm介绍与安装
PyCharm是一款适用于数据科学和Web开发的Python集成开发环境(IDE),旨在提高开发效率和质量。 它提供了专业的Professional Edition和免费的Community Edition,后者专注于代码和数据,适合个人和小型团队使用。PyCharm集成了Python开发所需的所有工具,包括语法高亮、错误检查、代码格式化、可感知上下文的代码补全、代码导航和结构视图等,从而简化了Python开发过程。PyCharm支持所有主要Python实现,包括Python 2.x与3.x、Jython、IronPython、PyPy和Cython,确保了广泛的兼容性。它还支持多种测试框架,如doctest、nose和attest,并集成了Coverage.py以测量代码覆盖率,帮助开发者更好地了解测试情况。此外,PyCharm还支持yappi和cProfile等Python分析器,以及Behave和Lettuce等BDD框架,支持Web开发中的HTTP客户端、WebSocket、HTTP/2等,提供了强大的测试和部署工具,包括Kubernetes、Terraform和Docker等,便于在多种环境和平台上部署应用。PyCharm的快捷键和自定义功能使其成为高效开发的理想选择,支持绑定多种键盘快捷键方案,包括Textmate、NetBeans、Eclipse、Emacs以及Vi/Vim仿真插件,进一步提高了编码速度和效率。版本控制系统集成支持Git、SVN、Mercurial、Perforce等,便于版本管理和协作。
总的来说,PyCharm通过其丰富的功能和强大的工具集,成为Python开发者的首选IDE,无论是对于初学者还是专业开发者,都能提供极大的便利和效率提升。
这里使用社区版本的就行啦,下载地址:https://www.jetbrains.com/zh-cn/pycharm/
点击首页下载按钮,至下面图所示:
可以使用最新版本的,安装过程中的选项全部勾选,一直下一步至结束。
4、Cuda和cudnn介绍、安装(没有GPU的飘过该章节)
4.1、英伟达(NVIDA)了解
NVIDIA是一家全球领先的计算机技术公司,专注于图形处理器(GPU)和人工智能(AI)计算。公司成立于1993年,总部位于美国加利福尼亚州的圣塔克拉拉。NVIDIA的产品和技术广泛应用于各个领域,包括游戏、虚拟现实、自动驾驶、数据中心、边缘计算等。作为全球最为知名的GPU制造商之一,NVIDIA的图形处理器技术推动了计算机图形学和游戏行业的发展。同时,由于其并行计算能力优势,NVIDIA的GPU也被广泛应用于科学计算、深度学习和人工智能领域。其旗舰级GPU产品线包括GeForce用于游戏玩家、Quadro用于专业工作站和数据科学家、Tesla用于高性能计算等。
NVIDIA还推出了一系列的软件开发工具和库,为开发者提供了丰富的工具和支持,加速了人工智能应用的开发和部署过程。其中最著名的是CUDA平台,它为开发者提供了在GPU上进行高性能计算的编程模型和工具。通过持续的创新和技术领导地位,NVIDIA在计算机行业取得了巨大成功,并为人工智能和高性能计算等领域的发展做出了重要贡献。
4.2、Cuda
CUDA(Compute Unified Device Architecture)是由NVIDIA开发的并行计算平台和编程模型,用于利用NVIDIA GPU(Graphics Processing Unit)进行通用目的计算(GPGPU),它是一种为GPU编程提供高性能和易用性的软件环境。
CUDA的主要目标是将GPU作为计算加速设备,用于执行并行计算任务,特别是科学计算和深度学习等领域。它通过提供一套编程接口(API)和工具集,使开发者能够利用GPU的大规模并行计算能力,以加速计算密集型任务。使用CUDA,开发者可以使用编程语言如C/C++、Python等来编写GPU加速的程序。CUDA提供了一系列库和工具,如CUDA Runtime库、CUDA Tools(如nvcc编译器)和NVIDIA Nsight开发环境,用于编译、调试和优化CUDA程序。CUDA的优势在于其紧密结合了NVIDIA GPU的体系结构特点,可对任务进行细粒度的并行处理,并利用GPU上的数百到数千个核心同时执行计算任务。这使得CUDA成为目前广泛应用于科学计算、数值模拟、深度学习等领域的GPU编程平台。
使用CUDA开发的程序,其执行的硬件需求需要是支持CUDA的NVIDIA GPU,并且需要安装相应的CUDA驱动程序和运行时库。
4.2.1显卡版本信息查看
通过右下角或者开始菜单栏打开NVIIIA控制面板》帮助》系统信息》组件,如下图所属查看是否有CUDA,有无需安装,没有需要下载安装:
没有CUDA时,通过系统信息》显示 查看驱动程序版本信息:
先访问https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html查看驱动程序版本对应的cuda推荐版本。
4.2.2下载对应版本cuda
访问https://developer.nvidia.com/cuda-toolkit-archive 下载对应的cuda版本
因为我这windows server2019,驱动程序版本552.44,最终选择11.3.x版本时才安装成功:
这里建议大家从符合驱动程序版本号的CUDA版本从低版本往上进行下载安装(注意操作系统版本Version)。安装过程很简单,一直下一步即可,若提示需重启执行即可。
4.3、cudnn
cuDNN(CUDA Deep Neural Network)是由NVIDIA开发的深度神经网络(DNN)加速库,专门用于在CUDA平台上进行深度学习任务的加速,他提供了高度优化的DNN(深度神经网络)基础操作和算法实现,如卷积、池化、归一化、激活函数等,以及自动求导和张量操作等,利用了NVIDIA GPU的并行计算能力和高度可编程的架构,提供了高性能的DNN计算和训练加速。通过使用cuDNN,深度学习框架(如TensorFlow、PyTorch等)可以利用其提供的GPU加速功能,加快训练和推理的速度。cuDNN库实现了高效的卷积计算和其他操作,优化了计算过程和内存使用,以最大化GPU的利用率和性能。cuDNN还提供了一些高级功能,如自动调整算法的性能和内存使用、混合精度计算等,以进一步提高深度学习任务的效率和性能。一句话说明,cuDNN是NVIDIA为深度学习开发者提供的一个重要工具,它通过高度优化的DNN操作和算法实现,使得深度学习框架能够更有效地利用CUDA和NVIDIA GPU的性能,加速深度学习任务的执行。它的主要特性如下:
- 为各种常用卷积实现了 Tensor Core 加速,包括 2D 卷积、3D 卷积、分组卷积、深度可分离卷积以及包含 NHWC 和 NCHW 输入及输出的扩张卷积
- 为诸多计算机视觉和语音模型优化了内核,包括 ResNet、ResNext、EfficientNet、EfficientDet、SSD、MaskRCNN、Unet、VNet、BERT、GPT-2、Tacotron2 和 WaveGlow
- 支持 FP32、FP16、BF16 和 TF32 浮点格式以及 INT8 和 UINT8 整数格式
- 4D 张量的任意维排序、跨步和子区域意味着可轻松集成到任意神经网络实现中
- 能为各种 CNN 体系架构上的融合运算提速
在数据中心和移动 GPU 中采用 Ampere、Turing、Volta、Pascal、Maxwell 和 Kepler GPU 体系架构的 Windows 和 Linux 系统均支持 cuDNN。
访问https://developer.nvidia.com/rdp/cudnn-archive根据cuda版本匹配下载:
注:根据你的显卡驱动程序版本下载的CUDA版本匹配下载。
最后将下载的zip加压,将解压目录下的文件夹文件拷贝CUDA对应版本号目录下即可。
4、YOLOV8源码下载
这里不再介绍YOLOV8了,需要了解的自己搜索,网上一大堆基础介绍。
下载方式:
(1)官网版本:https://github.com/ultralytics/ultralytics 就一句:慢的要死,有vpn的除外。选择指定一个版本即可,下载后解压至指定目录即可:
+
5、YOLOV8配置
该节注意坑点,特别是GPU版本的:由于YOLOV8相关依赖下载过程中按照requirements.txt中要求的依赖最低版本后,按最新的版本下载,导致运行过程中各种冲突、兼容问题导致代码验证通不过。
5.1、pycharm添加解释器
打开,点击【Open】打开解压的yolov8文件夹即可加载源码
点击pycharm右下角添加解释器:
选择安装的anaconda3\Scripts\conda.exe,点击Load Environments:
最后,右下角选择yolov8即可:
最后等待相关依赖环境完成安装即可。
5.2、YOLOV8 CPU版本配置
(1)把requirements.txt中的torch和torchvision前面的#号去掉
(2)终端运行安装代码:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
这里-i后面为清华源下载地址,等待依赖下载完成即可。
(3)打开如下图所示wzq.py。取消注释,右键RUN即可进行验证:
出现如下所示表示成功:
打开C:\yolov8\runs\detect\predict(对应你自己yolov8所在目录)看到有图片效果:
5.3、YOLOV8 GPU版本配置(没GPU的跳过)
(1)用#号,把requirements.txt里面的torch和torchvision注释掉,或者删除
(2)终端运行安装代码:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
这里-i后面为清华源下载地址,等待依赖下载完成即可(一定要全部安装完成后再下一步)。
(3)终端运行GPU版本pytouch以及相关依赖组件:(坑点!!!)
很多网上都直接给出了你推荐安装代码,比如:
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch -y
但这里当你运行完成后执行测试时,会出现各种报错,比如:
Could not run 'torchvision::nms' with arguments from the 'CUDA' backend,还有些模块import失败等。
建议安装方式如下:
打开https://pytorch.org/get-started/previous-versions/ 根据你的CUDA版本往下的相近版本匹配安装,比如CUDA12.4,但是官网只有12.1,可以使用这个:
这里首次安装文伟pytouch较大,有2.5G左右,会下载很慢,估计得几个小时。不想等太久可以按照下面步骤执行,否则跳过如下步骤:
可以另外一种方式先对touch单独下载比在本地进行安装,再安装 torchvision和torchaudio:
(a)执行命令python -m pip debug --verbose
往下翻,把第一个 cp39-cp39-win_amd64复制:(根据你python环境复制,这里以我的版本为例)
(b)访问https://download.pytorch.org/whl/torch_stable.html,ctrl+f复制cp39-cp39-win_amd64进行搜索:因为我的CUDA版本12.4,列表如下图中最前面cu121表示cuda版本号,没有124,那么直接使用121版本也行:
这里下载(迅雷很快)到本地的yolov8目录下:
终端执行如下代码完成安装即可:
最后再执行其他依赖代码:pip install torchvision==0.17.2 torchaudio==2.2.2完成安装即可。
(4)终端运行GPU版本pytouch以及相关依赖组件后,执行测试成功即可:
打开如下图所示wzq.py。取消注释,右键RUN即可进行验证:
出现如下所示表示成功:
打开C:\yolov8\runs\detect\predict(对应你自己yolov8所在目录,predict目录没运行一次。就会在目录后面+1)看到有图片效果:
至此,yolov8环境搭建完毕。按照上面步骤,会解决因为依赖冲突导致的后面训练时出现的错误问题。
二、数据集标注
1、Labelimg介绍与安装、配置
LabelImg是一个开源的图形图像注释工具,用于创建边界/矩形框(适用于要标注物体的位置和大小)和多边形注释(适用于标注非规则形状的物体)。LabelImg能够在Windows、Linux和macOS等多个平台上运行,同时支持各种类型的图像文件格式,如JPG、PNG和BMP等(注:图片格式不是这几种的,可以使用格式工厂转一下即可)。
在LabelImg中,可以选择PASCAL VOC、YOLO和CreateML三种格式进行类别标注,生成的文件类型分别为:
(常用)PASCAL VOC——xx.XML文件
(常用)YOLO——xx.txt文件
CreateML——xx.json文件
CreateML是Apple提供的一种机器学习工具箱,用于构建和训练各种机器学习模型,包括图像分类、目标检测等任务。
安装步骤:
(1)打开Anaconda Prompt (anaconda3),不要安装在base环境,容易闪退,输入conda activate yolov8,切换到yolo8环境:
(2)输入pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple 完成安装
(3)创建labelimg快捷方式:
输入conda info --envs
本地进入 C:\anaconda3\envs\yolo8\Scripts:
(4)配置labelimg:
Auto Save mode:切换到下一张图的时候,会自动保存标签。
Display Labels:会显示标注框和标签
Advanced Mode:标注的十字架会一直悬浮在窗口
Open:打开单张图片
Open dir:打开图片所在文件夹
Change save Dir:输出的标注文件保存位置
如下选择保存的格式,一般选择yolo:
常用快捷键:
- A:切换到上一张图片
- D:切换到下一张图片
- W:调出标注十字架
- del :删除标注框框
- Ctrl+u:选择标注的图片文件夹
- Ctrl+r:选择标注好的label标签存在的文件夹
2、数据集格式
训练集train和验证集val的比例,一般默认是8:2,可以配置文件进行调整,后面会说。
3、labelimg标注详解
3.1、打开需要标注的图片
可打开单张、也可以打开图片文件夹:(图片均是在网上随便找的,注意后缀名一定统一!!!,要么全为jpeg,要么全为png,否则后面的训练过程中会报错。除非你会将源代码中的这部分可自行进行修改转换也行,这需要一定的python编程基础)
首次打开文件夹弹出选择No
再选择图片所在文件夹:
选择好图片文件夹后会弹出,选择No:
随后弹出的选择文件夹,选择labels文件夹:
注意:第一次弹出后,后续不再弹出这个选项,后续点击Change Save Dir ,设置标签labels保存路径即可:
3.2、对图片进行标注
双击图片或者D/A切换没图片上右键或者左边栏点击Create RectBox,如下以训练口罩识别进行标注、配置,若需要识别其他物品等,请自行标注:
拖住鼠标左键框选图片口罩识别区域,弹出的输入标签名mask,点击ok:(标注框选区域尽量不要框选口罩意外的内容,尽量贴近识别物品的边缘)
点击保存后,会在labels目录下生成文件名一样的一个txt文本,以此类推,完成所有图片的标注,一定记得没完成一个保存一下,比如你标注10张图片,那么labels文件夹下一定有10个对应相同名称的label标签txt,以及一个classes.txt文本。
如果lebel标签名输入一次后,下一张图片直接选择标签即可:
打开文件后解释如下:
三、训练验证
1、数据集划分
前面提到的训练集train和验证集val文件夹不需要手动建,需要配置运行即可:
然后执行运行即可:
注意:运行前一定记得labels中删除classes.txt,保证images和labels一一对应,数量一致
运行后会生成:
2、数据集配置和训练
如上图所示,将数据集voc1整个目录复制到pycharm中yolo8工程中:
打开wzq.py,配置:
如果上图训练次数参数不写时,会读取默认配置文件次数,如下所示为默认配置文件:
配置data.yaml:
3、开始训练
wzq.py右键运行:
出现运行参数,加载相关模型等信息:
开始指定训练轮数训练,本实验配置的100次:
出现如下表示完成训练:
注意:可以翻看该窗口查看是否有报错信息,若按照前面的环境完成安装配置,将不会出现报错信息;否则就是安装依赖相关组件存在版本冲突或者缺失,请详细检查!!!!!另外CPU训练较慢。
4、训练结果测试、
查看训练结果权重模型
修改模型进行测试
4.1、用图片进行测试
按照图片方式测试配置,项目下新建一个test文件夹并放入测试图片:
右键wzq.py run,获得结果:
、
如下表示测试成功,如果没有显示检测框,以及控制台出现no detections,可以将训练次数加大,
results = model.train(data='data.yaml', epochs=500)
以及如下设置
4.2、使用摄像头测试
摄像头检测时,如果不显示检测窗口,是因为默认不会实时显示检测的窗口,可以把 ultralytics/cfg/default.yaml里面的show值 改为True,就可以实时显示摄像头检测了
4.3使用视频文件进行测试:
注:若涉及安防摄像头或者抓拍场景较远的视频时,可能识别效果不太理想,需要大量素材、大批次进行训练测试:
5、其他常见训练报错信息
若出现其他错误信息需要具体分析:
常见于个人台式电脑出现的错误,比如:
(1)内存超出异常——会有相关报错信息如:CUDA out of memory或者[WinError 1455] 页面文件太小。
解决方案:
- 调小default.yaml的batch的值,改为8以内的数值
- 修改系统的虚拟内存调大
(2)Arial.ttf,<urlopen error [WinError 10054] 远程主机强迫关闭了一个现有的连接。>
解决方案:把源码根目录的Arial.ttf字体,放到C:\Users\用户名\AppData\Roaming\Ultralytics目录下,其中红色部分是自己电脑的用户名,根据具体情况进行修改。
注:另外,安装成功后在终端输入pip list 先把素有安装依赖版本记录起,避免后续其他操作时导致部分依赖版本被强制更新导致程序报错,对比可以回退版本:
比如我在后面设置导出onnx更新时就遇到了numpy 和opencv版本被更新导致报错,参照之前的依赖版本将被更新的opencv(被升级到4.10)和numpy(被升级到2.0)降级至之前的版本后运行代码正常:
pip install opencv-python==4.8.0.76 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install numpy==1.26.4 -i https://pypi.tuna.tsinghua.edu.cn/simple/
近期会更新java调用yolov8代码。
如对您有帮助,请点赞关注哈~谢谢。有问题也可以留言~大家一起学习。