1

我在视频上使用Mask-Rcnn 的detectron2实现,问题是在每一帧上,同一对象的分割颜色会发生变化。

是否有任何参数可以让我为对象类保留单一颜色。我已经尝试过detectron2.utils.visualizer.ColorMode(1) 但它不起作用

4

1 回答 1

1

ColorMode(1)仅当传递给 的元数据Visualizerthing_colors定义时才有效。从ColorMode 的文档中

分段= 1

让同一类别的实例具有相似的颜色(来自 metadata.thing_colors),并以高不透明度覆盖它们。这提供了对分割质量的更多关注。

因此,您需要将预定义颜色列表(每个类一个)添加到元数据中。从这里开始

thing_colors(list[tuple(r, g, b)]):每个事物类别的预定义颜色(在 [0, 255] 中)。用于可视化。如果没有给出,将使用随机颜色。

现在,实际使用的颜色可能与thing_colors. 在Visualizer.draw_instance_predictions()中,每个指定的颜色通过添加一个随机值来抖动,因此叠加的颜色略有不同。这种随机值的使用意味着您仍然会看到帧之间的类颜色发生变化。根据您指定的颜色,此更改可能会或可能不会在视觉上明显。

一个简单的解决方案可能是子类Visualizer化并覆盖该_jitter()方法,以便它按原样返回颜色。

class MyVisualizer(Visualizer):
    def _jitter(self, color):
        return color

但是,_jitter()它旨在成为一种内部方法,因此这是一个 hacky 解决方案,并且可能会在某个时候中断。

更好的解决方案可能是根据draw_instance_predictions()您的需要覆盖和自定义绘图。

于 2021-06-18T16:31:48.080 回答