GLIP create_positive_map_label_to_token_from_positive_map函数解读

详细解释 create_positive_map_label_to_token_from_positive_map这个函数的作用。

函数功能

def create_positive_map_label_to_token_from_positive_map(positive_map, plus=0):
    positive_map_label_to_token = {}
    for i in range(len(positive_map)):
        positive_map_label_to_token[i + plus] = torch.nonzero(positive_map[i], as_tuple=True)[0].tolist()
    return positive_map_label_to_token

这个函数将​​正例映射矩阵​​转换为​​标签到token的映射字典​​。

参数说明

  • positive_map: 形状为 (num_entities, 256)的矩阵,来自 create_positive_map函数

  • plus: 偏移量,用于调整标签索引(通常是0或1)

执行过程详解

1. 输入矩阵示例

假设 positive_map是一个3×256的矩阵:

positive_map = [
    [0, 0.5, 0.5, 0, 0, ...],  # 实体0:"black cat" → 对应token 1,2
    [0, 0, 0, 1.0, 0, ...],    # 实体1:"sitting" → 对应token 3
    [0, 0, 0, 0, 0, 1.0, ...]  # 实体2:"mat" → 对应token 5
]

2. 转换过程

for i in range(len(positive_map)):
    # 找到第i个实体对应的所有非零token位置
    token_indices = torch.nonzero(positive_map[i], as_tuple=True)[0].tolist()
    
    # 将标签索引加上偏移量后作为字典键
    positive_map_label_to_token[i + plus] = token_indices

​执行结果​​(假设 plus=1):

positive_map_label_to_token = {
    1: [1, 2],  # 标签1对应token 1和2 ("black cat")
    2: [3],     # 标签2对应token 3 ("sitting") 
    3: [5]      # 标签3对应token 5 ("mat")
}

在GLIP中的作用

1. 标签索引映射

GLIP模型需要知道每个检测框对应的文本token:

  • ​检测框标签​​: 模型预测的边界框会有一个标签索引(如1, 2, 3...)

  • ​文本token​​: 需要知道这些标签对应文本中的哪些token

2. plus参数的意义

if self.cfg.MODEL.RPN_ARCHITECTURE == "VLDYHEAD":
    plus = 1  # VLDYHEAD架构中,标签索引从1开始
else:
    plus = 0  # 其他架构中,标签索引从0开始

​偏移量的作用​​:

  • 确保模型内部的标签索引与实体索引正确对应

  • 避免标签0被误用(在某些架构中,标签0可能表示"背景"类)

3. 完整工作流程

# 原始文本: "a black cat sitting on a mat"
tokens_positive = [[[2, 10]], [[11, 18]], [[24, 27]]]  # 实体字符位置

# 步骤1: 创建正例映射矩阵
positive_map = create_positive_map(tokenized, tokens_positive)

# 步骤2: 转换为标签到token的映射
positive_map_label_to_token = create_positive_map_label_to_token_from_positive_map(positive_map, plus=1)

# 结果: {1: [1,2], 2: [3], 3: [5]}

实际应用场景

当模型检测到一个边界框并赋予它标签 label=2时:

# 查找该标签对应的文本token
token_indices = positive_map_label_to_token[2]  # 返回 [3]

# 模型使用这些token来计算视觉-语言相似度
# 确保检测到的"坐着的物体"与文本中的"sitting" token对齐

这个映射是GLIP实现​​开放词汇检测​​的关键,它让模型能够将任意检测到的物体与自由文本描述中的对应词汇建立联系。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值