基于YOLOv5的人物动物识别实战:从环境配置到模型部署全流程

发布时间:2026/10/30 15:53:52
基于YOLOv5的人物动物识别实战:从环境配置到模型部署全流程 简介这是一套面向计算机视觉初学者与算法开发者的YOLOv5目标检测实战资源聚焦人物与动物识别场景可用于视频监控、图像分析等方向的快速验证与二次开发。压缩包共64个文件约20.2MB以24个Python脚本为核心涵盖模型定义、训练、推理与评估流程另含14个pyc编译文件、10个txt标签与配置、5个xml标注、3个md说明文档以及pth权重、jpg/png效果图、ttf字体等辅助文件目录结构清晰便于按模块查阅。资源围绕YOLOv5架构、数据集构建、模型训练、源码解析、部署与mAP等评估指标展开配有可直接运行的代码与数据读者能借此理解单阶段检测的边界框与类别预测逻辑掌握数据增强、超参数配置、权重保存加载及常见问题排查思路。目前已有2872人学习下载适合希望从零跑通人物动物识别项目、积累工程经验的学习者参考。1. 基于 YOLOv5 的人物动物识别一套能直接跑通的检测方案长什么样你手头可能有一批监控截图、红外相机回传的图片或者只是想快速验证一个想法能不能让模型自动把画面里的人、猫、狗、鸟、马这些目标框出来。基于 YOLOv5 的目标检测人物动物识别就是干这件事的。它属于单阶段目标检测输入一张图输出若干带类别和置信度的边界框。相比 Transformer 目标检测那类方案YOLOv5 在中小数据集上收敛快、显存占用低一张 8G 显存的卡就能训。这套方案适合谁适合想快速落地人物动物识别、手里有几百到几千张标注图、希望当天就能看到检测结果的工程师和学生。代码和数据齐备的情况下从环境配置到跑出第一张推理图通常不超过两小时。2. 人物动物识别为什么选 YOLOv5 而不是别的检测器2.1 单阶段检测的取舍速度、精度与显存的三方平衡目标检测大致分两条路线两阶段和单阶段。两阶段先出候选区域再分类精度高但慢单阶段直接回归框和类别速度快。YOLOv5 属于单阶段里工程化做得比较成熟的一支。它的骨干网络用 CSPDarknet颈部用 PANet 做多尺度特征融合头部输出三个尺度的预测。对人物动物识别这个任务来说目标尺度跨度大——远处的人可能只有几十像素近处的狗可能占半张图——多尺度输出正好覆盖这个范围。选 YOLOv5 而不是 YOLOv3 或 YOLOv8理由很实际。YOLOv3 的 Darknet 框架配置繁琐改个数据增强都要动 cfg 文件YOLOv8 虽然更新但部分老教程和预训练权重对不上新手容易在版本兼容上翻车。YOLOv5 的仓库结构清晰data、models、utils 各司其职配置文件用 YAML改起来直观。另一个关键点是预训练权重。YOLOv5s 在 COCO 上预训练过COCO 本身就包含 person、cat、dog、bird、horse 等类别和人物动物识别高度重合。用这个权重做迁移学习收敛速度比从零训练快得多。显存方面YOLOv5s 在 640×640 输入下batch size 设 16 大概占 6G 显存。如果只有 4G 显存把 batch 降到 8或者用 YOLOv5n。这一点比 Transformer 目标检测友好太多后者动辄需要 16G 以上。2.2 从 COCO 预训练权重到人物动物识别的迁移路径COCO 数据集有 80 类人物动物识别通常只关心其中几类。直接拿 COCO 权重推理会把画面里的车、椅子也框出来。迁移学习的做法是保留骨干和颈部的权重替换检测头的分类分支让输出类别数等于你的数据集类别数。具体操作上YOLOv5 的模型配置文件里有一个nc参数控制类别数。比如你只检测 person、cat、dog、bird 四类就把nc改成 4。检测头的卷积层输出通道会随之变化加载预训练权重时这部分层会因为形状不匹配而被跳过其余层正常加载。YOLOv5 的train.py里用--weights指定预训练权重加载时会自动处理这种不匹配打印出哪些层被跳过。这是它工程化做得好的一个体现。迁移路径分两步先冻结骨干训练几轮让检测头适应新类别再解冻全部层做微调。冻结训练时学习率可以设大一点比如 0.01解冻后降到 0.001 或更低。如果数据集很小比如每类只有一两百张冻结训练能有效防止过拟合。2.3 环境配置conda 建环境与依赖安装的最小命令集环境配置是新手第一个坎。常见做法是用 conda 建一个独立环境避免和系统里的包冲突。下面这套命令在 Linux 和 Windows 的 conda 下都能跑。# 创建 Python 3.8 环境YOLOv5 对 3.8/3.9 兼容最好 conda create -n yolo5 python3.8 -y conda activate yolo5 # 安装 PyTorch根据你的 CUDA 版本选对应命令 # CUDA 11.3 用下面这行 pip install torch1.12.1cu113 torchvision0.13.1cu113 --extra-index-url https://download.pytorch.org/whl/cu113 # 安装 YOLOv5 依赖 pip install -r requirements.txt逻辑说明先建环境再装 PyTorch是因为 requirements.txt 里可能包含 torch但版本不一定匹配你的 CUDA。手动指定 torch 版本能避免装成 CPU 版。参数说明python3.8是版本号-y表示自动确认。CUDA 版本用nvcc --version查如果显示 11.3 就用 cu113显示 11.6 就用 cu116。装完用python -c import torch; print(torch.cuda.is_available())验证输出 True 才算成功。提示如果 pip 安装 torch 太慢可以换国内镜像源但镜像源里的 torch 版本可能不全建议只对普通包用镜像torch 还是从官方源装。3. 人物动物识别数据集怎么准备与标注3.1 数据采集从公开数据集到自建图片库的取舍人物动物识别的数据来源有三类。第一类是公开数据集比如 COCO、VOC 里筛选出 person、cat、dog、bird 等类别。第二类是网络爬取用关键词搜图但要注意版权和图片质量。第三类是自建用手机或相机拍或者从监控视频抽帧。公开数据集的优点是标注质量高、格式规范缺点是场景和你的实际场景可能差距大。比如 COCO 里的猫多是室内宠物猫你要检测的是野外流浪猫分布就不一样。常见做法是公开数据集打底再补一批自己场景的图。比例大概 7:3 或 6:4。自建图片库要注意几点图片分辨率不要差异太大否则 resize 后目标变形同一类目标要有不同角度、光照、遮挡的样本负样本也要有比如空场景图让模型学会不误检。数量上每类至少 300 张低于这个数模型很难学到稳定特征。3.2 标注格式VOC 转 YOLO 的脚本与四个边界坑YOLO 用的标注格式是每张图一个 txt每行类别索引 中心x 中心y 宽 高坐标都归一化到 0-1。如果你用 LabelImg 标注默认存的是 VOC 格式的 XML。转换脚本如下。import xml.etree.ElementTree as ET import os # 类别映射索引从 0 开始 classes [person, cat, dog, bird] def convert(size, box): # size 是图片宽高box 是 xmin,ymin,xmax,ymax dw, dh 1.0 / size[0], 1.0 / size[1] x (box[0] box[1]) / 2.0 y (box[2] box[3]) / 2.0 w box[1] - box[0] h box[3] - box[2] return x * dw, y * dh, w * dw, h * dh def convert_annotation(xml_path, out_path): tree ET.parse(xml_path) root tree.getroot() size root.find(size) w int(size.find(width).text) h int(size.find(height).text) with open(out_path, w) as f: for obj in root.iter(object): cls obj.find(name).text if cls not in classes: continue cls_id classes.index(cls) bndbox obj.find(bndbox) box (float(bndbox.find(xmin).text), float(bndbox.find(xmax).text), float(bndbox.find(ymin).text), float(bndbox.find(ymax).text)) bb convert((w, h), box) f.write(f{cls_id} { .join([str(round(a, 6)) for a in bb])}\n)逻辑说明convert函数把 VOC 的左上右下坐标转成 YOLO 的中心点加宽高再除以图片宽高做归一化。convert_annotation遍历 XML 里的 object跳过不在类别表里的目标。参数说明classes列表的顺序要和训练时 data.yaml 里的 names 顺序一致否则类别会错位。round(a, 6)保留六位小数够用且不占空间。四个边界坑第一xmin 可能大于 xmax标注时手抖拖反了转换前要检查并交换。第二坐标可能超出图片边界比如 xmax 大于图片宽度要 clamp 到边界内。第三图片文件名和 XML 文件名不一致导致找不到对应关系建议用同一套命名。第四类别名大小写不一致Person 和 person 会被当成两类统一转小写。3.3 data.yaml 的五个字段与路径写法YOLOv5 用 data.yaml 描述数据集。五个关键字段path是数据集根目录train和val是训练集和验证集的图片路径nc是类别数names是类别名列表。path: /home/user/datasets/person_animal train: images/train val: images/val nc: 4 names: [person, cat, dog, bird]路径写法有个坑train和val是相对path的路径不是绝对路径。YOLOv5 会自动把images替换成labels去找标注文件。所以你的目录结构应该是images/train放图labels/train放 txt。如果标注文件和图片不在对应目录训练时会报找不到标签。4. 训练人物动物识别模型的参数怎么设4.1 从 yolov5s.pt 开始迁移学习的三个必调参数训练命令的核心是train.py。下面是一条能直接跑的迁移学习命令。python train.py \ --weights yolov5s.pt \ --data data/person_animal.yaml \ --epochs 100 \ --batch-size 16 \ --img-size 640 \ --freeze 10 \ --lr0 0.01 \ --device 0逻辑说明--weights yolov5s.pt加载 COCO 预训练权重--data指定数据配置--freeze 10冻结前 10 层骨干网络的前半部分--lr0是初始学习率。参数说明--epochs设 100 是常见起点数据集小可以降到 50数据集大可以加到 300。--batch-size根据显存调8G 显存设 164G 设 8。--img-size设 640如果目标很小可以设 1280但显存翻倍。--device 0表示用第一块 GPUCPU 训练去掉这个参数但会很慢。三个必调参数--freeze、--lr0、--batch-size。冻结层数越多训练越快但精度上限越低。学习率太大 loss 震荡太小收敛慢。batch size 影响梯度稳定性太小 loss 波动大。4.2 冻结训练与解冻微调两阶段学习率怎么切冻结训练跑完后要做解冻微调。做法是去掉--freeze把学习率降到原来的十分之一左右。python train.py \ --weights runs/train/exp/weights/best.pt \ --data data/person_animal.yaml \ --epochs 50 \ --batch-size 16 \ --img-size 640 \ --lr0 0.001 \ --device 0逻辑说明--weights指向冻结训练得到的最佳权重--lr0降到 0.001。解冻后所有层都参与更新模型能更精细地适应你的数据分布。参数说明解冻训练的 epoch 不用太多50 左右够太多会过拟合。如果验证集 loss 开始上升就提前停。两阶段的好处是冻结阶段快速让检测头适应新类别解冻阶段微调骨干特征。如果直接解冻训练小数据集上容易过拟合因为骨干的通用特征被破坏得太快。4.3 训练过程看什么loss 曲线、mAP 与过拟合信号训练时终端会打印每个 epoch 的 box_loss、obj_loss、cls_loss 和 mAP。box_loss 是边界框回归损失obj_loss 是目标置信度损失cls_loss 是分类损失。三个 loss 都应该下降如果某个震荡不降检查对应的问题。mAP0.5 是 IoU 阈值 0.5 时的平均精度是主要指标。mAP0.5:0.95 更严格。人物动物识别任务mAP0.5 到 0.85 以上算不错到 0.9 以上算好。如果训练集 mAP 高但验证集低是过拟合加数据增强或减模型复杂度。如果两者都低是欠拟合加 epoch 或加数据。YOLOv5 会把训练过程存到 runs/train/exp 下包括 loss 曲线图、混淆矩阵、验证集预测图。混淆矩阵能看出哪两类容易混比如 cat 和 dog 如果经常互错说明特征区分度不够要补这两类的难样本。5. 推理、部署与避坑排查5.1 用 detect.py 跑通第一张推理图训练完得到 best.pt用 detect.py 推理。python detect.py \ --weights runs/train/exp/weights/best.pt \ --source test_images/ \ --img-size 640 \ --conf-thres 0.25 \ --device 0逻辑说明--source可以是单张图、文件夹、视频或摄像头编号。--conf-thres是置信度阈值低于这个值的框不显示。参数说明--conf-thres默认 0.25误检多就调高到 0.4漏检多就调低到 0.15。--img-size要和训练时一致否则精度下降。结果默认存到 runs/detect/exp。如果要在代码里调用用 torch.hub 加载。import torch # 加载模型指定类别数 model torch.hub.load(ultralytics/yolov5, custom, pathbest.pt, force_reloadTrue) model.conf 0.25 # 置信度阈值 model.iou 0.45 # NMS 的 IoU 阈值 results model(test.jpg) results.print() # 打印检测结果 results.save() # 保存带框的图逻辑说明torch.hub.load加载本地权重force_reload确保重新加载。model.conf和model.iou是推理参数。results对象包含框坐标、类别、置信度可以进一步处理。5.2 人物动物识别的五条踩坑记录现象训练 loss 一直是 nan。原因学习率太大或数据里有坏图。解决把 lr0 降到 0.001用脚本检查图片是否能正常打开删掉损坏的图。现象推理时框的位置整体偏移。原因训练和推理的 img-size 不一致或者标注时坐标没归一化对。解决统一 img-size检查标注脚本的归一化除数是不是图片宽高。现象人和动物互相误检。原因两类目标在特征上接近或者训练样本不均衡。解决补难样本在 data.yaml 里用--rect做矩形训练或者在 loss 里给少数类加权。现象验证集 mAP 比训练集低很多。原因过拟合。解决加数据增强--augment加 dropout或者减少模型层数用 yolov5n。现象GPU 显存溢出。原因batch-size 太大或 img-size 太大。解决降 batch-size 到 8 或 4降 img-size 到 416或者用--accumulate做梯度累积。5.3 模型导出与推理速度优化训练完的 .pt 是 PyTorch 格式部署时可能想转成 ONNX 或 TensorRT。YOLOv5 自带 export.py。python export.py \ --weights best.pt \ --include onnx \ --img-size 640 \ --batch-size 1逻辑说明--include指定导出格式可选 onnx、torchscript、engineTensorRT。参数说明--batch-size 1是推理时的 batch部署通常用 1。ONNX 通用性好TensorRT 在 N 卡上最快但需要额外装 TensorRT。推理速度优化有几个方向用更小的模型yolov5n 比 yolov5s 快一倍降 img-size用半精度--half用 TensorRT。人物动物识别如果对实时性要求高yolov5s 加 TensorRT 在 1080p 下能到 30 FPS 以上。6. 把人物动物识别推到更高精度的几个技巧第一个技巧是难例挖掘。训练完一轮后用模型跑验证集把置信度低或检错的图挑出来人工重新标注或补标加入训练集再训。这个循环做两三轮mAP 通常能涨 3 到 5 个点。我一般会写个脚本自动挑出 conf 在 0.1 到 0.4 之间的框这些是模型最不确定的样本。第二个技巧是测试时增强TTA。推理时把图翻转、缩放几次把结果融合。YOLOv5 的 detect.py 加--augment就能开。代价是推理慢三倍左右但 mAP 能涨 1 到 2 个点。对离线分析场景值得对实时场景不划算。第三个技巧是类别平衡。人物动物识别里person 的样本通常远多于其他类。如果直接训模型会偏向 person。做法是在 data.yaml 里给每类设权重或者在采样时对少数类过采样。YOLOv5 本身不直接支持类别权重但可以在数据集构建时控制每类图片数量大致均衡。第四个技巧是锚框聚类。YOLOv5 默认的锚框是基于 COCO 的如果你的目标尺寸分布和 COCO 差很多比如都是小目标重新聚类锚框能提升召回。用python utils/autanchor.py跑你的数据集把输出的锚框填到模型配置里。验证方法上除了 mAP我习惯看混淆矩阵和 PR 曲线。混淆矩阵看类间混淆PR 曲线看每类的查准查全平衡。如果某类 PR 曲线下面积极小说明这类样本太少或太难要单独补。最后说个习惯每次改完参数或数据先跑 10 个 epoch 看 loss 趋势别一上来就训 300 轮。10 轮里 loss 不降后面大概率也不降早点排查比等几小时强。这套人物动物识别的方案代码和数据齐备的情况下从环境到出结果一天内能走完但调到满意精度通常要一周左右。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询