建网站需要什么人常德小程序开发公司

web/2026/1/12 8:28:01/文章来源:
建网站需要什么人,常德小程序开发公司,网页制作流程及详细步骤,做网站 域名不属于文章目录 一、前言二、代码详解2.1、新起航迹2.2、预测2.3、匹配2.4、结果发布2.5、总结 三、流程图四、部署 一、前言 论文地址#xff1a;https://arxiv.org/pdf/2110.06864.pdf git地址#xff1a;https://github.com/ifzhang/ByteTrack ByteTrack 在是在 2021 年 10 月… 文章目录 一、前言二、代码详解2.1、新起航迹2.2、预测2.3、匹配2.4、结果发布2.5、总结 三、流程图四、部署 一、前言 论文地址https://arxiv.org/pdf/2110.06864.pdf git地址https://github.com/ifzhang/ByteTrack ByteTrack 在是在 2021 年 10 月公开发布的在ECCV 2022中获奖。它以一种简单的设计方式击败了当时各路“魔改”跟踪器在 MOT17 数据上首次突破了80 MOTA并且在单张 V100 中推理速度高达 30 FPS。 我把 ByteTrack 核心思想概括为 区分高置信度检测框与低置信度检测框不同置信度检测框采取不同处理方式。保留低置信度检测框在后续可能会重新确认为 confirm 状态。而不是像传统 MOT 算法选择删除。 ByteTrack 可以有效解决一些遮挡且能够保持较低的 IDSwith。目标会因为被遮挡检测置信度有所降低当重新出现时置信度会有所升高。可以想象 当目标逐渐被遮挡时跟踪目标与低置信度检测目标匹配。当目标遮挡逐渐重现时跟踪目标与高置信度检测目标匹配。 另外要慎重考虑并处理检测的假阳性无目标检测出低置信度框的情况。 网上常常把DeepSort与ByteTrack进行比较关于ByteTrack与 DeepSort他们各有限制我们要根据实际情况选用合适的算法。 ByteTrack跟踪效果非常依赖检测的效果。如果检测器的效果好跟踪也会取得不错的效果。DeepSort使用了外观描述符和复杂的匹配算法可能在某些复杂场景下计算量较大影响实时性能。 二、代码详解 要真正理解通、理解透啃源码是必不可少的。也不是说非要看懂源码才可以跑通项目而是看懂之后可以吹牛也不是为了非要吹牛至少你自己也有成就感。 废话不多说直接来代码详解这一节有点难度。如果一时理解不了可以先点赞收藏后续再慢慢啃。。。 方便理解不按照代码顺序按照航迹起始到消亡顺序分析。 2.1、新起航迹 只有是高大于 high_thrash 置信度框才可以新起航迹。区分高低置信度检测框阈值是 track_thresh 0.5。但一般high_thresh设定的值要比 track_thresh 大。如high_thresh 0.6。新起的航迹中 state Tracked只第一帧新起航迹 is_activated True否则is_activated false。 this-state TrackState::Tracked;if (frame_id 1){this-is_activated true;}//this-is_activated true;this-frame_id frame_id;this-start_frame frame_id;总结当第一帧时航迹本身为空时只有置信度超过 high_thresh 时才新起始航迹 此时state Trackedis_activated true。后续只有未匹配的且置信度很高超过high_thresh 时才新起始航迹此时state Trackedis_activated false。 2.2、预测 合并is_activated true 与 state Lost 航迹。合并后进行预测预测遵循kalman滤波预测。 每个新的检测信息都会初始化一个 STrack 对象此对象是否能新起航迹前文已经明确了。源码中的 tlbr 顺序是个坑顺序并非是topleftbottomright。实际上是lefttoprightbottom。刚开始我也理解错了至今我都未明白为什么用这种顺序命名。 if (objects.boxes.size() 0){for (int i 0; i objects.boxes.size(); i){std::vectorfloat tlbr_; // x1,y1,x2,y2tlbr_.resize(4);tlbr_[0] objects.boxes[i].x;tlbr_[1] objects.boxes[i].y;tlbr_[2] objects.boxes[i].x objects.boxes[i].w;tlbr_[3] objects.boxes[i].y objects.boxes[i].h;float score objects.boxes[i].score;STrack strack(STrack::tlbr_to_tlwh(tlbr_), score);if (score track_thresh){detections.push_back(strack);}else{detections_low.push_back(strack);}}}tlbr_to_tlwh 会把 x1,y1,x2,y2 转化成 x1,y1,w,h。 新起航迹时activate 函数中 tlwh_to_xyah ,会把 x1, y1, w, h 转变为 xCenteryCenterw / hh。然后放进 kalman 滤波初始化初始化其状态与协方差。 void STrack::activate(byte_kalman::KalmanFilter kalman_filter, int frame_id) { 此处省略代码auto mc this-kalman_filter.initiate(xyah_box); 此处省略代码 }此时 _motion_mat 为一个 8*8 的矩阵。对应运动状态方程为匀速。 box 状态 mean为xCenter,yCenter,w/h,h,Vx,Vy,Vr,Vh。 预测predict 获得新状态 new_mean _motion_mat * mean.T void KalmanFilter::predict(KAL_MEAN mean, KAL_COVA covariance){//revise the data;DETECTBOX std_pos;std_pos _std_weight_position * mean(3),_std_weight_position * mean(3),1e-2,_std_weight_position * mean(3);DETECTBOX std_vel;std_vel _std_weight_velocity * mean(3),_std_weight_velocity * mean(3),1e-5,_std_weight_velocity * mean(3);KAL_MEAN tmp;tmp.block1, 4(0, 0) std_pos;tmp.block1, 4(0, 4) std_vel;tmp tmp.array().square();KAL_COVA motion_cov tmp.asDiagonal();KAL_MEAN mean1 this-_motion_mat * mean.transpose();KAL_COVA covariance1 this-_motion_mat * covariance *(_motion_mat.transpose());covariance1 motion_cov;mean mean1;covariance covariance1;}更新协方差 covariance _motion_mat * convariance *_motion_mat.T motion_cov 。 montion_cov为过程噪声矩阵。一般可以保持不变初始化时可以设定源码中设定为与 w/h 相关的对角矩阵。 2.3、匹配 这部分是整个论文思想的亮点也是代码中容易让人混淆的地方。 第一次匹配 预测框与高置信度检测框 预测框2.2中的跟踪预测框。他们state为Tracked或Lost高置信度检测框置信度大于track_thresh中的检测框文中track_thresh 设定为0.5。 文中采取了计算 iou 进行匹配预测框与检测框的交并比。 当预测框匹配上时此时state Tracked,is_activated true。 匹配上后需要更新框的状态mean与协方差covariance。 kalman中update KAL_DATAKalmanFilter::update(const KAL_MEAN mean,const KAL_COVA covariance,const DETECTBOX measurement){KAL_HDATA pa project(mean, covariance);KAL_HMEAN projected_mean pa.first; // x,y,r,hKAL_HCOVA projected_cov pa.second; // _update_mat * covariance * (_update_mat.transpose()) diagEigen::Matrixfloat, 4, 8 B (covariance * (_update_mat.transpose())).transpose();Eigen::Matrixfloat, 8, 4 kalman_gain (projected_cov.llt().solve(B)).transpose(); // eg.8x4Eigen::Matrixfloat, 1, 4 innovation measurement - projected_mean; //eg.1x4auto tmp innovation * (kalman_gain.transpose());KAL_MEAN new_mean (mean.array() tmp.array()).matrix();KAL_COVA new_covariance covariance - kalman_gain * projected_cov*(kalman_gain.transpose());return std::make_pair(new_mean, new_covariance);}首先进入project函数得到 projected_mean 与 projected_con。我们先看 project 进行了什么操作。 KAL_HDATA KalmanFilter::project(const KAL_MEAN mean, const KAL_COVA covariance){DETECTBOX std;std _std_weight_position * mean(3), _std_weight_position * mean(3),1e-1, _std_weight_position * mean(3);KAL_HMEAN mean1 _update_mat * mean.transpose();KAL_HCOVA covariance1 _update_mat * covariance * (_update_mat.transpose());Eigen::Matrixfloat, 4, 4 diag std.asDiagonal();diag diag.array().square().matrix();covariance1 diag;return std::make_pair(mean1, covariance1);}mean 1*8矩阵xCenter, yCenter, w/h, h, Vx, Vy, Vr, Vh mean1 相当于提取了 mean 中前四个元素。 covariance1 是为了方便后续更新 covariance 一个中间量。 diag 为测量噪声协方差文中设定与过程噪声矩阵类似。 kalman_gain 为卡尔曼增益原本需要求 projected_cov 的逆矩阵再与 B 矩阵相乘求得这里直接通过解线性方程组的形式求的省略了一些计算步骤。 new_mean 与 new_covariance 为新的 box 状态与 新的协方差。 预测框与高置信度检测框匹配成功后无论此时目标 state 为Tracked 还是 Lost都需更新为Tracked状态且is_activated 均更新为 true。且都需要进行 kalman 中 update 操作。 一旦目标匹配后 1目标的state 均变为 Tracked 2目标的is_activated 均变为true 3目标的mean与covariance均需update 第一次未匹配上的预测框与检测框额外缓存。方便后续操作。 第二次匹配 第一次未匹配的预测框与低置信度检测框 第一次未匹配的预测框第一次未匹配上state为Tracked的预测框。state为Tracked表明该目标为上一帧匹配上的目标低置信度检测框置信度小于track_thresh中的检测框文中track_thresh 0.5。 匹配仍然计算iou匹配。匹配上的目标与第一次匹配类似处理。未匹配上的目标会被标记state后续可能会被修改为Lost。 第三次匹配 is_activatedfalse 的跟踪框与第一次未匹配的高置信度检测框 is_activatedfalse的跟踪框上一帧新起的目标只有上一帧新起的目标is_activate才为false,且此时的框并未做predict处理也就是说用的上一帧的原始检测框匹配第一次未匹配的高置信度检测框置信度大于track_thresh但是第一次未与状态为is_activated跟踪目标匹配。 如果目标匹配上则1state Tracked2is_activated true3mean 与 covariance 均 update。 如果目标未匹配上此时状态会变为 Removed此目标会被永久移除。为了要连续两规避偶尔出现某一帧假阳性至少需帧高置信度的检测才可被 confirm有机会参与后续计算。 2.4、结果发布 在发布结果前需要变更BYTETrack类成员变量的值。 当 Lost 状态超过 max_time_lost时state 从 Lost 变为 Removed此目标被永久遗忘。max_time_lost 构造函数时就已经设定。设定10或者30根据实际情况调整。当成员 state 从 Lost 变为 Tracked 或 Remove d时this-lost_stracks 需剔除id一致的。 this-lost_stracks sub_stracks(this-lost_stracks, this-tracked_stracks); this-lost_stracks sub_stracks(this-lost_stracks, this-removed_stracks); remove_duplicate_stracks(resa, resb, this-tracked_stracks, this-lost_stracks); // 移除 重复路径当有重复路径时存活帧数一致航迹相似。也需剔除此lost航迹。 输出结果只有当 is_activated true、stateTracked 时才会输出目标 2.5、总结 检测目标未匹配上时只有当置信度大于 0.6 才可以新起航迹其他情况直接被遗忘。此时新起航迹 is_activated 为 false第一帧不同第一帧新起航迹 is_activated 默认为 true当与下一帧置信度大于 0.5 的检测目标在第三次匹配匹配上时is_activatedfalse 的目标没资格参与前两次匹配此时 is_activated 变为 true。此时被标记为 confirm才有资格被输出。跟踪航迹在匹配中成功匹配此时无论 state tracked、is_activatedtrue。可以参与下一帧匹配中的前两次匹配。如果前两次匹配都未成功则此时 state Lost只能参与下一帧第一次匹配如果连续 max_time_lost 帧在第一次匹配都未匹配上此时会被遗忘 Removed永久移除此航迹。 三、流程图 要是看到这里还没看明白再给你一张我自制的流程图。 四、部署 要是实在看不明白源码也不想明白只想在本地跑跑效果看看。那就直接看这里。 环境linux cmake编译 数据集https://motchallenge.net/data/MOT17/ git地址https://github.com/ifzhang/ByteTrack 先 clone 源码下来。链接前文已经给出。c 代码在 deploy 文件夹下博主选用的 ncnn\cpp 文件夹下的代码。下方有 include 与 src 就是全部代码了。 CMakeLists.txt 缺啥链接啥。 mian.cpp 文件 大概思路就是读取 det.txt 文件保存每一帧的检测结果。给个大概得代码 BYTETracker byteTrack BYTETracker(10, 30); for (int fi 0; fi maxFrame; fi) { // maxFrame 帧std::vectorObjectTrack trackResult;byteTrack.update(detFrameData[fi], trackResult); }trackResult为自己定义的结果 只需对 BYTETracker.cpp 文件引用进去, 把 update 修改为 void BYTETracker::update(const DetectInfo objects, std::vectorObjectTrack outTracks) {// 在函数末尾 添加代码for (auto i 0; i output_stracks.size(); i){outTracks.push_back({static_castuint(output_stracks[i].track_id), static_castuint(output_stracks[i].tlbr[0]),static_castuint(output_stracks[i].tlbr[1]),static_castuint(output_stracks[i].tlbr[2]),static_castuint(output_stracks[i].tlbr[3]),output_stracks[i].score });} }这时候已经拿到结果了后续只需在相应的图片可视化相应结果就大功告成了[喝彩.jpg]。机智的你已经行动起来了。

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

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

相关文章

网站开发建设中企动力科技集团有限公司

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.选项卡是什么 二.选项卡在什么时候使用…

大公司网站建设建网站漳州seo网站快速排名

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

网站怎么才有alexa排名做的网站错位怎么办

一个网格通常具有许多的列(column)与行(row),以及行与行、列与列之间的间隙,这个间隙一般被称为沟槽(gutter)。 创建一个网格容器 display: grid;设置列 grid-template-columns: …

响应式网站模板多少钱天津网站制作报价

全世界只有3.14 % 的人关注了爆炸吧知识看着孩子的作业题,有多少爸爸妈妈感叹着,幸亏自己毕业早,要不然小学都不能毕业!这不,最近一道简单的小学数学题,又刷爆了家长们的朋友圈。一起往下看。算一算图中的这…

海拉尔做网站宁波网站建设信任蓉胜网络好

因为Linux Kernel 4.20默认启用了Spectre补丁STIBP,所以导致性能的下降,下降幅度甚至达到了50%,目前STIBP已经被移除,在最新发布的Linux Kernel 4.19.4、4.14.83内核当中已经移除了STIBP补丁。据称Linux Kernel 4.20就是启用了Spe…

seo怎么优化网站怀化建设公司网站

问题描述: 解题思路: 暴力超时,S变换得S a1*(a2.....an) a2*(a3....an) .... an-1*an。因此只需要求出括号内前缀和再相加求和即可。时间复杂度大大减小。 注意点:ans和前缀和的大小要开long long。 题解: #includ…

百度云建网站网站超市系统 源码

背景: 接口地址为:ws://sunlei.demo 接口说明:websocket接口,首次连接,通过Text请求设置开启标志,然后通过wav文件流传输,达到后端服务可以根据传输信息进行解析满足指定标准后,web…

杭州论坛网站建设小程序在线开发

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍…

设计网站还有哪些问题全国做网站的大公司

目录 题目 背包状态转移方程 0-1背包 完全背包 解决方案 题目 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金…

优化网站页面网站定制化开发介绍

在众多视频整合项目中,一个显著的趋势是融合多元化的视频资源,以实现统一监管与灵活调度。这一需求促使项目团队不断探索新的集成方案,确保不同来源的视频流能够无缝对接,共同服务于统一的调看与管理平台,进而提升整体…

阿里云可以建设网站吗宁德企业网站建设

文章目录 云计算的演进云原生架构1. 容器化2. 微服务3. 自动化部署和扩展4. 故障恢复 自动化运维1. 基础设施即代码(IaC)2. 运维自动化示例:使用Ansible自动化配置管理 3. 自动化监控和报警 未来展望1. 更多的自动化2. 多云混合云3. 边缘计算…

南京微信网站建设wordpress 缩减sql

什么情况下存在默认构造函数 说明 如果一个Java类没有显式包含构造函数的声明,那么隐含着有一个默认构造函数。 示例 定义一个类B,没有显式声明构造函数,所以存在一个默认构造函数: package com.thb;public class B {public …

阿里云 ip 网站长春网站设计公司排名

1、简单介绍 继前面发布的 GroundingDino 和 Open-GroundingDino的推理 和 Open-GroundingDino的训练实现,作为 GroundingDino延续性的文本检测网络 MM-Grounding-DINO 也发布了较详细的 训练和推理实现教程,而且操作性很强。作为学习内容,也…

威海网站制作有哪些公司做网站

CTF(Capture The Flag)竞赛是一个有趣的挑战。密码学是CTF竞赛中的核心元素之一,通常涉及解密、破译密码、理解加密算法等技能。以下是30个题目及答案,新入行的可以看看鸭。 题目及答案 1. Caesar Cipher 描述:给出一…

特产网站建设策划书福州做网站费用

一.概述 程序执行时间打印是优化程序的的重要手段&#xff0c;本文为用c接口实现打印时间的三种方法。本文程序均在qt5.12环境测试验证。 二.测试代码 1.方法一 使用 time() 测量秒数 #include <stdio.h> #include <time.h> int main() { // 获取操作前的当前时…

常德网站设计wordpress打通公众号

以前以为html元素中的id和class等只能通过字母数字或者下划线等特殊字符命名&#xff0c;如果单存使用中文浏览器不会报错&#xff0c;但是js是获取不到的&#xff0c;但是今天逛论坛的时候发现不是这样的。代码如下&#xff1a;运行结果&#xff1a;论坛来源是这个&#xff1a…

网站升级正在升级维护vip影视网站如何做app

Polly是.NET生态非常著名的组件包一 介绍Polly 的能力• 失败重试&#xff1a;当我们服务调用失败时&#xff0c;能够自动的重试• 服务熔断&#xff1a;当我们服务部分不可用时&#xff0c;我们的应用可以快速响应一个熔断结果&#xff0c;避免持续的请求这些不可用的服务而导…

全国最大网站建站公司网站的现状

XML DOM 简介 XML DOM(XML Document Object Model)是一种用于XML文档的标准编程接口。它定义了一种方式,允许程序和脚本动态地访问和更新文档的内容、结构和样式。XML DOM 将 XML 文档视为一个树形结构,其中每个节点都代表文档中的一个元素、属性、文本或其他内容。 XML …

网站流量一直做不起来旅游网站建设步骤

织机原理为什么为什么&#xff1f; Java 8流背后的驱动程序之一是并发编程。 在流管道中&#xff0c;指定要完成的工作&#xff0c;然后任务将自动分配到可用处理器上&#xff1a; var result myData.parallelStream().map(someBusyOperation).reduce(someAssociativeBinOp)…