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了。
下一期预告
单纯的玩还不够,后面会更新涨点相关内容。
找模型,填模型,改模型,涨点保佑!!

9016

被折叠的 条评论
为什么被折叠?



