Я использовал набор данных SYNTHIA (подмножество RAND-CITYSCAPES) для сегментации c, используя первый канал изображения метки, как предложено в предыдущем посте:
Как читать метку ( аннотации) из набора данных Synthia? .
В файле набора данных README говорится, что второй канал выделен для сегментации экземпляра:
"GT / LABELS: папка, содержащая png файлы (по одному на изображение). Аннотации даны в двух каналах. Первый канал содержит класс этого пикселя (см. таблицу ниже). Второй канал содержит уникальный идентификатор экземпляра для тех объектов, которые являются динамическими c (автомобили, пешеходы и т. д. c.). "
Затем я пытаюсь прочитать карты сегментации экземпляра и semanti c, используя следующий код, который я написал:
def read_synthia_label(path):
raw_label = np.asarray(imageio.imread(path, format='PNG-FI'))
seg_label = Image.fromarray(np.uint8(raw_label[:,:,0]))
inst_label = Image.fromarray(np.uint16(raw_label[:,:,1]))
return seg_label, inst_label
Однако, когда я проверял согласованность меток, я заметил, что метки сегментации для одной и той же метки экземпляра в одном и том же изображении не совпадают. Т.е. следующая ошибка assert throws:
with PathManager.open(instance_id_file, "rb") as f:
inst_image = np.asarray(Image.open(f), order="F")
with PathManager.open(segmentation_file, "rb") as f:
segm_image = np.asarray(Image.open(f), order="F")
flattened_inst_ids = np.unique(inst_image)
for instance_id in flattened_inst_ids:
inds_for_same_inst = np.where(instance_id == inst_image.ravel())[0]
assert(segm_image.ravel()[inds_for_same_inst[0]] == segm_image.ravel()[inds_for_same_inst[-1]]) # throws error
Я неправильно читаю сегментацию экземпляра? Кто-нибудь когда-нибудь использовал SYNTHIA для сегментации экземпляров? Я не смог найти никакой документации по этому вопросу в Интернете, поэтому любая помощь будет признательна.