안녕하세요!
마인즈앤컴퍼니는 지난 2019년부터 올해로 4년째 민팃 중고폰 ATM에서 사용되는 AI 모델 개발을 담당하고 있습니다.
이번 주부터 4주 간 발행되는 민팃 포스트 시리즈를 통하여 민팃 프로젝트에서 어떤 일을 하고 있는지를 공유하고자 합니다.
첫 포스팅인 만큼 이번 글에서는 민팃 프로젝트 전반에 대한 개요와 함께 프로젝트의 문제 정의와 그에 따른 솔루션을 설명하고, 현재 민팃 파손 탐지에 어떤 모델이 사용되고 있는지 소개하겠습니다.
민팃이란?
민팃(MINTIT)은 전국 최대 규모의 비대면 중고 휴대폰 거래 플랫폼입니다. 대형마트나 휴대폰 대리점에서 쉽게 접할 수 있는 민팃 ATM을 이용하여 서랍 속에 잠들어있던 중고 휴대폰을 손쉽게 판매할 수 있는 서비스를 제공합니다.
ATM에서 거래가 이루어지기 때문에 그동안 중고 휴대폰을 거래할 때 경험했던 여러 가지 불편함—사기거래, 택배 배송, 데이터 유출 등—들에 대해 걱정하지 않아도 됩니다. 또 객관적이고 투명하게 책정된 가격으로 휴대폰을 판매할 수 있다는 것도 민팃의 장점입니다.
민팃 ATM의 사용방법은 간단합니다. 고객이 ATM에 휴대폰을 집어넣으면 ATM 내부의 여러 대의 카메라가 휴대폰의 사진을 찍어 기기 표면의 파손을 탐지합니다. 이를 바탕으로 고객에게 가격이 제시되면 고객은 즉시 휴대폰을 판매할지 말지 결정할 수 있습니다.
편리함과 접근성을 바탕으로 한 민팃은 2019년 서비스 런칭 이후 3년간 꾸준히 성장하였습니다. 2022년 현재 전국에 분포한 4000여대의 ATM에서 1백만 대 이상의 중고 휴대폰이 거래되었으며, 누적 사용자와 시장 점유율 또한 지속적인 증가 추세에 있습니다.
중고 휴대폰 검수 ATM
민팃 ATM 안에서는 어떤 일이 일어나고 있을까요? 민팃 서비스가 플랫폼으로서 기능하는 데 가장 중요한 단계, 즉 중고 휴대폰의 파손 여부를 검사하고 파손의 정도에 따른 가격을 산정하고 매입하는 단계의 작업들이 바로 민팃 ATM 안에서 수행됩니다.
민팃 ATM을 통해 중고 휴대폰을 판매하기 위해서는 다음과 같은 절차를 거치게 되는데요:
- 고객이 판매하고자 하는 중고 휴대폰에 민팃 기능검사 앱 (민팃 Connect) 을 설치하고 ATM에 넣습니다.
- ATM 내부에서 휴대폰의 사진을 촬영합니다. (10~15장)
- 휴대폰의 기능 검사와 외관 검사를 수행합니다.
- 종합하여 최종적인 휴대폰의 등급을 판정하고, 판매 가격을 고객에게 공유합니다.
민팃 팀에서 개발하고 있는 외관 파손 탐지 모델은 3. 휴대폰의 외관 검사를 수행하는 단계에서 활용되고 있습니다.
우리가 사용하는 휴대폰은 LCD, 유리, 모서리, 뒷판, 카메라 등의 다양한 부품으로 이루어져 있습니다. 그리고 각각의 부품마다 서로 다른 형태와 성질을 갖는 파손이 발생합니다.
LCD는 눌려서 흑점과 얼룩이 생기고, 유리는 금이 가거나 깨지고, 모서리는 찍히고, 뒤편은 스크래치가 나죠. 또 아이폰인지 삼성폰인지, 모서리가 금속인지 플라스틱인지, 홈버튼이 있는지 없는지에 따라 발생하는 파손의 유형이 조금씩 달라집니다.
민팃 휴대폰 외관 파손 탐지 모델은 이러한 다양한 파손들을 엄밀히 구분하여 탐지하고, 종합적으로 외관의 파손 정도를 파악하는 일을 수행합니다.
중고 휴대폰 외관 파손 탐지 모델 개발하기
1. 프로젝트의 배경과 목적
기존에는 ATM의 휴대폰 외관 검수 과정을 모두 민팃의 관제팀에서 일일이 눈으로 확인했습니다. 그래서 민팃 서비스가 점차 확대될수록 시간이 많이 소요되었고 업무적인 부담도 가중되었습니다. 따라서 휴대폰 검수 업무를 자동화하기 위한 파손 탐지 모델에 대한 필요성이 증가하게 되었습니다.
프로젝트의 목표는 민팃 ATM에 중고 휴대폰이 들어왔을 때 이 휴대폰에 어떤 종류의 파손이 어느 정도로 심각하게 존재하는지를 사진을 통해 파악하는 것으로 설정하였습니다.
2. 문제 해결하기
효과적인 문제 해결을 위하여 조금 더 구체적으로 고민했던 부분들은 다음과 같습니다.
- 휴대폰에 발생하는 파손의 종류는 어떤 것들이 있을까?
- 휴대폰 등급 판정의 근거에 대해 납득 가능한 설명을 제공할 수 있을까?
- 모델이 안정적으로 동작하게 하려면 어떻게 해야 할까?
Q. 휴대폰에 발생하는 파손의 종류는 어떤 것들이 있을까?
딥러닝 모델이 휴대폰 사진을 보고 파손을 잘 탐지할 수 있도록 학습시키기 위해서는 이미지의 어떤 특징이 어떤 파손을 나타내는지를 명확히 알려주어야 합니다.
따라서 먼저 중고 휴대폰에서 자주 발생하는 파손을 파악하고 유형화하는 작업이 선행되었습니다.
파손 발생 부위를 전면, 후면, 모서리, LCD의 4가지로 분류하고, 각각의 부위에서 발생할 수 있는 파손의 유형을 파악하였습니다. 각 부위에서 자주 발생하는 대표적인 파손들은 다음과 같습니다.
파손 발생 부위 | 파손 유형 |
모서리 | 긁힘, 찍힘 등 |
LCD | 잔상, 흑점, 파손, 줄감, 얼룩 등 |
전면 | 스크래치, 흠집, 파손 |
후면 | 스크래치, 흠집, 파손 |
이러한 다양한 파손의 유형을 정의하고 나면 딥러닝 모델이 탐지해야 할 대상이 무엇인지를 명확히 파악할 수 있습니다. 이를 기반으로 데이터를 수집하고 라벨을 생성하고 나면 모델이 학습할 수 있는 준비가 된 것입니다.
Q. 휴대폰 등급 판정의 근거에 대해 납득 가능한 설명을 제공할 수 있을까?
휴대폰이 ATM에 인입되면 여러 장의 사진을 촬영합니다. 그리고 해당 사진을 바탕으로 휴대폰 표면에 존재하는 파손들을 탐지하여 최종 등급을 판정합니다.
이때 휴대폰의 파손을 탐지하기 위해 활용할 수 있는 모델링 방법론은 다음과 같이 크게 세 가지로 나눌 수 있습니다
- Image Classification
- Object Detection
- Segmentation
이 중에서 우리의 고려 대상은 Image Classification과 Segmentation입니다. 데이터 라벨링에 네모난 Bounding Box를 사용하는 Object Detection은 크기와 모양이 제각각인 휴대폰의 파손을 다루기에 적합하지 않기 때문입니다.
Image Classification
Image Classification (이미지 분류) 은 가장 잘 알려진 딥러닝 모델링 방법론 중 하나로, 주어진 이미지를 보고 하나 또는 여러 개의 클래스로 분류합니다. Image Classification 또한 다음과 같이 3개의 세부 태스크로 나뉩니다.
- Binary Classification : 이미지에 Dog 클래스가 존재하는지 / 존재하지 않는지 여부 분류
- Multiclass Classification : 이미지를 Dog, Cat, Bus, Plant 등의 클래스 중 하나로 분류 (2개 이상의 클래스가 존재할 수 없음)
- Multilabel Classification : 이미지에 Dog, Cat, Bus, Plant 클래스가 각각 존재하는지 / 존재하지 않는지 분류 (2개 이상의 클래스가 존재할 수 있음)
Classification의 특징은 모델 구조와 설계가 비교적 단순하고 라벨링이 간단하다는 점입니다. 따라서 모델링에 리소스를 적게 투입해도 비교적 높은 정확도를 기대할 수 있습니다. 또한 라벨링 하는 데 들어가는 비용이 적기 때문에 학습 데이터를 많이 확보할 수 있다는 것도 장점입니다.
그러나 이미지를 보고 해당 클래스가 존재하는지 아닌지 여부만을 판단하기 때문에, Classification 모델만 가지고서는 모델의 판단 근거가 무엇인지 알 수 없다는 단점이 존재합니다. 이미지의 어떤 부분을 보고 Dog 클래스가 존재한다고 판단했는지 설명하는 것이 불가능하다는 의미입니다.
민팃의 ATM에서는 휴대폰의 파손 존재 여부만을 탐지하는 게 아니라 사진의 어떤 부분의 파손을 근거로 하여 등급이 판정되었는지 고객에게 설명하는 과정이 꼭 필요하기 때문에, Image Classification 모델만 사용하기에는 부족하다고 판단하였습니다.
다만 Image Classification 방법론의 장점(저렴한 라벨링 비용, 대규모 데이터 확보 가능 등)을 극대화하여 서비스 파이프라인에 반영하게 되면, 전반적인 서비스의 품질을 높이면서도 효율적인 운영이 가능해집니다.
이후 공개될 시리즈 포스트에서 여러 개의 모델을 앙상블 하여 서비스 품질을 업그레이드하는 과정을 담은 내용을 공유할 예정이므로 참고 바랍니다.
Image Segmentation
Image Segmentation이란 주어진 이미지를 보고 픽셀 단위로 클래스를 분류하는 모델링 방법론입니다.
이미지에 존재하는 픽셀 하나하나를 클래스로 분류하는 것이 Segmentation의 핵심으로, 위와 같은 이미지를 보고 아래와 같은 클래스 마스크를 출력합니다.
Segmentation 방법론은 다음과 같은 장점들을 가집니다:
- 픽셀 단위로 클래스를 분류하기 때문에, 모델이 이미지의 어느 부분을 어떤 클래스로 분류했는지 명확히 파악할 수 있습니다.
- 클래스 마스크를 만들 수 있기 때문에, 모델이 탐지한 파손 부분을 고객에게 시각화하여 보여줄 수 있습니다.
다만 단점들도 있습니다:
- 학습에 필요한 라벨을 제작하는 데 많은 시간과 비용이 소모됩니다.
- Classification이나 Detection 같은 다른 비전 태스크에 비해 학습 데이터를 확보하기가 까다롭습니다.
Segmentation 태스크와 관련해서는 수많은 연구들이 진행되고 있으며 (link) 높은 성능과 설명력을 바탕으로 자율주행, 3D 재구성, 영상 분석 등 다양한 분야에서 폭넓게 활용되고 있습니다.
민팃 팀에서는 휴대폰 외관의 파손을 탐지하는 서비스에서 Segmentation 모델을 활용하고 있습니다.
다음은 Segmentation 모델의 입출력 데이터 예시입니다.
위 이미지와 같이 흑점과 파손이 있는 휴대폰 사진(입력값 X)을 모델에 입력하면, Segmentation 모델은 다음과 같은 output (모델의 출력 Y’) 을 출력하도록 학습합니다.
모델의 output을 보면 이 휴대폰에는 줄감 (초록색), 흑점 (노란색), 파손 (연두색) 이 발생했다는 것을 쉽게 파악할 수 있습니다.
Q. 모델이 안정적으로 동작하게 하려면 어떻게 해야 할까?
현재 민팃의 Segmentation 모델은 성실하게 잘 학습하여 좋은 성능을 보이고 있지만, 이렇게 똑똑한 모델을 만들기까지는 여러 시행착오가 있었습니다.
모델 학습이 까다로웠던 여러 가지 이유들 중 하나는 바로 민팃 ATM에서 실제로 올라오는 Realtime 이미지들의 형태가 무척이나 다양하다는 점입니다. 전국에 분포한 수천 대의 ATM에서 휴대폰이 인입되고 있는 만큼, 수많은 ATM에서 오류가 발생하고 그 결과로 부적합한 이미지들이 올라오는 경우가 자주 생겨났습니다.
실제로 민팃 ATM을 서비스할 때 얼마든지 발생할 수 있는 흔한 상황이지만, 부적합 이미지들이 필터링 없이 딥러닝 모델에 들어가는 경우가 늘어나면 늘어날수록 모델의 성능이 저하되고 서비스의 품질도 떨어집니다.
우리의 목표는 단순히 딥러닝 Segmentation 모델만을 잘 학습시켜 깨끗한 데이터에서 좋은 성능을 내는 것뿐만이 아닙니다. 실제로 이 모델이 Realtime 서비스에 올라갔을 때 큰 성능 변동 없이 안정적인 퍼포먼스를 보이는 것이 가장 중요하죠.
따라서 모델을 서비스할 때 안정적인 성능을 확보하기 위해서는 위와 같은 다양한 문제 상황을 효과적으로 핸들링할 수 있는 시스템이 필요합니다.
현재 민팃 ATM에는 휴대폰 외관 파손 탐지 딥러닝 모델 파이프라인이 서비스되고 있습니다.
가장 중심이 되는 딥러닝 파손 탐지 Segmentation 모델이 문제없이 동작할 수 있도록 이미지 전처리 모델, 예외처리 모델, 필름 부착 여부 분류 모델 등 다양한 모델과 로직들이 파이프라인 형태로 연결되어 데이터를 주고받습니다. 휴대폰이 ATM에 인입되어 파이프라인을 통과하는 동안 발생할 수 있는 대부분의 이슈들이 유형화되었으며, 해당 이슈들에 대한 솔루션 또는 우회 로직이 운영코드에 구현되었습니다.
이러한 파이프라인의 도입을 통해 딥러닝 파손 탐지 Segmentation 모델이 실제 서비스에서 안정적으로 동작할 수 있게 되었습니다.
이러한 파이프라인을 실제로 서비스하기 위한 운영코드를 설계하는 것도 민팃 팀의 업무 중 하나인데요. 효과적이면서도 유지보수가 쉬운 운영코드를 설계하는 과정을 담은 포스트가 이어지는 시리즈에서 공유될 예정이니 많은 관심 바랍니다.
3. 모델 소개
Unet
민팃 ATM에서 파손 탐지 Segmentation 모델을 구현하기 위해 사용한 아키텍처는 Unet 입니다. Unet은 2015년 Ronnenberger 의 논문 “U-net: Convolutional Networks for Biomedical Image Segmentation” 에서 처음 제안된 모델로, 제목에서 볼 수 있듯이 의생명공학 이미지 데이터에 대한 Segmentation을 위해 고안되었습니다.
Unet의 특징은 다음과 같습니다.
- 왼쪽의 Contracting path, 오른쪽의 Expansive path가 대칭적인 구조를 이루어 Encoder-Decoder 구조와 같이 이미지에 대한 Downsampling, Upsampling을 수행합니다.
- Contracting path에서는 이미지에 Convolution을 적용하여 저차원의 Feature map을 얻고, 그것을 Expansive path에서 복원하여 원래 이미지 사이즈와 비슷한 크기의 Segmentation 마스크를 얻습니다.
- Upsampling 시, Skip-connection 방식을 적용하여 각 단계에 맞는 Contracting 단계의 Feature map을 Expansive 단계의 Feature map과 결합하여 활용합니다. 이를 통해 네트워크 내부에서의 데이터 손실을 막고 더욱 정확한 Localization을 달성합니다.
(출처: LINK)
https://arxiv.org/abs/1505.04597
https://becominghuman.ai/implementing-unet-in-pytorch-8c7e05a121b4
민팃 ATM에서 실제로 운영되고 있는 중고 휴대폰 파손 탐지 모델에 대한 소개와 프로젝트의 개요를 살펴보았습니다.
이어지는 포스팅에서는 민팃 ATM의 AI 모델을 현실세계에서 서비스하기 위하여 민팃 팀에서 어떤 전략들을 도입하고 있는지를 공유하도록 하겠습니다.
감사합니다.
'AI to the Real World > 민팃' 카테고리의 다른 글
[민팃] 쉽게 알아보는 민팃 딥러닝 모델 성능평가 - Dice score부터 Kappa까지 (0) | 2022.08.05 |
---|---|
[민팃] 야 너두 할 수 있어! 유지보수가 쉬운 AI 모델 서비스 운영 코드 설계하기 (0) | 2022.06.30 |
[민팃] 딥러닝 파손탐지 모델 서비스 with Data-centric AI (0) | 2022.06.15 |