현재 상태
해결하고자 하는 문제
아래와 같은 Side view 이미지에서도 번호인식을 잘 하고 싶다.
일반적인 해결방법
일반적인 해결방법의 장점과 문제점
제안하는 해결방법
제안하는 해결방법의 장점과 문제점
아이디어 자체는 여러 블로그나 논문들에 직접적으로 나와있기 때문에 공개해도 된다고 회사에서 허가를 받았지만, 실제로 사용한 코드와 데이터는 공개할 수 없다.
Pytorch를 통해 모델을 학습하였고, 이후 배포를 위해서 ONNX로 변환 및 Flask 웹 서버를 이용해서 배포하였다.
개요에서 언급한 일반적인 해결방법과 제안한 해결방법을 각각 사용하여 Side view 500 장의 이미지로 구성된 테스트 셋으로 비교해본 결과 일반적인 해결방법을 이용하여 기존의 detecting 모델을 업데이트한 모델은 Side view 이미지에 대해 부분인식 또는 오인식한 결과값들이 대부분이었고, 제안하는 해결방법을 이용한 모델은 대부분 정상적으로 잘 인식하였다.
왜 기존의 detecting model을 개선하는 것으로는 극복하기 어려웠을까
같은 숫자라도 번호판이 꺾여진 정도에 따라 매우 다르게 보인다.
같은 숫자라도 Front view에서 보이는 번호판의 문자, 숫자들은 Side view에서는 꽤 다르게 보인다.
그리고 Side view 끼리도 꺾인 방향과 정도에 따라서도 서로 문자와 숫자가 꽤 다르게 보일 것이다.
즉, 데이터의 distribution이 커지기 때문에 이를 다 커버하기 위해서는 더 다양한 문자, 숫자를 가지면서 다양한 각도로 꺾인 이미지들이 필요해지기 때문에 diversity가 높은 질 좋은 데이터가 많이 필요할 것이고 이는 매우 어렵고 데이터를 가공하는 cost도 상당할 것이다.)
많이 꺾여져 있을 수록 bounding box에서 문자, 숫자가 차지하는 비율이 낮다.
차량 번호인식에 있어 Object detection 분야의 가장 대표적인 모델인 Yolo(You only look once)를 많이 사용한다. Yolo는 bounding box를 치는 모델이기 때문에 검출하고자 하는 물체가 이미지 내에서 어떻게 존재하느냐에 따라 조금씩 성능차이가 난다. 예를 들어 아래 이미지에서 bat를 bounding box로 검출한다고 해보자.
왼쪽 이미지의 경우 bat가 bounding box 면적의 대부분을 차지하고, 오른쪽 이미지의 경우 bat가 bounding box의 반도 차지하지 못한다.
즉, 타겟하는 물체에 대해 bounding box를 예측하는 detecting 모델의 입장에서는 검출하고자 하는 물체보다 background의 비중이 높은 오른쪽 이미지에서의 학습이 더 어려울 것이다.