Bus-only traffic light detection in real-time images

자율 주행에 필요한 신호등 인식 기술에 관한 프로젝트.

딥 러닝을 통해 신호등을 인식하는 모델을 구현했다. 기존의 신호등 인식 모델이 신호등의 위치를 인식하거나 신호의 색(적색, 청색 등)을 구분하는 방향에 집중하였다. 한국의 중앙차로가 있는 신호에는 중앙차로를 위한 신호등, 그 외를 위한 신호등이 같이 있지만 기존의 인식 방법으로는 불가능했다. 그래서 중앙차로 전용 신호와 일반 신호등을 구분하는 프로젝트를 진행했다.

 

첫째로 어떤 방법을 통해서 신호등을 구분하여 인식할 것인지를 결정했다. 자율 주행에서 신호등 인식은 실시간으로 수행되어야 하기 때문에 입력되는 이미지를 초당 30장 이상 처리를 할 수 있어야 했다. 또 신호등을 인식하는 것 뿐 아니라 신호등의 모양(일반 신호, 버스 모양 신호)도 구분해내야 했기 때문에 입력 이미지의 작은 개체를 높은 정확도로 탐지해낼 수 있어야 했다. 이에 적합한 것으로 YOLO와 SSD 모델이 있는데, 이번 프로젝트에서는 YOLOv3를 사용하여 탐지하기로 하였다.

 

두번째로 모델을 학습하기 위해 데이터셋이 필요했는데, 버스 신호등을 따로 모은 데이터셋이 없었다. 데이터셋을 확보하기 위해 직접 차량 주행 중 동영상을 찍고 프레임으로 나누어 데이터셋을 확보했다.

 

세번째로 확보한 데이터셋으로 YOLOv3 모델을 학습했으나, 성능이 좋지 않았다. YOLOv3에는 여러가지 모델이 있는데 그 중 3개(YOLOv3, YOLOv3-spp, YOLOv3-tiny)를 골라 각각에 대해 학습을 했다. 결과에서 모델의 깊이가 가장 얕은 YOLOv3-tiny가 다른 모델과 비교해서 뒤쳐지지 않는 성능을 갖는 것을 알게 됐다. YOLOv3-tiny를 수정해서 성능을 더 높이는 방향으로 정했다.

 

학습 데이터셋의 해상도가 2288x1080이였고, YOLOv3-tiny는 기본적으로 416x416으로 Resizing한 뒤 학습을 하도록 설정이 되어 있다. 2288x1080의 이미지에서 신호등은 작은 개체이기 때문에 Resizing 과정 후에 더 작아져 정확도를 낮추는 원인이 되는 것 같아 Resizing 크기를 최대한 크게 키웠다. 1024x1024 까지가 현재 그래픽카드가 수용할 수 있는 최대의 크기였다. 2288x1080에서 1024x1024가 더 높은 정확도를 가지는 결과를 얻어냈다.

 

그 이후에는 기존의 학습 데이터셋(2288x1080)을 두 장으로 잘라냄(1024x1024, 2장)으로 Resizing 과정에서 손실이 없게 학습을 했다. 이를 통해 이전의 모델보다 좋은 성능을 갖는 결과를 얻어냈다. 최종적으로 학습을 통해 92.90%의 mAP를 갖는 모델을 얻을 수 있었다.

 

데이터셋의 크기가 너무 작아 실행해온 방법들이 다른 경우에도 효과가 있는지 확인 하기 위해 신호 표지판 데이터셋인 Tsinghua-Tencent Dataset으로도 같은 방법을 통해 확인해보니 실제로 성능 향상의 효과가 있는 것을 확인했다.

한계점

기존의 목표는 일반 신호등 위에 버스전용, 혹은 중앙차로전용 이라고 기재 되어있는 표지판도 인식을 하는 것이었으나 주행 중인 차량에서 표지판내의 글자 인식은 해결하지 못했다.

'Project > Bus Traffic Light Detection' 카테고리의 다른 글

Presentation(3)  (0) 2020.01.09
Presentation(2)  (0) 2020.01.09
19/05/27 진행상황  (0) 2020.01.09
Presentation(1)  (0) 2019.05.20
19/04/15 진행 상황  (0) 2019.04.16

+ Recent posts