赞
踩
环境配置基于:【yolov8】从0开始搭建部署YOLOv8,环境安装+推理+自定义数据集搭建与训练,一小时掌握_哔哩哔哩_bilibili
CUDA版本我是延续YOLOv5的11.1大家可以自行选择(最好提前看下pytorch支持的版本,可以减少不必要的麻烦)
有了前面yolov5的环境配置作为铺垫,对于yolov8环境配置还是比较轻松的~
下面来说下我的配置流程:(我选择的CUDA版本为11.1.1)
(我创建了一个新的环境yolov8,环境 python版本为3.8!!!我用3.7发生模块错误,所有模块重新下载)
conda create -n yolov8 python=3.8
创建好后:
conda activate yolov8
进入环境,然后看下一步:
进入pytorch官网(PyTorch)
官网那里默认的版本都别选,因为会版本对应不上
我的选择是点击:左下角Previous version of PyTorch(选择更多版本)
然后因为我的是11.1.1的所以,我选择
对应的是CUDA 11.1的,注意是v1.8.0 前面的对应的不是11.1.1可能是11.1.0
(下一步重要跟着我来,不然速度很慢)
从上图我们可以得到安装代码如下:
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
但是,根据文章(yolov5环境配置可能遇到的问题-CSDN博客)反映,如果直接输入安装代码会非常慢,一直卡在Solving environment,通过查CSDN,我找到了比较快的方法:pytorch下载太慢的解决办法-CSDN博客
该方案就是将官网的下载路径,改到清华镜像源的路径,先用activate激活自己之前创建的环境后,在命令行输入以下代码:
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
-
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
-
- conda config --set show_channel_urls yes
-
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
这时候我们输入安装代码,会发现出现错误:
可能是在镜像里找不到这个版本的cudatoolkit 11.1
我的思路如下:
先安装cudatoolkit=11.1再执行安装指令(单独分开来,这样到时候他会检测到你已经安装了cudatoolkit 11.1 后就会跳过寻找这个包了)不知道佬们有没有别的方法
conda install cudatoolkit=11.1 -c nvidia/label/cuda-11.1.1 -c conda-forge
安装完后再执行:(不需要填写 -c pytorch -c conda-forge就不会一直卡在Solving environment)
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1
然后等待安装...... 20-30分钟吧
到这里最难的环境基本配置好了!
pycharm部分:
在yolov8环境终端输入指令(第一个好像安装不了,不过没关系)
- pip install -e ultralytics
- pip install ultralytics
- pip install yolo
训练部分也容易出现很多问题,出现的问题我都堆在下面了,先说下我的流程:
首先我们需要自定义数据集。自定义数据集跟yolov5有挺大区别,代码也不一样。我也是看了很多csdn的资料,最终通过尝试,以下的方法比较好用:
YOLOv8教程系列:一、使用自定义数据集训练YOLOv8模型(详细版教程,你只看一篇->调参攻略),包含环境搭建/数据准备/模型训练/预测/验证/导出等_yolov8训练自己的数据集-CSDN博客
下面我说下我对上面文章的理解
打标签的时候:
Open Dir是图片路径是images
Change Save Dir是保存路径也就是Annotations
然后需要在ImageSets里面创建四个txt文件(test.txt train.txt trainval.txt val.txt)用来集中保存yolo文件
labels文件放的是全部txt文件(后面运行代码会生成txt文件)
因为训练集train 验证集val 测试集test比例不同所以需要划分下数据集
按照文章调好自己的路径就好了,建议是绝对路径
填好自己的分类
classes = ['xxx']
进入data/文件夹,新建xxx.yaml,内容如下,注意txt需要使用绝对路径
我的叫做bomb.yaml
这一步有点问题
我一开始输入的是yolo task=detect mode=train model=yolov8s.pt data==D:\yolov8\data\bomb.yaml epochs=100 imgsz=640 resume=True workers=2
会出现各种报错。经过排查,应该是model=yolov8s.pt这里出现问题了。我看b站视频上说的是用yolov8n.yaml(在目前版本找不到这个文件,好像是换了个名字)
我是找到了D:\yolov8\ultralytics-main\ultralytics\cfg\models\v8\yolov8.yaml
把他复制去了我的data文件夹下面。
但是我输入yolo task=detect mode=train model=D:\yolov8\data\yolov8.yaml data=D:\yolov8\data\bomb.yaml epochs=250 imgsz=640 workers=2 会出现以下报错:
可能是没有给他一个大小文件(像下图这种格式)
所以,我把yolov8.yaml的名字改成yolov8n.yaml后运行代码
yolo task=detect mode=train model=D:\yolov8\data\yolov8n.yaml data=D:\yolov8\data\bomb.yaml epochs=350 imgsz=640 resume=True workers=2
成功开始训练......
代码部分:
经过探索,我发现,如果想要修改参数值,只不需要找到相应文件的。而是通过代码进行设置。
具体方法如下:(以视频为例)
- import cv2
- from ultralytics import YOLO
-
- # 模型加载权重
- model = YOLO(r'D:\yolov8\runs\detect\train\weights\best.pt')
- # 视频路径
- cap = cv2.VideoCapture(0)
- # 对视频中检测到目标画框标出来
- while cap.isOpened():
- # Read a frame from the video
- success, frame = cap.read()
-
- if success:
- # Run YOLOv8 inference on the frame
- results = model(frame,conf=0.7)
-
- # Visualize the results on the frame
- annotated_frame = results[0].plot()
-
- # Display the annotated frame
- cv2.imshow("YOLOv8 Inference", annotated_frame)
-
- # Break the loop if 'q' is pressed
- if cv2.waitKey(1) & 0xFF == ord("q"):
- break
- else:
- # Break the loop if the end of the video is reached
- break
-
- # Release the video capture object and close the display window
- cap.release()
- cv2.destroyAllWindows()
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
只需要在捕获的图像帧中,在mode(frame,conf=?,show=?)设置即可。就跟终端的推理代码一样。(yolo task=detect mode=predict model=D:\yolov8\runs\detect\train\weights\best.pt source=0 device=0 show=True)
2.自己发现的问题
我一开始推理的时候非常卡,我以为是电脑是不行,通过查询,我得知是因为我调用函数的问题。
我一开始的代码是:
- while cap.isOpened():
- success, frame = cap.read() # 读取摄像头的一帧图像
- results = model(frame)
- if success:
- model.predict(source=frame, show=True) # 对当前帧进行目标检测并显示结果
- # 通过按下 'q' 键退出循环
- if cv2.waitKey(1) & 0xFF == ord('q'):
- break
啊错错错!这样卡死了!
后面经过排查,确认了是因为通过函数model.predict(source=frame, show=True)显示图片结果很慢!
后面改了一种显示方法:
- while cap.isOpened():
- success, frame = cap.read() # 读取摄像头的一帧图像
- results = model(frame)
- annotated_frame = results[0].plot()
- if success:
- cv2.imshow("YOLOv8 Inference", annotated_frame)
- # 通过按下 'q' 键退出循环
- if cv2.waitKey(1) & 0xFF == ord('q'):
- break
啊对对对,通过cv.imshow来显示,速度快多了。
额,好好好,原来你也安装了3.8以下版本。。
没办法,重新安装环境吧......下次改成python=3.8就好
删除环境:conda remove -n 环境名字 --all
[完美解决]出现“ImportError: DLL load failed while importing _imaging: 找不到指定的模块”的错误-CSDN博客
解决办法:
YOLOv8推理使用(指令讲解+报错解决方法)_yolov8 pt推理代码-CSDN博客
这个是说连不上github,搞个加速器就好了。
听不懂思密达,估计是网络不太好。我是再输入同样的指令,等他训练
下面一堆问题我把它归结为设备性能问题:
这个问题解决后我就可以开始训练了...(性能问题优先考虑我这个方法,下面的问题我都没找到好的解决办法,只有解决这个问题,我的程序才开始训练)
一开始我在终端输入的是:yolo task=detect mode=train model=yolov8s.pt data={dataset.location}/data.yaml epochs=100 imgsz=640 resume=True
然后就会出现各种报错,通过查找资料,我发现是因为在yolov8中,默认workers=8好像,这样的话,对电脑要求特别高。通过修改代码:
yolo task=detect mode=train model=yolov8s.pt data={dataset.location}/data.yaml epochs=100 imgsz=640 resume=True workers=2
我就可以开始训练了......
这个我不太懂,当时我再运行一遍就出现了别的问题
网上说显卡内存不足,在任务管理器关闭程序
同8.一样显存爆炸,我也是通过修改workers=2解决的。
磁盘分配虚拟内存问题,设置完应该要重启电脑。
检查数据集,可能是名字没有按照规定来填写,或者转换xml转换成txt中间出现错误
如果都没有问题,看看是不是因为你cd .../进去了一个路径然后在终端执行的命令。这样的话它找不到根目录里面的图片。退出pycharm再重进
这个你得进入你的训练路径,例如:cd D:\yolov8\runs\detect\train
然后再输入 tensorboard --logdir="D:\yolov8\runs\detect\train"
14.WARNING ⚠️ data\images\90fdf0069a4b337d9181dd2b1a2b0de.jpg: corrupt JPEG restored and saved
应该跟11类似,数据集的问题。检查一下路径,名字,还有文件里面的内容
15.ValueError: not enough values to unpack (expected 3, got 0)
很大可能是你cd D:\yolov8\runs\detect\train进去了一个文件,里面执行训练代码,导致他找不到这个文件以外的东西。退出pycharm重新进去执行训练代码即可。
遇到的问题大概就这么多,还有问题的话可以再评论区问,我找到解决方法就会更新下文章。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。