首页 > 编程语言 >【VOS源码解析-2024CVPR-Cutie】1、train_wrapper结构解析

【VOS源码解析-2024CVPR-Cutie】1、train_wrapper结构解析

时间:2025-01-21 16:59:41浏览次数:3  
标签:dim num objects 2024CVPR self 源码 ms 解析 feat

源码解析

论文阅读

1、数据预处理

    def forward(self, data: Dict):
        out = {}
        frames = data['rgb']  #输入的RGB帧序列
        first_frame_gt = data['first_frame_gt'].float()  #第一帧的ground truth
        b, seq_length = frames.shape[:2]  #批量大小和序列长度
        # 在数据集预处理过程中,选取的对象数量数不超过train_config中num_objects参数的值
        num_filled_objects = [o.item() for o in data['info']['num_objects']]  #每个样本中实际存在的目标数量,将其转换为python列表
        max_num_objects = max(num_filled_objects)  #最大目标数量
        first_frame_gt = first_frame_gt[:, :, :max_num_objects]  #根据最大目标数量裁剪第一帧的gt标注
        selector = data['selector'][:, :max_num_objects].unsqueeze(2).unsqueeze(2)  #用于选择特定目标的张量

        num_objects = first_frame_gt.shape[2]
        out['num_filled_objects'] = num_filled_objects

        def get_ms_feat_ti(ti):
            return [f[:, ti] for f in ms_feat]  #提取ms_feat中提取第ti时刻的特征

        with torch.cuda.amp.autocast(enabled=self.use_amp):
            frames_flat = frames.view(b * seq_length, *frames.shape[2:])

在这里插入图片描述
数据预处理如代码和图所示,最开始的输入数据data是一个字典类型,它包含以下五个变量,这里只说最重要的三个变量。

  • 输入数据(data:Dict)
    • rgb:输入的原始视频帧,shape为(b, t, c, h, w)
    • first_frame_gt:第一帧视频帧的注释mask,shape为(b, num_ojects, c, h, w)。
      • 这里的num_objects是train_config中设置的参数值(具体位置是cutie/cutie/config/train_config.yaml)
      • num_objects代表model预先设置的能接受的最大对象数+1,这里的1是背景
      • 在生成第一帧gt图时,会根据num_objects设置shape大小。若原始视频的对象数小于num_objects-1,则后面几个维度设为空。若原始视频的对象数大于num_objects-1,则随机挑选num_objects-1个对象进行训练。
    • selector:shape为(1, num_objects)
      代码对输入数据的处理为:
  • 输入数据处理
    • 对rgb图像进行展平处理,并存储为变量frames_flat
    • 对first_frames_gt按照视频中出现过的最大对象数进行裁段
    • 对selector按照视频中出现过的最大对象数进行裁段,并扩充维度

2、视频帧特征提取

在这里插入图片描述

2.1 pixel encoder 特征提取

  • pixel encoder
    • resnet50的前三层,每一层输出一个特征图
    • 输出为ms_feat(resnet50的前三层特征图)以及pix_feat(对第三层特征图的通道维度进行压缩)
  with torch.cuda.amp.autocast(enabled=self.use_amp): #按照预设值决定是否启用混合精度计算
            frames_flat = frames.view(b * seq_length, *frames.shape[2:]) #将frames展平,由原来的b, t, c,h, w变为b*t, c, h, w
            ms_feat, pix_feat = self.encode_image(frames_flat)
    def encode_image(self, image: torch.Tensor) -> (Iterable[torch.Tensor], torch.Tensor):
        image = (image - self.pixel_mean) / self.pixel_std
        ms_image_feat = self.pixel_encoder(image)
        return ms_image_feat, self.pix_feat_proj(ms_image_feat[0])
   'self.pix_feat_proj = nn.Conv2d(self.ms_dims[0], self.pixel_dim, kernel_size=1)'

2.2 tranformer_key

对ms_feat的第三个特征图进行关键特征提取:

  • 先统一压缩至256维
  • key特征图:将256维度的特征图再压缩至64维
  • shrinkage:将256维度的特征图压缩维1维
  • selection:将256维的特征图压缩至64维后,再输入进sigmoid函数
with torch.cuda.amp.autocast(enabled=False):  #禁止混合精度计算,确保transformer_key中的所有操作全部以精度运行
     keys, shrinkages, selections = self.transform_key(ms_feat[0].float())   
class KeyProjection(nn.Module):
    def __init__(self, model_cfg: DictConfig):
        super().__init__()
        in_dim = model_cfg.pixel_encoder.ms_dims[0] #1024
        mid_dim = model_cfg.pixel_dim #256
        key_dim = model_cfg.key_dim #64

        self.pix_feat_proj = nn.Conv2d(in_dim, mid_dim, kernel_size=1)
        self.key_proj = nn.Conv2d(mid_dim, key_dim, kernel_size=3, padding=1)
        # shrinkage
        self.d_proj = nn.Conv2d(mid_dim, 1, kernel_size=3, padding=1)
        # selection
        self.e_proj = nn.Conv2d(mid_dim, key_dim, kernel_size=3, padding=1)

        nn.init.orthogonal_(self.key_proj.weight.data)
        nn.init.zeros_(self.key_proj.bias.data)

    def forward(self, x: torch.Tensor, *, need_s: bool,
                need_e: bool) -> (torch.Tensor, torch.Tensor, torch.Tensor):
        x = self.pix_feat_proj(x)
        shrinkage = self.d_proj(x)**2 + 1 if (need_s) else None
        selection = torch.sigmoid(self.e_proj(x)) if (need_e) else None

        return self.key_proj(x), shrinkage, selection

2.3 特征图维度转换

将上述得到的所有特征图进行维度转换,将原来展平的时间维度重新提取出来。

h, w = keys.shape[-2:]
keys = self.move_t_from_batch_to_volume(keys)
shrinkages = self.move_t_from_batch_to_volume(shrinkages)
selections = self.move_t_from_batch_to_volume(selections)
ms_feat = [self.move_t_out_of_batch(f) for f in ms_feat]
pix_feat = self.move_t_out_of_batch(pix_feat)
'self.move_t_out_of_batch = Rearrange((b t) c h w -> b t c h w, t=self.seq_length)'

标签:dim,num,objects,2024CVPR,self,源码,ms,解析,feat
From: https://blog.csdn.net/weixin_43571113/article/details/145264086

相关文章

  • [免费]SpringBoot+Vue问卷调查管理系统【论文+源码+SQL脚本】
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue问卷调查管理系统,分享下哈。项目视频演示【免费】SpringBoot+Vue问卷调查管理系统Java毕业设计_哔哩哔哩_bilibili项目介绍传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发......
  • 2025年带你探索Trello、JIRA替代品:8款顶级项目管理工具全面解析!
    在项目管理的广阔领域中,Trello和JIRA一直是备受瞩目的工具,但随着市场的不断发展,还有许多优秀的替代品值得我们去探索。本文将为你详细解析8款顶级项目管理工具,它们分别是禅道、Trello、Asana、MicrosoftProject、Wrike、Monday.com、Basecamp、Teambition。这些工具各有千秋,涵盖......
  • 一个由 Go 语言开发的开源屏幕共享工具,免费好用,高质量无延迟,保证数据安全(带私活源码)
    想必大家在日常的工作中,会经常需要分享代码、演示项目或者进行在线教学,这就需要一个既高效又便捷的屏幕共享工具。然而,现有的一些解决方案往往存在延迟高、画质差等问题。今天就分享一个开源的屏幕共享项目-screego,不但免费,还能在我们自己的服务器上运行,保证数据安全。项......
  • 基于springboot的高校毕业生就业信息管理系统(源码+lw+部署文档+讲解等)
    背景及意义基于Java+SpringBoot的高校毕业生就业信息管理系统是一个功能强大的信息管理平台,旨在为高校的就业工作提供全面支持。该系统通过Java语言的强大功能和SpringBoot的便捷开发框架,将涵盖多个重要模块。其中包括毕业生信息管理,能详细记录毕业生的基本信息......
  • 基于springboot的高考志愿智能推荐系统(源码+lw+部署文档+讲解等)
    背景及意义基于Java+SpringBoot的高考志愿智能推荐系统旨在为高考生提供科学、个性化的志愿填报辅助服务。该系统利用Java的强大编程能力和SpringBoot的便捷开发特性,能够高效实现功能。首先,它会收集考生的各项信息,如高考成绩、学科兴趣、地域偏好等。通过复杂的......
  • JSP农村房屋和人员管理系统72k64(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spring技术主数据库使用MySQL开题报告内容一、项目背景与意义随着农村经济的......
  • JSP农产品溯源系统d5091(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spring技术主数据库使用MySQL开题报告内容一、研究背景随着食品安全问题的日......
  • JSP内部行文管理系统1l2l1--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spring技术主数据库使用MySQL开题报告内容一、项目背景随着企业规模的扩大和......
  • JSP宁夏大学车位管理系统a5s1i--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着宁夏大学的快速发展,校园内车辆数量急剧增加,车位管理问题日益突出。传统的手工管理方式已无法满足现代校园车位管理的需求,因此,开发......
  • 档案管理系统分析与设计 计算机专业毕业设计程序源码52656
    目录第1章引 言1.1选题背景与意义1.2国内外研究现状1.3研究方法1.4论文结构安排第2章系统的需求分析2.1系统可行性分析2.1.1技术方面可行性分析2.1.2经济方面可行性分析2.1.3法律方面可行性分析2.1.4操作方面可行性分析2.2系统功能......