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

张开发
2026/4/7 13:26:14 15 分钟阅读

分享文章

YOLO26最新创新改进系列:YOLO26+自动计数+自动统计各个类别数量!弯道超车,丰富文章工作量!!
YOLO26最新创新改进系列YOLO26自动计数自动统计各个类别数量弯道超车丰富文章工作量购买相关资料后畅享一对一答疑畅享超多免费持续更新且可大幅度提升文章档次的纯干货工具基于YOLO26的目标检测与计数系统原理、方法与实现写文必备1 概述目标计数是计算机视觉中的一项基础任务广泛应用于交通流量统计、人群密度分析、工业产品计数等领域。本系统基于ultralytics库中的YOLOYou 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, confconf_thres, classesclasses, devicedevice)执行推理返回包含边界框、类别、置信度的Results对象。2.2 目标跟踪视频场景在视频处理中为避免同一目标被重复计数系统采用跟踪算法为每个目标分配唯一的ID。model.track()方法集成了以下跟踪机制跟踪器默认使用BoT-SORT或ByteTrack结合卡尔曼滤波预测目标位置并通过匈牙利算法匹配检测框与轨迹。ID分配首次出现的目标分配新ID后续帧中若匹配成功则沿用原ID。持久化参数persistTrue确保轨迹在帧间持续存在即使目标短暂消失也能保持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_{k1}^{t} {id(d) : d \in D_k}| )累计各类别独立目标数( U_{c,t} |{id(d) : d \in \bigcup_{k1}^{t} D_k, \text{class}(d) c}| )最终视频结束后累计独立目标数即为整个视频中出现的不同目标总数。3 函数定义与参数说明系统核心函数为count_objects其完整定义如下defcount_objects(weights,source,conf_thres0.25,classesNone,devicecpu,saveFalse,viewFalse,csv_pathNone):各参数含义见表3-1。表3-1 函数参数说明参数名类型默认值说明weightsstr必填模型权重文件路径如yolov8n.ptsourcestr必填输入源图像文件、图像文件夹或视频文件路径conf_thresfloat0.25置信度阈值低于该值的检测结果被过滤classeslistNone需计数的目标类别ID列表None表示所有类别devicestr‘cpu’推理设备可选cpu或cuda自动检测可用GPUsaveboolFalse是否保存标注后的图像/视频到runs/count/目录viewboolFalse是否实时显示标注结果视频模式下按’q’退出csv_pathstrNoneCSV统计结果保存路径若为None则不生成CSV文件4 工作流程系统根据输入源类型执行不同的处理流程如图4-1所示流程描述。4.1 输入源为图像文件夹初始化加载模型获取类别名称列表class_names。准备CSV文件若指定写入表头[文件名, 类别1, 类别2, ..., 总计]。遍历图像对文件夹中所有.jpg/.png/.jpeg文件调用模型进行检测得到results。提取边界框boxes若存在则统计每个类别的出现次数。生成CSV行[图像名, 各类别计数..., 该图像总目标数]写入文件。更新各类别总计数和总目标数。若saveTrue保存标注图像到runs/count/。若viewTrue显示标注图像。汇总在所有图像处理完毕后写入汇总行[总计, 各类别总计数..., 总目标数]。打印统计信息。4.2 输入源为视频文件初始化打开视频获取帧率、宽度、高度。准备视频写入器若saveTrue。准备CSV文件写入复杂表头包含帧级计数和累计计数。逐帧处理循环读取每一帧调用model.track()进行检测与跟踪参数persistTrue保持ID连续性。提取边界框boxes和跟踪IDboxes.id。若无跟踪ID则仅统计帧级目标数。统计当前帧各目标类别出现次数存入frame_class_counts。利用集合cumulative_ids_by_class记录每个类别已出现的所有跟踪ID。生成CSV行[帧号, 帧各类别计数..., 帧总计, 累计各类别计数..., 累计总计]写入文件。若saveTrue将标注帧写入输出视频若viewTrue实时显示。结束释放视频资源关闭窗口。在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, persistTrue) 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.jpg213img2.jpg044总计2576.2 视频输出的CSV格式表头帧号, 帧_person, 帧_car, ..., 帧_总计, 累计_person, 累计_car, ..., 累计_总计示例帧号帧_person帧_car帧_总计累计_person累计_car累计_总计121321323253253112325…………………总计325注累计列统计的是从视频开始到当前帧出现的独立目标总数按ID去重。7 使用示例以下代码演示如何调用count_objects函数if__name____main__:weights_pathyolov8n.pt# 模型权重data_sourcepath/to/images_or_video# 输入源conf0.25# 置信度阈值classes_to_count[0,2]# 只计数类别0和2devicecudaiftorch.cuda.is_available()elsecpusave_resultsTrue# 保存标注结果show_windowFalse# 不显示窗口csv_outputcount_results.csv# CSV输出路径count_objects(weightsweights_path,sourcedata_source,conf_thresconf,classesclasses_to_count,devicedevice,savesave_results,viewshow_window,csv_pathcsv_output)8 注意事项模型权重确保权重文件存在且与ultralytics版本兼容。设备选择若GPU可用且已安装CUDA版PyTorch建议使用devicecuda加速推理。跟踪稳定性视频计数依赖跟踪ID的稳定性复杂场景遮挡、快速运动可能导致ID切换影响累计计数的准确性。内存管理处理大量图像或长视频时注意内存使用及时释放资源代码已自动处理。文件格式图像支持.jpg,.png,.jpeg视频支持常见格式如.mp4,.avi,.mov,.mkv。CSV编码指定utf-8编码避免中文路径或文件名乱码。写在最后学术因方向、个人实验和写作能力以及具体创新内容的不同而无法做到一通百通关注我CSDN、B站及抖音Ai学术叫叫兽在所有B站资料中留下联系方式以便在科研之余为家人们答疑解惑本up主获得过国奖发表多篇SCI擅长目标检测领域拥有多项竞赛经历拥有软件著作权核心期刊等经历。因为经历过所以更懂小白的痛苦因为经历过所以更具有指向性的指导祝所有科研工作者都能够在自己的领域上更上一层楼以下为给大家庭小伙伴们免费更新过的绘图代码均配有详细教程超小白也可一键操作! 后续更多提升文章档次的资料的更新请大家庭的小伙伴关注我B站及抖音Ai学术叫叫兽

更多文章