yolo11入门
·
安装命令
根据GPU驱动版本选择不同的安装版本
pip install ultralytics
import ultralytics
print(ultralytics.__version) 查看是否安装成功
nvidia-smi 查看GPU驱动版本
https://pytorch.org/get-started/locally/
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu126 12.6版本
import torch
torch.cuda.is_available() 查看是否安装成功
目标检测
模型有5种:
yolo11n.pt
yolo11s.pt
yolo11m.pt
yolo11l.pt
yolo11x.pt
从小到大 模型越大检测的精准度高 耗时也越高
from ultralytics import YOLO
import cv2
#加载模型
model = YOLO('yolo11n.pt')
#查看所有能识别的物体
names = model.names
print(names)
img = cv2.VideoCapture('22.mp4')
while True:
ret,frame = img.read()
if not ret :
break
#物体检测 classes 设置 只检测人 conf设置阈值 小于这个值的过滤掉
result = model.predict(source=frame,classes = [0],conf = 0.5)
boxes = result[0].boxes
for box in boxes:
#位置信息 信任值 类别
x1,y1,x2,y2 = box.xyxy[0].cpu().numpy().astype(int)
cv2.rectangle(frame,(x1,y1),(x2,y2),(255,0,0),2)
#类别 #得分
conf = float(box.conf)
cls_id = int(box.cls[0])
cv2.putText(frame,names[cls_id] + " conf:" + format(conf, '.2f'),(x1,y1 - 10) , cv2.FONT_HERSHEY_PLAIN,1,(0,255,0),2)
cv2.imshow('frame',frame)
cv2.waitKey(25)
图像分割
import cv2
import numpy as np
from ultralytics import YOLO
model = YOLO('model/yolo11s-seg.pt')
img = cv2.imread('../resource/bus.jpg')
#检测 分割车类型
results = model.predict(source=img)
boxes = results[0].boxes
masks = results[0].masks
seg_mask = np.zeros((img.shape[0], img.shape[1]),dtype = np.uint8)
for i,mask in enumerate(masks):
#得到的掩码值是0 或者1 *255 变成 0 或者255 是一张黑白的图像
data = mask.data[0].cpu().numpy().astype(np.uint8) * 255
rsdata = cv2.resize(data, (img.shape[1], img.shape[0]))
seg_mask = seg_mask + rsdata
res_img = cv2.bitwise_and(img, img, mask=seg_mask)
cv2.imshow('res_img', res_img)
cv2.waitKey(0)
用颜色标记图像
import cv2
import numpy as np
from ultralytics import YOLO
model = YOLO('model/yolo11s-seg.pt')
img = cv2.imread('../resource/bus.jpg')
#检测 分割车类型
results = model.predict(source=img)
boxes = results[0].boxes
masks = results[0].masks
#创建一个和原图像一样的三通道资源 可以设置单独的通道颜色
seg_mask = np.zeros_like(img)
for i ,mask in enumerate(masks):
#模型得到的data大小和源图像不一样 需要resize
data = mask.data[0].cpu().numpy().astype(np.uint8) * 255
rsdata = cv2.resize(data, (img.shape[1], img.shape[0]))
seg_mask[rsdata>0] = (0,255,0)
#图像加权融合 原图权重占0.8 掩码占0.2
res_img = cv2.addWeighted(img,0.8,seg_mask,0.2,0)
cv2.imshow('img',res_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
标记物体轮廓
import cv2
import numpy as np
from ultralytics import YOLO
model = YOLO('model/yolo11s-seg.pt')
img = cv2.imread('../resource/bus.jpg')
#检测 分割人类型
results = model.predict(source=img,classes =[0])
masks = results[0].masks
#所有点坐标信息
points = results[0].masks.xy
for point in points:
point = np.array(point,dtype=np.int32)
cv2.polylines(img,[point],True,(0,255,0),3)
cv2.imshow('img',img)
cv2.waitKey(0)

人体的肢体检测
import cv2
from ultralytics import YOLO
model = YOLO('model/yolo11s-pose.pt')
img = cv2.imread('test.png')
#检测 分割类型
results = model.predict(source=img)
points = results[0].keypoints
for point in points:
xys = point.xy[0].cpu().numpy().astype(int)
for i,xy in enumerate(xys):
x,y = xy
cv2.circle(img,(x,y),5,(0,0,255),-1)
#显示检测到的关节
cv2.putText(img,f'{i}',(x,y),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)
cv2.imshow('img',img)
cv2.waitKey(0)
YOLO本地跟踪
import cv2
from ultralytics import YOLO
from deep_sort_realtime.deepsort_tracker import DeepSort
model = YOLO('model/yolo11m.pt')
names = model.names
cap = cv2.VideoCapture('resource/football.mp4')
while True:
ret, img = cap.read()
if not ret:
break
#对目标进行跟踪 persist 设置持久化 不设置的话id会一直变
#跟踪器有两种 bytetrack 和botsort
results = model.track(source=img,persist = True,tracker= 'bytetrack.yaml')
boxes = results[0].boxes
for box in boxes:
x1, y1, x2, y2 = box.xyxy[0].cpu().numpy().astype(int)
cv2.rectangle(img,(x1,y1),(x2,y2),(255,0,0,2))
#类别
cls_id = int(box.cls[0])
#得分
conf = float(box.conf)
id = int(box.id[0])
cv2.putText(img,f'{id}',(x1,y1 - 10),cv2.FONT_HERSHEY_PLAIN,1,(0,255,0),2)
cv2.imshow('img',img)
cv2.waitKey(25)
模型的转换
把模型转换为 onnx格式 可以提高cpu执行速度 3倍左右
from ultralytics import YOLO
model = YOLO('model/yolo11m.pt')
#转换模型格式
model.export(format='engine')
模型训练
物体分类训练
from ultralytics import YOLO
#物体分类训练
#训练函数需要在main函数中
if __name__ == '__main__':
model = YOLO('model/yolo11s-cls.pt')
#把训练的图片随机的分成训练集和测试集 这样训练的效果更好
#参数1 创建的随机训练集和测试集目录
#参数2 训练的轮数
#参数3 图片的大小
#目录结构 mydata-cls-split
#test
#class1
#物体1
#物体2
#train
#class1
#物体1
#物体2
#epochs 训练多少轮 imgsz 图片的尺寸 224 图片合适尺寸会增加识别率
model.train(data='yologpu/datasets/mydata-cls-split',epochs=30,imgsz = 224)
半自动打标工具
pip install isat-sam
数据打标
对象检测
在线打标网站 makesense https://www.makesense.ai/

上传图片后选左边对象检测 然后点 + 号添加标签 标签添加完后 点按钮start project

使用rect把对象圈起来后 选择标签 打标签完成后 点左上角的Actions ->Export Annotations 最后选择 A zip YOLO格式
实例分割

步骤与前面一样 打标的时候使用多边形 导出的时候选 COCO JSON 格式 这个格式 YOLO不能使用 需要进行单独的转换
图像检测

图像检测的标注选右边

图像检测的打标只需要选一个标签 导出的时候选CSV格式
模型训练 物体检测

#分割脚本
import os
import random
import shutil
# 数据集根目录 图片标签
dataset_dir_images = '../datasets/mydata-detect/images'
dataset_dir_labels = '../datasets/mydata-detect/labels'
# 数据集划分的图像的存放路径
split_data_dir = '../datasets/mydata-detect-split'
# 图像和标签目录
image_dir = os.path.join(split_data_dir, 'images')
label_dir = os.path.join(split_data_dir, 'labels')
# 创建训练、验证和测试目录
train_image_dir = os.path.join(image_dir, 'train')
val_image_dir = os.path.join(image_dir, 'val')
test_image_dir = os.path.join(image_dir, 'test')
train_label_dir = os.path.join(label_dir, 'train')
val_label_dir = os.path.join(label_dir, 'val')
test_label_dir = os.path.join(label_dir, 'test')
for dir_path in [train_image_dir, val_image_dir, test_image_dir, train_label_dir, val_label_dir, test_label_dir]:
if not os.path.exists(dir_path):
os.makedirs(dir_path)
# 获取所有图像文件
image_files = [f for f in os.listdir(os.path.join(dataset_dir_images)) if f.endswith(('.jpg', '.jpeg', '.png'))]
# 打乱图像文件列表
random.shuffle(image_files)
# 计算分割点
train_size = int(0.8 * len(image_files))
val_size = int(0.1 * len(image_files))
# 分割数据
train_files = image_files[:train_size]
val_files = image_files[train_size:train_size + val_size]
test_files = image_files[train_size + val_size:]
# 移动文件到相应目录
def move_files(files, image_dest, label_dest):
for file in files:
image_src = os.path.join(dataset_dir_images, file)
label_file = os.path.splitext(file)[0] + '.txt'
label_src = os.path.join(dataset_dir_labels, label_file)
shutil.copy(image_src, image_dest)
if os.path.exists(label_src):
shutil.copy(label_src, label_dest)
move_files(train_files, train_image_dir, train_label_dir)
move_files(val_files, val_image_dir, val_label_dir)
move_files(test_files, test_image_dir, test_label_dir)
创建自定义的配置文件 xx.yaml
#数据集根目录 该目录是分割后的目录 下面是文件夹 images labels
path: datasets/mydata-detect-split
#训练集图像路径
train: images/train
#验证集图像路径
val: images/val
#测试集图像路径
test: images/test
#类别名称
names:
0: buffalo
1: elephant
2: rhino
3: zebra
开始训练自己标注的数据
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('model/yolo11l.pt')
model.train(
data ='dataset.yaml',
epochs=50,
imgsz=100,
#====== 强力数据增强 ======
hsv_h=0.015,
hsv_s=0.7, # 饱和度
hsv_v=0.4, # 亮度
degrees=15, # 旋转
translate=0.2, # 平移
scale=0.5, # 缩放
fliplr=0.5, # 水平翻转
flipud=0.2, # 垂直翻转
erasing=0.3, # 随机擦除
mosaic=1.0, # 马赛克增强
mixup=0.1) # 混合增强
验证数据
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('model/best1.pt')
model.predict(source='resource/elephant.mp4',show = True)

图像分割训练
图像分割需要把数据转换一次 训练流程和图像分类一样
#模型训练 图像分割
from ultralytics.data.converter import convert_coco
#多边形标注的数据导出格式是COCO的 需要转换成YOLO能用的类型
convert_coco(
labels_dir='seg-labels' ,#标注的标签所在目录
use_segments=True #是否是图像分割
)
服务器部署检测模型
1. 安装Conda
2. 添加系统环境变量
C:\ProgramData\miniconda3
C:\ProgramData\miniconda3\Scripts
C:\ProgramData\miniconda3\Library\bin
3. conda.bat init
4. conda create -n yolo python 创建虚拟环境
5. conda activate yolo
6. pip install python
7. pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu 安装的cpu版本 没有GPU
8. pip install ultralytics YOLO11的包
9. pip install flask
10. python pyhttp.py 启动检测服务
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)