Semantic segmentation이란?
이미지에 무엇이 있으며, 어디에 있는지 레이블링을 하는 것이다.
Labeling을 하는 방법
입력으로 들어가는 RGB 이미지의 shape은 (H x W x 3)이다.
그리고 semantic segmentation model을 통과해서 나온 결과 이미지의 shape은 (H x W x 1)이다.
그래서 데이터 전처리를 하는 방법은?
Semantic Segmentation 모델도 Supervised Learning을 하기 때문에, 입력으로 이미지와 그에 해당하는 segmented map을 넣어야 한다.
Semgented map은 앞에서 설명했듯이 shape이 (H x W x 1)이다. 그리고 각 픽셀은 클래스를 나타낸다.
Segmented map을 모델에 넣기 위해서는 one-hot encoding을 사용하여 shape이 (H x W x class의수)가 되도록 만들어야 한다.
PyTorch 코드로 정리하면 다음과 같다.
label_map = segmap.long() # segmented map
bs, _, h, w = label_map.size()
nc = args.label_nc # the number of classes
FloatTensor = torch.cuda.FloatTensor if torch.cuda.is_available() else torch.FloatTensor
input_label = FloatTensor(bs, nc, h, w).zero_() # 새로 만들어질 map의 shape이 (bs, nc, h, w)가 된다.
input_semantics = input_label.scatter_(1, label_map, 1.0) # 새로 만들어진 map인 input_semantics
총평
Semantic segmentation을 활용한 모델을 만들 때, 가장 어려웠던 것 중 하나가 데이터 전처리였다.
Segmented Image를 사용해 본 적이 없었기 때문에 헤매었었다.
다음번에는 데이터 전처리 부분을 헤매지 않고 후딱 처리하길 기대한다!
참고
https://www.jeremyjordan.me/semantic-segmentation/
'인공지능' 카테고리의 다른 글
초거대 AI란 무엇인가? (1) | 2022.10.27 |
---|---|
Multi-Modal (멀티 모달) AI (1) | 2022.10.26 |
Convolutional Neural Networks 기초 (0) | 2022.10.25 |
Few-Shot Learning (0) | 2022.10.24 |
FID (Frechet Inception Distance) 란 무엇인가? (0) | 2022.10.24 |