ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

YOLO人体行为检测数据集:10000张图三格式标签与训练教程

YOLO人体行为检测数据集:10000张图三格式标签与训练教程 简介这份资源面向计算机视觉初学者与目标检测开发者提供一套可直接用于YOLO系列训练的人体行为检测数据集解决真实场景下行为识别数据难获取、标注格式不统一的问题。压缩包共2000个文件约412.04MB以1986个xml标注文件为主另含少量html说明文档、txt列表文件与py脚本覆盖VOC、COCO和YOLO三种标签格式分别存放于不同文件夹可直接投入训练。资源附赠环境搭建与训练案例教程以及训练集、验证集、测试集划分脚本支持按需自定义数据划分。目前已有384人学习下载适合希望快速上手人体行为检测、验证模型效果或开展课程实践的用户能省去数据采集与格式转换的繁琐环节将精力集中在模型调参与效果优化上。1. 拆开这个 YOLO 人体行为检测数据集10000 张图、三套标签、划分脚本一次到位如果你正在找一份能直接跑 YOLO 训练的人体行为检测数据集又不想在格式转换和划分脚本上反复折腾这个资源包值得先看一眼。它包含约 10000 张真实场景图片用 labelImg 标注同时提供 VOCxml、COCOjson、YOLOtxt三种标签格式分别放在不同文件夹里。也就是说不管你用的是 YOLOv5、YOLOv8 还是更早的 Darknet 版本基本都能找到对应格式直接开训。包里还附了 Windows 和 Linux 两套环境搭建教程、训练案例教程以及三个数据集划分脚本能按需切分训练集、验证集、测试集。适合刚接触 YOLO 目标检测、想拿真实数据练手的人也适合需要快速验证人体行为检测方案、不想从零标数据的从业者。下面按“资源是什么 → 怎么用 → 坑在哪”的顺序拆一遍。2. 三种标签格式怎么选VOC、COCO、YOLO 的转换逻辑与目录结构拿到数据集第一件事不是急着训练而是搞清楚三种标签格式分别对应什么训练框架、目录怎么摆。这个包里 VOC、COCO、YOLO 三套标签是分开存放的图片是共用的所以选错格式会导致训练脚本读不到标签白白浪费时间。2.1 VOC、COCO、YOLO 三种格式的核心差异VOC 格式每张图对应一个 xml 文件里面用bndbox记录xmin、ymin、xmax、ymax四个绝对坐标类别名写在name里。COCO 格式把所有标注集中在一个 json 文件里用images、annotations、categories三个字段组织坐标是绝对像素值还带id映射。YOLO 格式每张图对应一个 txt每行是class_id x_center y_center width height全部归一化到 0 到 1 之间。选哪个取决于你的训练代码。YOLOv5、YOLOv8 官方仓库默认读 YOLO txt如果你用 Detectron2 或 MMDetectionCOCO json 更顺手VOC xml 则常见于早期 Darknet 和部分自定义脚本。这个包三套都给省去了自己写转换脚本的麻烦。格式文件形态坐标类型典型框架VOC每图一个 xml绝对像素Darknet、部分自定义脚本COCO单个 json绝对像素Detectron2、MMDetectionYOLO每图一个 txt归一化 0-1YOLOv5/v8/v112.2 目录结构怎么摆才能被训练脚本识别YOLO 训练对目录结构有固定要求常见做法是images和labels两个平行文件夹里面再分train、val、test。图片和标签文件名必须一一对应只是扩展名不同。比如images/train/0001.jpg对应labels/train/0001.txt。如果你拿到的原始数据是 VOC 格式需要先转成 YOLO。转换时注意类别名到class_id的映射要固定不能每次转换顺序不一样否则训练时类别会错乱。下面是一个常见的 VOC 转 YOLO 脚本片段import xml.etree.ElementTree as ET import os # 类别列表顺序一旦确定就不要改 classes [walking, running, sitting, standing, falling] def convert_voc_to_yolo(xml_path, img_w, img_h, out_path): tree ET.parse(xml_path) root tree.getroot() lines [] for obj in root.iter(object): cls_name obj.find(name).text if cls_name not in classes: continue cls_id classes.index(cls_name) bndbox obj.find(bndbox) xmin float(bndbox.find(xmin).text) ymin float(bndbox.find(ymin).text) xmax float(bndbox.find(xmax).text) ymax float(bndbox.find(ymax).text) # 归一化并计算中心点和宽高 x_center (xmin xmax) / 2.0 / img_w y_center (ymin ymax) / 2.0 / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) with open(out_path, w) as f: f.write(\n.join(lines))这段代码的逻辑是读 xml遍历每个object把类别名映射成整数 id再把绝对坐标转成归一化中心点加宽高。参数上要注意img_w和img_h必须和实际图片尺寸一致如果图片被预处理过比如统一 resize这里要用 resize 后的尺寸否则坐标会偏。类别列表classes的顺序要和训练时data.yaml里的names完全一致差一个顺序都会导致类别标签错位。2.3 用包里的划分脚本切分 train/val/test包里给了三个划分脚本训练集、验证集、测试集划分脚本图片标签划分写入新文件夹.py、训练集、验证集划分脚本图片标签划分写入新文件夹.py、split_train_val生成ImageSets下txt文件划分脚本.py。前两个是直接复制图片和标签到新文件夹第三个是生成ImageSets下的 txt 索引文件。我一般会先用第三个脚本生成索引确认划分比例合理后再用前两个脚本做物理复制。常见做法是按 7:2:1 切分如果数据量小可以调成 8:1:1。运行前先改脚本里的root_path和split_ratio别直接跑默认路径否则可能覆盖原始数据。提示划分前先备份原始图片和标签文件夹脚本里的复制逻辑如果写错目标路径可能把原文件覆盖掉。3. 环境搭建与训练落地Windows 和 Linux 两套教程怎么用环境搭建是新手最容易卡住的地方。包里给了 Windows 和 Linux 两套 HTML 教程还有 Ubuntu 安装教程。我的建议是如果你有 NVIDIA 显卡优先用 Linux因为 CUDA 和 cuDNN 在 Ubuntu 下配置更顺如果只有 Windows 机器就按 Windows 教程走注意显卡驱动版本和 CUDA 版本的对应关系。3.1 Windows 下 YOLO 环境搭建的关键步骤Windows 教程里通常包含 Anaconda 安装、创建虚拟环境、装 PyTorch、装 YOLO 依赖这几步。核心是 PyTorch 版本要和 CUDA 版本匹配。比如你装的是 CUDA 11.8就要装对应cu118的 PyTorch 轮子。下面是一个常见的安装命令序列# 创建虚拟环境Python 版本按教程要求选 conda create -n yolo python3.9 conda activate yolo # 安装 PyTorchcu118 对应 CUDA 11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 克隆 YOLOv5 仓库并安装依赖 git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt参数说明--index-url指定 PyTorch 官方轮子源cu118表示 CUDA 11.8 编译版本。如果你机器上是 CUDA 12.1就把cu118换成cu121。装完后用python -c import torch; print(torch.cuda.is_available())验证返回True才算 GPU 可用。如果返回False常见原因是显卡驱动太旧或 CUDA 版本不匹配需要先更新驱动。3.2 Linux 下训练自己的数据集从 data.yaml 到 train.pyLinux 教程里重点看“根据案例修改训练自己的数据集”那部分。核心是改data.yaml把train、val、test路径指向你划分好的文件夹nc改成类别数names改成类别名列表。然后跑train.py。# data.yaml 示例 # train: /home/user/dataset/images/train # val: /home/user/dataset/images/val # nc: 5 # names: [walking, running, sitting, standing, falling] python train.py --data data.yaml --weights yolov5s.pt --epochs 100 --batch-size 16 --img 640参数上--weights指定预训练权重yolov5s.pt是最小的模型适合快速验证--epochs是训练轮数100 轮起步--batch-size根据显存调16 是 8G 显存左右的常见值--img是输入尺寸640 是默认值。如果显存不够就降 batch-size或者换更小的模型。训练过程中看runs/train/exp下的results.csv和confusion_matrix.png能判断模型有没有收敛、类别有没有混淆。3.3 用包里的训练教程改自己的数据注意类别数和路径教程里的案例通常是 COCO 或 VOC 的某个子集直接跑通不代表你的数据也能跑通。改自己数据时最容易错的两个地方一是nc没改还是案例里的 80导致输出层维度不对二是names顺序和标签里的class_id对不上训练出来的模型会把“走路”识别成“跑步”。我的习惯是先把data.yaml里的names和转换脚本里的classes列表逐行对一遍确认完全一致再开训。注意如果训练时 loss 一直是nan先检查标签里有没有坐标超出 0 到 1 范围或者宽高为 0 的脏数据。4. 避坑与排查标注质量、划分比例、显存和类别不均衡这个数据集虽然标注质量高但 10000 张图里难免有边界情况。加上训练过程中环境、参数、数据划分都可能出问题下面几条是我实际踩过的坑按“现象 → 原因 → 解决”整理。4.1 训练 loss 不下降mAP 一直很低现象跑了几十轮box_loss和cls_loss几乎不变mAP0.5低于 0.1。原因通常是标签格式不对或路径配错。比如data.yaml里train指向了图片文件夹但标签文件夹不在同级labels目录下YOLO 找不到标签就会当负样本训。解决检查images/train同级是否有labels/train且文件名一一对应。另外确认 txt 里每行是 5 个值不是 4 个或 6 个。4.2 显存溢出batch-size 调小也报错现象CUDA out of memory把--batch-size从 16 降到 8 还是报。原因可能是图片尺寸太大或者模型选得太大。解决先降--img到 416 或 320再换更小的模型如yolov5n.pt。如果还不行检查是不是开了多尺度训练--multi-scale关掉能省显存。4.3 验证集 mAP 高但测试集一塌糊涂现象val上 mAP 0.8换test集跑只有 0.3。原因是划分时没有打乱顺序训练集和验证集可能来自同一段视频的连续帧导致数据泄漏。解决用划分脚本时先shuffle再切分确保同一场景的图片不会同时出现在训练和验证里。包里第三个脚本生成ImageSets时如果按文件名排序切分就很容易出这个问题。4.4 某些类别检测效果特别差现象walking和standing检测正常falling几乎检不出来。原因是类别样本不均衡falling图片太少。解决先统计每个类别的标注框数量如果某类少于总框数的 5%要么补充数据要么在训练时用--class-weights加权或者用重采样让稀有类别多出现。4.5 混淆矩阵总合不唯一现象训练完看confusion_matrix.png发现某些类别的总数对不上。这通常是标注里存在同一目标被标了多个类别或者一个框里套了多个类别。解决用脚本遍历标签检查同一张图里有没有坐标高度重叠但类别不同的框有的话人工复核。YOLO 的混淆矩阵是按预测框和真实框匹配算的标注不一致就会导致统计异常。5. 进阶技巧用预训练权重和冻结层加速收敛如果你不想从零训 10000 张图可以用预训练权重加冻结层的方式先冻结主干网络只训检测头等 loss 稳定后再解冻全量微调。这样前几轮收敛快也不容易把预训练学到的特征破坏掉。# 先冻结主干训练 20 轮 python train.py --data data.yaml --weights yolov5s.pt --epochs 20 --freeze 10 --batch-size 16 # 再解冻全量微调 80 轮 python train.py --data data.yaml --weights runs/train/exp/weights/best.pt --epochs 80 --batch-size 16--freeze 10表示冻结前 10 层YOLOv5s 的主干大概就是前 10 层。第一轮跑完看results.csv里的mAP0.5如果 20 轮内能到 0.4 以上说明预训练权重和你的数据分布比较接近继续微调效果会更好。如果 20 轮后 mAP 还在 0.1 以下可能是类别定义和预训练模型的类别差异太大这时候要么换更接近的预训练权重要么直接全量训练。验证模型效果时除了看 mAP我还会用detect.py跑几张测试图肉眼确认框的位置和类别对不对。命令是python detect.py --weights best.pt --source test_images/输出在runs/detect/exp下。如果框的位置明显偏移回去检查标签转换时的img_w和img_h是不是用错了。从那以后我每次拿到新数据集都强制先跑一遍标签检查脚本确认没有越界坐标、没有空标签、类别 id 连续再开始训练。这个习惯帮我省了很多次重新训练的后悔药。希望帮到你。本文还有配套的精品资源点击获取
返回列表