Skip to content

Repository files navigation

SheepCount

一个基于 YOLO11 的羊只计数项目,优先保证召回率,支持数据训练、模型验证,以及图片、视频和摄像头输入的推理计数。

功能

  • 图片羊只检测与计数
  • 视频逐帧检测与基于跟踪的去重计数
  • 摄像头实时统计当前帧数量与累计出现数量
  • 默认采用偏高召回参数:低 confvid_stride=1stream_buffer=True

项目结构

SheepCount/
├── main.py
├── run_image_test.py
├── train.py
├── val.py
├── requirements.txt
├── dataset/
├── outputs/
├── examples/
├── weights/
└── src/
    ├── config.py
    ├── detector.py
    ├── counter.py
    └── visualize.py

安装

建议使用 Python 3.10+。

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

阶段化执行说明见 PROJECT_PLAN.md

快速开始

0. 先准备你自己的羊群数据

推荐流程如下:

  1. 采集图片或视频帧
  2. 标注羊只框
  3. 按 YOLO 格式整理到 dataset/
  4. 训练 YOLO11
  5. 验证召回率
  6. 用训练好的 best.pt 做计数推理

数据目录格式见 dataset/README.mddataset/sheep.yaml

1. 训练模型

python train.py \
  --data "dataset/sheep.yaml" \
  --model "yolo11n.pt" \
  --epochs 100 \
  --imgsz 1280 \
  --batch 16 \
  --single-cls

训练完成后,常用权重会在:

runs/sheep/train6/weights/best.pt

2. 验证模型

python val.py \
  --data "dataset/sheep.yaml" \
  --model "runs/sheep/train6/weights/best.pt" \
  --imgsz 1280 \
  --conf 0.05

3. 图片计数

python main.py \
  --mode image \
  --source "examples/sheep.jpg" \
  --model "runs/sheep/train6/weights/best.pt"

如果你不想每次手动输入命令,可以直接修改 run_image_test.py 顶部的参数,然后在 IDE 中点击运行它。脚本会自动读取图片、调用模型,并把结果保存到 outputs/

4. 视频计数

python main.py \
  --mode video \
  --source "examples/sheep.mp4" \
  --model "runs/sheep/train6/weights/best.pt" \
  --show

5. 摄像头实时计数

python main.py \
  --mode camera \
  --source 0 \
  --model "runs/sheep/train6/weights/best.pt" \
  --show

常用参数

  • --model:YOLO11 权重路径或模型名
  • --class-name:目标类别名,默认是 sheep
  • --conf:置信度阈值,越低越偏向高召回
  • --iou:NMS IoU 阈值
  • --imgsz:推理尺寸,适当增大有助于小目标召回
  • --tracker:视频/摄像头跟踪配置,默认 bytetrack.yaml
  • --vid-stride:视频抽帧步长,默认 1
  • --stream-buffer / --no-stream-buffer:是否缓存流帧
  • --no-save:只运行,不保存输出文件
  • --show:弹窗显示视频或摄像头结果

训练相关常用参数:

  • train.py --data:数据集 YAML
  • train.py --single-cls:只有羊一个类别时建议开启
  • train.py --imgsz:训练尺寸,适当增大更利于小目标召回
  • train.py --close-mosaic:最后若干 epoch 关闭 mosaic,帮助收敛
  • val.py --conf:验证时置信度阈值,低一些更便于观察召回

输出内容

默认输出到 outputs/

  • 图片模式:保存带框结果图和一个 JSON 摘要
  • 视频/摄像头模式:保存带框视频和一个 JSON 摘要

标准输出会打印本次计数结果的 JSON,便于后续接入其他系统。

高召回建议

如果你更关心“尽量别漏羊”,建议优先这样调:

  • --conf 调低到 0.05 ~ 0.15
  • 保持 --vid-stride 1
  • 提高 --imgsz,例如 1280 或更高
  • 对摄像头或视频流保持 --stream-buffer

这会带来几个副作用:

  • 误检会增加
  • 相互遮挡时可能出现重复框
  • 视频累计计数依赖跟踪稳定性,严重遮挡下仍可能重复计数或漏计

训练与召回

如果你的目标是“宁可多报一点,也尽量别漏羊”,建议训练时注意:

  • 尽量覆盖不同光照、远近、遮挡、密集度场景
  • 给小目标羊和边缘羊足够多的标注样本
  • 验证集不要只放容易样本
  • 优先观察 Recall,再兼顾 mAP50
  • 如果召回不够,优先补数据,其次再调训练尺寸和增强

关于模型

如果直接使用通用预训练权重,项目能先把流程跑通,但不一定能在你的羊场场景里获得足够高的召回率。要进一步提高效果,建议这样做:

  • 采集你自己的羊群数据
  • 用羊只数据集微调 YOLO11
  • 根据现场机位再调 confimgsz 和 tracker 参数

说明

  • 当前版本已经包含基础训练与验证流水线
  • 如果自定义权重里的类别名不是 sheep,请通过 --class-name 指定实际类别名

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages