taki0112 / SPADE-Tensorflow

Simple Tensorflow implementation of "Semantic Image Synthesis with Spatially-Adaptive Normalization" a.k.a. GauGAN, SPADE (CVPR 2019 Oral)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

image만 있고, 대응되는 segmentation map이 없을때

JihyongOh opened this issue · comments

안녕하세요,
항상 좋은 코드 올려주셔서 감사합니다.

이번 spade코드를 공부하다보니 이해가 잘 안되는 부분이 있어서 질문 드립니다.
celebA가 아닌, 다른 데이터셋의 이미지들을 비슷한 형식으로

dataset
탭탭탭image
탭탭탭segmap
탭탭탭segmap_test

위와 같이 배치하면 one-hot vector의 형태로 seg_map이 만들어지는건가요?

코드를 읽다보니 제가 이해하기엔 self.segmap_dataset_path에도 self.img_dataset_path에 있는 같은 이미지를 넣으면 class Image_data의 preprocess함수가 "segmap_label.txt"파일이 없으면 self.segmap_dataset_path 폴더 안에 있는 이미지들을 컬러든 그레이든 (self.segmap 하나하나 읽어서 color_value_dict를 만드는 거 같은데... 이 dictionary만드는 부분이 무슨 원리인지 이해가 잘 안됩니다. 즉, 모든 이미지들을 다 읽어서 비슷한특성을 가지는 "나무","바다" 등등에 label(label이 +=1이 되는 부분(if tuple(x[i, j, :]) not in self.color_value_dict.keys() : 이 구문)도 이해가 어렵네요)을 임의로 부여하는건가요? 그말은 이미지 순서나 종류가 바뀌면 매번 코드를 돌릴때마다 다른 label순서가 될 수도 있다는 건지도 궁금합니다. 뭔가 open을 이용하여 text 파일로 label들을 만들어주는거 같아보여요.
==> 즉, 미리 만들어둔 segmap_label.txt가 없으면 preprocess(self)함수에서 txt파일을 만들어주는 역할을 하는데, 어떤기준으로 픽셀별 label을 부여하는 건지 혼동됩니다.(instance seg.가 아닌, semantic seg.가 맞죠?)
그 이후, convert_from_color_segmentation()함수에서는 만든 text파일과 이미지를 읽어와서 이미지의 각 픽셀별로 text파일에서 만들어진 segmentation label의 규칙에 따라 dictionary value에 대응되면 같은 label로 부여하는 거 같은데 맞나요?

긴글 읽어주셔서 감사합니다:)

  1. instance seg.가 아닌 semantic seg.가 맞는지 ?
    -> segmentation image가 어떻게 생겼느냐에 따라 다릅니다. 둘다 상관없습니다.

  2. 이미지 순서나 종류가 바뀌면 매번 코드를 돌릴때마다 다른 label순서가 될 수도 있는지 ?
    -> 네. 예를들어 segmentation 이미지에서 빨간색이 사람을 나타낸다고 하겠습니다.
    그렇다면, (255, 0, 0) -> 라벨이 0을 갖게 되고
    그다음 픽셀값을 읽었는데 파란색이었다면, (0, 0, 255) -> 라벨이 1을 갖게 됩니다.
    만약, 이미지를 셔플하고 네트워크가 파란색을 먼저 읽게 된다면 (0, 0, 255) -> 라벨 0을 갖게됩니다.