AOT源码解析4.1-model主体解析

news/2024/9/24 5:16:45/

1 输入数据

VOS的数据集处理操作可见数据集操作,这里是进行数据集提取完毕后的操作。
在这里插入图片描述

图2:如图所示,使用datasets提取出数据之后,在模型训练阶段对数据做图中操作。即:将batch_size大小的ref_imgs、prev_imgs,和3batch_size大小的curr_imgs在通道维度上进行合并。如图例,batch_size为4时,得到203465465大小的合并图像和201465*465大小的合并mask。

2 AOTEngine

1) 初始化loss

在这里插入图片描述

2)输入进encoder:offline_encoder

这一模块是对输入的图像数据和mask数据进行处理。

针对图像数据:

  • 将图像输入进encoder中,获取四个不同比例大小的预测特征图。(具体步骤见图3)
  • 对这四个预测特征图按batch大小进行分块,共分成5块,它们分别代表相关图像(ref_imgs)、前一帧图像(prev_imgs)、目前图像 * 3(curr_imgs * 3),这样总共获得20块预测特征图。
  • 按照图像归属对这些预测特征图块进行分类,共获得五个列表,每个列表包含四个不同比例大小的预测特征图。(具体步骤见图4)

针对mask数据:

  • 将mask图像进行one-hot-编码,分离出前后景的mask。源码中设置每张图像的最大目标数量为10,假设原始mask的张量大小为(1 * 465 * 465),那么经过编码后,得到的编码mask张量大小为(11 * 465 * 465).
  • 将原始mask和编码后的mask按照batch大小进行分块,共得到五块特征图。每块特征图分别代表相关图像、前一帧图像和当前图像*3。具体步骤见图5.

2.1)提取backbone features

  • 提取特征图

mobilenetv2共有19个block,分成四个阶段,如下面代码所示。提取不同阶段的特征图,分别得到下采样4倍、下采样8倍、下采样16倍和下采样32倍的特征图。最后的下采样32倍的特征图通过1*1的卷积(代码中命名为:encoder_projector)降维,由原来的1280维降到256维,如下图所示。

其中FrozenBatchNorm2d的相关解释见encoder和decoder代码讲解。
下图展示的是单张shape为3465465的图像经过mobilenetv2得到的变化。
在这里插入图片描述

图3:如图3所示,是mobilenet的整体结构,mobilenet共有19层,这19层被切分成4个阶段,每个阶段生成不同比例大小的特征图,并将这些特征图进行打包输入到程序的下一步。

        # make it nn.Sequentialself.features = nn.Sequential(*features)self._initialize_weights()feature_4x = self.features[0:4]feautre_8x = self.features[4:7]feature_16x = self.features[7:14]feature_32x = self.features[14:]self.stages = [feature_4x, feautre_8x, feature_16x, feature_32x]self.freeze(freeze_at)def forward(self, x):xs = []for stage in self.stages:x = stage(x)xs.append(x)return xs
  • 对特征图进行分块

程序中所有图像经过mobilenetv2的过程如下图所示,经历mobilenetv2之后,对features进行分割,按照batch的大小进行分割。
在这里插入图片描述

图4:是整体数据经过encoder(即mobilenetv2)时的步骤。在源码中,在得到4个不同比例的特征图后,程序会对特征图按照batch的大小进行分块,每一个小块所代表的图像特征如图所示,依次为:ref_imgs(参考图像)、prev_imgs(前一帧图像)、curr_imgs * 3 (现在的图像 * 3)

在这里插入图片描述

图5:是源码debug时的结果可视化

2.2)extract mask embeddings

  • 对mask进行one-hot编码

下图是mask可视化的结果,它在程序中的存储形式如图5上方的矩形框所示,背景为用0填充,前景对象由1~10(源码中规定一张图可出现的最大对象数为10)的数字填充,同一前景对象的填充数字一致。源码使用one-hot-mask编码,将所有的前景对象提取出来,具体的代码和步骤如下所示:

def one_hot_mask(mask, cls_num):if len(mask.size()) == 3:mask = mask.unsqueeze(1)indices = torch.arange(0, cls_num + 1,device=mask.device).view(1, -1, 1, 1)return (mask == indices).float()

在这里插入图片描述

图5:对原始mask进行前后景分离。假如对形状为[1,465,465]的mask张量进行分割,会得到[11,465,465]的mask张量,里面代表的是11个目标对象的mask情况,可视化后的结果如图所示。

  • 对编码后的mask进行分块

分块操作和上面特征图的分块操作一致。具体过程如图5下方所示:分块后共有五个list,同样的,每一个list所代表的图像特征和图4的表示一致,浅粉色代表ref_imgs、玫粉色代表prev_imgs、深红色代表curr_imgs*3。


http://www.ppmy.cn/news/1529658.html

相关文章

洛谷-P3916 图的遍历

题目描述 给出 N 个点,M 条边的有向图,对于每个点 v,求A(v) 表示从点 v 出发,能到达编号最大的点。 思路 既然是要找到最大的点,那么我从最大的点开始DFS是否可以? 于是可以反向建图,然后从最…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【扩展组件】上

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核(LiteOS-M) 轻量系统内核&#…

[vulnhub] LAMPSecurity: CTF4

https://www.vulnhub.com/entry/lampsecurity-ctf4,83/ 端口扫描主机发现 探测存活主机,138是靶机 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-23 14:13 CST Nmap scan report for 192…

Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地

发现好久之前整理的推荐系统被遗忘在了草稿箱,让它出来见见世面。。。后续空了持续更新 1.Background 大模型生成用于推荐场景有如下几个难点: 特征缺乏显式结构。存在sparse和dense特征,其中sparse特征指的是一些离散特征,这部…

H5白色大方图形ui设计公司网站HTML模板源码

源码名称:白色大方图形ui设计公司网站模板源码 源码介绍:一款H5自适应白色大方图形ui设计公司官网网站模板源码。源码含有七个页面,可用于各种设计公司官网。 需求环境:H5 下载地址: https://www.51888w.com/369.ht…

Centos/fedora/openEuler 终端中文显示配置

注意:这里主要解决的是图形界面、远程登录界面的中文乱码问题 系统原生的终端(如虚拟机系统显示的终端),由于使用的是十分原始的 TTY 终端,使用点阵字体进行显示,点阵字体不支持中文,因此无法显…

如何将Vue项目部署至 nginx

一、准备工作 1.确保安装了开发软件 VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js 和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行…

leetcode91. 解码方法,动态规划

leetcode91. 解码方法 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : “1” -> ‘A’ “2” -> ‘B’ … “25” -> ‘Y’ “26” -> ‘Z’ 然而,在 解码 已编码的消息时,你意识到有许多不同的方式来解码,…