YOLO之trt推理+Diou/iou目标跟踪以及计数【附代码】

news/2024/4/26 20:00:39/文章来源:https://blog.csdn.net/z240626191s/article/details/129147333

本篇文章是对之前YOLOv4 tensorrt推理项目的更新,在trt推理,多进程语音报警的功能中又新添加了目标跟踪【可用于目标计数】

采用IOU进行跟踪【也可以选用DIOU】。

yolov4+deepsort可以参考我另一篇:yolov4+deepsort

说明:

本项目做的是单目标的跟踪,可以实现对特定类别的跟踪。iou目标跟踪效果还是比较差。适用于场景变换不大,物体移动速度慢的场景,只是检测速度会比deepsort的要快一些,如果对跟踪效果要求比较高,还是建议采用deepsort。

后期会更新CIOU进行目标跟踪。


利用iou进行跟踪是比较简单的,也是目标检测中最为常用的手段,但与目标检测还是不一样,在目标检测的iou过滤中【指预测部分】,是将大于阈值的目标过滤掉,保留小于阈值的,在训练阶段是将target box与output的box iou大的保留下来表示正样本的匹配。

而在目标跟踪中,是将目标前一帧和后一帧的box计算iou,如果大于阈值说明是同一目标。

iou对box的处理可以参考我另一篇文章:采用iou过滤预测框


这里直接附上利用iou做跟踪的代码。

 主要是返回两个值,

一个是target_dict:包含了目标的id以及box信息【x1,y1,x2,y2,score,iou的值】。

另一个是target_index:目标的ID,可以用来做计数。

当判断大于iou阈值的时候会将信息记录在reg_dict中,并设置is_track为True.如果是新目标的时候,target_index + 1.代码中的输入box_data值的是当前帧【也就是model的输出结果】,target_dict中的box信息是前一帧的信息,用这两个box计算iou。

代码注解我也都标注出来了。

'''
采用iou进行目标的跟踪,对前一帧和当前帧iou判断是否为同一目标
'''
import copydef compute_iou(box_a, box_b, diou=True):S_rec1 = (box_a[2] - box_a[0]) * (box_a[3] - box_a[1])S_rec2 = (box_b[2] - box_b[0]) * (box_b[3] - box_b[1])# 并集面积sum_area = S_rec1 + S_rec2left_X = max(box_a[1], box_b[1])  # 相交的左上角left_Y = max(box_a[0], box_b[0])right_X = min(box_a[3], box_b[3])  # 相交的右下角right_Y = min(box_a[2], box_b[2])# ----------------用来算diou内容--------------------center_a_x = (box_a[3] - box_a[1]) / 2 + box_a[1]center_a_y = (box_a[2] - box_a[0]) / 2 + box_a[0]center_b_x = (box_b[3] - box_b[1]) / 2 + box_b[1]center_b_y = (box_b[2] - box_b[0]) / 2 + box_b[0]# 计算两个框中心点的欧式距离center_distance = (center_b_x-center_a_x)**2 + (center_b_y-center_a_y) ** 2# 计算两个框最小矩形的左上角和右下角closebox_min_x = min(box_a[1], box_b[1])closebox_min_y = min(box_a[0], box_b[0])closebox_max_x = max(box_a[3], box_b[3])closebox_max_y = max(box_a[2], box_b[2])# 计算两个框最小矩形的对角线距离closebox_distance = (closebox_min_x-closebox_max_x)**2 + (closebox_min_y- closebox_max_y)**2# -------------------------------------------------if left_X >= right_X or left_Y >= right_Y:return 0.else:# 相交的面积inter_area = (right_X - left_X) * (right_Y - left_Y)iou = inter_area / (sum_area - inter_area)return iou - (center_distance/closebox_distance) if diou else ioudef tracking_box(box_data, target_dict, track_index, iou_thre=0.8):reg_dict = {}  # 用来记录识别id以及信息# box_data是列表形式for bbox in box_data:  # box_data会保存目标坐标,每个元素bbox是元组的形式,包含内容(x1.y1,x2,y2,score)xa0, ya0, xa1, ya1, score = bbox  # 当前帧目标的boxis_tracke = False  # 状态初始化for k_ in target_dict.keys():xb0, yb0, xb1, yb1, s, _ = target_dict[k_]  # 前一帧的boxiou_ = compute_iou((ya0, xa0, ya1, xa1), (yb0, xb0, yb1, xb1))if iou_ > iou_thre:  # 跟踪目标成功reg_dict[k_] = (xa0, ya0, xa1, ya1, score, iou_)is_tracke = True  # 跟踪√# print('iou_', iou_)if not is_tracke:  # 表示新的目标reg_dict[track_index] = (xa0, ya0, xa1, ya1, score, 0.)  # 记录目标id以及信息track_index += 1if track_index >= 65535:  # 越界归零track_index = 0if track_index >= 100:track_index = 0target_dict = copy.deepcopy(reg_dict)  # 记录target信息# print(target_dict)return target_dict, track_indexdef target_tracking(box_data, target_dict, track_index):target_dict, track_index = tracking_box(box_data, target_dict, track_index)return target_dict, track_index

代码:

git clone --branch v3.0 https://github.com/YINYIPENG-EN/YOLOv4_tensorRT_pytorch.git 

 python predict.py --weights [weight path] --video --video_path 0 --engine --track --track_class person

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72274.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多层感知机的区间随机初始化方法

摘要: 训练是构建神经网络模型的一个关键环节,该过程对网络中的参数不断进行微调,优化模型在训练数据集上的损失函数。参数初始化是训练之前的一个重要步骤,决定了训练过程的起点,对模型训练的收敛速度和收敛结果有重要…

Java基础43 异常(Exception)

异常(Exception)Exception1.1 异常的概念1.2 异常体系图(☆)1.3 异常处理分类1.3.1 运行时异常(☆)1.3.2 编译时异常(☆)1.4 异常处理(☆)1.4.1 try-catch异常…

【Git】Git下载安装与使用(一)

目录 1. 前言 1.1 什么是Git 1.2 使用Git能做什么 2. Git概述 2.1 Git简介 2.2 Git下载与安装 3. Git代码托管服务 3.1 常用的Git代码托管服务 3.2 码云代码托管服务 1. 前言 1.1 什么是Git Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码…

Cookies与Session会话技术详解

引言:日常生活中,人和人之间沟通交流,涉及到一个词----会话,软件中一样存在会话,如:网购登录,访问公司OA系统也是不断的会话,软件中如何管理浏览器客户端和服务端之间会话过程中的会话数据呢&am…

盘点四种自动化测试模型实例及优缺点

一,线性测试 1.概念: 通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。 (操作,重复操作,数据)都混合在一起。 2.优点: 每个脚本相对独立&#xff0…

【java】java sftp传输 ,java smb传输访问共享文件夹 集成springboot

文章目录java的sftp传输sftp注意事项java smb传输smb注意事项tips: 集成springboot与不集成springboot区别不大,springboot中无非是引入一个maven依赖 加一个Component注解 , 默认是单例; 复制代码前 请先认真看注意事项 java的sftp传输 依赖…

网络安全态势感知研究综述

摘要:随着物联网、云计算和数字化的迅速发展,传统网络安全防护技术无法应对复杂的网络威胁。网络安全态势感知能够全面的对网络中各种活动进行辨识、理解和预测。首先分别对态势感知和网络安全态势感知的定义进行了归纳整理,介绍了网络安全态…

从0探索NLP——导航帖

从0探索NLP——导航帖 人工智能是一个定义宽泛、知识组成复杂的领域,而NLP是人工智能领域中的一类任务,他在哪呢?Emmmmm~不能说都有涉猎只能说全都都沾点: 每次想要针对NLP的某一点进行讲解时,不讲那写细枝末节&…

全链路压力测试

压力测试的目标: 探索线上系统流量承载极限,保障线上系统具备抗压能力 复制代码 如何做全链路压力测试: 全链路压力测试:整体步骤 容量洪峰 -》 容量评估 -》 问题发现 -》 容量规划 全链路压力测试:细化过程 整体目…

YOLOv6-3.0-目标检测论文解读

文章目录摘要算法2.1网络设计2.2Anchor辅助训练2.3自蒸馏实验消融实验结论论文: 《YOLOv6 v3.0: A Full-Scale Reloading 》github: https://github.com/meituan/YOLOv6上版本参考 YOLOv6摘要 YOLOv6 v3.0中YOLOv6-N达到37.5AP,1187FPS&…

linux下安装minio

获取 MinIO 下载 URL:访问:https://docs.min.io/ 一,进入/opt 目录,创建minio文件夹 cd /optmkdir minio二,wget下载安装包 wget https://dl.minio.io/server/minio/release/linux-amd64/minio三,进入minio文件夹创建…

如何使用 API 工具做 Websocket 测试

在 API 测试中,对 Websocket 协议的支持呼声越来越高,今天给大家推荐一款 开源的 API 管理工具——Postcat,以及教教大家,如何利用 API 管理工具做 Websocket 测试。 在线 Demo 链接:Postcat - Open Source API Ecosys…

广域网技术(PAP和CHAP)

第十六章:广域网技术 随着经济全球化与数字化变革加速,企业规模不断扩大,越来越多的分支机构出现在不同的地域。每个分支的网络被认为一个LAN(Local Area Network,局域网),总部和各分支机构之间…

音频(九)——I2S 输出正弦波

I2S 输出正弦波 PC 端:先生成一个正弦波数组MCU 端:将正弦波数组使用 I2S 输出AP 端:接受从 MCU I2S 端口出来的正弦波数据并测量 THDN 等数据 PC 端生成正弦波数组 原理 三角函数的公式 yAsinxy AsinxyAsinx A 表示幅值 代码实现 源…

深入浅出C++ ——容器适配器

文章目录一、容器适配器二、deque类简介1. deque的原理2. deque迭代器3. deque的优点和缺陷4. 为什么选择deque作为stack和queue的底层默认容器一、容器适配器 适配器的概念 适配器是STL六大核心组件之一,它是一种设计模式,该种模式是将一个类的接口转换…

国家级高新区企业主要经济指标(2012-2021年)

数据来源:国家统计局 时间跨度:2012-2021 区域范围:全国(及各分类统计指标) 指标说明:手工提取最新的中国统计年鉴数据中各个excel指标表,形成各个指标文件的多年度数据,便于多年…

SpringBoot整合Spring Security过滤器链加载执行流程源码分析

文章目录1.引言2.Spring Security过滤器链加载1.2.注册名为 springSecurityFilterChain的过滤器2、查看 DelegatingFilterProxy类3.查看 FilterChainProxy类3.1 查看 doFilterInternal方法。3.2 查看 getFilters方法。4 查看 SecurityFilterChain接口5 查看 SpringBootWebSecur…

90%的人都理解错了HTTP中GET与POST的区别

Get和Post是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是Get把参数包含在URL中,Post通过request body传递参数。 你可能自己写过无数个Get和Post请求,或者已经看过很多权威网站总结…

制造企业为何要上数字化工厂系统?

以目前形势来看,数字化转型是制造企业生存的关键,而数字化工厂管理系统是一个综合性、系统性的工程,波及整个企业及其供应链生态系统。数字化工厂系统所要实现的互联互通系统集成、数据信息融合和产品全生命周期集成,将方方面面的…

国产真无线蓝牙耳机哪个好?国产半入耳蓝牙耳机推荐

近几年,生活中随处可见的有戴蓝牙耳机的人,而蓝牙耳机也因为使用更便捷、功能更先进受到了不少用户的喜爱。蓝牙耳机按照佩戴方式来划分,可以有入耳式、半入耳式、头戴式等。在此,我来给大家推荐几款国产半入耳蓝牙耳机&#xff0…