SOLUTION
home
OGQ GYN AI for Image
home
🚘

OGQ GYN Developers Day #1-2 : OCR

게시일
2022/03/15
관련 태그
번호판 인식
text_recognition
NPU
ocr
CRAFT
게시자
Dayeon Oh
Dayeon Oh
1 more property
오지큐지와이엔에서 임베디드 시스템에서 동작하는 번호판 인식 모델을 개발 중입니다.
본 게시물에서는 프로젝트를 진행하며 겪었던 문자 단위의 데이터 부족 문제와 그에 대한 해결 방안, PC에서 잘 동작하는 유명 텍스트 인식 프레임워크를 이식할 수 없는 이유 등을 소개합니다.

목차

LicensePlate Detection 모델 개발 배경

오지큐지와이엔에서는 Eyenix의 NPU(Neural Processing Unit)인 EN675에서 동작할 수 있는 자동차 번호판 검출 및 인식 모델을 개발하고 있습니다. 우리의 모델을 다음의 환경에 적용하는 것이 최종 목표이며, 분석 서버가 필요하지 않다는 것이 가장 큰 장점입니다.
1.
무인 주차관리 시스템
2.
불법 주정차 감시 시스템
3.
속도위반 감지 시스템
4.
신호 위반 감지 시스템
딥러닝 모델은 다양한 각도, 흐린 날씨, 달리는 자동차 등 다양한 환경에서 강건(robust)하게 동작할 수 있다는 장점이 있습니다.

서버 타입 모델과의 차이점

서버에서 동작하는 모델의 경우 pytorch에서 지원하는 모든 layer를 사용할 수 있으며 성능도 좋기에 원활히 동작할 수 있습니다. 하지만, 확장성이 좋지 못한 단점이 존재합니다.
예를 들어, 10대의 CCTV에서 동작하는 모델을 고려해 서버 타입으로 배포했다고 가정하겠습니다. 이후 고객사에서 CCTV를 30대로 확장하려 한다면, 하드웨어 업그레이드와 소프트웨어 재설계가 필요합니다.
NPU는 저전력, 저발열의 장점을 가지고 있습니다. 따라서 NPU가 장착된 CCTV를 활용한다면 분산처리가 가능합니다. 모델의 연산이 각 CCTV의 NPU에서 동작하기에 확장에 용이합니다.
하지만, 일반적으로 성능이 낮고 메모리가 적기 때문에 고려할 사항이 많습니다. 또한, EN675의 경우 지원하는 layer가 한정적입니다.

EN675를 위한 번호판 인식 모델 구조

아래는 해당 칩의 Neural Processing 관련 자료입니다. 사용할 수 있는 레이어를 확인할 수 있습니다.
이에 맞춰 모델 구조를 SSD Lite를 두 개 결합한 형태로 계획했습니다.
첫 번째 SSD Lite Detector는 이미지에서 번호판 영역을 검출합니다. 이는 번호판 영역 외 문자 검출을 방지하며 다중 검출을 가능하게 합니다.
두 번째 SSD Lite Detector는 검출된 번호판 영역에서 문자를 영역을 검출합니다. 그리고 검출된 character boxes를 바탕으로 번호판 종류(일반, 지명, 두 줄)를 분류한 뒤 각 규칙에 맞춰 텍스트를 읽어냅니다.
모델 설계
일반 번호판에서의 텍스트 인식 예시 (YOLOv5s 학습 결과)
두 번째 SSD Lite를 학습하기 위한 문자 단위의 데이터가 필요합니다. 하지만 문자 단위의 annotation을 보유한 번호판 데이터는 존재하지 않습니다.
따라서 문자 단위의 pseudo label을 생성하는 방법을 선택했습니다.
글자별 박스 취득 방법을 보여드리기 전, 관련 접근법을 살펴보겠습니다.

관련 프레임워크(EasyOCR)

EasyOCR은 JaidedAI에서 개발된 OCR 프레임워크로, 1.4k 개의 Star를 받은 인기 있는 프레임워크입니다.
EasyOCR
JaidedAI
input image로부터 검출된 글자 영역 박스 output
검출된 글자 영역의 이미지로부터 인식된 text output
Easy OCR은 글자 영역 박스를 검출하는 CRAFT와 크롭된 이미지로부터 문자를 인식하는 deep-text-recognition-benchmark로 구성되어 있습니다. JaidedAI는 이 프레임워크와 함께 craft, deep-text의 weight를 제공합니다.

CRAFT

CRAFT는 clova ai에서 연구된 텍스트 영역 검출 method입니다.
장점 첫 번째, 문자 단위의 예측을 바탕으로 텍스트 영역을 검출하기 때문에 휘어지거나 긴 텍스트에서도 robust한 대응이 가능하다는 점입니다.
문자가 있을 확률을 의미하는 region score와 문자가 연결되어있을 확률인 affinity score를 pixel map 형태로 예측합니다.
장점 두 번째, 실제 이미지에 대한 문자 단위의 박스 정보 없이 실제 이미지의 문자 박스를 예측하는 weakly-supervised 방식이라는 점입니다.
문자 단위의 annotation을 보유한 공개 데이터셋은 존재하지 않습니다. 이미지에 관련 태그를 붙이거나, 일반적인 박스 annotation을 생성하는 것에 비해 문자 단위 annotation은 labeling 비용이 상당합니다.
반면 CRAFT는 단어 단위의 박스로 문자 단위의 박스를 생성할 수 있기 때문에 효율적입니다.
CRAFT는 아래의 두 단계로 학습이 진행됩니다.
1.
생성한 가짜 이미지로 임시 모델을 학습
2.
임시 모델을 통해 진짜 이미지의 pseudo-GT를 생성하며 학습
우리는 이를 참고해 데이터 부족 문제를 pseudo label 생성으로 해결했습니다.

deep-text-recognition-benchmark

deep-text-recognition-benchmark는 clova ai에서 연구된 문자 인식 method입니다.
내부적으로 학습 및 테스트 진행 시 96%의 준수한 성능을 보였습니다.
하지만, BidirectionalLSTM layer가 필요합니다. 서버 타입에서는 활용할 수 있지만 (1)text annotation을 보유하고 있으며 (2)EN675에서 동작이 불가능했기 때문에 고려하지 않았습니다.

글자별 박스 취득

EasyOCR의 weight를 적용한 CRAFT에 번호판 이미지를 테스트했습니다. 정검출된 박스도 있지만 오검출, 미검출이 존재했으며 대체로 영역이 타이트하지 않았습니다.
박스가 정확하지 않다면 SSD Lite가 특징을 잘못 추출할 가능성이 존재합니다. 따라서 CRAFT output에 후처리를 적용해 pseudo label을 생성하고 YOLOv5s로 학습해 명확한 박스를 얻는 방법을 선택했습니다.

pseudo label 생성

pseudo label을 생성하는 순서는 다음과 같습니다.
1.
CRAFT로부터 문자 박스를 검출합니다.
2.
오지큐지와이엔의 LP Detector(번호판 검출기)를 통해 번호판 영역을 검출합니다.
3.
(1)의 문자 박스 중 번호판 영역(2) 내의 박스만 취한 뒤 겹치는 박스의 좌측 상단을 기준으로 박스를 재구성합니다.

YOLOv5s 학습

pseudo label을 활용해 일반 번호판에 대한 YOLOv5s 학습을 진행했습니다.
약 2.5만개의 데이터를 5-fold로 나누어 준비했으며 batch size 128, 200 epoch로 fine-tune 했습니다.
아래는 학습 결과 sample입니다.
위 모델을 바탕으로 CRAFT의 오검출 이미지에 대해 label을 생성할 수 있습니다.

추후 발전 방향

지명 번호판에 대응 가능한 YOLO 모델을 준비한 뒤 글자별 박스 취득해 최종적으로 SSD Lite 모델을 완성할 것입니다.

Reference

YOLO v5
(deep-text-recognition-benchmark) Jeonghun Baek, Dongyoon Han. What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis
Search
OGQ GYN Developers Day #20 : DHR 기반 EN675 화재 고도화
OGQ GYN Developers Day #20 : DHR 기반 EN675 화재 고도화
OGQ GYN의 기술블로그를 비상업적으로 사용 시 출처를 남겨주세요. 상업적 용도를 원하실 경우 문의 부탁드립니다. E-mail. tech@gynetworks.com
OGQ Corp. All right reserved.