大家好 我是南木,最近被问得最多的问题之一就是:
“听说YOLO目标检测很厉害,我纯小白,能学会吗?”
“看别人用YOLO检测车牌、识别水果,代码好像很复杂,我多久能写出这样的程序?”
“安装YOLO时总报错,要么缺库要么跑不起来,是不是我太笨了?”

其实,YOLO(You Only Look Once)是目标检测领域最适合新手的模型——它开源代码成熟、操作简单,甚至不用懂原理,照搬模板改几行代码就能跑通。但很多小白卡在“从0到1”的第一步:要么被安装步骤劝退,要么对着代码不知道改哪里,要么跑通了demo却不会自定义检测自己的目标。

今天就把我带50+零基础学员上手YOLO的经验拆解开,从环境搭建到自定义检测,每一步都给“保姆级教程”,甚至连代码里的每个参数代表什么都给你标清楚。按这个节奏走,2周内你不仅能跑通YOLO,还能训练一个属于自己的检测器(比如检测家里的猫、办公室的绿植)。

在文章开始之前 这里给大家整理了一份超级消息的入门资料包 需要的同学扫码自取即可
在这里插入图片描述
在这里插入图片描述

一、先搞懂:YOLO到底能做什么?为什么适合小白?

在开始之前,先花3分钟搞懂“YOLO是什么”,避免盲目跟风。

简单说,YOLO是一种“目标检测算法”——能让计算机在图片或视频里“框出物体”并“说出名字”。比如:

  • 给一张街景图,YOLO能框出“行人”“汽车”“红绿灯”,并在框上标注类别;
  • 给一段宠物视频,YOLO能实时追踪“猫”“狗”的位置,哪怕它们在移动;
  • 你自己拍一张水果拼盘,YOLO能识别出“苹果”“香蕉”“橙子”,还能告诉你每个水果的坐标。

对零基础小白来说,YOLO的优势简直是“量身定制”:

  • 开源代码成熟:官方团队(Ultralytics)把代码封装得像“傻瓜相机”,一行代码就能调用模型,不用自己搭网络;
  • 预训练模型强大:不用从零训练,直接用官方训练好的模型(能识别80类常见物体),拿来就能用;
  • 文档友好:教程、案例、问题解答全中文都能搜到,遇到报错随便一查就有解决方案;
  • 应用场景广:从简单的“检测图片”到复杂的“实时视频分析”,都能靠YOLO实现,成就感来得快。

二、第1天:环境搭建——3步搞定,告别“安装报错”

很多小白卡在第一步:“安装YOLO时各种缺库、版本冲突,怎么都跑不起来”。其实按这3步走,99%的安装问题都能解决。

第1步:装Anaconda(管理环境,避免版本冲突)

为什么用Anaconda?因为YOLO需要的库(如PyTorch、OpenCV)版本兼容性很重要,用Anaconda能隔离不同项目的环境,避免“装A库崩了B库”。

  1. 下载Anaconda:去官网下载对应系统的安装包(Windows选64位,Mac选M1/M2版),一路“Next”安装,记得勾上“Add Anaconda to PATH”(自动添加环境变量,新手必勾)。
  2. 打开终端:Windows用“Anaconda Prompt”,Mac用“终端”,输入以下命令创建并激活YOLO专属环境:
    conda create -n yolo_env python=3.9  # 创建名为yolo_env的环境,Python版本选3.9(兼容性最好)  
    conda activate yolo_env  # 激活环境,命令行前出现(yolo_env)就对了  
    

第2步:装PyTorch(YOLO的“发动机”)

YOLO基于PyTorch框架,必须先装PyTorch。

  1. 打开PyTorch官网,按你的电脑情况选参数:
    • 系统:Windows/macOS/Linux;
    • 安装方式:Pip(比Conda快,适合新手);
    • 计算平台:有NVIDIA显卡选“CUDA 11.8”(训练更快),没有就选“CPU”(能跑但慢点)。
  2. 复制官网生成的命令(比如CPU版):
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu  
    
  3. 粘贴到终端运行,等待安装完成(10-20分钟,国内网络慢可以加清华源,方法附在文末避坑清单)。

第3步:装YOLO库(ultralytics)

YOLO官方团队把代码封装成了ultralytics库,一行命令就能装:

pip install ultralytics  

验证是否安装成功
终端输入python进入Python交互环境,再输入:

from ultralytics import YOLO  
model = YOLO("yolov8n.pt")  # 加载最小的YOLOv8模型  
print("安装成功!")  

没报错就说明搞定了(第一次运行会自动下载模型,耐心等几秒)。

三、第2-3天:跑通第一个YOLO demo——5行代码实现目标检测

别担心,这一步不用写复杂代码,甚至不用懂原理,照搬就能看到效果。目标:用YOLO检测一张图片里的物体。

案例1:检测一张图片(比如街景图)

  1. 准备一张图片:随便找一张包含“人、车、狗”等常见物体的图片,保存为test.jpg(放在你的代码同文件夹下,路径别用中文)。
  2. 写代码(复制粘贴即可):
    # 导入YOLO库  
    from ultralytics import YOLO  
    # 加载预训练模型(yolov8n.pt是最小的模型,适合入门)  
    model = YOLO("yolov8n.pt")  
    # 检测图片(source后面填你的图片路径)  
    results = model(source="test.jpg", show=True)  # show=True表示显示检测结果  
    
  3. 运行代码:会弹出一个窗口,图片里的物体被框住,框上标着类别(如“person”“car”)和置信度(如0.95,越高越可信)。

案例2:检测一段视频(实时显示结果)

  1. 准备一段视频:用手机拍一段10秒的短视频,保存为test.mp4(同样放代码同文件夹)。
  2. 改一行代码:
    results = model(source="test.mp4", show=True)  # 把图片路径换成视频路径  
    
  3. 运行代码:会弹出窗口实时播放视频,画面中的物体被实时框出(比如你拍的视频里有猫,就会框出“cat”)。

代码里的参数是什么意思?(小白必看)

  • YOLO("yolov8n.pt")yolov8n.pt是模型文件,n代表“nano”(最小模型,速度快但精度稍低),还有s(small)、m(medium)等,新手先用ns
  • source="test.jpg":要检测的文件路径,支持图片、视频,甚至可以填0调用电脑摄像头实时检测;
  • show=True:是否显示检测结果窗口,不想显示可以设为False,结果会保存到runs/detect/predict文件夹。

四、第4-5天:搞懂YOLO的“核心逻辑”——不用公式,用类比讲清

跑通demo后,得知道YOLO大概是怎么工作的,不然后面自定义检测会懵。用“找人”的例子类比,5分钟就能懂:

1. 把图片分成“网格”——像给图片画格子

YOLO会把输入图片分成很多小网格(比如80×80),每个网格负责“盯”自己的区域。比如检测一张640×640的图片,分成80×80网格后,每个小格子是8×8像素。

2. 每个网格“猜”有没有物体——像保安查片区

每个网格会预测:“我这个格子里有没有物体?如果有,是什么?在哪个位置?”

  • 有没有物体:用“置信度”表示(0-1,越接近1越可能有物体);
  • 是什么物体:预测属于80类(如“人”“车”)的概率;
  • 在哪个位置:用“边界框”(x,y,w,h)表示物体的中心坐标和宽高。

3. 用“锚框”帮网格“猜得更准”——像给保安发“通缉令模板”

直接让网格预测边界框很难,YOLO会先给每个网格几个“锚框”(提前定义好的矩形框,比如瘦长的、矮胖的),网格只需要在锚框基础上微调,就像给保安发不同尺寸的通缉令模板,方便他们快速圈出嫌疑人。

4. 过滤重复框——像合并重复报告

一张图片里的物体可能被多个网格检测到(比如一个人跨了3个网格),YOLO会用“非极大值抑制(NMS)”去掉重复的框,只保留最准的那个,就像多个保安报告同一个人,最后只保留最详细的那份。

五、第6-7天:自定义检测——教YOLO识别“你的专属目标”

这是最有成就感的一步:让YOLO检测它原本不认识的东西(比如你的宠物猫、收藏的手办)。步骤:准备数据→标注→训练模型→测试。

第1步:准备数据——拍100张图片就够了

YOLO需要“带标签的图片”才能学习(就像学生需要带答案的习题)。

  • 拍什么:比如你想让YOLO检测“咖啡杯”,就拍100张包含咖啡杯的图片(不同角度、光线、背景,越多样越好);
  • 数量:新手练手100-200张足够,每类目标至少50张;
  • 尺寸:不用太大,手机拍的1080×720就可以,太大训练慢。

第2步:标注图片——用LabelImg给物体“画框+起名”

标注就是给每张图片里的目标“画框”并“写名字”(比如“coffee_cup”),推荐用免费工具LabelImg:

  1. 安装LabelImg:
    pip install labelimg  
    
  2. 打开软件:终端输入labelimg,会弹出标注窗口。
  3. 标注步骤:
    • 点“Open Dir”选择你的图片文件夹;
    • 点“Create RectBox”(快捷键W),框住目标(比如咖啡杯);
    • 弹出框里输入类别名(比如“coffee_cup”,小写+下划线,别用中文);
    • 点“Save”保存,会生成一个和图片同名的xml文件(标签文件,记录框的位置和类别)。

小技巧:标注时尽量让框紧贴物体边缘,别漏标也别多标,否则模型会学错。

第3步:整理数据——按YOLO要求放文件

YOLO需要特定的文件夹结构,按下面的格式整理(手动建文件夹,名字别错):

mydataset/  # 你的数据集文件夹  
├─ images/  # 放所有图片  
│  ├─ train/  # 训练集图片(70%,比如70张)  
│  └─ val/    # 验证集图片(30%,比如30张)  
└─ labels/  # 放所有标签xml文件(和images对应)  
   ├─ train/  # 训练集标签(对应train的图片)  
   └─ val/    # 验证集标签(对应val的图片)  

第4步:写配置文件——告诉YOLO“要学什么”

需要写一个yaml文件(比如coffee.yaml),告诉YOLO你的类别数、类别名、数据路径:

# coffee.yaml  
train: ./mydataset/images/train  # 训练集图片路径(根据你的实际路径改)  
val: ./mydataset/images/val      # 验证集图片路径  

nc: 1  # 类别数(只检测咖啡杯,所以是1)  
names: ['coffee_cup']  # 类别名(和标注时一致)  

第5步:训练模型——让YOLO“学习”你的目标

用下面的代码训练,只需改几个参数:

from ultralytics import YOLO  

# 加载基础模型(用yolov8n.pt做预训练,训练更快)  
model = YOLO("yolov8n.pt")  

# 开始训练  
results = model.train(  
    data="coffee.yaml",  # 你的配置文件路径  
    epochs=50,  # 训练轮数(新手50-100足够)  
    imgsz=640,  # 输入图片尺寸(固定640就行)  
    batch=8,    # 每次训练用8张图片(电脑内存小就改4)  
    name="coffee_detector"  # 训练结果保存的文件夹名  
)  

训练时看什么

  • 终端会显示train/box_loss(训练损失,越来越小说明在学习);
  • val/box_acc(验证精度,越来越高说明效果好);
  • 训练结束后,模型保存在runs/detect/coffee_detector/weights/best.pt(最好的模型)。

第6步:测试模型——看看YOLO学会了没

用训练好的模型检测新的咖啡杯图片:

from ultralytics import YOLO  

# 加载自己训练的模型  
model = YOLO("runs/detect/coffee_detector/weights/best.pt")  

# 检测一张新的咖啡杯图片  
results = model(source="new_coffee.jpg", show=True)  

如果图片里的咖啡杯被框住,标着“coffee_cup”,说明你成功了!

六、第8-10天:优化模型——让检测更准、更快

如果你的模型“漏检”(没框出目标)或“误检”(把别的东西当目标),按这3步优化:

1. 增加数据量或优化标注

  • 漏检可能是数据不够:再拍50张不同场景的图片,尤其是模型容易漏的(比如逆光的咖啡杯);
  • 误检可能是标注不准:检查标签文件,把标错的框(比如把杯子柄当杯子)改正确。

2. 调整训练参数

  • 增加训练轮数:epochs=100(让模型学更久);
  • 用更大的模型:把yolov8n.pt换成yolov8s.pt(精度更高,但训练慢点);
  • 加数据增强:训练时加augment=True(让模型学各种变形的目标,更鲁棒):
    model.train(data="coffee.yaml", epochs=100, augment=True)  
    

3. 测试时调整置信度阈值

模型默认置信度≥0.25才显示框,漏检可以调低(比如0.1),误检可以调高(比如0.5):

# 置信度阈值设为0.3(只显示可信度≥30%的框)  
results = model(source="new_coffee.jpg", conf=0.3, show=True)  

七、第11-14天:实战项目——用YOLO做3个“能秀朋友圈”的小应用

学了这么多,用项目巩固一下,推荐3个简单又出效果的实战:

项目1:实时检测电脑摄像头中的目标

调用电脑摄像头,实时检测画面中的物体(比如你举着咖啡杯,镜头里会实时框出):

from ultralytics import YOLO  

model = YOLO("runs/detect/coffee_detector/weights/best.pt")  
# source=0表示调用摄像头,stream=True表示实时流  
results = model(source=0, stream=True, show=True)  

# 循环读取摄像头画面(按q退出)  
for r in results:  
    pass  

项目2:给视频中的目标打“马赛克”

比如给视频里的咖啡杯打马赛克,保护隐私(或做趣味效果):

from ultralytics import YOLO  
import cv2  

model = YOLO("runs/detect/coffee_detector/weights/best.pt")  
video_path = "coffee_video.mp4"  
cap = cv2.VideoCapture(video_path)  

while cap.isOpened():  
    ret, frame = cap.read()  
    if not ret:  
        break  
    # 检测当前帧  
    results = model(frame)  
    # 对每个检测到的框打马赛克  
    for box in results[0].boxes:  
        x1, y1, x2, y2 = map(int, box.xyxy[0])  # 框的坐标  
        # 提取框内区域,缩小再放大(马赛克效果)  
        roi = frame[y1:y2, x1:x2]  
        roi = cv2.resize(roi, (10, 10), interpolation=cv2.INTER_LINEAR)  
        roi = cv2.resize(roi, (x2-x1, y2-y1), interpolation=cv2.INTER_NEAREST)  
        frame[y1:y2, x1:x2] = roi  
    # 显示结果  
    cv2.imshow("Mosaic", frame)  
    if cv2.waitKey(1) & 0xFF == ord('q'):  
        break  

cap.release()  
cv2.destroyAllWindows()  

项目3:统计图片中目标的数量

比如数一张图片里有几个咖啡杯(适合超市盘点、水果计数):

from ultralytics import YOLO  

model = YOLO("runs/detect/coffee_detector/weights/best.pt")  
results = model("many_coffees.jpg")  

# 统计数量(results[0].boxes是所有检测到的框)  
count = len(results[0].boxes)  
print(f"咖啡杯数量:{count}")  

# 显示结果(框上标数量)  
for r in results:  
    im_array = r.plot()  # 生成带框的图片  
    cv2.putText(im_array, f"Count: {count}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)  
    cv2.imshow("Count", im_array)  
    cv2.waitKey(0)  

八、避坑指南:零基础学YOLO最容易踩的8个雷

  1. 图片/视频路径有中文:YOLO对中文路径支持不好,会报错“找不到文件”,解决:文件名和路径全用英文(比如“coffee.jpg”别用“咖啡.jpg”)。
  2. 安装时“找不到torch”:大概率是没激活yolo_env环境,先在终端输入conda activate yolo_env再运行代码。
  3. 训练时“内存不够”batch参数太大,比如电脑内存小就把batch=8改成batch=42
  4. 标注时类别名和配置文件不一致:比如标注写“coffeecup”,配置文件写“coffee_cup”,模型会 confusion,解决:严格保持一致。
  5. 检测时“什么都框不出来”:可能是置信度太高,把conf=0.25调低到0.1试试;或者模型没训练好,重新训练。
  6. 模型“过拟合”:训练集精度90%,但测试新图片完全不准,解决:增加数据多样性,或训练时加dropout=True
  7. 下载模型太慢yolov8n.pt等模型在国外服务器,国内下载慢,解决:用迅雷手动下载(网上搜“yolov8n.pt 下载”),放到~/.ultralytics/weights文件夹。
  8. 忘记保存训练结果:训练完的模型在runs文件夹,别删!换电脑可以复制best.pt文件,直接加载就能用。

很多人学YOLO时总担心“我不懂卷积神经网络,能学会吗?”——其实完全不用。就像你不用懂发动机原理也能开车,YOLO的开源代码已经把复杂的网络封装好了,你只需要知道“改哪个参数能让模型检测我的目标”就行。

我带的一个学员,纯零基础,连Python循环都不熟,按这篇教程一步步做,2周后训练出一个“检测多肉植物”的模型,还把视频发到朋友圈,被朋友追着问“怎么做到的”。

学习目标检测的最快方式,是“先跑通,再理解”。今天就从安装环境开始,明天跑通第一个demo,下周训练一个属于你的检测器——当YOLO第一次准确框出你家宠物时,那种成就感,会让你彻底爱上这种“让机器看懂世界”的感觉。

在这里插入图片描述

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐