YOLOv8 是一个多功能的计算机视觉框架,支持多种任务,包括分类(Classify)、检测(Detect)、旋转目标检测(OBB)、姿态估计(Pose)、实例分割(Segment)。
1. Classify(图像分类)
• 特点 图像分类任务是将整张图像归类到预定义的类别中。
• 输出 类别标签和置信度分数。
• 适用场合 适用于场景识别、物体类别判断等任务。
• 用法:
from ultralytics import YOLO
# 加载预训练的分类模型
model = YOLO('yolov8n-cls.pt')
# 进行推理
results = model('path/to/image.jpg')
• 返回值内容
probs:一个形状为 (num_classes,) 的张量,包含了输入图像属于每个类别的概率。
names:一个字典,将类别索引映射到类别名称。
for result in results:
probs = result.probs
names = result.names
predicted_class_index = probs.argmax()
predicted_class_name = names[predicted_class_index]
confidence = probs[predicted_class_index].item()
print(f"Predicted class: {predicted_class_name}, Confidence: {confidence:.2f}")
• 特点
任务单一:专注于将输入图像分类到预定义的类别中,输出一个类别标签和对应的置信度。
轻量级设计:模型结构相对简单,推理速度快,适合对大量图像进行快速分类。
2. Detect(目标检测)
• 特点 检测图像中的物体,并返回每个物体的边界框、类别标签和置信度。
• 适用场合 安防监控、自动驾驶等场景。
• 用法:
from ultralytics import YOLO
# 加载预训练的目标检测模型
model = YOLO('yolov8n.pt')
# 对单张图像进行目标检测
results = model('path/to/image.jpg')
# 对视频文件进行目标检测
results = model('path/to/video.mp4')
• 返回值内容
boxes:一个 Boxes 对象,包含以下属性:
xyxy:形状为 (num_detections, 4) 的张量,每个检测框的坐标 (x1, y1, x2, y2),表示左上角和右下角的坐标。
cls:形状为 (num_detections,) 的张量,每个检测框的类别索引。
conf:形状为 (num_detections,) 的张量,每个检测框的置信度。
names:一个字典,将类别索引映射到类别名称。
for result in results:
boxes = result.boxes
names = result.names
for box in boxes:
xyxy = box.xyxy[0].cpu().numpy()
cls = int(box.cls.item())
conf = box.conf.item()
class_name = names[cls]
print(f"Class: {class_name}, Confidence: {conf:.2f}, Bbox: {xyxy}")
3. OBB(旋转目标检测)
• 特点 检测图像中的旋转目标,并返回旋转后的边界框。
• 适用场合 适用于航空图像、卫星图像等场景,以及文字和特定标志检测,其中目标可能呈现旋转状态。
• 用法:
from ultralytics import YOLO
# 加载预训练的旋转目标检测模型
model = YOLO('yolov8n-obb.pt')
# 进行推理
results = model('path/to/image.jpg')
• 返回值内容
旋转边界框: [x, y, w, h, angle] 格式,表示旋转后的边界框。
类别标签:检测到的物体类别。
置信度分数:模型对该检测的置信度。
4. Pose(姿态估计)
• 特点 检测图像中物体的关键点位置。
• 适用场合 常用于人体姿态估计、动物姿态分析等场景。
用于检测图像或视频中人体的关键点位置,如关节、面部特征点等,可用于动作分析、姿态识别等领域。能够同时检测多个人体的姿态,并输出每个关键点的坐标。
• 用法:
from ultralytics import YOLO
# 加载预训练模型
model = YOLO("yolov8n-pose.pt") # 使用姿态估计模型
# 预测图像
results = model("path/to/image.jpg")
• 预测返回值
关键点坐标: [x, y] 格式,表示关键点的位置。
置信度分数:模型对每个关键点的置信度。
for result in results:
keypoints = result.keypoints
boxes = result.boxes
names = result.names
for i in range(len(boxes)):
person_keypoints = keypoints.xy[i].cpu().numpy()
person_conf = keypoints.conf[i].cpu().numpy()
print(f"Person {i} keypoints: {person_keypoints}")
print(f"Person {i} keypoints confidence: {person_conf}")
5. Segment(实例分割)
• 特点 检测图像中的物体,并为每个物体生成分割掩码。不仅能够检测目标的边界框和类别,还能够区分同一类别中的不同实例,精确地分割出每个目标的像素级掩码,,如医学图像分析、自动驾驶等。还
• 适用场合 适用于需要对目标进行精细分割的场景,如医学图像分割、自动驾驶中的道路分割等场景。
• 用法:
from ultralytics import YOLO
# 加载预训练的实例分割模型
model = YOLO('yolov8n-seg.pt')
# 进行推理
results = model('path/to/image.jpg')
• 预测返回值
boxes:一个 Boxes 对象,包含每个检测框的坐标、类别索引和置信度。
masks:一个 Masks 对象,包含以下属性:
data:形状为 (num_detections, height, width) 的张量,每个检测实例的二进制掩码。
xy:每个掩码的多边形坐标。
names:一个字典,将类别索引映射到类别名称。
for result in results:
boxes = result.boxes
masks = result.masks
names = result.names
for i in range(len(boxes)):
cls = int(boxes.cls[i].item())
conf = boxes.conf[i].item()
mask = masks.data[i].cpu().numpy()
class_name = names[cls]
print(f"Class: {class_name}, Confidence: {conf:.2f}")