Detectron2 Mask-Rcnn 对同一对象保持相同的颜色分割class
Detectron2 Mask-Rcnn keep same color segmentation for same object class
我在视频上使用 detectron2 Mask-Rcnn 实现,问题是在每一帧上,同一对象的分割颜色会发生变化。
是否有任何参数可以让我为一个对象保持单一颜色class。
我已经尝试了 detectron2.utils.visualizer.ColorMode(1) 但它不起作用
ColorMode(1)
只有在传递给 Visualizer
的元数据定义了 thing_colors
时才有效。来自documentation for ColorMode,
SEGMENTATION= 1
Let instances of the same category have similar colors
(from metadata.thing_colors), and overlay them with high opacity. This
provides more attention on the quality of segmentation.
因此,您需要将预定义颜色列表(每个 class 一个)添加到您的元数据。来自 here、
thing_colors
(list[tuple(r, g, b)]): Pre-defined color (in [0, 255]) for each thing category. Used for visualization. If not given, random colors will be used.
现在,实际使用的颜色可能与 thing_colors
中指定的颜色不完全相同。在 Visualizer.draw_instance_predictions()
中,每个指定的颜色都通过添加一个随机值来抖动,因此叠加的颜色略有不同。这种随机值的使用意味着您仍然会看到 class 帧之间的颜色变化。根据您指定的颜色,此更改在视觉上可能很明显,也可能不明显。
一个简单的解决方案可能是 subclass Visualizer
并覆盖 _jitter()
方法,使其 returns 颜色保持原样。
class MyVisualizer(Visualizer):
def _jitter(self, color):
return color
但是,_jitter()
旨在成为一个内部方法,因此这是一个 hacky 解决方案,有时可能会失败。
更好的解决方案可能是覆盖 draw_instance_predictions()
并根据您的需要自定义绘图。
我在视频上使用 detectron2 Mask-Rcnn 实现,问题是在每一帧上,同一对象的分割颜色会发生变化。
是否有任何参数可以让我为一个对象保持单一颜色class。 我已经尝试了 detectron2.utils.visualizer.ColorMode(1) 但它不起作用
ColorMode(1)
只有在传递给 Visualizer
的元数据定义了 thing_colors
时才有效。来自documentation for ColorMode,
SEGMENTATION= 1
Let instances of the same category have similar colors (from metadata.thing_colors), and overlay them with high opacity. This provides more attention on the quality of segmentation.
因此,您需要将预定义颜色列表(每个 class 一个)添加到您的元数据。来自 here、
thing_colors
(list[tuple(r, g, b)]): Pre-defined color (in [0, 255]) for each thing category. Used for visualization. If not given, random colors will be used.
现在,实际使用的颜色可能与 thing_colors
中指定的颜色不完全相同。在 Visualizer.draw_instance_predictions()
中,每个指定的颜色都通过添加一个随机值来抖动,因此叠加的颜色略有不同。这种随机值的使用意味着您仍然会看到 class 帧之间的颜色变化。根据您指定的颜色,此更改在视觉上可能很明显,也可能不明显。
一个简单的解决方案可能是 subclass Visualizer
并覆盖 _jitter()
方法,使其 returns 颜色保持原样。
class MyVisualizer(Visualizer):
def _jitter(self, color):
return color
但是,_jitter()
旨在成为一个内部方法,因此这是一个 hacky 解决方案,有时可能会失败。
更好的解决方案可能是覆盖 draw_instance_predictions()
并根据您的需要自定义绘图。