GLIP compute_prediction函数解读

GLIP compute_prediction函数解析

compute_prediction函数是 GLIP 模型进行目标检测的核心推理函数。

函数功能概述

compute_prediction函数接收原始图像和文本描述,使用 GLIP 模型进行开放词汇目标检测,返回检测到的目标边界框、类别和置信度等信息。

函数执行流程

1. 图像预处理

image = self.transforms(original_image)
image_list = to_image_list(image, self.cfg.DATALOADER.SIZE_DIVISIBILITY)
image_list = image_list.to(self.device)
  • 将原始图像转换为模型需要的格式

  • 调整尺寸、归一化像素值

  • 转换为 PyTorch tensor 并移动到 GPU

2. 文本处理与实体识别

这部分处理分为两种情况:

​情况一:直接提供类别列表​

if isinstance(original_caption, list):
    # 用户直接提供了类别名称列表,如 ['cat', 'dog', 'person']
    caption_string = "cat . dog . person ."
    tokens_positive = [[[0,3]], [[5,8]], [[10,16]]]  # 每个词的位置

​情况二:提供自然语言描述​

else:
    # 使用 NER 从自然语言中提取名词短语
    tokenized = self.tokenizer([original_caption], return_tensors="pt")
    if custom_entity is None:
        tokens_positive = self.run_ner(original_caption)  # 自动提取实体
    else:
        # 使用用户自定义的实体边界
        tokens_positive = process_custom_entities(original_caption, custom_entity)

3. 创建正例映射(Positive Mapping)

positive_map = create_positive_map(tokenized, tokens_positive)
positive_map_label_to_token = create_positive_map_label_to_token_from_positive_map(positive_map, plus=plus)
  • 建立文本 token 与检测类别之间的对应关系

  • 例如,将 "a black cat" 中的 "cat" token 映射到检测框

  • create_positive_map见GLIP create_positive_map函数解读

4. 模型推理

with torch.no_grad():
    predictions = self.model(image_list, captions=[original_caption], positive_map=positive_map_label_to_token)
    predictions = [o.to(self.cpu_device) for o in predictions]
  • 使用 GLIP 模型进行前向传播

  • 将结果移回 CPU 以减少 GPU 内存占用

5. 后处理

# 调整预测结果到原始图像尺寸
height, width = original_image.shape[:-1]
prediction = prediction.resize((width, height))

# 处理掩码(如果启用分割功能)
if prediction.has_field("mask"):
    masks = prediction.get_field("mask")
    masks = self.masker([masks], [prediction])[0]
    prediction.add_field("mask", masks)

输出数据结构

返回的 prediction对象包含以下字段:

  • bbox: 边界框坐标 [x1, y1, x2, y2]

  • scores: 检测置信度

  • labels: 类别标签索引

  • mask: 实例分割掩码(如果启用)

使用示例

# 使用类别列表
result = glip_demo.compute_prediction(image, ['cat', 'dog', 'person'])

# 使用自然语言描述
result = glip_demo.compute_prediction(image, 'a black cat sitting on a chair')

这个函数是 GLIP 实现视觉-语言联合理解的关键,通过将文本描述与视觉特征对齐,实现了开放词汇的目标检测能力。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值