如何查看Detectron 2: Faster RCNN
对象检测模型的输入?我需要调试我的模型,以查看X
(图像)和Y
(边界框坐标,类,标签等)。我正在使用一些自定义增强功能,在这个github评论中它说
您可以使用for data in data_loader
循环访问数据加载器并可视化它们
但我该怎么做呢?我可以很容易地通过我的自定义增强运行一个循环,但我想知道的是我如何在进入模型的第一层之前看到输入?
我正在使用mapper
的自定义增强,如:
def custom_mapper(dataset_dict, transform_list = None):
if transform_list is None:
transform_list = [T.RandomBrightness(0.8, 1.2),
T.RandomContrast(0.8, 1.2),
T.RandomSaturation(0.8, 1.2),
]
dataset_dict = copy.deepcopy(dataset_dict)
image = utils.read_image(dataset_dict["file_name"], format="BGR")
image, transforms = T.apply_transform_gens(transform_list, image)
tensor_image = torch.as_tensor(image.transpose(2, 0, 1).astype("float32"))
dataset_dict["image"] = tensor_image
annos = [
utils.transform_instance_annotations(obj, transforms, image.shape[:2])
for obj in dataset_dict.pop("annotations")
if obj.get("iscrowd", 0) == 0
]
instances = utils.annotations_to_instances(annos, image.shape[:2])
dataset_dict["instances"] = utils.filter_empty_instances(instances)
# visualizer = Visualizer(dataset_dict["image"].numpy().transpose(1,2,0).astype(np.uint8)[:, :, ::-1], scale=0.5)
# out = visualizer.draw_dataset_dict(dataset_dict)
# cv2.imwrite(str(np.random.rand())+".jpg", out.get_image()[:, :, ::-1], )
return dataset_dict
class AugTrainer(DefaultTrainer): # Trainer with augmentations
@classmethod
def build_train_loader(cls, cfg):
return build_detection_train_loader(cfg, mapper=custom_mapper)
我尝试使用这3条注解掉的行(就在return dataset_dict
之前)来保存图像,这样我就可以看到图像的样子,但是我怎么知道它们是否形成了正确的BB,Class,更重要的是,这些是模型内部的确切图像,并且没有其他东西改变我的输入?
1条答案
按热度按时间qoefvg9y1#
还没有测试过,但似乎有一种方法可以覆盖
SimpleTrainer
类。在类detectron2.engine.train_loop.SimpleTrainer
中,有一个run_step
函数,其中数据在第307 - 311行进入模型内部:因此,我们可以在这里获得
data
的随机样本,并基于一些随机逻辑在训练期间保存。但是要做到这一点,要么你必须克隆并修改系统中的
Detectron 2
代码,要么重写该方法。我会在未来测试第二种方法。