目标跟踪
文章平均质量分 95
十铭忘
先去做,再优化
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SAM2跟踪的理解17——第二帧开始track
居然花了这么长时间才看完第一帧发生了什么。原创 2025-12-25 19:12:55 · 456 阅读 · 0 评论 -
SAM2跟踪的理解16——第一帧解码器后合并多个对象的掩码图
上一篇我们看到_run_single_frame_inference返回了然后我们继续看,回到add_new_prompt。之后在我当前调试的视角来看,没有做太多的事情,只是把图里面每个对象的独立掩码图 torch.Size([1, 1, 256, 256]) 合并在一起,上采样到(1080,1920)并返回 torch.Size([N, 1, 1080, 1920]) ,N是对象数。原创 2025-12-25 14:23:37 · 813 阅读 · 0 评论 -
SAM2跟踪的理解15——第一帧解码器之后
SAM跟踪的第一帧我们看到了MaskDecoder.forward出来以后又回到_forward_sam_heads处理了一些像上采样、obj_ptr的操作,然后就会回到了track_step,返回sam_outputs,然后只是把这些解码器输出的东西存到了current_out里面(因为第一帧没有记忆特征,所以这里没有进入记忆编码器),现在current_out里面已经相当多东西了# {# }原创 2025-12-23 18:03:13 · 880 阅读 · 0 评论 -
SAM2跟踪的理解14——mask decoder
上一篇中我们走出了MaskDecoder.forward的self._dynamic_multimask_via_stability函数,这一篇我们看看接下来发生什么,其实就是选择了一个稳定掩码之后返回这个掩码masks、掩码分数iou_pred、目标存在性分数object_score_logits,还有把之前我们得到的(1,4,256)的mask_tokens_out取第0个token给到变量sam_tokens_out作为物体记忆token也返回。原创 2025-12-23 15:41:04 · 657 阅读 · 0 评论 -
SAM2跟踪的理解13——mask decoder
前面几篇我们讲了transformer之前做了什么事以及transformer里面做了什么事。那么transformer之后做了什么事呢?其实就是:1. 首先transformer会输出src和hs,src就是加强后的图像编码,hs就是加强后的提示编码。2. 如果你给了两个点提示的话,这个提示编码的维度是(B,9,256),其中第0个是用于判断图像中有没有这个物体的,它会经过一个MLP之后得到图中的圆圈4(obj_score_logits)。原创 2025-12-22 17:50:24 · 1116 阅读 · 0 评论 -
SAM2跟踪的理解12——mask decoder
前面几篇我们讲了transformer之前做了什么事以及transformer里面做了什么事。这一篇我们继续讲transformer之后做了什么事(这一篇看不完,下一篇再画图)。这是个非常关键的 Transformer 设计问题!的“先升后降”结构不是随意的,而是的经典范式,背后有深刻的数学和工程考量。核心原因:制造“非线性容量爆炸”直接保持 256 维的问题如果 MLP 只是# 两层线性变换一个线性层 + 两次激活致命缺陷容量不足:256×256 =65,536。原创 2025-12-22 14:36:29 · 998 阅读 · 0 评论 -
SAM2跟踪的理解11——mask decoder
这篇有点陷入转置矩阵出不来了,看晕了已经。就很难理解它是怎么实现的,输出尺寸公式为啥是那样。标记一下,以后看一下ConvTranspose2d实现的代码。有些东西暂时理解不了的,我觉得可以先放一放,以后知识储备上来了说不定就明白了,尤其是以后要看一下一些基础模块的代码实现的部分。原创 2025-12-19 17:43:40 · 897 阅读 · 0 评论 -
SAM2跟踪的理解10——mask decoder
这一篇我们先休息一下。先回顾一下前面几篇在搞什么,然后处理一下上一篇的遗留问题。在前面的文章中,我们先说了调用transformer之前干了些什么,先弄了三个东西:src、post_src、tokens,其实这三个东西就是图像特征、图像位置编码、提示编码(包含提示的内容向量和位置向量),然后呢我们说了transformer(TwoWayTransformer)做了什么,其实就做了三个阶段(双向交互+最后精炼):第一阶段是双向交互。原创 2025-12-18 10:37:22 · 895 阅读 · 0 评论 -
SAM2跟踪的理解9——mask decoder
下面是第一帧情况下的函数调用顺序。因为文章太长我这边就卡死,所以只能划分很多篇。2.20 类PromptEncoder.get_dense_pe2.21 掩码解码器 类MaskDecoder.forward2.22 类MaskDecoder.predict_masks2.24 TwoWayAttentionBlock.forward(这篇开头在这)2.27 Attention.forward(这篇结束在这)原创 2025-12-17 16:24:43 · 654 阅读 · 0 评论 -
SAM2跟踪的理解8——mask decoder
下面是第一帧情况下的函数调用顺序。因为文章太长我这边就卡死,所以只能划分很多篇。2.20 类PromptEncoder.get_dense_pe2.21 掩码解码器 类MaskDecoder.forward2.22 类MaskDecoder.predict_masks2.26 MLP.forward(这篇开头在这)2.27 Attention.forward(这篇结束在这)这是所有“基于线性-激活交替”的 MLP 都遵循的最简有效设计最后一层已经不需要非线性。原创 2025-12-17 13:23:53 · 767 阅读 · 0 评论 -
SAM2跟踪的理解7——mask decoder
下面是第一帧情况下的函数调用顺序。2.12 <重点> add_new_prompt2.13 <重点> _run_single_frame_inference2.14 <重点> track_step2.15 <重点> _prepare_memory_conditioned_features2.17 <重点> _forward_sam_heads2.18 提示编码器:类PromptEncoder.forward。原创 2025-12-16 19:12:32 · 801 阅读 · 0 评论 -
SAM2跟踪的理解6——mask decoder
这些是模型在训练过程中学习到的、用于生成分割掩码的特征向量。每个原型向量是一个 256 维的向量,存储在。原创 2025-12-16 15:55:13 · 988 阅读 · 0 评论 -
SAM2跟踪的理解5——prompt encoder
本文分析了视频目标跟踪中的记忆融合函数_prepare_memory_conditioned_features。该函数将当前帧视觉特征与历史记忆相结合:对于初始帧直接添加无记忆嵌入;对于后续帧则收集最近条件帧和按步长采样的普通记忆帧,将其特征、位置编码及对象指针拼接为记忆序列。通过轻量级Transformer进行跨注意力计算,最终输出融合历史信息的特征图,供后续掩码解码器使用。该函数实现了将历史掩码和对象身份信息注入当前特征的关键功能。原创 2025-12-10 14:03:32 · 1005 阅读 · 0 评论 -
SAM2跟踪的理解4
下图是SAM2跟踪的第一帧的函数调用关系。从《SAM2跟踪的理解2》开始,我实际上是从那个目录的2.5开始,然后一路看到2.10,然后又回到了2.5(这就是图像编码器的过程,实际上就是通过self.trunk进入到Hirea.forward与通过self.neck进到FPN.forward)。这一篇就是讲:回到2.5之后发生了什么。对应于下面这个图,实际上就是刚刚走出image encoder。原创 2025-12-09 17:03:17 · 854 阅读 · 0 评论 -
SAM2跟踪的理解3
这段代码是的核心前向逻辑,它的设计非常精巧,“只保存第 0、2、9、11 层的特征”和“只循环 11 次”都不是偶然,而是人为设计的“稀疏金字塔”结构。✅ 问题 1:为什么只保存i=0,2,9,11这四层?这是Hiera 的稀疏金字塔策略——只在每个 stage 的最后一层保存特征图,而不是像传统 ViT 或 Swin 那样每层都保存。🔍 背景:Hiera 的 stage 划分在 Hiera 中,stage 索引block 索引范围特征图尺寸变化通道数变化stage 00256×256。原创 2025-11-27 19:29:16 · 900 阅读 · 0 评论 -
SAM2跟踪的理解2
第9篇我们把第一帧发生了什么基本过了一遍,但是没看细节。这一篇我们来看看里面的细节。注意我这次调试的是SAM2 tiny,所以可能维度变化可能会跟调用SAM2 large有所不同,这个问题先标记一下,后面再讨论。感觉还是不好理解,先标记一下。“让每个 token 自己跟自己做一次非线性映射,放大/压缩特征,再决定哪些信息值得继续传下去。① 为什么逐层 Linear + 激活?Linear 负责“升维-降维”原创 2025-11-26 19:21:49 · 651 阅读 · 0 评论 -
SAM2跟踪的理解1
第7篇和第8篇梳理了函数调用关系,这一篇仍然会重新梳理函数调用关系。但是我感觉我要纠正一下以前那种认知方式。理解一个事物的第一步不是去直接理解事物,而是提出假设/推测。也就是说,这个过程很有可能其实是:1.调研。搜集已有的直觉上认为是重要的信息(尽管是碎片的、不理解的)2.理解。尝试理解已有的信息(根据过去的经验)3.直觉/假想/推测。(因为有过去的经验,所以会一定的推测信息把第1步的碎片话信息推测出一些关系,或者假想它是怎么运行的。原创 2025-11-24 18:29:08 · 797 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪2.3——优化指定范围跟踪
在2.2中我们实现了指定范围跟踪,但是有点难受的点是我们的代码在选择跟踪范围之后就会弹出是否删除当前帧的标注的提示,然后点确认就删除了当前帧标注。但很多时候这一帧可能是本来就没有标注,那这个提示就是多余的,或者说这一帧的标注我已经不想再改了,还是强制弹出是否删除标注的提示窗口。这导致只要我们想指定范围跟踪就强制要求重新绘制范围内起始帧的标注,这很麻烦,难道不能我直接选中一个本来就标注好的帧然后直接从那一帧开始重新跟踪吗?原创 2025-11-18 19:05:11 · 1057 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪2.2——指定范围跟踪
长时间跟踪会出现一个问题,就是目标消失比较长时间后,就比较难找回,这个想在算法层面解决感觉得研究很长时间。现在这一篇我们先通过用户交互来改善这一问题,就是说,我们提供一个按钮给用户选择要重新跟踪第几帧到第几帧的图片,这样用户只要找出跟踪效果不好的帧就可以重新跟踪了。原创 2025-11-11 19:28:44 · 908 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪2.1——修正目标消失的记录方式
基于SAM2的眼动数据跟踪2中的第3节我有这样的观点:那能不能目标消失的话我就不写入这一帧的目标框呢?感觉上是不能,因为目标消失时你不写入,它就会认为“这个物体存在但是没移动”,所以它会“自动补充渲染物体没移动这段时间的目标框位置,其实就是在两个关键帧之间直接渲染第一个关键的目标框”,只有你写入了目标框并且把"IsActive"置为false,它才会认为“物体消失了”。原创 2025-11-11 17:27:05 · 770 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪8——SAM2跟踪
第7篇是video_processs函数中的if(is_first_init)为True时发生的事情,也就是调用了=> load_first_frame和add_new_prompt=> add_new_prompt => _run_single_frame_inference => _get_image_feature(没进入图像编码器) 和 track_step。原创 2025-11-03 15:02:40 · 1064 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪7——SAM2跟踪
用vscode调试,不要用pycharm调试,感觉pycharm社区版好像调试不了这种,很多函数进不去。用vscode就只要进到anylabeling/app.py然后切换到正确的conda环境,点击开始调试即可。还有个问题就是如果使用print语句调试打印输出一些信息,但是输出信息过长导致终端看不完整怎么办?运行的时候这条语句就能直接将输出信息输出到recent.log了,在recent.log里面就可以看完整的输出。我以表格的方式重新梳理了函数调用关系,同时修正了前面几篇文章遗漏的函数。原创 2025-11-03 09:11:17 · 880 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪6——SAM2跟踪
现在我们差不多看完了,这个memory bank是指什么东西?代码里好像没有啊,应该是指memory encoder之后的一些输出?在下一篇中我们先理清一些细节,尤其是输入输出维度。原创 2025-10-22 16:20:49 · 1057 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪5——SAM2跟踪
到这里,我们已经接近SAM2跟踪的核心函数了。前面几篇我们先看调用关系,具体细节后面再说。从video_proces函数里面调用的load_first_frame函数和track函数可以看到,两者都调用了一个叫track_step函数,看来下篇我们要看下track_step函数,它应该是SAM2跟踪的核心的共用函数。原创 2025-10-22 11:49:00 · 880 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪4——SAM2跟踪
经过了《基于SAM2的眼动数据跟踪1~3》,我们已经实现了基于SAM2的眼动数据跟踪,生成的.aois文件是可以导入 Tobii Pro Lab软件的。但是还剩下一个问题,sam2是怎么实现跟踪的呢?我们先不分析sam2的官方源码,先分析因为代码太多了,所以会分很多篇。原创 2025-10-22 09:14:57 · 812 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪3——python转exe
我下载的X-AnyLabeling是3.1.1版本,如果你用最新版本,可能会遇到一些需要自己解决的问题,我把它放在了D:\zero_track\X-AnyLabeling-3.1.1,如果你跟我保持一致则你可以跟我采用完全一致的步骤方法进行,否则你需要根据你的项目路径进行更改。原创 2025-10-21 11:23:02 · 655 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪2——json转aois
到此,我们已经能将目标跟踪的结果即json文件,转为.aois文件。接下来,我们将考虑如何将整个python程序转为exe程序。原创 2025-10-20 14:49:32 · 867 阅读 · 0 评论 -
基于SAM2的眼动数据跟踪1——自动加载模型
到这里,我们已经实现了自动载入SAM2跟踪模型,不再需要每次都手动选择模型了。通过python anylabeling/app.py进入主界面之后,我们发现SAM2跟踪模型已经自动加载了。现在我们只要通过点击菜单栏的“文件”,选择“打开文件夹”,选择一个图片文件夹导入,然后用一个提示框或者提示点分割出第一帧的目标,然后按 f 弹出标签写入的窗口,写入标签名,然后再点击左侧最后一个按钮,就可以开始跟踪图片文件夹里面的所有图片了了。但是我们之前提到的方案中,拿到的是一个视频。原创 2025-10-16 11:54:17 · 1001 阅读 · 0 评论
分享