YOLOv8 室内行人跌倒数据集信息表
数据集概述
| 项目 | 内容 |
|---|---|
| 数据集名称 | YOLOv8 室内行人跌倒数据集 |
| 总图像数量 | 9,262 张 |
| 应用场景 | 跌倒检测、公共安全监控、老年人护理、智能安防 |
| 目标类别 | 2 类:stand(站立)、fall(跌倒) |
| 标注格式 | .txt(YOLO 格式,归一化坐标) |
| 适用模型 | YOLO 系列(直接用于训练) |
数据集划分及标注统计
| 数据集类型 | 图像数量 | 占比 | 备注 |
|---|---|---|---|
| 训练集 | 7,148 张 | 77.2% | 包含 stand 和 fall 类别 |
| 验证集 | 2,114 张 | 22.8% | 用于评估模型性能,调参 |
| 总计 | 9,262 张 | 100% | —— |
类别标签对照表及样本数统计
训练集样本分布
| 类别编号 | 英文名称 | 中文名称 | 样本数量(训练集) |
|---|---|---|---|
| 0 | stand | 站立 | 2,500 左右 |
| 1 | fall | 跌倒 | 4,600 左右 |
验证集样本分布
| 类别编号 | 英文名称 | 中文名称 | 样本数量(验证集) |
|---|---|---|---|
| 0 | stand | 站立 | 1,673 |
| 1 | fall | 跌倒 | 692 |
典型应用方向
- 公共安全监控:实时监测公共场所中的人员状态,及时发现跌倒事件。
- 老年人护理:在养老院或家庭环境中使用,帮助及时响应老人跌倒情况。
- 智能安防:结合摄像头监控网络,实现自动化的跌倒检测与报警功能。
- 科研与教学:适合用于目标检测算法的研究与开发,特别是在跌倒检测领域。
data.yaml 示例内容
train: ./fall-detection-dataset/images/train
val: ./fall-detection-dataset/images/val
nc: 2 # 类别数量
names: ['stand', 'fall'] # 类别名称

1

数据集文字描述:
室内行人跌倒数据集,yolo格式,两类,站立‘stand’,跌倒‘fall’。
数据集:训练集7148张,验证集2114张,两个种类在训练集出现的样例数:2500左右 4600左右,三个种类在验证集出现的样例数:1673 692

1

室内行人跌倒检测 的 YOLOv8 可训练数据集,包含两个类别:
stand(站立):约 2500 张(训练集)fall(跌倒):约 4600 张(训练集)
总训练集 7148 张,验证集 2114 张,已按 YOLO 格式标注,可直接用于目标检测模型训练。
是 从环境搭建 → 数据准备 → 模型训练 → 推理 → 评估 → 模型导出 的完整技术流程,适用于使用 YOLOv8 实现高精度跌倒行为识别。
✅ 一、系统环境搭建
1. 确认 CUDA 驱动(GPU 加速)
确保 NVIDIA 显卡驱动已安装并支持 CUDA:
nvidia-smi
输出应显示 GPU 型号和 CUDA 版本(推荐 ≥ 11.8)。
2. 安装 Anaconda(Python 包管理器)
前往 https://www.anaconda.com/products/distribution 下载并安装 Anaconda(支持 Windows/Linux/macOS)。
3. 创建 Python 虚拟环境
# 创建名为 fall_detection 的环境,使用 Python 3.9
conda create -n fall_detection python=3.9
# 激活环境
conda activate fall_detection
4. 安装必要依赖
# 安装 PyTorch(以 CUDA 11.8 为例,根据你的驱动选择)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 安装 YOLOv8 官方库
pip install ultralytics opencv-python numpy matplotlib tqdm scikit-learn pandas pillow
# 可选:TensorBoard 可视化
pip install tensorboard
# 验证安装
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
# 应输出 True 表示 GPU 可用
✅ 二、数据集结构与 data.yaml 配置
数据目录结构
fall_dataset/
├── images/
│ ├── train/ # 7148 张训练图像
│ └── val/ # 2114 张验证图像
├── labels/
│ ├── train/ # 对应的 .txt 标注文件 (YOLO 格式)
│ └── val/
└── data.yaml # 数据配置文件
创建 data.yaml
在项目根目录创建 data.yaml 文件:
# data.yaml
train: ./fall_dataset/images/train
val: ./fall_dataset/images/val
# 类别数量
nc: 2
# 类别名称(顺序必须与 label 文件中的 class ID 一致)
names:
- stand
- fall
# 中文名称(用于可视化)
names_zh:
- 站立
- 跌倒
✅ 三、调用 YOLOv8 官方预训练模型进行训练
由于跌倒行为中“跌倒”姿态多变、目标较小,建议使用 YOLOv8m 或 YOLOv8l 提升小目标检测能力。
from ultralytics import YOLO
# 加载官方预训练模型(推荐使用 yolov8m.pt)
model = YOLO('yolov8m.pt') # 自动下载 ImageNet 预训练权重
# 开始训练
results = model.train(
data='data.yaml', # 数据配置文件路径
epochs=120, # 训练轮数(数据量大,无需过多 epoch)
batch=32, # 根据显存调整(RTX 3090 可用 64)
imgsz=640, # 输入尺寸(可尝试 800 提升小目标检测)
optimizer='AdamW', # 更稳定优化器
lr0=0.001, # 初始学习率
weight_decay=0.0005,
momentum=0.937,
# 数据增强(关键!提升泛化)
augment=True,
hsv_h=0.015, # 色调扰动
hsv_s=0.7, # 饱和度增强
hsv_v=0.4,
degrees=10.0, # 随机旋转
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5, # 左右翻转
mosaic=1.0, # Mosaic 增强(强烈推荐)
mixup=0.1, # MixUp
copy_paste=0.1, # Copy-Paste Augmentation(对“跌倒”姿态有效)
# 正则化
dropout=0.2,
label_smoothing=0.05, # 标签平滑,防止过拟合
# 学习率调度
cos_lr=True, # 余弦退火学习率
# 保存与日志
project='runs/train',
name='fall_detection_yolov8m',
save=True,
save_period=10,
exist_ok=False,
# 缓存(内存充足时开启)
cache=True
)
💡 建议:
- 若显存不足,改用
yolov8s.pt或降低batch=16- 使用
imgsz=800可提升对躺倒姿态的识别能力copy_paste增强可缓解stand类别样本较少的问题

✅ 四、推理代码(单图 / 批量 / 视频)
1. 单张图像推理
from ultralytics import YOLO
from PIL import Image
# 加载最佳模型
model = YOLO('runs/train/fall_detection_yolov8m/weights/best.pt')
# 推理
results = model('test_person.jpg', conf=0.3) # 设置置信度阈值
# 显示结果
for r in results:
im_array = r.plot() # 绘制边界框和标签
im = Image.fromarray(im_array[..., ::-1]) # BGR to RGB
im.show()
2. 批量图像推理
results = model.predict(
source='fall_dataset/images/val',
save=True,
project='runs/detect',
name='fall_val_results',
conf=0.3,
imgsz=640
)
print("批量推理完成")
3. 视频检测(如监控视频)
results = model.predict(
source='indoor_surveillance.mp4',
save=True,
project='runs/detect/video',
name='fall_video_result',
show=False,
conf=0.3
)
print("视频检测完成")
4. 实时摄像头检测(OpenCV)
import cv2
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model(frame, conf=0.3)
annotated_frame = results[0].plot()
cv2.imshow('Fall Detection', annotated_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
✅ 五、模型评估(验证集 + 可选测试集)
1. 在验证集上评估
metrics = model.val(
data='data.yaml',
split='val',
batch=32,
imgsz=640,
save_json=False,
project='runs/val',
name='fall_eval'
)
print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"Precision: {metrics.box.p:.4f}")
print(f"Recall: {metrics.box.r:.4f}")
# 每类 AP
for i, name in enumerate(model.names):
print(f"{name} (AP@0.5): {metrics.box.ap[i]:.4f}")
2. (建议)创建独立测试集并评估
建议从训练集中划分出 10% 作为测试集:
# 示例:使用脚本划分 train → train + test
# 或手动创建 test/ 文件夹并更新 data.yaml
更新 data.yaml 添加 test: 字段:
test: ./fall_dataset/images/test
然后进行最终测试评估:
test_metrics = model.val(
data='data.yaml',
split='test',
save_json=True,
name='test_final'
)
print(f"Test mAP@0.5: {test_metrics.box.map50:.4f}")
print(f"Test Recall: {test_metrics.box.r:.4f}")
629



被折叠的 条评论
为什么被折叠?



