【发布时间】:2023-03-10 11:00:02
【问题描述】:
我在视频上使用detectron2实现Mask-Rcnn,问题是在每一帧上,同一物体的分割颜色会发生变化。
是否有任何参数可以让我为对象类保留单一颜色。 我已经尝试过detectron2.utils.visualizer.ColorMode(1),但它不起作用
【问题讨论】:
标签: deep-learning computer-vision image-segmentation detectron
我在视频上使用detectron2实现Mask-Rcnn,问题是在每一帧上,同一物体的分割颜色会发生变化。
是否有任何参数可以让我为对象类保留单一颜色。 我已经尝试过detectron2.utils.visualizer.ColorMode(1),但它不起作用
【问题讨论】:
标签: deep-learning computer-vision image-segmentation detectron
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() 旨在成为一种内部方法,因此这是一个 hacky 解决方案,并且可能会在某个时候中断。
更好的解决方案可能是覆盖 draw_instance_predictions() 并根据您的需要自定义绘图。
【讨论】: