본문 바로가기
paper review

조명 및 법선벡터 지도 추정을 이용한 사실적인 가상 화장 시스템 논문 리뷰

by 망고먹는 개발자 2021. 7. 26.
논문을 읽고 이해한 부분을 풀어서 작성한 포스트임을 밝힙니다.
http://cg-korea.or.kr/controllers/download.php?fileID=274

 

가상 화장이란 요즘 모바일 어플로 많이 응용되는 기술이다.

 

 

가상 화장 어플에는 여러가지 종류가 있는데

카메라로 촬영된 영상에 실시간으로 눈코입을 인식해서 데코를 붙여주는 스타일도 있고

커스텀으로 사용할 수 있도록 블러, 번인 등의 효과를 제공하는 스타일도 있고,

얼굴 인식을 통해 화장을 얼굴 전체적으로 자동 적용 해주는 스타일도 있다 (블러셔라던지 파운데이션 등의 효과)

 

커스텀 수작업으로 직접 디테일한 부분을 수정할 때에는 얼굴 인식이 불필요하고 효과도 좋다.

그러나 이 논문에서는 영상으로부터 얼굴을 인식하고, 해당 얼굴에 노말맵과 조명환경을 추정해서

화장 텍스쳐에 해당 환경을 적용한 자동 쉐이딩을 추가해서 자연스러운 '자동' 화장을 구현하려고 하고 있다.

또한 모바일 기기에서 유의미한 속도를 이끌어내기 위해 '화장'이라는 특수성을 고려해 정확한 노말맵, 조명 환경이 아니라

근사치를 추정함을 통해서 계산한다고 되어있다. 나중에 결론에서 확인할 수 있는 바와 같이 이 근사치 추정이 생각보다 효과가 굉장히 좋다

아무래도 사람 얼굴이 어느정도 비슷한 형태를 가지고 있어 표준 모델을 사용해도 무리가 없기 때문인 것 같다.

 

먼저 이 논문이 상당부분 참고하고 있는 기본 이론은

https://homes.cs.washington.edu/~kemelmi/ProjectPages/Faces/paper.pdf

바로 이것인데

이렇게 하나의 이미지와 하나의 기본 모델을 가지고 조명과 법선벡터를 구한 뒤 거꾸로 3D 모델을 추출해 다른 각도에서의 뷰까지도 제공할 수 있는 기법을 기술하고 있는 논문이다.

 

위 기술을 기반으로 이 논문에서는 법선벡터와 조명의 근사치, 얼굴의 특징점을 추정해 가상 화장을 모바일 환경에서 의미있는 속도로 적용하고자 한다.

짧은 시간 내에 상당히 실제와 유사한 얼굴의 노말맵을 구한다라는 측면에서 의미가 있다고 보여진다.

화장보다도 조명환경을 바꾼다던지 해서 프로젝션 맵핑이나 조명 시뮬레이션/ 표정 시뮬레이션 같은 것에도 응용하면 좋을 것 같다.

 

 

개요는 이러하다.

 

 

일단 얼굴의 특징점을 구한다.

노말맵을 근사치로만 구하고자 하기 때문에 사람얼굴과 유사한 Standard Face 모델을 가지고 진행한다..!

 

그다음에 영상에 맞게 3D 얼굴 모델을 회전하고 이동하고 해서 적당히 각도를 맞춰준다

그리고 해당 3D 모델의 노말 맵이 나오면 이걸 전에 구해논 얼굴 특징점에 잘 들어맞도록 warping을 시켜준다

 

 


개요

 

 

 

1.서론

자연스러운 화장을 적용한다..

 

 

 

결과물이 어색해 보이지만 결론까지 도달한 뒤에는 상당히 의미있는 결과라는걸 알 수 있다.

 

2. 가상화장 시스템

이 가상화장 시스템을 한마디로 요약하면, 2차원 얼굴 영상을 가지고 조명 / 법선을 구해서, 얼굴의 음영을 적용한 자연스러운 화장을 추가한다는 것이다.

 

우선은 근사치를 구하고 속도를 얻는것을 목표로 한다.

 

2.1. 얼굴 특징점 및 조명 추정

얼굴의 특징점을 구한다.

얼굴의 특징점이라 하면 눈, 코, 입의 대략적인 위치를 말한다.

 

 

사람 얼굴은 예전부터 컴퓨터 비젼에서 큰 관심분야였다.

사진만 보고 얼굴 특징점을 찾기 위해 '단계적 자세 회귀법' 을 이용한다.

 

이 단계적 자세 회귀법은 영어로는 Cascaded Pose Regression 이라고 하는데, 영상 분석에서 빠르게 효과적으로 결과를 얻어낼 수 있는 방법 중 하나로 많이 쓰이고 있다고 한다.

관련 논문은 http://web.bii.a-star.edu.sg/~zhangxw/files/Cascaded%20pose%20regression.pdf

여기서 참조할 수 있다.

 

자료를 보면 단계가 지남에 따라서 점점 정확한 위치를 찾아가면서 마치 학습하는 듯한 모습을 볼 수 있는데

단계적 자세 회귀법은 머신러닝 방법중 하나인 단계적 학습 방법에 기반한다고 한다.

여기서 각 단계에 사용되는 보정자는 fern이라고 하고, 각 펀은 입력된 영상에 대해서 간단한 색인을 계산해서 학습 영상들 중 같은 색인을 가지는 영상들을 찾는다고 한다.

선택된 학습 영상들에서 특징점의 변화 방향으로 움직이는 과정을 각 펀에대해 진행하다 보면 최종 특징점을 찾을 수 있다고 한다.

 

요점은 펀이 있는데 이 펀이 간단한 색인을 계산, 이 색인을 통해 특징점의 변화 방향을 계산하고 적용을 반복하다보면 오른쪽 끝처럼 최종에 다다른다는 뜻이다

그리고 굉장히 효율적으로 처리될수 있어서 빠르다.

 

이 단계적 자세 회귀법을 통해서 얼굴의 특징점과, 조명을 추정한다

조명 정보를 단계적 자세 회귀법을 통해 부가적으로 얻어내고, 근사치로 간단하게 적용하기 위해서는 조명환경 자체를 몇가지 숫자만으로 표현할 수 있어야 한다.

그래서 이 논문에서는 구면 조화 함수를 사용한다

http://www.wisdom.weizmann.ac.il/~ronen/papers/Frolova%20Simakov%20Basri%20-%20Accuracy%20of%20Spherical%20Harmonic%20Approximations.pdf

조명환경 자체를 구면위에 정의한다.

https://ko.wikipedia.org/wiki/%EA%B5%AC%EB%A9%B4_%EC%A1%B0%ED%99%94_%ED%95%A8%EC%88%98

미리 계산된 구면 조화 함수에 몇가지 계수만 변화시켜 주면 원하는 조명환경을 근사해서 표현할수 있다.

 

2.2 법선 벡터 맵 생성

결론적으로 얻고자 하는 것은 얼굴의 전체적인 음영이다.

기본적으로 램버시안 조명 모델에 따라서 물체의 법선 벡터와 빛 벡터가 주어지면 물체에 간단한 Diffuse 음영을 줄 수 있다.

이제 우리는 조명 환경을 구했다.

그러므로 법선벡터만 있으면 얼굴의 음영을 구할 수 있다.

기본 3D 모델을 사용한다.

영상속의 각도에 맞게 모델을 rigid transformation(강체변환)하고 해당 모델의 법선벡터를 렌더링해서 얼굴 특징점에 맞춰서 와핑을 시킨다

결과를 보면 1과 3이 상당히 닮았다..! 작은 보조개나 눈의 미세한 라인까지 살려주지 못하는 점은 좀 아쉽다.

하지만 근사치는 충분히 구해진 듯 하다.

 

2D 영상을 통해서 3차원 모델의 회전 / 평행이동을 구하는 법은 다음과 같다

3차원 모델과 그에 대응하는 영상 2차원 점이 주어졌을때 카메라 정합 과정과 동일하다.

투영행렬을 적용한 각 3D 모델의 투영점과 기존 2D 영상 속 점의 변화량이 최소인 회전행렬과 변위를 구하는 것이다.

 

그리고 와핑은 박판 함수를 사용했다고 되어있다. 박판이라는 건 말그대로 Thin Plate이다.

출처 - www.mvkonnik.info

얇은 판을 늘리는 것 처럼 영상을 보간한다는 것이다

출처 - vision.cse.psu.edu

 

2.3. 가상 화장 적용

이제 노말맵과 조명환경을 구했으므로 음영을 구해서 화장 텍스쳐에 적용하고, 이걸 다시 영상위에 렌더링 하면 된다.

결과물이 어색해보이긴 하지만 중요한 것은

1. 입력 영상 2. 음영 고려하지 않은 부분 3. 계산을 많이 해서 오래걸린 결과물 4. 근사치를 이용한 결과물

인데 3번이랑 4번이 거의 비슷하다는 점이다.

또 전체적인 조명 환경을 자동으로 텍스쳐에 반영하고 있다.

 

조금 아쉬운 점은 3행에서 보다시피 엣지의 어두운 부분의 조명 환경이 정확하게 반영이 안되었다는 점이다.

반응형

'paper review' 카테고리의 다른 글

ORB-SLAM Review  (0) 2021.09.17
실시간 연필 렌더링 논문 리뷰  (0) 2021.07.26

댓글