在使用多个基于Mask2Former的,使用Ade20k作为训练数据的,全景分割模型时,都出现了语义类别超出列表的问题。
在Mask2Former的项目Issues中找到了问题解决方法
报错
File "demo.py", line 182, in <module>
for vis_frame in tqdm.tqdm(demo.run_on_video(video), total=num_frames):
File "/home/master/Develop/Mask2Former/lib/python3.8/site-packages/tqdm/std.py", line 1180, in __iter__
for obj in iterable:
File "/home/master/Develop/Mask2Former/demo/predictor.py", line 130, in run_on_video
yield process_predictions(frame, self.predictor(frame))
File "/home/master/Develop/Mask2Former/demo/predictor.py", line 94, in process_predictions
vis_frame = video_visualizer.draw_panoptic_seg_predictions(
File "/home/master/Develop/Mask2Former/lib/python3.8/site-packages/detectron2/utils/video_visualizer.py", line 172, in draw_panoptic_seg_predictions
labels = [self.metadata.thing_classes[k] for k in category_ids]
File "/home/master/Develop/Mask2Former/lib/python3.8/site-packages/detectron2/utils/video_visualizer.py", line 172, in <listcomp>
labels = [self.metadata.thing_classes[k] for k in category_ids]
IndexError: list index out of range
报错原因:
Mask2Former/mask2former/data/datasets/register_ade20k_panoptic.py
代码中
thing_classes = [k["name"] for k in ADE20K_150_CATEGORIES if k["isthing"] == 1]
thing_colors = [k["color"] for k in ADE20K_150_CATEGORIES if k["isthing"] == 1]
ADE20K共有150分类,此处使用的是判断为"isthing"
的分类列表,此列表只有100分类。导致索引映射错误。
解决方法
修改为:
thing_classes = [k["name"] for k in ADE20K_150_CATEGORIES]
thing_colors = [k["color"] for k in ADE20K_150_CATEGORIES]
如此一来可以正常可视化分割结果。