얼굴 인식 기술이 코로나 19로부터 살아남는 방법
얼굴 인식 기술이 코로나 19로부터 살아남는 방법
들어가며
인간의 얼굴은 오로지 각 개인만이 가질 수 있는 고유의 정보입니다. 얼굴 인식 기술은 이러한 고유 정보를 바탕으로 인식을 수행하므로 높은 정확도로 개개인을 구별할 수 있습니다.그 뿐만 아니라 지문 인식처럼 손가락을 갖다 대는 등의 추가적인 절차가 필요하거나 신분증, 패스워드 등의 인증 도구가 필요하지 않아서 편리하다는 이점이 있죠. 이러한 이점 덕분에 얼굴 인식 기술은 차세대 신원 확인 기술로 주목 받고 있습니다.
[그림 1] 코로나 19 바이러스로 의무화가 된 마스크 착용. (출처: unsplash.com)
그런데 얼굴 인식 기술 2020년 전후로 강력한 도전을 맞이하게 됩니다. 코로나 19 바이러스가 유행하면서 사람들이 마스크를 쓰기 시작한 것입니다. 마스크에 의해 얼굴의 상당 부분이 가려져 얼굴 인식 시스템들의 정확도가 급격히 낮아졌습니다.
저 역시 이를 체감했는데요. 저 같은 경우 얼굴 인식 기능이 탑재된 A사의 휴대폰을 사용하는데 마스크를 착용한 상태에서는잠금 해제가 제대로 작동하지 않은 경우가 빈번하게 발생하여 귀찮았던 경험이 있었습니다.
실제로 코로나 19 이후 기존 얼굴 인식 모델들의 인식 성능은 2~3년 전 수준으로 퇴보하게 되었습니다. 이러한 성능 저하의 이유는 무엇이며 어떻게 해야 얼굴 인식 기술이 이전의 정확도 성능을 회복할 수 있을까요?
본문에서는 마스크 착용 사진이 기존 딥러닝 모델의 성능에 미치는 영향과 이를 해결하는 방법론에 대해 다뤄보도록 하겠습니다.
마스크 착용 이미지의 등장과 그 영향
얼굴 인식 시스템의 핵심 알고리즘은 딥러닝 모델입니다. 얼굴 인식 과정 중 가장 핵심적인 부분은 얼굴 탐지 및 특징 벡터 추출 작업 입니다. 개인의 얼굴 생김새로부터 고유의 키 값을 뽑아내는 작업이며 딥러닝 모델이 이 작업을 담당합니다. (자세한 내용은 아래 링크를 참고하시기 바랍니다.) 참고 링크: 얼굴 인식 기술에 관하여: 컴퓨터가 당신을 알아보는 방법
그런데 딥러닝 모델의 성능은 학습한 데이터에 많은 영향을 받습니다. 딥러닝 모델은 마치 공부하는 학생과 같아서 자신이 열심히 공부한 문제가 시험 문제에 나오면 곧잘 풀어내지만 처음 보는 유형의 문제가 나오면 잘 풀지 못합니다. 문제는 코로나 19 발생 이전의 딥러닝 모델들은 대부분 마스크를 착용하지 않은 얼굴 이미지들로 학습된 모델들이었습니다. 이 시기에는 마스크를 착용한 사람이 상대적으로 드물었기 때문에 얼굴 인식 시스템의 주요 대상이 마스크 미착용 얼굴이었기 때문입니다.또한 데이터 확보 측면에서도 마스크 미착용 이미지를 훨씬 수월하게 얻을 수 있었죠.
[그림 2] 마스크를 낀 당신 누.. 누구세요? (출처: Youtube / 아는형님)
그런데 코로나 19 발생 이후 마스크 착용이 필수가 되면서 기존 얼굴 인식 시스템들에 마스크를 착용한 얼굴 이미지들이 하나 둘 등장하기 시작했습니다. 기존 모델들 입장에서는 학습한 적 없는 새로운 유형의 이미지에 대해 인식을 해야 하는 상황이 발생한 것입니다. 당연히 기존의 얼굴 인식 시스템들은 새로운 유형의 이미지를 분석해내는데 어려움을 겪기 시작했습니다.
[그림 3] 마스크 착용 이미지가 얼굴 인식 알고리즘 성능에 미친 영향(출처: IFPC 2020)
[그림 3]은 미국 국립표준연구소(NIST)에서 측정한 마스크 착용 이미지가 얼굴 인식 시스템의 정확도에 미친 영향을 그래프로 나타낸 것입니다. 파란색, 초록색 선은 마스크 미착용 데이터들로 테스트한 얼굴 인식 시스템의 에러율을 나타냅니다. 빨간색 선이 마스크 착용 데이터로 검증한 얼굴 인식 시스템의 에러율을 나타냅니다. 그래프의 가로 축은 연도를, 세로축은 에러율(1-정확도)를 나타냅니다.
마스크 미착용 이미지에 대한 기존 모델의 성능이 어느 정도였느냐면, 정확도 99%는 가뿐히 넘길 정도로 인식 정확도가 뛰어났습니다.(파란색, 초록색 선 참고) 그런데 같은 모델에 마스크 착용 이미지를 입력하자 심한 경우 정확도가 60% 수준으로 급락한 것을 볼 수 있습니다.
2020년 중반에 들어서야 마스크 착용 이미지에 관한 인식 연구가 활발히 진행되고, 기업들도 기존 알고리즘을 보완하여 모델들의 정확도가 95~96% 수준으로 회복되었습니다. 그러나 여전히 마스크 미착용 이미지의 테스트 결과와 비교했을 때 에러율은 몇 배나 높습니다. FRVT Mask Effect test에 따르면 세계 최상위 15개 사의 얼굴 인식 알고리즘들로 테스트한 결과,마스크 착용 이미지에 대한 에러율이 미착용 에러율에 비해 평균 6.21배 정도 높은 것을 확인할 수 있습니다. (CUBOX 알고리즘의 경우 6.18배)
왜 떨어지는가?
기본적으로 컴퓨터는 이미지를 픽셀 단위로 인식합니다. 그런 의미에서 동일한 사람이라고 해도 픽셀 단위에서 마스크 착용 이미지와 미착용 이미지는 확실히 다르죠. 이러한 변화는 얼굴 인식 프로세스 전 과정에서 영향을 미칩니다. 여기서는 핵심 단계인 탐지 및 특징 추출 단계에서 이러한 변화가 미치는 영향에 대해서 살펴보겠습니다.
얼굴 탐지 단계에서의 문제점
얼굴 탐지 단계에서 발생하는 문제점은 시스템이 이미지 내 사람을 아예 탐지하지 못하는 문제가 발생할 수 있습니다. 대부분의 얼굴 탐지 알고리즘 역시 딥러닝 모델을 기반으로 이미지 속 얼굴을 탐지해냅니다. 그런데 그 모델은 마스크 미착용 얼굴들로 학습되어 있기 때문에. 마스크를 낀 얼굴은 아예 사람의 얼굴이라고 탐지하지 못 하는 경우가 발생할 수 있습니다. 이에 더해 설령 얼굴을 탐지했다고 하더라도 마스크가 얼굴의 코, 입, 턱 선 등을 가려버리기 때문에 하관 부분에 대한 정확한 탐지가 이루어지지 않을 수 있습니다.
얼굴 특징 추출 단계에서의 문제점
탐지 단계를 무사히 거쳐 얼굴 이미지가 시스템에 입력되었다고 하더라도 가장 핵심적인 얼굴 특징 추출 단계에서 역시 문제가 발생합니다. 얼굴 특징 추출 단계에서는 앞서 언급한 대로 각 얼굴의 고유 특징을 추출해내어 사람을 구별하도록 합니다. 그런데 마스크 착용 이미지는 마스크 때문에 코, 입, 턱 등 주요 특징 정보를 가지고 있는 부위들이 가려지게 되어 제대로 된 얼굴 특징을 추출할 수 없게 되며 제한된 정보로 인식 작업을 수행하려다 보니 특징 추출을 온전히 하지 못하게 되고 결과적으로 얼굴 인식 시스템의 구별력이 상당히 떨어지게 됩니다.
해결 방법: 마스크 착용 이미지로 학습시키자
마스크 착용 이미지가 얼굴 인식 시스템에 미치는 영향은 매우 치명적이지만 해결 방법이 전혀 없는 것은 아닙니다. 기존 얼굴 인식 시스템이 문제가 발생했던 이유부터 다시 생각해보겠습니다. 기존 얼굴 인식 시스템에는 인식에 핵심적인 역할을 하는 딥러닝 모델들이 있다고 했습니다. 이 딥러닝 모델들이 새로운 유형의 데이터인 마스크 착용 이미지에 대한 추론 성능이 낮으므로 전체 인식 시스템의 인식 성능이 낮아진 것이죠.그렇다면 직관적인 해결 방법을 생각해보면, 딥러닝 모델들에게 마스크 착용 이미지를 학습 시키는 것입니다. 이렇게 되면 딥러닝 모델들의 입장에서 마스크 착용 이미지는 더이상 새로운 유형의 이미지가 아니므로 충분히 추론할 수 있는 역량을 갖추게 되겠죠.
딥러닝 모델에 마스크 착용 이미지를 학습시키기 위해서는 많은 양의 마스크 착용 이미지가 필요합니다. 그런데 짧은 시간 내에 마스크 착용 얼굴 이미지들을 모으는 것은 시간적, 금전적으로도 쉽지 않은 일입니다. 공개된 데이터도 많이 없습니다.
해결방법: 데이터 증강(Data Augmentation)을 이용하자
[그림 4] 좌우 반전, 잘라내기 등의 기법을 사용하여 데이터를 증강 시킨 모습
이에 따라 마스크를 착용한 이미지를 생성해내는 데이터 증강(Data Augmentation) 기법이 주목받기 시작했습니다. 데이터 증강이란 기존 이미지를 변형한 새로운 데이터들을 생성해내는 기법입니다. 데이터 증강은 한정적인 데이터양을 늘림으로써 데이터를 구하기 어려운 상황에서도 딥러닝 모델이 충분한 훈련을 할 수 있도록 도와줍니다. 마스크 데이터 증강은 기존 얼굴 데이터에 마스크를 학습하거나 마스크 착용과 유사한 효과를 내는 기법들로 가상의 마스크 착용 이미지를 생성해냅니다. 이에 따라 빠르고 저렴하게 마스크 착용 데이터들을 수집하고 모델을 학습 시킬 수 있죠.
데이터 증강을 통해 마스크 이미지 만들기
마스크 착용 데이터셋을 만들기 위한 대표적인 데이터 증강 기법 세 가지를 소개해보겠습니다:
Cutout 기법
[그림 5] Cutout 기법 예시
Cutout 기법은 이미지에 랜덤한 영역을 검은색 사각형으로 덮어씌워 기존 형체를 알 수 없도록 가리는(Occlusion) 방법입니다. Cutout 기법을 통해 학습하게 되면 얼굴 상단 부분들에 집중해서 개인 간 차별적인 특징을 추출하도록 학습하는 효과가 있습니다. 기존 딥러닝 모델은 입, 코, 턱선 등의 얼굴 특징을 포함하여 인물을 추측했을 것입니다. 그런데 Cutout으로 이 부분들을 가리게 된 데이터를 학습 데이터로 마구 넣어주면 딥러닝 모델은 얼굴 상단 부분(얼굴의 눈, 눈썹, 이마 모양)의 특징을 집중적으로 학습하여 이 특징들 만으로도 해당 이미지의 인물을 추측할 수 있게끔 훈련하게 됩니다.
Cutout 기법은 적용도 간단합니다. 먼저 기존 이미지들의 코, 입 등의 랜드마크 위치를 찾아낸 후 원하는 크기의 사각형을 랜드마크 위치에 덮어씌우면 되는 것이죠. (예시 코끝 좌표를 중심으로 하는 400 x 300 크기의 검은색 사각형(Filled-Rectangle)을 합성) 이러한 작업은 OpenCV와 같은 이미지 처리 라이브러리에서 쉽게 구현할 수 있습니다.
얼굴 랜드마크(특징점)를 이용한 2D 마스크 합성
앞서 소개한 cutout 방법과 달리 하관을 가리는 동시에 턱선은 보일 수 있게 하는 방법이 얼굴 랜드마크를 이용한 2D 마스크 합성 방법입니다.
[그림 6] 좌: 얼굴 랜드마크 위치 우: 랜드마크 기반 2D 마스크 합성 예시 (출처: 좌: sciencedirect.com, 우: IFPC 2020 발표 자료)
마스크를 착용한 얼굴 이미지를 만들기 위해서, 얼굴에 68개(개수 변경 가능)의 랜드마크들을 지정하여 랜드마크 중 2D 마스크를 합성할 영역을 지정하고, 해당 영역에 따라 cutout 하게 되면 턱선은 유지한 채로 하관이 가려진, 마치 마스크를 낀 이미지를 생성하게 됩니다. 이때 지정할 랜드마크 위치, 개수에 따라 다양한 마스크 모양 / 덮는 정도를 재현한 이미지들을 생성해낼 수 있고 마스크의 색깔 역시 세부 설정 통해 반영해볼 수 있습니다.
2D 마스크 합성 방법은 근본적으로 cutout과 메커니즘이 같기 때문에 구현하기 쉽다는 장점이 있으면서도 cutout보다 좀 더 많은 얼굴 정보를 딥러닝 모델에 전달해줄 수 있습니다. 참고로, Dlib라는 얼굴 랜드마크 검출 라이브러리로 파이썬(Python)에서 얼굴 랜드마크 탐지를 직접 실행해볼 수 있습니다. 관련 내용을 알아보고 싶으신 분들은 링크로 접속하시면 더 자세하게 알아볼 수 있습니다.
GAN(Generative Adversarial Networks)을 이용한 마스크 이미지 합성
[그림 7] 위조 지폐 생성에 비유한 GAN (출처: 쉽게 씌어진 GAN)
GAN은 진짜 같은 가짜 이미지를 만들어내는 이미지 생성 기법의 하나입니다. GAN을 고안한 Ian Goodfellow는 GAN의 원리를 위조지폐 만드는 것에 비유합니다. GAN에서는 두 개의 모델들이 있는데요, 위조지폐를 만들어내는 Generator(이미지 생성 모델)와 지폐가 진짜인지 가짜인지 판별하는 Discriminator(이미지 판별 모델)가 있습니다. Generator가 Discriminator의 피드백으로 점점 더 나은 위조지폐를 만들게 되는 것입니다.
이러한 원리로 마스크를 착용하는 이미지를 생성하도록 훈련된 모델인 Generator에게 맨 얼굴의 사진을 입력으로 주면 Generator는 마스크를 착용한 얼굴의 이미지를 만듭니다. Generator가 만든 이미지를 Discriminator가 진짜 이미지인지 가짜 이미지인지 판별합니다. 그러한 피드백을 다시 Generator가 받은 후 다시 더 나은 이미지를 생성합니다. 이러한 반복 과정을 통해 Generator는 더욱 그럴싸한 이미지를 만들 수 있게 됩니다. [그림 8] GAN으로 생성한 마스크 착용 이미지 (출처: IAMGAN, 2020) 앞서 언급한 Cutout 기법, 2D 마스크 합성 기법과 GAN은 결국 기존 이미지에 가상의 마스크를 합성한다는 점에서는 같지만, GAN은 Discriminator의 검수를 거쳐 합성한 티가 나지 않도록 진짜 같은 이미지를 생성한다는 점에서 다릅니다.
데이터 증강 기법의 한계
데이터 증강 기법을 통해 우리는 빠르고 저렴하게 마스크 착용 이미지들을 구할 수 있게 되었습니다. 그러나 데이터 증강 기법이 제공해줄 수 있는 것은 결국 마스크를 합성한 ‘가상의 이미지’이기 때문에 실제 마스크 착용 이미지에서만 발생할 수 있는 특징들을 모두 담고 있지는 못합니다. 따라서 데이터 증강 기법으로 획득한 이미지들로 학습한 딥러닝 모델은 실제 마스크 이미지로 테스팅했을 때 기대보다 낮은 성능이 나올 수 있습니다.
[그림 9]좌: 실제 마스크 착용 이미지 우: 증강 기법을 통해 생성한 이미지
(출처: IFPC 2020)
첫 번째로, 실제 마스크 착용 이미지에서 나타날 수 있는 질감(texture)이 완벽히 구현되지 못합니다. 질감의 유무는 이미지에서 픽셀의 밝기 강도를 달라지게 하므로 딥러닝 모델 추론시 참고할 수 있는 좋은 특징 중 하나입니다. (실제로 딥러닝 이전의 추론 모델 중 다수가 질감을 기반으로 이미지를 분석했습니다) cutout 등의 데이터 증강 기법을 통해 얻은 이미지는 이러한 질감이 전혀 나타나지 않습니다.
두 번째로, 실제 마스크 착용 이미지에서 나타날 수 있는 3D 입체감(3D Depth)이 완벽히 구현되지 못합니다. 실제 마스크 이미지는 얼굴 깊이, 코의 높이 등에 따라 마스크 부분의 입체감이 달라집니다. 어떻게 보면 이 입체감이 개인별 얼굴 특징일 수도 있습니다. 그런데 앞서 소개한 기법들을 통해 얻은 이미지는 이러한 입체감이 전혀 나타나지 않습니다.
마지막으로, 실제 마스크 착용 이미지에서 나타날 수 있는 마스크로 인한 피부의 빛 반사가 완벽히 구현되지 못합니다. 실제 마스크 착용 이미지는 실제로 마스크를 착용했기 때문에 마스크로 인한 얼굴빛 반사량이 다릅니다. 이로 인해 마스크 주변 피부의 픽셀값이 미세하게 변형되죠. 같은 마스크를 끼더라도 피부색, 얼굴 깊이에 따라 사람마다 반사하는 빛의 양도 달라서 어떻게 보면 얼굴의 빛 반사량이 개인 별 얼굴 특징일 수도 있습니다. 앞서 소개한 기법들은 실제 마스크가 아닌 가상의 마스크를 합성한 것으로 이러한 빛 반사에 따른 주변 픽셀 변화가 전혀 나타나지 않습니다.
What’s Next
데이터 증강 기법의 이러한 한계들을 뛰어넘기 위해 좀 더 실제 마스크 이미지와 유사한 합성 방식을 구현하고자 하는 연구들이 지속해서 진행되고 있습니다. 또한, 데이터 증강 기법이 아닌 마스크 속 얼굴을 추론하는 디마스킹(Demasking) 등 새로운 연구와 실제 마스크 이미지 구축을 위한 노력도 계속되고 있습니다.
나가며
지금까지 마스크 착용 이미지가 딥러닝 모델에 미치는 영향과 대표적인 해결 방법인 데이터 증강 기법을 통한 마스크 착용 이미지셋 구축 방법과 한계에 대해 알아보았습니다. 마스크 착용 얼굴 인식에 대한 연구가 활발히 이루어지고 있는 만큼 가까운 미래에는 마스크를 착용하고도 안전하고 편리하게 얼굴 인식을 할 수 있게 되길 기대해 봅니다.
About CUBOX
CUBOX AI LAB 역시 마스크 착용 이미지에 대한 인식률을 올리기 위해 노력하고 있습니다. 마스크 착용 얼굴 인식 알고리즘이나 데이터셋 구축 방법론, 훈련 기법 등 최신 연구들에 관한 리서치 및 딥러닝 모델 훈련을 지속해서 진행하고 있습니다. 또한, 자체적인 데이터 구축 기술을 기반으로 고품질의 마스크 착용 이미지를 꾸준히 수집하고 있습니다.
이러한 노력들 덕분에 CUBOX는 NIST에서 주관하는 얼굴 인식 대회인 FRVT(얼굴 인식 알고리즘 기업 테스트, Face Recognition Vendor Test)의Face Mask Effect(마스크 착용 얼굴 인식 알고리즘 대회) 부문에서 마스크 착용 이미지에 대한 정확도 부문 국내 1위를 달성했습니다*.
CUBOX AI LAB은 얼굴 인식 기술에 관한 연구를 진행하고 있습니다. CUBOX AI팀의 연구에 대해 좀 더 자세히 알고 싶으시거나 CUBOX AI팀과 함께하고 싶으신 분들은 언제든지 연락 주시기 바랍니다. *2022년 3월 기준About Author 김 다 희 Pro, AI 1팀dhkim@cubox.ai
- 얼굴인식
- Recognition
- MaskEffect
- DataAugmentation