티스토리 뷰

※ 해당 글은 졸업 캡스톤 디자인 프로젝트 수업 일환으로 쓰인 글임을 밝힙니다.

 


 

23학년도 2학기 졸업 프로젝트 기획을 하며 핵심 기능을 구현하기 위해 AI를 활용해보자는 아이디어가 나왔다.

만약 사용자가 자신의 얼굴 사진을 입력한다면, 해당 인물의 얼굴형을 분석하여 얼굴형에 맞는 헤어 스타일을 추천해주는 기능이 필요했다. 

이를 위해 여러 AI 모델을 참고해보았고, 아키텍처를 짜볼 수 있었다.

우리와 비슷한 기능을 고민하고 있는 사람들이 있다면 어떤 과정으로 모델들을 선정했는지 참고하면 좋을 것 같다. 

 


 

우리가 구현해야 할 기능은 무엇이고, 어떤 AI 모델들이 필요할까?

 

우리가 구현하고 싶었던 기능을 한 줄로 요약하면 아래와 같이 정의할 수 있다.

 

사진의 얼굴을 인식하고, 해당 얼굴형을 분석해 어울리는 스타일의 머리를 추천해준다. 

 

그럼 우리가 AI가 필요한 부분들은 무엇일까?

 

1) 사용자의 얼굴을 인식해야 하며, 얼굴형을 분석해야 한다. 

 

2) 얼굴형에 맞는 헤어스타일을 합성해 보여줘야 한다. 

 


 

 

각각 어떤 AI 모델들이 필요한지 알아보자.

 

1) 얼굴 인식 및 얼굴형 분석

 

얼굴 인식을 위한 부분은 face-landmark 모델을 활용하기로 결정했다. face-landmark은 한글로 번역하면 '얼굴의 특징점'이라고 할 수 있다. 즉, 얼굴의 특징점을 뽑아내서 대상의 얼굴 형태를 분석하는 것으로 해석할 수 있다. 얼굴의 특징점들의 예시로는 동공의 위치, 입술 좌표, 눈썹 좌표 등이 있다. 해당 좌표들의 값들을 x, y 값으로 분석하여 추출이 되며, 얼굴 형태를 인식한다. 

 

좀 더 자세히 알아보자!

 

2014년, Vahid Kazemi와 Josephine Sullivan이 발명한 접근 방법이 가장 유명하며, 대중적으로 사용이 된다. 기본적으로 모든 얼굴에 존재하는 68개의 랜드마크 가 존재한다. 랜드마크는 턱의 상단, 눈 바깥의 가장자리, 눈썹 안쪽의 가장자리 등과 같이 얼굴의 특징점들이 포함된다. 

 

랜드마크의 예시

 

이렇게 랜드마크를 설정한 후 알고리즘을 훈련 시킨다면, 어떤 얼굴에서도 68개의 특정 랜드마크를 인식하여 정확한 얼굴 형태를 찾을 수 있게 해준다. 아래는 한 미국 배우의 이미지인데, face-landmark 알고리즘이 학습된 모델의 인풋으로 넣게 된다면 다음과 같이 인식이 된다. 

 

랜드마크 기술을 적용한 배우의 이미지. 68개의 랜드마크가 표시되어 있다.

 

 

이렇게 된다면 우리는 사용자의 눈, 코, 입이 어디에 있는지 파악할 수 있게 되는 것이다. 인식이 되었다면 이제 이미지를 회전하거나, 조절하거나 비틀 수 있다. 우리 팀의 경우 얼굴 인식이 된 후에 좌표 간 거리나 비율을 측정해 특정 얼굴형을 분석할 수 있을 것이다.

 

2) 얼굴형에 맞는 헤어스타일 합성

 

얼굴형이 파악이 되었다면 헤어스타일을 합성해야 하며, 그 결과를 사용자에게 결과로 알려줘야 한다.

 

사실 이 부분 모델은 어떻게 적용을 해야 할지, 무엇을 써야 할지 고민이 많았다. 그러던 중 여러 레퍼런스 자료를 찾았고, 거기서 유용하게 사용할 수 있는 모델들을 찾을 수 있었다.

 

starGAN-v2

 

starGAN-v2 모델은 간단하게 얘기한다면 하나의 이미지를 여러 특징을 가진 이미지들과 합성을 하는 기술의 모델이다.

 

starGAN-v2에 대해서 자세히 알아보기 전에 기본적으로 알아두면 좋을 개념들을 공유를 해보자면, starGAN-v2에서 쓰이는 기본 개념으로는 Attribute, Domain, Style이 존재한다.

 

여기서 Attribute는 속성이다. 즉, 특징을 나눌 수 있는 기준을 의미한다. 예를 들어 성별, 머리색, 얼굴색 같은 개념이 포함된다. Domain(도메인)은 Attribute에서 확실하게 나눌 수 있는 특징 집단이다. 조금 어려울 것 같아 예를 들어 설명을 해보자면, 성별 Attribute는 남자와 여자로 확실하게 구분을 할 수 있다. 따라서 남자와 여자는 각각의 도메인이 될 수 있다. 또한, 머리색이라는 Attibute는 흑발, 금발, 갈색 머리 등으로 나눌 수 있을 것이다. 이때 흑발, 금발, 갈색 머리는 각각 도메인이 될 것이다. 마지막으로 Style은 Domain보다 더 구체적인 개념이라고 할 수 있다. 같은 Domain에 속한다고 해도 다양한 스타일이 있는 것처럼 말이다. 예를 들어 남자여도 눈썹이 짙은 남자가 있을 수 있고, 머리가 짧은 남자가 있을 수 있는 것처럼 말이다. 

 

starGAN-v2는 다양한 도메인에 대해 image-to-image(I2I) translation이 가능토록 한다. I2I란 도메인 특징을 가지고 한 개의 이미지를 다른 하나의 이미지로 변환시키는 것을 의미한다. 초기 버전이였던 starGAN-v1은 도메인 별로 비슷한 결과를 도출한다는 한계가 있었지만, starGAN-v2의 경우 전 버전의 문제점을 보완하며 여러 도메인에 대해 확장성을 가진다는 점에서 발전했다고 얘기할 수 있다. 

 

starGAN-v2을 이용한 이미지 합성 결과

 

위 그림은 starGAN-v2을 활용한 결과이다.

위쪽 열의 이미지는 사람 이미지를 input image로 넣은 후 이미지 변환을 한 결과를 보여준다. 가령 여성을 input으로 넣었다면 여성 얼굴에 대해 다양한 스타일을 적용한 생성 이미지를 만들 수도 있고, 성별 전환이 일어난 생성 이미지를 발생시킬 수도 있다. 그리고 좌측을 보면 해당 모델은 CelebA-HQ 데이터셋을 통해 훈련되었다는 것을 알 수 있다. (CelebA-HQ에 관한 내용)

 

아래 쪽 열 이미지를 보면 고양이와 사자를 각각 input image로 넣었을 때 고양이, 강아지, 야생 동물 이미지들과 합성해 새로운 생성 이미지를 도출한 것을 볼 수 있다. starGAN-v2의 경우 동물에 대한 생성 이미지를 만드는 것도 많이 발전했다는 식으로 나와있어, 동물 생성 이미지를 도출하는 데 쓰일 수도 있을 것 같다. 참고로 동물 관련 훈련 데이터셋은 AFHQ이다. (AFHQ에 관한 내용)

 

우리 팀은 처음에 starGAN-v2 모델을 사용한다면 사용자의 얼굴에 새로운 헤어 스타일을 붙인 이미지를 생성할 수 있을 것이라 생각했다. 예를 들어 얼굴형이 계란형으로 판별된 사용자의 이미지가 input으로 들어가면, 계란형에 어울리는 헤어스타일을 가진 인물 이미지의 사진과 합성되는 것처럼 말이다.

 

하지만 사실 여러 선행 연구들을 찾아본 결과, 우리가 원하는 만큼의 깔끔한 결과가 나오기 힘들 것이라는 예상을 하였다. 그 이유는 우선 우리가 사용할 데이터셋인 celebA-HQ의 경우 서양인 위주의 데이터셋이다. 때문에 우리 서비스의 메인 타겟층인 한국인 20대 여성의 머리 스타일과는 다른 색상과 스타일의 머리가 많을 것이라는 생각이 들어 부정확한 이미지가 생성될 수도 있다는 우려가 생겼다. 또한 무엇보다 대부분 서양인의 이미지와 합성하는 과정에서 헤어 스타일 외 변화, 즉 얼굴 부분 왜곡이 발생할 수 있다는 판단을 할 수 있었다. 때문에 우리는 이를 보정하는 모델이 필요하다는 생각을 하였고, 헤어 스타일 외 변화를 보정해줄 수 있는 모델을 찾게 되었다.

 

SEAN의 도입

 

SEAN(Image Synthesis with Semantic Region-Adaptive Normalization)은 segmentation map을 이용해 특정 부분의 이미지를 원하는 방향으로 보정해줄 수 있는 모델이다.

 

그럼 segmentation map이란 무엇일까?

 

우선 image segmentation이 무엇인지 먼저 이해를 해야 한다. 

 

Image segmentation이란 이미지 분류 기술의 확장으로, 이미지 내 정보의 분류와 더불어 이미지 픽셀 수준에서 무엇이 있는지 이해하는 데 사용하는 컴퓨터 비전 기술이다. 물체의 경계를 윤곽선으로 표시해 특정 물체의 위치를 판단하고, 결국 이미지 속에 물체들이 어디에 있는 지 파악할 수 있다. 예를 들어 자율주행차가 차량과 보행자, 교통 표지판이나 기타 도로 등을 식별하는 것과 같다. 

 

Image segmentation 분류 중 segmentation map이 존재한다. 

 

Semantic segmentation은 입력된 이미지의 모든 단일 픽셀에 클래스 레이블을 할당하는 작업이라고 한다. 

Semantic segmentation은 각 이미지의 픽셀에 시맨틱 레이블을 할당하는 Image segmentation의 한 유형이며, 즉, 각 픽셀에 ‘도로’, ‘나무’, ‘건물’과 같이 해당 콘텐츠를 설명하는 레이블을 할당하는 방식이다. Semantic segmentation은 이미지의 콘텐츠를 여러 의미적 클래스로 나눌 수 있다는 원칙에 기반해 시작되었다. 이러한 의미적 클래스를 사용하여 이미지에서 개체를 식별하고 추적할 수 있게 되는 것이다. (참조)

 

semantic segmentation의 예시

 

그래서 SEAN은 이렇듯 의미론적인(semantic) 부분들로 구분이 된 이미지, 즉, segmentation map이 만들어진 이미지를 input으로 받아 이미지 보정을 해주는 모델이다. 

 

다시 말해 segmentation map을 구하는 과정이 선행되어야 하는 모델이다. 이를 위해 우리는 face-parsing 기술을 사용하는 pretrained 모델을 발견할 수 있었고(참조), 이 과정을 통해 얼굴을 특정 부분(코, 이마, 중안부, 턱 등)들로 구분해줘 '의미적으로 분리된 이미지'를 생성할 수 있었다.

 

segmentation map이 만들어진 이미지를 SEAN 모델에 넣는다면 얼굴에서 왜곡이 발생한 부분들을 바로잡을 수 있을 것이였다. 때문에 starGAN-v2 모델 사용으로 인해 발생한 여러 왜곡점들을 바로잡을 수 있는 방법을 찾을 수 있었다.

 

 


🥕 Reference

 

StarGAN-v2

https://truman.tistory.com/246#:~:text=StarGAN%20v2%EB%8A%94%20Image%20to,%EB%A1%9C%20%EB%B3%80%ED%99%98%EC%8B%9C%ED%82%A4%EB%8A%94%20%EA%B2%83%EC%9D%84%20%EB%A7%90%ED%95%9C%EB%8B%A4.

https://medium.com/curg/stargan-v2-%ED%95%98%EB%82%98%EC%9D%98-%EB%AA%A8%EB%8D%B8%EB%A1%9C-%EC%97%AC%EB%9F%AC-%EC%8A%A4%ED%83%80%EC%9D%BC%EC%9D%98-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC-%EC%83%9D%EC%84%B1%ED%95%9C%EB%8B%A4-acdfb0ac822a

SEAN

https://www.thedatahunt.com/trend-insight/image-segmentation

https://zpdesu.github.io/SEAN/

'🔨 Etc & Error' 카테고리의 다른 글

Visual Studio에서 #include <bits/stdc++.h> 오류 해결  (0) 2023.02.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함