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 实现视觉-语言联合理解的关键,通过将文本描述与视觉特征对齐,实现了开放词汇的目标检测能力。
GLIP compute_prediction函数解析
3281

被折叠的 条评论
为什么被折叠?



