拓冰建站拓冰建站
首页 / 资讯中心 / 正文

YOLO环境部署指南零基础

从零搭建 YOLO 训练环境GPU版本前言这里是用到的X-AnyLabelingyolov8产出.pt后转成.onnx文件使用末尾附带自动按照yolo要求放好文件的脚本。最近在 Windows 上折腾 YOLO 训练环境因为是国内网络 老显卡驱动踩了一堆坑pip 默认源超时、自动装错版本导致 DLL 报错、单线程下载 3 小时……网上教程大多默认你能流畅访问 GitHub / PyTorch 官网照着做基本都会卡死。所以我把完整可跑通的流程 5 个真实踩坑整理出来照着做 30 分钟就能在本地 GPU 上跑通yolo train。实测环境Windows 10 RTX 3060 Laptop6 GB 显存 驱动 527.99最终成果yolo train dataxxx.yaml正常 GPU 训练并产出.pt权重文件一、整体流程5 步① 装 Python 3.11 → ② 建 venv 虚拟环境 → ③ 装 PyTorch GPU 版 → ④ 装 Ultralytics → ⑤ 验证总下载量约2.8 GB其中 PyTorchtorch是大头。不要用 pip 默认源直接下必失败见坑 2、坑 3。二、详细步骤第 1 步安装 Python 3.11下载地址https://www.python.org/ftp/python/3.11.9/python-3.11.9-amd64.exe安装时务必勾选 “Add python.exe to PATH”安装结束界面建议点“Disable path length limit”避免 pip 装大包时路径超长报错⚠️ 不要用 Python 3.13太新容易踩兼容坑3.11 最稳验证新开 cmdpy -3.11 --version第 2 步创建虚拟环境py -3.11 -m venv C:\yolo-env C:\yolo-env\Scripts\activate看到命令行前面出现(yolo-env)才算激活成功后续所有命令都要在这个状态下执行。第 3 步安装 PyTorch GPU 版关键先看坑 2、坑 3推荐做法浏览器多线程下载 本地安装浏览器打开下载这两个文件阿里云镜像国内满速https://mirrors.aliyun.com/pytorch-wheels/cu118/torch-2.7.1%2Bcu118-cp311-cp311-win_amd64.whl (约 2.8 GB) https://mirrors.aliyun.com/pytorch-wheels/cu118/torchvision-0.22.1%2Bcu118-cp311-cp311-win_amd64.whl (约 5 MB)等两个都下载完浏览器里的.crdownload临时文件消失才算完然后pip install 下载目录\torch-2.7.1cu118-cp311-cp311-win_amd64.whl pip install 下载目录\torchvision-0.22.1cu118-cp311-cp311-win_amd64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple⚠️必须先装 torch再装 torchvision后者依赖前者顺序反了会报No matching distribution第 4 步安装 UltralyticsYOLO 本体pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simpleOpenCV 等依赖自动带入无需单独安装。第 5 步验证全链路python -c import torch; print(CUDA可用:, torch.cuda.is_available()) yolo predict modelyolov8n.pt sourcehttps://ultralytics.com/images/bus.jpg通过标准输出CUDA可用: Truedemo 输出含CUDA:0 (NVIDIA ...)且Results saved to runs\detect\predict三、踩坑记录每条都是实测血泪坑 1pip 混用镜像时自动选错版本 最隐蔽pip install torch torchvision -i 清华源 -f 阿里云镜像 ← 错误示范pip 默认挑最高版本会无视 cu118 镜像从清华源装torch 2.13.0新版内置 CUDA 太新老驱动带不动装完import torch直接报OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。Error loading ...\c10.dll对策必须锁死版本号pip install torch2.7.1cu118 torchvision0.22.1cu118 ...坑 2官方源国内直连必超时download.pytorch.org在国外2.8 GB 文件下到一半必断pip._vendor.urllib3.exceptions.ReadTimeoutError: ... Read timed out.对策小依赖走清华源-i https://pypi.tuna.tsinghua.edu.cn/simpletorch 本体走阿里云镜像。坑 3pip 单线程下载慢到绝望即使走阿里云镜像pip 单线程也只有约 242 kB/s2.8 GB 要 3 小时且pip 不支持断点续传。对策改用浏览器 / IDM / 迅雷下载 whl 文件实测 3.7 MB/s再本地pip install。坑 4CUDA 版本与驱动匹配驱动版本可选 wheel≥ 527.99CUDA 12.0cu118 ✅ / cu121 ❌≥ 531.xxCUDA 12.1cu118 / cu121 均可先用nvidia-smi看右上角驱动支持的最高 CUDA 版本。cu118 兼容性最广装机首选不确定就装 cu118。坑 5杂项小坑执行 pip 前确认已激活 venv命令行有(yolo-env)前缀否则装进全局环境浏览器下载没完成时文件是.crdownload后缀pip 会报 “No such file or directory”——等下载完再装中文路径加英文双引号下载目录\torch-xxx.whlsetx设置环境变量后要关闭 cmd 重开才生效如果重装后仍报 WinError 1114装微软 VC 运行库 https://aka.ms/vs/17/release/vc_redist.x64.exe四、磁盘规划建议位置内容占用C:\yolo-env虚拟环境torch 等大包~6 GBC:\yolo工作区数据集、yaml、训练输出随项目增长系统盘建议预留 ≥ 20 GB 余量想换盘把上面路径里的C换成D即可流程完全一样五、日常训练命令1、cmdC:\yolo-env\Scripts\python.exe C:\Users\Admin\Desktop\DeepTrain\ScriptFile\3_convert_dataset.py 图片JSON文件夹 screw ok ng----------加载图像将图像标签转成txt区分标签类别拆分图像文件夹训练和验证文件 2、C:\yolo-env\Scripts\activate------调用yolo 3、cd /d C:\yolo------调用yolo 4、yolo train dataC:\yolo\datasets\screw\data.yaml modelyolov8n.pt epochs100 imgsz640 batch16 workers4 patience30 name训练后的文件名-----开始训练 {设置训练参数 epochs100训练轮数每次看多少边把训练集完整学 100 遍。学太少没记住太多会死记硬背 imgsz640输入尺寸训练前把每张图统一缩放到 640×640 再喂给模型什么时候调大目标在图里很小小螺丝、远处零件→ 960/1280。什么时候调小显存不够、图本身分辨率低 batch16一次同时算 16 张图再统一更新一次越多越快但越吃显存 workers4 数据加载线程用 4 个线程后台读图/增强主线程不等待默认就行。 patience30连续 30 轮精度不再提升就自动停下省时间 namescrew_v2输出文件夹名这次结果存到 runs/detect/screw_v2/不和上次混在一起 5、yolo export modelC:\yolo\runs\detect\screw_v2\weights\best.pt formatonnx opset12 将训练的格式从pt转换成onnx; opset12(把模型用最通用的旧语法导出确保你那边的老程序也读得动)训练产物runs\detect\train\weights\best.pt结语到这里你的 YOLO 训练环境就完全搭建好了。后续标注推荐 X-AnyLabeling→ 转 YOLO 格式 → 写data.yaml→ 一行yolo train就能开训。#自动按照yolo要求放好文件的脚本。 #C:\yolo\datasets\screw\ #├── images\ ← 图片总文件夹 #│ ├── train\ ← 90 张训练用图 #│ └── val\ ← 22 张验证用图 #├── labels\ ← 标注总文件夹 #│ ├── train\ ← 90 份训练图的标注.txt #│ └── val\ ← 22 份验证图的标注.txt #└── data.yaml ← 配置文件 # -*- coding: utf-8 -*- Step 3: Convert X-AnyLabeling / LabelMe JSON annotations to YOLO dataset. Works fully offline. Pure standard library, no extra packages needed. Usage: C:\\yolo-env\\Scripts\\python.exe 3_convert_dataset.py 图片和JSON所在文件夹 项目名 [类别名...] Example (two classes ok/ng, same as screw project): C:\\yolo-env\\Scripts\\python.exe 3_convert_dataset.py D:\\raw\\op100 screw ok ng Output: C:\\yolo\\datasets\\项目名\\ images/train, images/val, labels/train, labels/val, data.yaml Split: 80% train / 20% val, stratified so every class appears in val. import json, os, shutil, random, sys def main(): if len(sys.argv) 4: print(__doc__) sys.exit(1) src sys.argv[1] project sys.argv[2] class_names sys.argv[3:] # e.g. ok ng - 0-ok, 1-ng dst os.path.join(rC:\yolo\datasets, project) for sub in [images/train, images/val, labels/train, labels/val]: os.makedirs(os.path.join(dst, sub), exist_okTrue) items [] skipped 0 for f in os.listdir(src): if not f.endswith(.json): continue name os.path.splitext(f)[0] img None for ext in (.jpg, .jpeg, .png, .bmp): p os.path.join(src, name ext) if os.path.exists(p): img p break if img is None: skipped 1 # orphan json (image deleted) continue d json.load(open(os.path.join(src, f), encodingutf-8)) W, H d[imageWidth], d[imageHeight] lines, classes_in_img [], set() for s in d[shapes]: if s.get(shape_type, rectangle) ! rectangle: continue # only rectangles supported pts s[points] xs [p[0] for p in pts]; ys [p[1] for p in pts] x1, x2, y1, y2 min(xs), max(xs), min(ys), max(ys) cx (x1 x2) / 2 / W; cy (y1 y2) / 2 / H w (x2 - x1) / W; h (y2 - y1) / H cls int(s[label]) classes_in_img.add(cls) lines.append(f{cls} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) if lines: items.append((name, lines, classes_in_img, img)) # stratified 8:2 split by rarest class presence random.seed(42) random.shuffle(items) val, train [], [] # ensure each class shows up in val with ~20% of its images for cls in range(len(class_names)): group [i for i in items if cls in i[2]] take group[: max(1, len(group) // 5)] val.extend(take) val_names {i[0] for i in val} train [i for i in items if i[0] not in val_names] for name, lines, _, img in train: shutil.copy(img, os.path.join(dst, images/train, os.path.basename(img))) open(os.path.join(dst, labels/train, name .txt), w).write(\n.join(lines)) for name, lines, _, img in val: shutil.copy(img, os.path.join(dst, images/val, os.path.basename(img))) open(os.path.join(dst, labels/val, name .txt), w).write(\n.join(lines)) yaml_lines [ fpath: C:/yolo/datasets/{project}, train: images/train, val: images/val, names:, ] [f {i}: {n} for i, n in enumerate(class_names)] open(os.path.join(dst, data.yaml), w, encodingutf-8).write(\n.join(yaml_lines) \n) print(ftotal: {len(items)} images (skipped orphan json: {skipped})) print(ftrain: {len(train)} val: {len(val)}) print(fyaml : {os.path.join(dst, data.yaml)}) print(next : run 4_train.bat) if __name__ __main__: main()
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门