21편 - TMAP의 딥러닝을 이용한 교통표지 인식 기술
TMAP은 어떻게 정확한 최신 도로 정보를 가지고 길안내를 할까요?
TMAP은 도로 정보의 최신성과 정확성을 위해 조사차량이 매일 촬영한 도로 이미지로부터 수십가지의 도로표지판과 방면표지판 정보, 주행유도선의 색깔과 존재 유무 등의 정보를 추출하고 빠르게 업데이트 합니다. 놀랍게도 이 과정을 수작업으로 진행하기 때문에 상당한 운영비용 드는데요. 실수를 잡기 위한 검수작업까지 고려하면 실제로 운영까지 걸리는 시간도 상당합니다. 그래서 이러한 문제를 해결하기 위해 저희 Map컨텐츠 팀에서는 딥러닝 모델을 도입하게 됐습니다.
결과적으로, 딥러닝을 이용한 영상인식 기술을 통해 많은 수작업들을 자동화하면서 시간적·비용적인 측면에서 상당한 개선을 보였고, 보다 정확한 정보를 빠르게 적용할 수 있게 되었습니다. 그래서 오늘은 실제 운영에 적용하고 있는 <실사 이미지로부터 도로표지들을 인식하는 딥러닝 모델>에 대해 소개하겠습니다.
현장 조사 이미지로부터 객체 인식
TMAP에서는 안전한 주행을 위해 과속단속카메라와 속도제한 표지판, 과속방지턱과 같은 객체들에 대한 안내를 제공하고 있습니다. 이를 위해 현장조사 차량이 매일 주행하면서 촬영한 이미지들로부터 필요 객체들의 존재 유무와 좌표를 뽑아내어 MAP에 적용하는데요. 이 과정을 딥러닝 모델을 이용하여 처리합니다.
딥러닝 모델이 잘 동작을 하기 위해서는 잘 정제된 데이터셋으로 모델을 학습시키는 것이 상당히 중요합니다. 이 때 잘 정제된 데이터셋이란, 각 class에 해당하는 데이터의 개수가 균형을 이루며, 데이터들이 각 class를 표현하기에 적절한 특징들을 가지고, 학습을 시키기에 충분한 양이 확보된 상태 등을 의미합니다. 하지만 저희가 보유한 학습 데이터셋은 양이 너무 적고, noise가 심하며, 심한 imbalanced dataset이어서 모델의 학습 성능을 저하시킨다는 문제가 있었습니다.
이러한 문제를 보완하기 위해 그림 1에서와 같이 데이터셋을 coarse-grained와 fine-grained으로 구성하였고, 2-stage로 네트워크를 구현했습니다.
그리고 해당 모델을 구현하기 위해 크게 3가지 기법을 사용했습니다. 첫번째는 object detection, 두번째는 classification, 세번째는 feature matching입니다. Object detection을 이용해서 앞서 말씀드린 대단위 class의 객체들을 우선 인식하고 classification을 이용해서 fine-grained class로 세부 분류하게 됩니다. 또한 연속된 frame에서 나타나는 객체를 처리하기 위해 feature matching을 이용해서 걸러냅니다.
Classification이란 간략히 말해 입력 영상에서 미리 지정된 class 중 어떤 class에 해당하는 객체가 있는지를 분류해내는 방법입니다. Classification 모델은 주로 CNN 구조를 사용하며, filter 역할을 하는 layer들(convolution layer, pooling layer 등)을 통해 학습 데이터셋의 각각의 class가 어떤 특징을 가지고 있는지를 학습합니다. 그 결과, 최종 fully connected layer에서 확률 값에 따라 입력 이미지가 어떤 class인지를 판단하게 됩니다.
아래 그림 2의 예를 보시겠습니다. 새 이미지의 특징들이 추출되는 과정을 거친 뒤, 뽑힌 특징들을 바탕으로 최종적으로 bird라는 class로 분류됩니다.
(https://www.simplilearn.com/tutorials/deep-learning-tutorial/deep-learning-algorithm)
내재화 모델에서는 21년 12월 기준 SOTA였던 EfficientNet-b0을 기반으로 하고 depth가 가장 얕은 모델을 이용했으며 data augmentation 과정을 충분히 거친 후 학습데이터셋에 추가시켜 scratch부터 학습시켰습니다.
그림 3은 실제 분류모델 학습 후 추론 결과입니다.
Object detection은 영상에서 원하는 class의 객체의 위치를 찾고 종류까지 찾아내는 기법입니다. 이 때, 종류를 찾는 것뿐 아니라 위치까지 찾아야 하기 때문에 classification과 localization이 결합된 기법입니다. 실제 적용 에는 대표적인 detection model인 yolov5을 base로 사용했으며, 표지판 객체는 pre-trained 모델로부터 fine-tuning 했습니다.
그림 4는 조사차량으로부터 얻어진 실사 이미지로부터 object detection 한 결과입니다. 각 이미지에서 빨간색으로 bbox(bounding box)로 인식된 객체 부분을 표시하였고, 각 bbox 위에 인식된 class의 이름도 함께 확인 가능합니다.
마지막으로 feature matching은 keypoint matching이라고도 할 수 있는데 서로 다른 두 이미지에서 각 이미지의 정보나 특징을 잘 표현할 수 있는 feature를 선정하고 두 feature를 표현하는 descriptor를 비교하여 같은 feature인지를 판단합니다. 그림 5는 feature matching의 대표적인 예시입니다.
(Edstedt, J., Bökman, G., Wadenbäck, M. and Felsberg, M., 2023. DeDoDe: Detect, Don't Describe--Describe, Don't Detect for Local Feature Matching. arXiv preprint arXiv:2308.08479.)
또한 동일 객체를 연속된 frame에서 인식했을 때에 시간과 비용을 절약하기 위해 가장 크게 인식된 frame에서만 최종 output을 내보내도록 feature matching 기법을 사용했습니다.
실제로 실사 이미지로부터의 feature matching 예시는 그림 6에서 확인하실 수 있는데요. 왼쪽 ‘다른 객체의 경우’에는 feature matching 비율이 오른쪽 ‘같은 객체의 경우’보다 현저히 떨어지는 것을 확인할 수 있습니다. 좌하단의 경우가 다른 객체로 되어 있는 이유는 한 frame 내에서 같은 class인 표지판들이 여러 개 나올 수 있는데, 각각의 표지판을 다른 instance로 구분해야 하기 때문입니다. 이러한 경우를 해결하기 위한 feature matching을 위해서 detection된 object 부분에 대한 추가 전처리 과정을 거칩니다.
이 결과 그림 7에서와 같이 마지막 frame에서만 최종 인식 결과가 나와 빨간색 박스로 표현된 것을 확인할 수 있습니다.
이와 같이 개발한 모델은 그림 8에서와 같이 인식 대상이 되는 객체가 나뭇가지 등에 상당히 가려져 있는 환경에서도 인식에 성공하는 등 높은 인식률을 보이는 것을 확인할 수 있었습니다.
2022년 11월 3일 조사차량 한 대의 현장 실사 이미지 총 45,329장을 대상으로 성능을 평가했을 시, 인식 대상이 되는 1837개의 객체 중 1836개를 인식 성공하여 99.94%의 인식 성공률을 보였습니다.
앞서 소개한 영상인식 모델은 기본적으로 조사차량이 촬영한 이미지 데이터가 NAS에 업로드 완료되면 서버에서 수행됩니다. 여기서 ‘NAS 비용’과 ‘데이터 업로드까지의 시간’이 필요한데요. 이를 절감하여 빠르게 TMAP에 적용하기 위해, 조사 차량이 주행 중 이미지를 촬영함과 동시에 자동으로 영상인식을 수행하고 종료하는 기능을 개발하여 정보의 업데이트 주기를 상당히 단축했습니다.
현장 조사 장비와 영상인식을 위한 딥러닝 모델은 UDP를 사용하여 데이터를 송수신 합니다. 실시간으로 영상인식을 할 때 가장 중요한 것은 중복 객체를 걸러내는 작업입니다. 이전에는 일정한 간격으로 샘플링한 정제된 이미지들을 이용했다면, UDP 통신을 이용할 때는 0.3초에 1장을 수신하기 때문에 feature matching 기법만으로는 한계가 있기 때문입니다.
이를 위해 첫 번째로는 주행 중 유의미한 이미지들만 선택하여 영상인식 모델을 수행하는 로직을 추가했습니다. 두 번째로는 이전의 feature matching 기법에 더해 자체 clustering 기술을 통해 실제 객체 위치에 가장 근접한 인식 결과만을 선택하여 저장하는 로직을 추가했습니다. 이 결과 XY 좌표 상 ±1.70m의 정확도를 보였습니다.
이러한 인식 결과를 주행 궤적에 따라 시각화 하여 확인할 수도 있습니다.
주행유도선 인식
주행유도선 정보의 변경사항을 인식 및 적용하는 것 또한 중요합니다. 변경 전 색깔로 주행유도선을 안내하거나 없어진 주행유도선으로 안내할 경우 사용자에게 큰 혼란을 줄 수 있기 때문인데요. TMAP에서는 현재 분홍색, 초록색, 파란색, 노란색 색깔별로 총 4종의 주행유도선을 구분하여 인식 후, 그에 맞는 안내 이미지 및 음성을 빠르게 작업하여 안내하고 있습니다.
주행유도선 인식 모델 학습을 위해 데이터셋을 정제할 때에는 TuSimple dataset (https://github.com/TuSimple/tusimple-benchmark) 포맷을 사용하였으며 별도의 technique들을 적용했습니다. 또한 취득한 데이터셋의 인식률을 높이기 위한 정제 작업을 거쳐 custom dataset을 구성하고, 이렇게 구축한 데이터셋을 이용하여 전체 모델을 scratch부터 학습시켰습니다.
색깔 별 주행유도선을 인식 모델을 구현하기 위해서는 segmentation 기법을 메인으로 사용합니다.
Image segmentation은 간단히 말해서 픽셀 단위로 각 픽셀이 어떤 class에 해당하는지를 분류하는 기법입니다. 보통 image를 저차원으로 표현하기 위한 encoder 부분과 encoding 된 feature map으로부터 원하는 목적에 맞게 복원해내는 decoder 부분으로 이루어져 있습니다.
예시를 보면 각기 다른 object마다 다른 값으로 labeling 될 것을 확인할 수 있습니다.
(Chen, Liang-Chieh, et al. "Rethinking atrous convolution for semantic image segmentation." arXiv preprint arXiv:1706.05587 (2017).)
(https://www.jeremyjordan.me/semantic-segmentation/#dilated_convolutions)
이를 위해 ENet을 이용해서 segmentation 하였는데 해당 모델은 속도가 빠르고 가벼운 것이 최대 장점입니다. 당연히 trade-off로 인식 성능은 떨어지지만, 정확하고 선명한 line을 따는 것이 주 목적이 아니기 때문에 활용 가능한 성능을 보였습니다.
이후에 별도의 후처리 과정과 색깔을 구분하기 위한 custom 모델을 추가 구성하여 최종적으로 어떤 색깔의 주행유도선인지를 인식하게 됩니다.
지금까지 <딥러닝으로 내비에 필요한 도로 표지판 정보 얻는 법>에 대해서 설명해 드렸습니다. TMAP은 언제나 빠르고 정확한 길안내를 위해 기술을 도입하고 진화시키고 있습니다. 언제나 정확한 정보만을 제공할 수 있도록 오늘 소개해드린 기술들 이외에도 끊임없이 고민하고 개발하도록 하겠습니다.