当前位置: 首页 > news >正文

YOLO26最新创新改进系列:YOLO26+自动计数+自动统计各个类别数量!弯道超车,丰富文章工作量!!

YOLO26最新创新改进系列:YOLO26+自动计数+自动统计各个类别数量!弯道超车,丰富文章工作量!!

购买相关资料后畅享一对一答疑

畅享超多免费持续更新且可大幅度提升文章档次的纯干货工具!

基于YOLO26的目标检测与计数系统:原理、方法与实现(写文必备)

1 概述

目标计数是计算机视觉中的一项基础任务,广泛应用于交通流量统计、人群密度分析、工业产品计数等领域。本系统基于ultralytics库中的YOLO(You Only Look Once)模型,实现对静态图像(单张或文件夹)和视频流中目标的自动检测与计数。系统支持目标类别筛选、置信度阈值调整、跟踪去重(视频场景),并能将统计结果导出为CSV文件,同时可选保存标注后的图像或视频。本章将详细介绍该系统的原理、算法流程、关键参数及输出格式,并通过表格和公式进行说明。

2 核心原理

2.1 YOLO目标检测

YOLO是一种端到端的实时目标检测算法,它将目标检测任务视为回归问题,直接从图像像素映射到边界框坐标和类别概率。ultralytics实现的YOLOv8/v9/v10/11/13/26等版本具有以下特点:

  • 骨干网络:采用CSPDarknet结构提取特征。
  • 特征金字塔:通过PANet或BiFPN融合多尺度特征,提升小目标检测能力。
  • 解耦头:分类和回归任务使用不同的分支,加速收敛。
  • 损失函数:结合CIoU Loss和分类交叉熵损失。

本系统调用YOLO(weights)加载预训练或自定义权重,然后通过model(img, conf=conf_thres, classes=classes, device=device)执行推理,返回包含边界框、类别、置信度的Results对象。

2.2 目标跟踪(视频场景)

在视频处理中,为避免同一目标被重复计数,系统采用跟踪算法为每个目标分配唯一的ID。model.track()方法集成了以下跟踪机制:

  • 跟踪器:默认使用BoT-SORT或ByteTrack,结合卡尔曼滤波预测目标位置,并通过匈牙利算法匹配检测框与轨迹。
  • ID分配:首次出现的目标分配新ID,后续帧中若匹配成功则沿用原ID。
  • 持久化:参数persist=True确保轨迹在帧间持续存在,即使目标短暂消失也能保持ID。

通过跟踪ID,系统可统计整个视频中出现的独立目标总数(即不重复计数)。

2.3 计数统计方法

图像文件夹或单张图像

对于静态图像,计数基于单帧检测结果。设图像( i )中检测到的目标集合为( D_i ),则:

  • 该图像的目标数:( N_i = |D_i| )
  • 所有图像的总目标数:( N_{\text{total}} = \sum_i N_i )
  • 各类别目标数:( N_c = \sum_i |{d \in D_i : \text{class}(d) = c}| )
视频流

对于视频,系统同时输出帧级计数累计独立计数。设第( t )帧检测到的目标集合为( D_t ),每个目标有唯一的跟踪ID ( id ),则:

  • 帧级目标数:( N_t = |D_t| )
  • 累计独立目标数(截至第( t )帧):( U_t = |\bigcup_{k=1}^{t} {id(d) : d \in D_k}| )
  • 累计各类别独立目标数:( U_{c,t} = |{id(d) : d \in \bigcup_{k=1}^{t} D_k, \text{class}(d) = c}| )

最终视频结束后,累计独立目标数即为整个视频中出现的不同目标总数。

3 函数定义与参数说明

系统核心函数为count_objects,其完整定义如下:

defcount_objects(weights,source,conf_thres=0.25,classes=None,device='cpu',save=False,view=False,csv_path=None):

各参数含义见表3-1。

表3-1 函数参数说明

参数名类型默认值说明
weightsstr必填模型权重文件路径(如yolov8n.pt
sourcestr必填输入源:图像文件、图像文件夹或视频文件路径
conf_thresfloat0.25置信度阈值,低于该值的检测结果被过滤
classeslistNone需计数的目标类别ID列表,None表示所有类别
devicestr‘cpu’推理设备,可选'cpu''cuda'(自动检测可用GPU)
saveboolFalse是否保存标注后的图像/视频到runs/count/目录
viewboolFalse是否实时显示标注结果(视频模式下按’q’退出)
csv_pathstrNoneCSV统计结果保存路径,若为None则不生成CSV文件

4 工作流程

系统根据输入源类型执行不同的处理流程,如图4-1所示(流程描述)。

4.1 输入源为图像文件夹

  1. 初始化:加载模型,获取类别名称列表class_names。准备CSV文件(若指定),写入表头:[文件名, 类别1, 类别2, ..., 总计]
  2. 遍历图像:对文件夹中所有.jpg/.png/.jpeg文件:
    • 调用模型进行检测,得到results
    • 提取边界框boxes,若存在则统计每个类别的出现次数。
    • 生成CSV行:[图像名, 各类别计数..., 该图像总目标数],写入文件。
    • 更新各类别总计数和总目标数。
    • save=True,保存标注图像到runs/count/
    • view=True,显示标注图像。
  3. 汇总:在所有图像处理完毕后,写入汇总行:["总计", 各类别总计数..., 总目标数]。打印统计信息。

4.2 输入源为视频文件

  1. 初始化:打开视频,获取帧率、宽度、高度。准备视频写入器(若save=True)。准备CSV文件,写入复杂表头,包含帧级计数和累计计数。
  2. 逐帧处理:循环读取每一帧:
    • 调用model.track()进行检测与跟踪,参数persist=True保持ID连续性。
    • 提取边界框boxes和跟踪IDboxes.id。若无跟踪ID则仅统计帧级目标数。
    • 统计当前帧各目标类别出现次数,存入frame_class_counts
    • 利用集合cumulative_ids_by_class记录每个类别已出现的所有跟踪ID。
    • 生成CSV行:[帧号, 帧各类别计数..., 帧总计, 累计各类别计数..., 累计总计],写入文件。
    • save=True,将标注帧写入输出视频;若view=True,实时显示。
  3. 结束:释放视频资源,关闭窗口。在CSV末尾写入最终累计行(可选)。打印累计独立目标总数。

4.3 输入源为单张图像

流程与图像文件夹类似,但只处理单张图像,无汇总行。若指定CSV,仍会生成包含表头和一行的文件。

5 关键数据结构与算法

5.1 数据结构

系统使用以下数据结构存储计数信息:

  • defaultdict(int):用于统计类别出现次数,键为类别ID,值为计数。
  • defaultdict(set)(视频场景):用于存储每个类别已出现的独立跟踪ID集合,实现去重。

5.2 计数算法伪代码

图像文件夹计数算法
初始化 total_class_counts = defaultdict(int) 初始化 total_objects = 0 初始化 total_images = 0 对每个图像文件: results = model(image) boxes = results[0].boxes if boxes 存在: 统计 class_counts total_objects += len(boxes) 对每个类别 c: total_class_counts[c] += class_counts[c] 输出图像计数 total_images += 1 输出总计:total_images, total_objects, total_class_counts
视频独立目标计数算法
初始化 cumulative_ids = defaultdict(set) 对每一帧 frame: results = model.track(frame, persist=True) boxes = results[0].boxes if boxes 存在且 boxes.id 存在: 获取 cls_ids 和 track_ids 对每个 (cid, tid): cumulative_ids[cid].add(tid) 统计 frame_class_counts 帧总计 = len(boxes) 累计总计 = sum(len(cumulative_ids[c]) for c in 所有类别) 输出帧号和累计信息 最终累计总计即为独立目标总数

6 输出格式与示例

6.1 图像文件夹输出的CSV格式

表头:文件名, 类别A, 类别B, ..., 总计

示例(假设模型类别为:0-person, 1-car):

文件名personcar总计
img1.jpg213
img2.jpg044
总计257

6.2 视频输出的CSV格式

表头:帧号, 帧_person, 帧_car, ..., 帧_总计, 累计_person, 累计_car, ..., 累计_总计

示例:

帧号帧_person帧_car帧_总计累计_person累计_car累计_总计
1213213
2325325
3112325
总计325

注:累计列统计的是从视频开始到当前帧出现的独立目标总数(按ID去重)。

7 使用示例

以下代码演示如何调用count_objects函数:

if__name__=="__main__":weights_path="yolov8n.pt"# 模型权重data_source="path/to/images_or_video"# 输入源conf=0.25# 置信度阈值classes_to_count=[0,2]# 只计数类别0和2device='cuda'iftorch.cuda.is_available()else'cpu'save_results=True# 保存标注结果show_window=False# 不显示窗口csv_output="count_results.csv"# CSV输出路径count_objects(weights=weights_path,source=data_source,conf_thres=conf,classes=classes_to_count,device=device,save=save_results,view=show_window,csv_path=csv_output)

8 注意事项

  • 模型权重:确保权重文件存在且与ultralytics版本兼容。
  • 设备选择:若GPU可用且已安装CUDA版PyTorch,建议使用device='cuda'加速推理。
  • 跟踪稳定性:视频计数依赖跟踪ID的稳定性,复杂场景(遮挡、快速运动)可能导致ID切换,影响累计计数的准确性。
  • 内存管理:处理大量图像或长视频时,注意内存使用,及时释放资源(代码已自动处理)。
  • 文件格式:图像支持.jpg,.png,.jpeg;视频支持常见格式如.mp4,.avi,.mov,.mkv
  • CSV编码:指定utf-8编码,避免中文路径或文件名乱码。

写在最后

学术因方向、个人实验和写作能力以及具体创新内容的不同而无法做到一通百通,关注我CSDN、B站及抖音:Ai学术叫叫兽
在所有B站资料中留下联系方式以便在科研之余为家人们答疑解惑,本up主获得过国奖,发表多篇SCI,擅长目标检测领域,拥有多项竞赛经历,拥有软件著作权,核心期刊等经历。
因为经历过所以更懂小白的痛苦!
因为经历过所以更具有指向性的指导!

祝所有科研工作者都能够在自己的领域上更上一层楼!

以下为给大家庭小伙伴们免费更新过的绘图代码,均配有详细教程,超小白也可一键操作! 后续更多提升文章档次的资料的更新请大家庭的小伙伴关注我B站及抖音:Ai学术叫叫兽!



http://www.jsqmd.com/news/602351/

相关文章:

  • 从安装到批量预测:手把手带你用Uni-Mol Docking V2完成一次虚拟筛选(附ABL1案例代码)
  • 2026年分切复卷机好用推荐,设备精良的制造厂哪家更值得选 - mypinpai
  • 一键生成全篇论文!精选7款AI写论文工具亲测,期刊论文写作不愁!
  • 高效掌握BilibiliDown:B站音视频全流程下载指南
  • Pixel Mind Decoder 效果深度评测:多场景文本情绪识别准确率对比
  • Phi-4-mini-reasoning实战手册:日志分析+错误定位+服务健康检查
  • 彻底修复Windows更新问题的终极指南:Reset Windows Update Tool详解
  • 静态库膨胀、符号冗余、STL绑架——C++边缘编译三大“隐性内存杀手”(附objdump+readelf精准定位指南)
  • 科技论文写作用哪个ai好?实测四款写论文的AI指南,为你打造高质量论文
  • 终端安全巡检:OpenClaw+SecGPT-14B自动化检查员工设备
  • 【医疗影像C++渲染加速实战手册】:5大GPU-CPU协同优化策略,让DICOM实时渲染提速300%
  • 2026年邢台口碑好的分切复卷机厂家推荐,维修便捷又应急响应快的全解析 - 工业设备
  • PaperZD插件在UE5中的动画蓝图(AnimBP)配置全流程详解
  • 低查重AI教材编写指南:从选题到完稿的实用干货分享
  • Swin2SR小白友好教程:开箱即用,体验400%无损放大的黑科技
  • 聊聊2026年PEEK注塑实力定制服务,这些品牌值得关注 - 工业品牌热点
  • 如何通过VR-Reversal实现3D视频转2D播放?完整指南与免费工具
  • 颠覆追番体验:用Kazumi打造一站式动漫中心,3大核心功能革新你的观看方式
  • 金三银四看网络安全:2026年求职跳槽全指南(附薪资+岗位+面试干货)
  • GME-Qwen2-VL-2B-Instruct在AI内容生产中的应用:自动生成高匹配标题与描述
  • 2026年,揭秘行业内口碑超棒的[炭黑厂家全称]名声背后的秘密!
  • PowerPaint-V1 Gradio 效果展示:惊人修复案例,让老旧照片焕然一新
  • 音频流精准提取技术:BilibiliDown如何实现90%带宽节省与质量无损的双重突破
  • 智能公式+自动处理,SpreadJS AI 插件开启表格数据计算及处理新时代
  • 零基础入门:借助快马平台图文指南轻松完成openclaw环境搭建
  • 比迪丽LoRA开源模型价值解析:低成本复刻经典IP角色的合规创作路径
  • 如何修改视频媒体修改时间?两个方法介绍
  • 【工业级量子模拟器架构设计】:从单线程QVM到支持OpenMP+GPU异构调度的C++17框架演进全路径
  • 保姆级教程:除了改hosts,还有这3种方法搞定nuxi init下载失败
  • C语言学习新篇章