安装命令

根据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  启动检测服务
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐