사진 미션 고도화 도전기 2

김단희
DelightRoom
Published in
6 min readOct 14, 2021

알라미 사진 미션에 머신 러닝 기법 적용하기

지난 ‘사진 미션 고도화 도전기 1’ 에서는 사진 미션을 수행하기 위해 알람 설정시 저장한 이미지와 알람 해제시 촬영한 두 사진의 유사도를 비교하기 위한 방법들과 각 방법들의 한계점들을 다루었다.

ML 의 ‘다중 이미지 분류 (Multi Image Classification)’ 방식을 사용하여 사용자들이 사진 미션을 위해 촬영할 법한 사진들 (ex. 세면대, 침대, 식탁 등) 을 미리 모델 학습을 위한 데이터셋으로 준비하고 입력 이미지와 해당 이미지의 정답 데이터를 매칭시키는 모델을 학습한다. 이렇게 학습된 모델을 이용하여 저장된 이미지와 촬영된 이미지 각각을 모델의 입력으로 주었을 때의 분류 결과를 비교하여 같은 이미지로 분류되었다면 미션 성공, 다른 이미지로 분류되었다면 미션 실패로 처리하여 사진 미션 동작을 구현할 수 있었다.

그러나 이와 같은 다중 이미지 분류 문제는 입력으로 주어진 이미지에 대해서만 분류 가능하다는 문제가 존재한다. 우리가 학습시킨 알고리즘은 우리가 학습할 때 제시한 데이터셋에 대해서만, 우리가 제공한 라벨 (정답 데이터, ex. 세면대 이미지는 ‘세면대’ 라는 라벨) 에 대해서만 알고 그 외의 데이터가 주어졌을 때는 이에 대해 알지 못한다. 세면대 이미지만 학습시킨 알고리즘은 세면대 이외의 이미지가 주어졌을 때 세면대가 아니라는 것만 알지 어떤 사물인지에 대해서는 알 수 없다는 한계점이 있었다.

이러한 한계점을 극복하기 위한 방법으로 이번 글에서는 ‘단일 이미지 분류 (One-class Image Classification)’ 방식을 통한 사진 미션 구현을 소개해보려한다.

‘One-Class Classification’ 방식은 ‘Multi-Class Classification’ 과는 달리 하나의 클래스에 대해서만 같은지 다른지를 분류하기 위한 알고리즘이다. 다중 이미지 분류는 학습시에 분류를 원하는 모든 종류 (클래스) 의 이미지들을 학습하고 새로운 이미지가 주어졌을 때 해당 이미지의 정답 (세면대 이미지라면 ‘세면대’ 라는 정답) 이 사전에 학습되었다면 주어진 이미지를 정상적으로 분류해 내는 방식으로 동작한다. 이와 달리 단일 이미지 분류는 분류를 원하는 단 하나의 종류의 이미지만 학습으로 주어지고 학습된 모델에 새로운 이미지가 주어졌을 때 해당 이미지가 정답인지 아닌지 ( A / ~A ) 만을 분류하는 이진 분류 문제로 압축할 수 있다.

단일 이미지 분류 방식

따라서 단일 이미지 분류 방식을 사진 미션 구현에 적용해보면 사진 미션을 수행하기 위해 알람 설정시 저장한 이미지를 학습하고 기상시 알람 해제를 위해 촬영한 이미지를 학습된 모델의 입력으로 넣었을 때 해당 이미지가 같은 클래스로 분류되는지 아닌지의 이진 분류 방식으로 적용할 수 있다. 다중 이미지 분류 방식을 위해 사용자가 기상시에 촬영할 법한 모든 종류의 이미지를 학습시키는게 아닌 사용자가 실제 촬영한 한가지 종류의 이미지에 대해서만 학습하고 추후 주어진 이미지가 해당 이미지와 같은 종류로 분류 되는지 아닌지만 판단하면 되는 것이다.

다만 모델의 분류 정확도를 높이기 위해서는 충분한 양의 학습 데이터가 필요한데 제시한 방법의 경우 학습 데이터가 주어지는 시점이 사용자가 사진 미션을 수행하기 위한 이미지를 저장하는 시점이기 때문에 다중 이미지 분류 방식처럼 미리 대용량의 학습 데이터가 주어지는 형태가 아닌 학습을 위해 주어지는 데이터가 한장의 사진이라는 문제가 있다.

이러한 문제를 해결하기 위해서 데이터 증폭 (data augmentation) 방법을 사용할 수 있다. 다음과 같이 한장의 이미지 데이터가 주어졌을 때 ‘회전’, ‘명도’, ‘채도’, ‘반전’, ‘이동’ 등의 방식으로 프로그래매틱하게 이미지 데이터를 조작하여 하나의 사물을 다양한 시공간에서 촬영한 법한 효과를 얻을 수 있다.

데이터 증폭 적용 예시

이제 우리는 데이터 증폭 방법을 적용하여 한장의 이미지 데이터로부터 단일 이미지 분류 알고리즘을 학습시키는데 필요한 충분한 양의 데이터셋을 확보할 수 있게 되었다. 부족한 데이터셋 문제를 해결하였으니 이제 증폭된 이미지 데이터 셋을 바탕으로 단일 이미지 분류 모델을 학습한다. 충분한 학습 과정을 거친 모델은 추후 새로운 이미지가 주어졌을 때 해당 이미지가 학습된 바운더리 안에 위치하면 같은 이미지로, 바운더리 밖에 위치하면 다른 이미지로 분류할 것이다. 해당 로직을 사진 미션 수행에 적용해보면 전자의 경우 미션 실패로, 후자의 경우 미션 성공에 해당될 것이다.

단일 이미지 방식 적용 예시

사진 미션을 수행하기 위해 직접 이미지 데이터를 픽셀 by 픽셀로 비교하는 방식에서부터 주어진 두 장의 이미지를 각각 분류하여 분류 결과를 비교하는 다중 이미지 분류 적용 방식, 주어진 두 장의 이미지를 A / ~A 로 분류하는 단일 이미지 분류 적용 방식까지 알아봤다. 가장 간단한 직접 이미지 데이터를 비교하는 방식은 단순한 feature 비교로 비슷한 색상의 다른 사물 이미지를 같은 사물로 분류할 수 있는 문제가 있었고 다중 이미지 분류 방식은 학습 데이터로 주어진 이미지만 분류할 수 있는 문제가 있었다. 단일 이미지 분류 방식을 적용하면 이진 분류 문제로 압축하여 주어진 이미지가 학습 데이터와 같은지 다른지 분류하는 방식으로 사진 미션을 수행해볼 수 있었다. 좌상단 이미지 데이터가 주어진 경우 다음과 같은 결과를 얻을 수 있었다.

단일 분류 방식 적용 결과

‘사진 미션 고도화 도전기 1’, ‘사진 미션 고도화 도전기 2’ 에 걸쳐 기존 방식에 어떤 문제점들이 있는지 다뤄보고 이를 개선해 보았다. 아쉽게도 현재 firebase mlkit 은 beta 버전이라 모바일 환경에서의 모델 학습 기능은 지원하지 않아 실제 알라미 앱에서는 아직 적용해 보지 못했다. 추후 모바일 환경에서의 학습 기능도 제공 예정이라고 하니 그날이 오기를 기대해보며 본 도전기를 마친다.

딜라이트룸에서 값진 경험을 함께 하실 분들을 모십니다

어떤 포지션이 열려있는지 알아볼래요

--

--