YOLO-v8.3快速开始:跟着demo代码,轻松实现物体检测
YOLO-v8.3快速开始:跟着demo代码,轻松实现物体检测
想试试用AI识别图片里的猫猫狗狗、汽车行人吗?YOLO-v8.3就是你的最佳选择。作为当前最流行的目标检测模型之一,YOLO-v8.3不仅速度快、精度高,而且上手特别简单。今天,我就带你从零开始,用官方demo代码快速跑通一个完整的物体检测流程,让你在10分钟内看到实际效果。
YOLO(You Only Look Once)是一种非常高效的物体检测算法,它的核心思想是把整个检测任务当成一个回归问题来处理,只需要“看一次”图片就能直接预测出所有物体的位置和类别。从2015年诞生到现在,YOLO已经发展到了第八代,而v8.3版本在易用性和性能上都有了很大提升。最棒的是,现在有了预置好的镜像环境,你不需要折腾复杂的Python环境配置,直接就能开始使用。
这篇文章就是为初学者准备的快速入门指南。我会手把手带你完成环境启动、代码运行、结果查看的全过程,让你真正体验到AI物体检测的魅力。
1. 环境准备:一键启动YOLO-v8.3
1.1 镜像环境介绍
YOLO-v8.3镜像是一个已经配置好的深度学习环境,里面包含了运行YOLO所需的所有软件和库。你不需要自己安装Python、PyTorch这些复杂的依赖,镜像已经帮你全部搞定了。
这个镜像主要包含以下组件:
- PyTorch深度学习框架:这是YOLO-v8.3运行的基础,支持GPU加速
- Ultralytics YOLOv8库:官方提供的Python包,包含了训练、推理的所有功能
- OpenCV图像处理库:用于图片的读取、显示和保存
- Jupyter Notebook:一个网页版的交互式编程环境,特别适合学习和调试
- 常用工具:NumPy、Pandas、Matplotlib等数据分析可视化工具
简单来说,你拿到的是一个开箱即用的AI开发环境,专注于物体检测任务。
1.2 启动镜像的两种方式
镜像提供了两种使用方式,你可以根据自己的习惯选择:
方式一:使用Jupyter Notebook(推荐给初学者)
Jupyter Notebook就像是一个在浏览器里运行的Python笔记本,你可以一段一段地执行代码,随时看到结果,特别适合学习和实验。
启动步骤很简单:
- 启动镜像后,它会自动运行Jupyter服务
- 在浏览器中打开提示的链接(通常是
http://你的IP地址:8888) - 输入登录密码(如果有的话)
- 你就进入了Jupyter的界面,可以新建Python笔记本开始写代码了
方式二:使用SSH终端连接
如果你习惯用命令行操作,或者需要运行一些后台任务,SSH方式会更适合。
使用方法:
- 通过SSH客户端(比如PuTTY、Terminal)连接到镜像
- 输入用户名和密码登录
- 你就进入了一个Linux终端,可以直接执行Python脚本
两种方式都能完成我们的目标,我个人更推荐初学者用Jupyter,因为它的交互性更好,出错时更容易调试。
2. 快速上手:运行第一个检测demo
2.1 进入项目目录
无论你选择哪种方式,第一步都是进入YOLO的工作目录。这个目录里已经准备好了所有必要的文件。
打开终端或Jupyter,执行这个命令:
cd /root/ultralytics执行后,你可以用pwd命令确认当前目录:
pwd # 应该显示:/root/ultralytics再用ls看看目录里有什么:
ls -la你会看到一些Python文件、配置文件等。这个/root/ultralytics目录就是YOLO-v8.3的主工作区,我们所有的操作都在这里进行。
2.2 理解demo代码结构
官方提供了一个非常简洁的demo代码,只有几行,但包含了YOLO-v8.3的核心功能。我们先来看看这段代码在做什么:
from ultralytics import YOLO # 加载一个预训练的YOLOv8n模型 model = YOLO("yolov8n.pt") # 显示模型信息(可选) model.info() # 在COCO8示例数据集上训练100个epoch results = model.train(data="coco8.yaml", epochs=100, imgsz=640) # 用YOLOv8n模型对'bus.jpg'图片进行推理 results = model("path/to/bus.jpg")我来解释一下每一行代码的作用:
- 导入YOLO类:从ultralytics库导入YOLO这个核心类
- 加载预训练模型:
yolov8n.pt是一个已经训练好的小模型(nano版本),它会自动从网上下载 - 查看模型信息:这行是可选的,可以看看模型有多少参数、用了什么结构
- 训练模型:在示例数据集上训练100轮,学习如何检测物体
- 进行推理:用训练好的模型对一张公交车图片进行检测
是不是很简单?接下来我们就一步步执行这些代码。
2.3 执行代码并查看结果
在Jupyter中,你可以新建一个Python笔记本,然后一个单元格一个单元格地执行代码。在终端中,你可以创建一个Python文件,然后运行它。
第一步:加载模型
from ultralytics import YOLO # 加载模型 - 第一次运行时会自动下载 model = YOLO("yolov8n.pt") print("模型加载成功!")执行这行代码时,如果这是你第一次运行,它会自动从网上下载yolov8n.pt这个预训练模型文件。下载速度取决于你的网络,通常几十秒到几分钟就能完成。
下载完成后,你会看到类似这样的输出:
Downloading https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt to 'yolov8n.pt'... 100%|████████████████████████████████████████| 6.23M/6.23M [00:03<00:00, 1.72MB/s] 模型加载成功!第二步:查看模型信息(可选)
# 查看模型详细信息 model.info()这会显示模型的结构、参数数量等信息。对于初学者来说,你可以先跳过这步,直接进入下一步。
第三步:训练模型(快速体验)
原demo中训练100轮是为了完整演示,但对于快速体验来说,我们可以减少训练轮数,这样能更快看到结果:
# 快速训练10轮,先体验一下 results = model.train(data="coco8.yaml", epochs=10, imgsz=640)coco8.yaml是一个小型的示例数据集配置文件,里面只有8张图片,专门用于快速测试。训练10轮大概需要1-2分钟(取决于你的硬件)。
训练过程中,你会看到实时的进度条和损失值变化:
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 1/10 2.14G 1.234 1.567 1.089 32 640: 100%|██████████| 1/1 [00:02<00:00, 2.34s/it]这些数字反映了模型的学习情况,数值在下降说明模型在变好。
第四步:用图片进行推理测试
训练完成后,我们可以用模型来检测图片中的物体。镜像里已经准备了一些示例图片,我们可以直接用:
# 使用训练好的模型检测图片 results = model("/root/ultralytics/bus.jpg") # 如果你没有bus.jpg,也可以用其他图片 # results = model("/root/ultralytics/zidane.jpg")执行这行代码后,模型会对图片进行分析,找出里面的物体并标出位置。
3. 查看和保存检测结果
3.1 可视化检测结果
代码运行完了,但我们怎么看到检测结果呢?YOLO提供了几种查看结果的方式。
方式一:直接显示图片
from PIL import Image import matplotlib.pyplot as plt # 获取检测结果 results = model("/root/ultralytics/bus.jpg") # 显示结果 for r in results: # 将结果绘制到图片上 im_array = r.plot() # 这个函数会自动把检测框和标签画到图片上 im = Image.fromarray(im_array[..., ::-1]) # 转换颜色格式(BGR转RGB) # 在Jupyter中显示图片 plt.figure(figsize=(10, 10)) plt.imshow(im) plt.axis('off') # 不显示坐标轴 plt.show()运行这段代码,你就能看到一张图片,上面用方框标出了检测到的物体,每个方框旁边还有标签和置信度。
比如检测公交车图片,你可能会看到:
- 几个"person"(人)的方框,置信度大概0.8-0.9
- 一个"bus"(公交车)的大方框,置信度可能0.95以上
- 可能还有"car"(小汽车)、"traffic light"(交通灯)等
方式二:查看详细的检测数据
如果你想知道更详细的信息,比如每个物体的具体坐标、置信度等,可以这样查看:
# 获取详细的检测结果 results = model("/root/ultralytics/bus.jpg") # 遍历每张图片的结果(这里只有一张) for result in results: print("检测到的物体数量:", len(result.boxes)) # 如果有检测到物体 if len(result.boxes) > 0: print("\n详细信息:") print("类别标签:", result.boxes.cls) # 物体类别 print("置信度:", result.boxes.conf) # 检测置信度 print("边界框坐标:", result.boxes.xyxy) # 方框坐标[x1, y1, x2, y2] # 你也可以获取每个物体的具体信息 for i in range(len(result.boxes)): print(f"\n物体 {i+1}:") print(f" 类别: {result.names[int(result.boxes.cls[i])]}") print(f" 置信度: {result.boxes.conf[i]:.3f}") print(f" 位置: {result.boxes.xyxy[i]}")这会输出类似这样的信息:
检测到的物体数量: 5 详细信息: 类别标签: tensor([0., 0., 5., 3., 0.]) 置信度: tensor([0.912, 0.856, 0.943, 0.789, 0.901]) 边界框坐标: tensor([[100.2, 150.5, 200.3, 300.8], [250.1, 180.4, 320.5, 280.9], ...]) 物体 1: 类别: person 置信度: 0.912 位置: [100.2, 150.5, 200.3, 300.8]3.2 保存检测结果
看到检测效果后,你可能想保存这些结果。YOLO提供了几种保存方式:
保存带标注的图片
# 保存检测结果图片 results = model("/root/ultralytics/bus.jpg") # 方法1:直接保存 results[0].save(filename="detection_result.jpg") print("结果已保存为 detection_result.jpg") # 方法2:保存到指定目录 results[0].save(save_dir="./results/") print("结果已保存到 ./results/ 目录")保存检测数据(JSON格式)
如果你需要进一步处理检测结果,可以保存为JSON文件:
import json results = model("/root/ultralytics/bus.jpg") # 转换为字典格式 detections = [] for i, box in enumerate(results[0].boxes): detection = { "id": i + 1, "class": results[0].names[int(box.cls)], "confidence": float(box.conf), "bbox": box.xyxy[0].tolist() # [x1, y1, x2, y2] } detections.append(detection) # 保存为JSON文件 with open("detection_results.json", "w") as f: json.dump(detections, f, indent=2) print("检测数据已保存为 detection_results.json")这样你就得到了一个结构化的数据文件,可以用在其他程序中。
4. 试试你自己的图片
4.1 上传和检测自定义图片
用示例图片跑通后,你肯定想试试自己的图片。方法很简单:
第一步:上传图片到镜像
如果你用Jupyter,可以直接在界面中上传:
- 在Jupyter文件浏览器中,找到
/root/ultralytics目录 - 点击"Upload"按钮
- 选择你的图片文件
如果你用SSH,可以用scp命令从本地电脑上传:
# 在本地终端执行(不是在镜像里) scp -P 2222 /path/to/your/image.jpg root@你的镜像IP:/root/ultralytics/第二步:检测你的图片
假设你上传的图片叫my_photo.jpg,检测代码和之前一样:
# 检测你自己的图片 my_results = model("/root/ultralytics/my_photo.jpg") # 显示结果 for r in my_results: im_array = r.plot() im = Image.fromarray(im_array[..., ::-1]) plt.figure(figsize=(12, 8)) plt.imshow(im) plt.axis('off') plt.show() # 保存结果 r.save(filename="my_photo_detected.jpg")试试不同类型的图片:
- 街景照片:看看能检测出多少人、车、交通标志
- 室内照片:找找椅子、桌子、电脑等物体
- 动物照片:检测猫、狗、鸟等
4.2 使用不同的预训练模型
YOLO-v8.3提供了多个预训练模型,大小和精度不同,适合不同的需求:
# 尝试不同的模型 models_to_try = { "超轻量版": "yolov8n.pt", # 最小最快,精度较低 "小模型": "yolov8s.pt", # 平衡型,推荐大多数场景 "中模型": "yolov8m.pt", # 精度更高,速度稍慢 "大模型": "yolov8l.pt", # 高精度,速度较慢 "超大模型": "yolov8x.pt" # 最高精度,速度最慢 } # 测试不同模型的效果 for name, model_path in models_to_try.items(): print(f"\n正在测试 {name} ({model_path})...") # 加载模型 test_model = YOLO(model_path) # 检测同一张图片 import time start_time = time.time() results = test_model("/root/ultralytics/bus.jpg") end_time = time.time() # 统计结果 num_objects = len(results[0].boxes) inference_time = end_time - start_time print(f" 检测到 {num_objects} 个物体") print(f" 推理时间: {inference_time:.3f} 秒") # 显示前3个物体的类别 if num_objects > 0: print(" 检测到的物体类型:", end=" ") for i in range(min(3, num_objects)): cls_id = int(results[0].boxes.cls[i]) print(results[0].names[cls_id], end=", ") print("...")运行这段代码,你会看到不同模型在速度和精度上的差异。一般来说:
- 如果需要实时检测(比如视频监控),选
yolov8n或yolov8s - 如果对精度要求高(比如医疗影像),选
yolov8l或yolov8x - 大多数日常应用,
yolov8m是不错的选择
5. 常见问题与解决技巧
5.1 模型下载太慢怎么办?
第一次运行YOLO("yolov8n.pt")时,需要从网上下载模型文件。如果下载速度慢,可以试试这些方法:
方法一:使用国内镜像源
在运行代码前,先设置环境变量:
import os # 设置使用国内镜像 os.environ['YOLO_MODEL_DIR'] = '/root/.cache/yolo' # 指定缓存目录 # 如果你知道其他下载源,也可以手动指定 # 但通常YOLO会自动选择最快的源方法二:手动下载模型文件
如果自动下载失败,可以手动下载:
- 在浏览器中打开:
https://github.com/ultralytics/assets/releases - 找到
yolov8n.pt文件并下载 - 上传到镜像的
/root/.cache/ultralytics/hub目录 - 重新运行代码
方法三:使用已经下载好的模型
如果你在别的机器上已经下载过,可以直接复制过来:
# 假设模型文件在本地 scp -P 2222 yolov8n.pt root@你的镜像IP:/root/.cache/ultralytics/hub/5.2 内存或显存不足怎么办?
如果运行时报错"CUDA out of memory"或"Killed",说明内存不够了。可以这样解决:
降低图片分辨率
# 默认是640x640,可以调小 results = model("your_image.jpg", imgsz=320) # 使用320x320使用更小的模型
# 用nano或small版本 model = YOLO("yolov8n.pt") # 最小版本 # 或 model = YOLO("yolov8s.pt") # 小版本批量处理时减少batch size
# 如果是训练时内存不足 results = model.train(data="coco8.yaml", epochs=10, imgsz=640, batch=4) # 默认是165.3 如何检测视频而不是图片?
YOLO-v8.3也支持视频检测,用法和图片类似:
# 检测视频文件 video_results = model("/path/to/your/video.mp4") # 保存带检测结果的视频 video_results[0].save(filename="output_video.mp4") # 如果你想实时查看检测过程 for frame_results in video_results: # 每一帧的处理 im_array = frame_results.plot() # 显示或保存这一帧对于摄像头实时检测:
# 检测摄像头(0表示默认摄像头) camera_results = model(source=0, show=True) # show=True会显示实时画面 # 按'q'键退出5.4 只想检测特定类型的物体怎么办?
YOLO默认会检测80种常见物体(COCO数据集类别)。如果你只想检测其中几种,可以这样设置:
# 只检测人和车 results = model("your_image.jpg", classes=[0, 2]) # 0=person, 2=car # 查看所有可检测的类别 model = YOLO("yolov8n.pt") print("所有可检测的类别:") for i, name in enumerate(model.names.values()): print(f"{i}: {name}") # 常用类别索引: # 0: person(人) # 1: bicycle(自行车) # 2: car(汽车) # 3: motorcycle(摩托车) # 5: bus(公交车) # 7: truck(卡车) # 16: dog(狗) # 17: cat(猫)6. 总结
通过今天的快速上手,你应该已经掌握了YOLO-v8.3的基本使用方法。我们来回顾一下关键步骤:
- 环境启动:使用预置的YOLO-v8.3镜像,无需复杂配置
- 模型加载:一行代码
YOLO("yolov8n.pt")就能加载预训练模型 - 图片检测:用
model("图片路径")检测物体,结果自动包含边界框和标签 - 结果查看:可以用
plot()方法可视化,也可以直接获取检测数据 - 自定义使用:可以检测自己的图片、视频,甚至摄像头实时画面
YOLO-v8.3的强大之处在于它的简单易用。你不需要理解复杂的深度学习原理,只需要几行代码就能实现专业的物体检测功能。无论是想做个智能相册自动分类照片,还是监控视频中的人流统计,甚至是无人机视觉导航,YOLO都能提供很好的基础。
如果你想让模型检测更特定的物体(比如某种工业零件、某种珍稀动物),下一步可以学习如何用自己的数据训练模型。不过对于大多数应用场景,使用预训练模型已经能解决80%的问题了。
最重要的是,现在就开始动手试试吧!上传几张你自己的照片,看看YOLO能检测出什么。实践是最好的学习方式,遇到问题就回头看看这篇文章的对应章节,或者在网上搜索相关解决方案。物体检测的世界很有趣,祝你玩得开心!
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
