【YOLO】yolov12环境配置及基本训练

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen
文本生成
Qwen3

本镜像基于 RTX 4090D 24GB 显存 + CUDA 12.4 + 驱动 550.90.07 深度优化,内置完整运行环境与 Qwen3-32B 模型依赖,开箱即用。

yolov12环境配置



前言&注意事项

yolov12配置环境,希望不要直接玩v12,
可以玩一玩教程最多的,最全的版本,
先熟悉熟悉整体流程,
在简单的v5,v8修改修改模块等等,
再玩v12,会简单很多。步子太大容易扯到。
不懂的问题先问百度,问AI,
最后再问同事,问老师,问学长学姐,问朋友。

缺哪个模块补哪个模块,但torch相关的别乱补,要不得重装。
在此之前,保证自己的电脑上安装了 conda,PyCharm,cuda,cudnn等基础软件。
没装的人也可以留言,我也可以补一下相关的。


一、yolov12

官网链接
在这里插入图片描述
虽然环境和yolov8的大体一样,但pytorch版本过低,决定还是重建虚拟环境。

二、配置步骤

1.建立虚拟环境

win+r,cmd,进终端。

用conda里建立一个叫yolov12的虚拟环境

conda create -n yolov12 python=3.11

接着执行一下:

conda init 
 conda init   是一个初始化命令,
 用于将 Anaconda 的命令行工具(  conda  )添加到系统的 shell 环境中。
 具体来说,它会修改你的 shell 配置文件(如   .bashrc、 .zshrc 等),
 以便你可以在终端中直接使用   conda   命令。

关闭当前cmd窗口,再重新打开cmd,
最后再执行:

conda activate yolov12
 conda activate yolov12   是用来激活一个名为   yolov12   的 Conda 环境的命令。

2.查看DUDA版本

查看自己的CUDA最高版本

nvidia-smi

在这里插入图片描述
查看自己的cuda版本

nvcc -V
nvcc --version

在这里插入图片描述

3.安装pytorch

我的cuda版本是11.8,你的按照你的显示安装对应的版本

nvcc --version

在这里插入图片描述
最低标准2.2.2(不一定是最新的最好哦)
在这里找pytorch版本
在这里插入图片描述
进入虚拟环境

conda activate yolov12

选择你对应的版本安装pytorch

conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=11.8 -c pytorch -c nvidia

在这里插入图片描述
按 y,继续安装
在这里插入图片描述

进入虚拟环境内,运行python。
在这里插入图片描述
接着输入

import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.device_count())

在这里插入图片描述

4.简单运行

运行app.py,缺哪个安装哪个
在这里插入图片描述
在这里插入图片描述
装吧,一堆,没哪个模块装哪个,用哪个模块装哪个,一装一个不吱声。

pip install abc

当然你有的安装也会报错,可以问AI,如果你不熟练的话,
例如:你直接 pip install cv2,就会出现如下情况
在这里插入图片描述
然后接着运行,点那个http://127.0.0.1:7860
在这里插入图片描述
点例子里的图会出现如下界面
在这里插入图片描述
在这里插入图片描述
也可以自己换图片,如下。
在这里插入图片描述
在这里插入图片描述
如此,基本内容就算是配置完了。


三、配置数据集

1.了解数据集

数据集包括图片和标注内容,放在datasets里,比如下面就有两个数据集一个是FrogeyeLeafSpot,另外一个是bait,包括images和labels。train和val的比例用7:3。
在这里插入图片描述

2.标注软件

用labellmg,如下。就标吧,一标一个不吱声。人工智能标注师。
(究竟是我训练人工智能还是人工智能训练我)
在这里插入图片描述
在这里插入图片描述

3.检查数据集

标注完,你就能看到下面的内容了
在这里插入图片描述

四、训练出自己的模型

1.填数据集

在佬那嫖一个,建个配置文件

# -*- coding: utf-8 -*-
"""
@Auth : 挂科边缘
"""

import os, shutil
from sklearn.model_selection import train_test_split


val_size = 0.2
postfix = 'jpg'
#西红柿配置文件
imgpath = r'C:\Users\AnK\Desktop\yolov12-main\datasets\tomatoyekubing\train\images'
txtpath =  r'C:\Users\AnK\Desktop\yolov12-main\datasets\tomatoyekubing\train\labels'
output_train_img_folder =r'C:\Users\AnK\Desktop\yolov12-main\datasets\tomatoyekubing\dataset_kengwa/images/train'
output_val_img_folder =  r'C:\Users\AnK\Desktop\yolov12-main\datasets\tomatoyekubing\dataset_kengwa/images/val'
output_train_txt_folder =  r'C:\Users\AnK\Desktop\yolov12-main\datasets\tomatoyekubing\dataset_kengwa\labels/train'
output_val_txt_folder =  r'C:\Users\AnK\Desktop\yolov12-main\datasets\tomatoyekubing\dataset_kengwa\labels/val'

os.makedirs(output_train_img_folder, exist_ok=True)
os.makedirs(output_val_img_folder, exist_ok=True)
os.makedirs(output_train_txt_folder, exist_ok=True)
os.makedirs(output_val_txt_folder, exist_ok=True)


listdir = [i for i in os.listdir(txtpath) if 'txt' in i]
train, val = train_test_split(listdir, test_size=val_size, shuffle=True, random_state=0)


for i in train:
    img_source_path = os.path.join(imgpath, '{}.{}'.format(i[:-4], postfix))
    txt_source_path = os.path.join(txtpath, i)

    img_destination_path = os.path.join(output_train_img_folder, '{}.{}'.format(i[:-4], postfix))
    txt_destination_path = os.path.join(output_train_txt_folder, i)

    shutil.copy(img_source_path, img_destination_path)
    shutil.copy(txt_source_path, txt_destination_path)

for i in val:
    img_source_path = os.path.join(imgpath, '{}.{}'.format(i[:-4], postfix))
    txt_source_path = os.path.join(txtpath, i)

    img_destination_path = os.path.join(output_val_img_folder, '{}.{}'.format(i[:-4], postfix))
    txt_destination_path = os.path.join(output_val_txt_folder, i)

    shutil.copy(img_source_path, img_destination_path)
    shutil.copy(txt_source_path, txt_destination_path)


在这里插入图片描述
改成你自己的。
再建一个文件夹放yaml文件
nc是有几种
name是这几种叫什么
在这里插入图片描述

train: C:\Users\AnK\Desktop\yolov12-main\datasets\tomatoyekubing\images\train  # train images (relative to 'path') 4 images
val: C:\Users\AnK\Desktop\yolov12-main\datasets\tomatoyekubing\images\train  # val images (relative to 'path') 4 images

nc: 1

# class names
names: ['LateBlight']

2.练数据集

再嫖个佬的,建个train.py
在这里插入图片描述

# -*- coding: utf-8 -*-
"""
@Auth : 挂科边缘
"""
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO(model=r'C:\Users\AnK\Desktop\yolov12-main\ultralytics\cfg\models\v12\yolov12.yaml')
    #model = YOLO(model=r'C:\Users\AnK\Desktop\yolov12-main\edmo2xing2yaml\yolov12n_BiFPN.yaml')
    # model.load('yolo11n.pt') # 加载预训练权重,改进或者做对比实验时候不建议打开,因为用预训练模型整体精度没有很明显的提升
    model.train(data=r'C:\Users\AnK\Desktop\yolov12-main\edxun4lian4yaml\tomato.yaml',
                imgsz=640,
                epochs=5,
                batch=1,
                workers=1,
                device='',
                optimizer='SGD',
                close_mosaic=10,
                resume=False,
                project='runs/train',
                name='exp',
                single_cls=False,
                cache=False,
                )

#训练代码的参数解释:
#该参数填入模型配置文件的路径
# model参数:改进的话建议不需要填预训练模型权重。
# data参数:该参数可以填入训练数据集配置文件的路径
#imgsz参数:该参数代表输入图像的尺寸,指定为 640x640 像素
#epochs参数:该参数代表训练的轮数
#batch参数:该参数代表批处理大小,电脑显存越大,就设置越大,根据自己电脑性能设置
# workers参数:该参数代表数据加载的工作线程数,出现显存爆了的话可以设置为0,默认是8。
# device参数:该参数代表用哪个显卡训练,留空表示自动选择可用的GPU或CPU
#optimizer参数:该参数代表优化器类型
#该参数代表在多少个 epoch 后关闭 mosaic 数据增强
# close mosaic参数:该参数代表是否从上一次中断的训练状态继续训练。
# 设置为False表示从头开始新resume参数:的训练。
# 如果设置为True,则会加载上一次训练的模型权重和优化器状态,
# 继续训练。这在训练被中断或在已有模型的基础上进行进一步训练时非常有用。
#project参数:该参数代表项目文件夹,用于保存训练结果
#该参数代表命名保存的结果文件夹。name参数:
#single cls参数:该参数代表是否将所有类别视为一个类别,设置为False表示保留原有类别该参数代表是否缓存数据,
# 设置为False表示不缓存。
# cache参数:该参数代表是否缓存数据,设置False表示不缓存
#注意注意注意:般做科研改进工作时候可以不用预训练权重,因为用预训练模型整体精度很难提高

记得两个路径别放错了,改成你的。就可以玩yolov12啦。
我的1650显卡还在发力,哈哈。

3.玩模型

再嫖个佬的,哈哈,感谢佬。

检测图片,并把图片保存到桌面。

# -*- coding: utf-8 -*-
"""
@Auth : 挂科边缘
"""

from ultralytics import YOLO

if __name__ == '__main__':
    # Load a model
    model = YOLO(model=r'C:\Users\AnK\Desktop\yolov12-main\yolov12s.pt')

    # 指定保存路径为桌面
    save_path = r'C:\Users\AnK\Desktop'

    model.predict(
        #source=r'C:\Users\AnK\Desktop\a.png',  # 输入图片路径
        save=True,  # 保存推理结果
        show=True,  # 显示推理结果窗口
        project=save_path,  # 指定保存路径
        name='inference'  # 可选:指定保存文件夹名称
    )

#推理代码的参数解释
#1.model参数:该参数可以填入模型文件路径
#2.source参数该参数可以填入需要推理的图片或者视频路径,如果打开摄像头推理则填入0就行该参数填入True,
#3.save参数:代表把推理结果保存下来,默认是不保存的,所以一般都填入True
#4.show参数:该参数填入True,代表把推理结果以窗口形式显示出来,默认是显示的,这个参数根据自己需求打开就行,不显示你就填False就行
#5.project   参数: project   参数用于指定保存推理结果的目录。
#你可以将其设置为桌面路径,
#例如   r'C:\Users\AnK\Desktop'  。
#如果你希望将结果保存到桌面的特定文件夹中,可以创建一个文件夹,
#例如   r'C:\Users\AnK\Desktop\inference_results'  。
#6.   name   参数:name   参数用于指定保存结果的文件夹名称。
# 如果你设置了 project 参数,
# name   参数将决定在该目录下创建的子文件夹名称。
# 例如,如果你设置了  project=r'C:\Users\AnK\Desktop'
# 和 name='inference'  ,那么推理结果将保存到   C:\Users\AnK\Desktop\inference   文件夹中。

用摄像头检测

1.查查自己摄像头哪个能用
(自己建个Python文件就行)

import cv2

# 测试索引 0 到 9
for i in range(10):
    cap = cv2.VideoCapture(i, cv2.CAP_DSHOW)  # 强制使用 DirectShow 后端
    if cap.isOpened():
        print(f"摄像头索引 {i} 可用")
        ret, frame = cap.read()
        if ret:
            print(f"摄像头索引 {i} 成功读取帧")
            cv2.imshow(f'Camera {i}', frame)
            print(f"按任意键关闭摄像头 {i} 的画面")
            cv2.waitKey(0)  # 等待用户按键
        else:
            print(f"摄像头索引 {i} 无法读取帧")
        cap.release()  # 释放摄像头资源
    else:
        print(f"摄像头索引 {i} 无法打开")

cv2.destroyAllWindows()  # 关闭所有 OpenCV 窗口

2.用摄像头检测
记得换你的模型位置。
(自己建个Python文件就行)

import os  # 导入 os 模块
import cv2
from ultralytics import YOLO

def main():
    # 加载 YOLOv12 模型
    model_path = r"C:\Users\AnK\Desktop\yolov12-main\runs\train\exp6\weights\best.pt"
    model = YOLO(model_path)  # 替换为你的 YOLOv12 模型权重路径

    # 打开摄像头
    cap = cv2.VideoCapture(0)  # 换摄像头

    if not cap.isOpened():
        print("无法打开摄像头")
        return

    # 获取视频流的宽度和高度
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    # 设置保存视频的路径和格式
    desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")  # 获取当前用户桌面路径
    output_path = os.path.join(desktop_path, "output_video.mp4")  # 保存视频路径
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 使用 MP4 格式
    out = cv2.VideoWriter(output_path, fourcc, 20.0, (width, height))

    print("开始检测,按 'q' 退出...")
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            print("无法读取帧")
            break

        # 执行目标检测
        results = model(frame)

        # 绘制检测结果
        annotated_frame = results[0].plot()

        # 显示检测结果
        cv2.imshow("YOLOv12 Detection", annotated_frame)

        # 保存检测结果到视频文件
        out.write(annotated_frame)

        # 按 'q' 退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # 释放资源
    cap.release()
    out.release()
    cv2.destroyAllWindows()
    print(f"检测结果已保存到:{output_path}")

if __name__ == "__main__":
    main()

这样检测图片以及用摄像头检测就都实现了。
其他类似的功能也可以自己去实现,或者懒得写直接问AI。
这些就可以基础的玩yolov12了。


下一期预告

单纯的玩还不够,后面会更新涨点相关内容。
找模型,填模型,改模型,涨点保佑!!

您可能感兴趣的与本文相关的镜像

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen
文本生成
Qwen3

本镜像基于 RTX 4090D 24GB 显存 + CUDA 12.4 + 驱动 550.90.07 深度优化,内置完整运行环境与 Qwen3-32B 模型依赖,开箱即用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值