오지큐지와이엔에서 임베디드 시스템에서 동작하는 번호판 인식 모델을 개발 중입니다.
본 게시물에서는 프로젝트를 진행하며 데이터 부족 문제와 그에 대한 해결 방안, 원거리 이미지에 대한 성능 향상 방법 등을 소개합니다.
목차
LicensePlate Detection 모델 개발 배경
•
블랙박스에서 찍힌 이미지처럼 어느 정도 거리가 있는 차량에서 문자를 바로 검출하기는 힘듭니다. 따라서 이미지에서 번호판을 검출한 뒤 번호판에서 문자 인식을 수행합니다.
•
큰 목표는 다음과 같습니다.
◦
목표 1. 이미지에서 번호판을 검출 후 문자 인식
◦
목표 2. 근거리뿐만 아니라 원거리에서도 우수한 성능
◦
목표 3. 칩에서 구동할 수 있는 가벼운 OCR 모델 구현
문제 접근 방식 정의
•
번호판 문자 인식에 사용될 수 있는 데이터들은 다음의 조건을 만족해야 합니다.
◦
조건 1. 한국어로 된 번호판일 것
◦
조건 2. annotation이 있는 데이터일 것
◦
조건 3. 다양한 거리에서 찍은 이미지일 것
◦
조건 4. OCR에서 사용될 수 있도록 문자나 숫자가 보일 것
위 조건을 모두 만족하는 오픈 데이터를 구하기 힘듭니다.
예를 들어, 아래와 같은 샘플들은 학습에 사용될 수 없습니다.
외국 번호판, 일부만 나온 번호판
결과적으로, 추려진 데이터 셋 개수는 근거리 이미지 1,600장과 원거리 이미지 300장에 불과합니다.
우리의 문제는 소수의 데이터 셋을 활용해 근거리 뿐만 아니라 원거리에서도 우수한 성능을 보유하는 모델을 개발해야 한다는 것입니다.
해결 방법은 다음과 같습니다.
•
방법 1. 2-stage detection
•
방법 2. pseudo label 생성
근거리 샘플이 많기 때문에 원거리 데이터 셋에 대해 성능이 낮게 나올 수밖에 없습니다.
따라서 원거리 이미지에서
•
1) 자동차를 먼저 검출한 뒤
•
2) crop 된 이미지에서 번호판을 검출하는 2-stage detection을 사용하였습니다.
이렇게 모델을 1차 적으로 학습한 뒤, augmentation이 없어 사용되지 못했던 이미지들에 대해 pseudo label을 생성해줍니다.
그리고 늘어난 학습 샘플을 활용해 모델의 2차 학습을 수행합니다.
데이터 정의 및 준비
결과적으로 오지큐지와이엔이 확보한 데이터는
•
“차번인식” : 이미지 한 장당 번호판 한 개 혹은 없음 (가까이서 찍은 사진)
•
“AI HUB” : 이미지 한 장당 번호판 한 개 혹은 없음 (가까이서 찍은 사진)
•
“Black-Box” : 이미지 한 장당 번호판 다수 혹은 없음 (멀리서 찍은 사진)
•
“Cellinx” : 이미지 한 장당 번호판 다수 혹은 없음 (멀리서 찍은 사진)
총 네 종류의 데이터 셋입니다.
이러한 데이터들의 Annotation 분포는 다음과 같습니다.
차번 인식과 AI HUB 데이터는 Annotation이 있는 샘플들에 한해서 train, validation, test로 이용합니다.
Black Box 데이터는 test 용도로만 사용합니다.
이 중 Annotation이 잘못된 샘플들이 다수 존재했기에 처음부터 레이블링을 하였습니다.
번호판 관련 클래스
•
LicensePlate : 번호판 형태 + 문자까지 인식 가능
•
Uncertain licenseplate : 번호판 형태만 인식 가능
Annotation 수정 & 중복 제거를 거친 1차 학습 데이터 셋과 pseudo label 이 추가 된 2차 학습 데이터 셋은 아래와 같습니다.
모델 학습 과정
•
2-stage detection을 이용해 모델을 학습합니다.
•
자동차 검출기의 모델은 COCO dataset으로 pretrained YOLOv5s를 가져와 사용합니다.
•
마찬가지로 LP detctor의 모델도 YOLOv5s 를 이용해 학습합니다.
2-stage detection 과정
•
성능 평가에서 알 수 있듯이 차량이 한 대 이상 보이는 원거리 샘플의 경우 Car detector을 먼저 수행하는 것이 낫고, 근거리 이미지의 경우에는 LP detector을 바로 수행시키는 것이 낫습니다.
•
따라서 입력 이미지에 따라 검출기의 종류를 선택하도록 하였습니다.
모델 Inferece(Prediction) 후처리
•
위와 같은 원리로 학습된 모델을 이용하여 pseudo label을 생성합니다.
•
중거리 이미지 14만 장에 대해 새로운 레이블을 생성했습니다.
•
모든 pseudo label을 신뢰할 수 없기 때문에 한 장의 샘플에 대해 레이블이 두 개 이상 생성된 경우를 살펴보았더니 오검출이 빈번히 발생했습니다.
•
이러한 경우는 5.8%로, 전체 데이터에 비해 무시할 수 있을 만한 수이므로 해당 경우는 제거했습니다.
•
이렇게 제거하고 남은 데이터 셋만 2차 학습에 사용됩니다.
레이블이 두 개 이상 생성된 Sample (Celinx data)
성능 평가
•
AP@0.5 와 F1-score 로 학습 성능을 평가합니다.
1차 학습
•
근거리 이미지에 대해서 LP detector 만 수행한 것이 AP, f1-score 값이 더 높습니다.
•
원거리 이미지에 대해서는 Car+LP detector 을 수행한 것이 더 높습니다.
•
따라서 이미지에 따라 검출기 종류를 선택하도록 합니다.
2차 학습
•
새로 생성된 데이터까지 포함하여 2차 학습에 사용되는 학습 데이터 수는 약 12만 장입니다.
•
번호판 검출기만 사용한 결과, 원거리에서 1.8 배의 성능 개선이 나타났습니다.
데이터에 적용 예시
•
1차 학습(2-stage)의 효과를 다음 그림에서 잘 보여줍니다.
•
번호판 검출기만으로는 예측하지 못하는 번호판을 자동차 검출기를 달았더니 완벽히 검출하는 모습을 볼 수 있습니다.
•
2차 학습 후, 1차 학습에서 맞추지 못한 번호판을 잘 검출합니다.
Search
OGQ GYN의 기술블로그를 비상업적으로 사용 시 출처를 남겨주세요.
상업적 용도를 원하실 경우 문의 부탁드립니다.
E-mail. tech@gynetworks.com
OGQ Corp. All right reserved.