如何优化基于 DETR 的目标检测中的预处理和后处理?

问题描述 投票:0回答:1

我的问题:

如何减少预处理和后处理的时间?

背景信息

我正在使用 DETR 对视频帧实现对象检测。我的系统处理 30 FPS、30 秒视频中的帧(总共 900 帧),这些帧是从 Redis 队列中以 30 为批次读取的,并在 NVIDIA RTX A4000 GPU 上进行处理。尽管拥有高端硬件,但我注意到 GPU 并未得到充分利用。以下是我的流程和计时结果的细分:

管道概览

  1. 从 Redis 读取帧并解码。
  2. DetrImageProcessor
    处理帧。
  3. DETR 模型执行推理。
  4. 应用后处理生成检测结果。

计时结果(总计:900 帧 74.38 秒):

主要观察结果:

  • 后处理 (
    post_process_object_detection
    ) 是瓶颈,所有帧需要 34.13 秒
  • 输入准备 (
    processor(images=frames, ...)
    ) 也需要大量时间:29.30 秒
  • 总检测时间(
    outputs = model(**inputs)
    )需要 3.06 秒。

这是我的批处理代码:

frame_consumer.py
:

# Batch processing logic
def process_batch():
    for _ in range(30):
        image_bytes = redis_client.rpop(FRAME_QUEUE, 30)
        imgs = decode_img_list(image_bytes)
        results = model2.process_batch(imgs)

model.py
:

import torch
from transformers import DetrImageProcessor, DetrForObjectDetection
from processing_timer import ProcessingTimer
import time

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"device: {device}")
processor = DetrImageProcessor.from_pretrained(
    "facebook/detr-resnet-50", revision="no_timm"
)
model = DetrForObjectDetection.from_pretrained(
    "facebook/detr-resnet-50", revision="no_timm"
).to(device)

model.eval()

def process_batch(frames):
    inputs = processor(images=frames, return_tensors="pt").to(device)
    with torch.no_grad():
        outputs = model(**inputs)
    target_sizes = torch.tensor([frame.shape[:2] for frame in frames]).to(device)
    results = processor.post_process_object_detection(outputs, target_sizes=target_sizes)
    del outputs
    del inputs
    torch.cuda.empty_cache()
    return results

附加信息:

  • GPU:NVIDIA RTX A4000 16GB
  • 处理器:Intel Core i9-13900K
  • CUDA版本:12.4
  • Python版本:3.12
  • PyTorch版本:2.5.1+cu124

我尝试过的:

  • 分析各个管道步骤以识别瓶颈。
  • 每批次后清除 GPU 缓存。
python deep-learning pytorch computer-vision huggingface-transformers
1个回答
0
投票

也许你可以尝试增加批量大小。还有其他原因要批量处理 30 个吗?另外,也许您可以将

process
函数包装在数据加载器中,以实现更好的批量处理。

© www.soinside.com 2019 - 2024. All rights reserved.