自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 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 390

原创 动作识别9——TSN训练实验

在上一篇中我们在自建数据集上训练了TSN,在验证集上准确率是0.83。然后我们通过推理发现推理结果倾向于负样本,怀疑可能是因为正样本:负样本=1:2导致的。于是这一篇我们首先删除一半的负样本,使得正样本:负样本=1:1,看看训练结果,结果就是在epoch=18的是top1准确率达到了最佳的0.8571,但是运行测试脚本却只有0.8214。

2025-12-24 17:00:58 407

原创 SAM2跟踪的理解15——第一帧解码器之后

SAM跟踪的第一帧我们看到了MaskDecoder.forward出来以后又回到_forward_sam_heads处理了一些像上采样、obj_ptr的操作,然后就会回到了track_step,返回sam_outputs,然后只是把这些解码器输出的东西存到了current_out里面(因为第一帧没有记忆特征,所以这里没有进入记忆编码器),现在current_out里面已经相当多东西了# {# }

2025-12-23 18:03:13 717

原创 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 638

原创 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 714

原创 SAM2跟踪的理解12——mask decoder

前面几篇我们讲了transformer之前做了什么事以及transformer里面做了什么事。这一篇我们继续讲transformer之后做了什么事(这一篇看不完,下一篇再画图)。这是个非常关键的 Transformer 设计问题!的“先升后降”结构不是随意的,而是的经典范式,背后有深刻的数学和工程考量。核心原因:制造“非线性容量爆炸”直接保持 256 维的问题如果 MLP 只是# 两层线性变换一个线性层 + 两次激活致命缺陷容量不足:256×256 =65,536。

2025-12-22 14:36:29 985

原创 SAM2跟踪的理解11——mask decoder

这篇有点陷入转置矩阵出不来了,看晕了已经。就很难理解它是怎么实现的,输出尺寸公式为啥是那样。标记一下,以后看一下ConvTranspose2d实现的代码。有些东西暂时理解不了的,我觉得可以先放一放,以后知识储备上来了说不定就明白了,尤其是以后要看一下一些基础模块的代码实现的部分。

2025-12-19 17:43:40 889

原创 个人思考记录1——少样本模仿学习与分析反馈?

神经网络没有结构、没有先验、没有因果模型,所以只能。

2025-12-19 14:23:37 952

原创 SAM2跟踪的理解10——mask decoder

这一篇我们先休息一下。先回顾一下前面几篇在搞什么,然后处理一下上一篇的遗留问题。在前面的文章中,我们先说了调用transformer之前干了些什么,先弄了三个东西:src、post_src、tokens,其实这三个东西就是图像特征、图像位置编码、提示编码(包含提示的内容向量和位置向量),然后呢我们说了transformer(TwoWayTransformer)做了什么,其实就做了三个阶段(双向交互+最后精炼):第一阶段是双向交互。

2025-12-18 10:37:22 893

原创 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 651

原创 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 762

原创 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 792

原创 SAM2跟踪的理解6——mask decoder

这些是模型在训练过程中学习到的、用于生成分割掩码的特征向量。每个原型向量是一个 256 维的向量,存储在。

2025-12-16 15:55:13 981

原创 windows系统深度学习环境配置

我在windows、ubuntu系统搞过各种配置,然后就是坑很多,网上的教程很散乱。你很难想象在一个AI如此发达的时代,深度学习环境配置居然这么繁杂,为什么不是一个智能体直接一键全搞定?因为计算机领域有三大坑,一个就是版本问题,另一个就是网络问题,还有一个就是系统问题。尤其是在windows环境,特麻烦。ubuntu之类linux系统会好一些,但是搜linux那些安装命令也是很麻烦。这一篇就是写的windows下如何配置,后面有时间的话会写一下如何装双系统,ubuntu系统怎么配置等等。

2025-12-14 14:52:35 952

原创 SAM2跟踪的理解5——prompt encoder

本文分析了视频目标跟踪中的记忆融合函数_prepare_memory_conditioned_features。该函数将当前帧视觉特征与历史记忆相结合:对于初始帧直接添加无记忆嵌入;对于后续帧则收集最近条件帧和按步长采样的普通记忆帧,将其特征、位置编码及对象指针拼接为记忆序列。通过轻量级Transformer进行跨注意力计算,最终输出融合历史信息的特征图,供后续掩码解码器使用。该函数实现了将历史掩码和对象身份信息注入当前特征的关键功能。

2025-12-10 14:03:32 998

原创 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 850

原创 动作识别8——自建数据集进行TSN训练

动作识别5——mmaction2的训练和测试》里面说了官方文档介绍的使用kinetics400_tiny数据进行训练的demo。那我们就模仿kinetics400_tiny搞个数据集,然后训练TSN试试。这一篇的内容主要是写如何构建一个标注的工具。

2025-12-02 18:01:06 1096

原创 动作识别7——VideoMAE V2及mmaction2摄像头demo

上一篇我们看了一下TSM,那是一个比较轻量的算法。但是如果不考虑轻量,而考虑精度的话,可以看下VideoMAE V2。首先我测试了一下VideoMAE V2,发现它确实识别的比较准。然后我发现mmaction2并不支持训练VideoMAE V2,但是在Github上找到了它的官方仓库,并且其提供了微调训练的代码,但是微调训练要求单卡显存16G以上(12G也是极限),目前暂时没有这个条件,先放一放。随后看了几眼在第四节VideoMAE V2的论文。

2025-12-01 16:20:50 829

原创 DeepSeekMath-V2:迈向自我验证的数学推理

感觉DeepSeek/谷歌/openai基本上每次发布什么,都是在下大棋。随便看看先吧下面把 DeepSeekMath-V2 用到的「改进版 GRPO(组内对比)+ PPO」拆成两步讲:先回顾标准 PPO,再说明 GRPO 到底改了什么,以及最后把两者「混用」时的工程细节与收益概括出来。一、标准 PPO 的快速回顾采样:用当前策略 πθ 对 prompt x 生成一条回答 y,得到 r(x,y)。优势估计:靠 Critic 网络 Vφ(x) 计算 A = r − Vφ(x)(或用 GAE)。

2025-11-28 16:04:52 1222 2

原创 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

原创 SAM2跟踪的理解2

第9篇我们把第一帧发生了什么基本过了一遍,但是没看细节。这一篇我们来看看里面的细节。注意我这次调试的是SAM2 tiny,所以可能维度变化可能会跟调用SAM2 large有所不同,这个问题先标记一下,后面再讨论。感觉还是不好理解,先标记一下。“让每个 token 自己跟自己做一次非线性映射,放大/压缩特征,再决定哪些信息值得继续传下去。① 为什么逐层 Linear + 激活?Linear 负责“升维-降维”

2025-11-26 19:21:49 647

原创 SAM2跟踪的理解1

第7篇和第8篇梳理了函数调用关系,这一篇仍然会重新梳理函数调用关系。但是我感觉我要纠正一下以前那种认知方式。理解一个事物的第一步不是去直接理解事物,而是提出假设/推测。也就是说,这个过程很有可能其实是:1.调研。搜集已有的直觉上认为是重要的信息(尽管是碎片的、不理解的)2.理解。尝试理解已有的信息(根据过去的经验)3.直觉/假想/推测。(因为有过去的经验,所以会一定的推测信息把第1步的碎片话信息推测出一些关系,或者假想它是怎么运行的。

2025-11-24 18:29:08 788

原创 动作识别6——TSM算法

今天我们来看一下一个叫TSM的算法(这个算法可能比较轻量,实时性可能比较好,工具链支持可能比较成熟)。mmaction2列出的行为识别算法里面,目前来说,直觉上,TSM和VideoMAE这两个可能是需要重点看一下。作用:是的,主要为了保留当前帧的原始空间信息,同时促进训练稳定和信息流动。简单相加是残差网络的核心。这正是残差连接 (Residual Connection)的核心思想,由著名的ResNet引入。“直接传递原图”的路径被称为恒等映射。它的作用是确保当前帧的原始、未被修改的空间特征。

2025-11-20 17:19:20 712

原创 基于SAM2的眼动数据跟踪2.3——优化指定范围跟踪

在2.2中我们实现了指定范围跟踪,但是有点难受的点是我们的代码在选择跟踪范围之后就会弹出是否删除当前帧的标注的提示,然后点确认就删除了当前帧标注。但很多时候这一帧可能是本来就没有标注,那这个提示就是多余的,或者说这一帧的标注我已经不想再改了,还是强制弹出是否删除标注的提示窗口。这导致只要我们想指定范围跟踪就强制要求重新绘制范围内起始帧的标注,这很麻烦,难道不能我直接选中一个本来就标注好的帧然后直接从那一帧开始重新跟踪吗?

2025-11-18 19:05:11 1057

原创 动作识别5——mmaction2的训练和测试

在这一篇中我们根据mmaction2的官方文档跑一下“快速运行”中提到的训练和测试过程。他给出的例子是基于这个tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb_20220906-cd10898e.pth预训练模型,使用他给出的kinetics400_tiny数据集进行训练。到这里,我们了解了怎么训练和测试。接下来我们可能要把关注点放在:动作识别4中跳过的“实时摄像头demo”

2025-11-14 14:46:38 651

原创 动作识别4——mmaction2的demo

这一篇,我会跑一下mmaction2的demo,我会选择性的跑,有些实时摄像头、基于音频的动作识别啥的这种暂时就不会去跑。因为官方文档给出的命令都是linux终端+可联网情况下的,而我是windows的cmd终端+不可联网下的,所以命令我会给两份,另一份是方便我自己复制的。如果你有git的linux终端且能联网确实方便很多。在动作识别3中提到mmaction2可能里面某个文件集成了mmdet检测、mmpose姿态轨迹、mmaction2动作识别,其实后来发现demo基本都有,见4.4。

2025-11-13 16:38:47 1063

原创 动作识别3——mmpose和mmaction2

今天我们来看看怎么使用mmaction2的模型推理来实现视频动作识别,以及对于基于骨骼点的行为识别模型,我们需要知道怎么使用mmpose得到姿态估计的关键点,然后以什么样的格式给到mmaction2进行动作识别。

2025-11-12 19:00:10 1022

原创 基于SAM2的眼动数据跟踪2.2——指定范围跟踪

长时间跟踪会出现一个问题,就是目标消失比较长时间后,就比较难找回,这个想在算法层面解决感觉得研究很长时间。现在这一篇我们先通过用户交互来改善这一问题,就是说,我们提供一个按钮给用户选择要重新跟踪第几帧到第几帧的图片,这样用户只要找出跟踪效果不好的帧就可以重新跟踪了。

2025-11-11 19:28:44 902

原创 基于SAM2的眼动数据跟踪2.1——修正目标消失的记录方式

基于SAM2的眼动数据跟踪2中的第3节我有这样的观点:那能不能目标消失的话我就不写入这一帧的目标框呢?感觉上是不能,因为目标消失时你不写入,它就会认为“这个物体存在但是没移动”,所以它会“自动补充渲染物体没移动这段时间的目标框位置,其实就是在两个关键帧之间直接渲染第一个关键的目标框”,只有你写入了目标框并且把"IsActive"置为false,它才会认为“物体消失了”。

2025-11-11 17:27:05 769

原创 动作识别2——问题分析

在动作识别1中我在最后提到有些问题,即我在test1.mp4里面发现算法是没问题的,但是换了test2.mp4就出现问题了。我先捋一捋动作识别1中是如何识别脚踢动作的,然后我再分析为什么test2.mp4出现了问题。 一开始假设腿是站直的,那就是空闲状态(STATE_IDLE)。 设他的右腿的髋关节、膝关节、踝关节三个点分别是A、B、C,计算BA和BC的夹角angle_s。 假设他侧面站着,脸朝着右边且右脚站直的情况下,angle_s在174到177度左右,假设他现在

2025-11-07 18:26:43 617

原创 动作识别1——2D姿态估计+ 几何分析 + 有限状态机

我会保留探索的过程,调试的方法是每一句后面都加上print语句,然后输出到日志里面。

2025-11-06 18:43:40 654

原创 基于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 1062

原创 基于SAM2的眼动数据跟踪7——SAM2跟踪

用vscode调试,不要用pycharm调试,感觉pycharm社区版好像调试不了这种,很多函数进不去。用vscode就只要进到anylabeling/app.py然后切换到正确的conda环境,点击开始调试即可。还有个问题就是如果使用print语句调试打印输出一些信息,但是输出信息过长导致终端看不完整怎么办?运行的时候这条语句就能直接将输出信息输出到recent.log了,在recent.log里面就可以看完整的输出。我以表格的方式重新梳理了函数调用关系,同时修正了前面几篇文章遗漏的函数。

2025-11-03 09:11:17 880

原创 基于SAM2的眼动数据跟踪6——SAM2跟踪

现在我们差不多看完了,这个memory bank是指什么东西?代码里好像没有啊,应该是指memory encoder之后的一些输出?在下一篇中我们先理清一些细节,尤其是输入输出维度。

2025-10-22 16:20:49 1057

原创 基于SAM2的眼动数据跟踪5——SAM2跟踪

到这里,我们已经接近SAM2跟踪的核心函数了。前面几篇我们先看调用关系,具体细节后面再说。从video_proces函数里面调用的load_first_frame函数和track函数可以看到,两者都调用了一个叫track_step函数,看来下篇我们要看下track_step函数,它应该是SAM2跟踪的核心的共用函数。

2025-10-22 11:49:00 879

原创 基于SAM2的眼动数据跟踪4——SAM2跟踪

经过了《基于SAM2的眼动数据跟踪1~3》,我们已经实现了基于SAM2的眼动数据跟踪,生成的.aois文件是可以导入 Tobii Pro Lab软件的。但是还剩下一个问题,sam2是怎么实现跟踪的呢?我们先不分析sam2的官方源码,先分析因为代码太多了,所以会分很多篇。

2025-10-22 09:14:57 805

原创 基于SAM2的眼动数据跟踪3——python转exe

我下载的X-AnyLabeling是3.1.1版本,如果你用最新版本,可能会遇到一些需要自己解决的问题,我把它放在了D:\zero_track\X-AnyLabeling-3.1.1,如果你跟我保持一致则你可以跟我采用完全一致的步骤方法进行,否则你需要根据你的项目路径进行更改。

2025-10-21 11:23:02 652

原创 基于SAM2的眼动数据跟踪2——json转aois

到此,我们已经能将目标跟踪的结果即json文件,转为.aois文件。接下来,我们将考虑如何将整个python程序转为exe程序。

2025-10-20 14:49:32 864

原创 基于SAM2的眼动数据跟踪1——自动加载模型

到这里,我们已经实现了自动载入SAM2跟踪模型,不再需要每次都手动选择模型了。通过python anylabeling/app.py进入主界面之后,我们发现SAM2跟踪模型已经自动加载了。现在我们只要通过点击菜单栏的“文件”,选择“打开文件夹”,选择一个图片文件夹导入,然后用一个提示框或者提示点分割出第一帧的目标,然后按 f 弹出标签写入的窗口,写入标签名,然后再点击左侧最后一个按钮,就可以开始跟踪图片文件夹里面的所有图片了了。但是我们之前提到的方案中,拿到的是一个视频。

2025-10-16 11:54:17 997

原创 Bug——PaddleX人脸识别报错:Process finished with exit code -1073741819 (0xC0000005)

内网装环境是个坑。

2025-09-30 14:40:54 904

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除