问题描述
我在视频上使用 detectron2 实现 Mask-Rcnn,问题是在每一帧上,同一对象的分割颜色都会发生变化。
是否有任何参数可以让我为对象类保留单一颜色。 我已经尝试过detectron2.utils.visualizer.ColorMode(1) 但它不起作用
解决方法
ColorMode(1)
仅在传递给 Visualizer
的元数据定义了 thing_colors
时才有效。从documentation for ColorMode,
分段= 1
让同一类别的实例具有相似的颜色 (来自 metadata.thing_colors),并以高不透明度覆盖它们。这 更加关注分割的质量。
因此,您需要向元数据添加一个预定义颜色列表(每个类一个)。来自here,
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()
旨在成为一种内部方法,因此这是一个笨拙的解决方案,有时可能会中断。
更好的解决方案可能是覆盖 draw_instance_predictions()
并根据您的需要自定义绘图。