Image processing/Lane detection

[2019] Lane Detection and Classification using Cascaded CNNs

유니디니 2020. 7. 26. 15:04
728x90
반응형

Written by Fabio Pizzati, Marco Allodi, Alejandro Barrera, and Fernando Garcia




Abstract


차선탐지는 자율주행에서 매우 중요하며, 기존의 방법들에서는 GPS-based localization이나 도로 내부의 차량 정보들을 이용하였다. 그러나, 많은 방법들이 차선의 경계를 분할하는 Task에 초점이 맞추어져 있으며, 이는 차선유형에 관한 도로 주행 계획을 세우거나 현재 차량의 위치정보가 필요할 수 있기 때문에 충분하지 않을 수 있다. 이러한 문제를 해결하기 위해 실시간으로(Real-time) 동작하는 차선 경계(Lane Boundary) 종류를 식별하는 end-to-end 시스템을 제안하였다. 이를 위해, Tusimple 데이터 셋에 대하여 14,336개의 Lane-Boundary를 구분하였으며, 8개의 다른 클래스들로 라벨링 하였다.


Introduction


자율주행에서 주변환경을 이해하는 것은 안전하게 주행하는데 있어 중요하며, 정확한 해석이 요구된다. 최근 많은 방법들에서는 Convolution neural network를 이용하여 Sensorial-data를 처리하고, 차선과 연관된 High-level 정보를 유추한다. 몇몇 방법들에서는 Lidar(빛을 이용한 인지 센서)를 이용하여 차선 마킹에 대한 차이점들을 인지하지만 가격이 비싸기 때문에 일반 차량에서 활용하기에 제한적이다.


상대적으로 가격이 저렴한 카메라 영상(Optical Camera)을 이용한 딥러닝 차선탐지 방법들이 관심을 받고 있으며, 변형된 Fast R-CNN과 같은 방법들이 주로 사용되었지만 대략 4 FPS의 속도로 인해 적합하지 않다. 또한, 차선의 종류가 나누어진 데이터 셋이 없기 때문에 딥러닝 방법을 적용한 연구가 부족하였다. 이러한 이유들로 인해, Multiple 신경망의 연결을 기반으로 한 end-to-end 방식으로 차선 경계 인스턴스 분할 및 분류를 수행하는데 사용되는 접근 방식을 개발하였다. NVIDIA Titan Xp GPU의 실시간 조건을 충족하며, Code 및 학습 모델을 GitHub를 통해 제공하고 있다. 


Network Design


두 부분으로 구성되어 있으며, 차선의 경계 인스턴스 세분화를 위한 CNN 학습을 수행하고, 탐지된 각 레인 경계에 대한 Descriptor를 추출하여 두번째 CNN으로 처리한다. 


1. Instance Segmentation 


먼저, CNN을 이용하여 배경부분으로 부터 분할하기 위해 차선의 경계를 학습시킨다. 이렇게 하면 차선 marking에 대한 분류를 피할 수 있기 때문에 처리 시간을 상당히 줄일수 있다. 우리의 방법은 Cityscapes 데이터에서 real-time segmentation 방법으로 높은 성능을 보이는 ERF-Net을 baseline model로 활용하였다. 또한, Post-Processing을 통한 클러스터링을 피하기 위해 동일한 차선에 속하는 픽셀들과 관련된 확률 분포들 사이의 분포 차이를 줄이기 위해 Kullback-Leibler Divergence (KL-Divergence) 손실함수 이론을 적용하였다. 이 방법은 Ego-lane(주행중인 차선)과 측면의 차선 최대 4개의 차선을 탐지하기로 정하였으며, 수많은 경우의 수를 다루지 않았다.


이 방법에서 많은 양의 데이터를 통해 학습을 수행하면 Gradient explosion과 divergence(발산)이 발생할 수 있다. 이러한 문제를 보완하기 위해, 먼저 Binary-Cross entropy를 적용하여 배경과 차선을 분할하였다. 결과 모델은 다시, Fine-tuning을 통해 재학습을 수행하게 된다. 512x256의 이미지 크기를 학습하였고, 150 epochs, Adam optimizer, Learning Rate는 5x10의 -4승, Learning Rate Decay는 0.9로 설정하였다.


2. Classification


차선의 종류를 라벨링한 코드는 다음과 같다. Single white continuous, Double white continuous, Single yellow continuous, Double yellow continuous, Dashed, Double-dashed, Botts' dots, Unknown으로 나뉜다.


Github : https://github.com/fabvio/TuSimple-lane-classes.



Memory를 많이 소비하는 두개의 Branch (Segmentation, Classification)를 나누는 방법을 사용하는 대신, Cascaded 방법을 적용하였으며 후-처리 방법을 대신하여 적용할 수 있었다. 이 방법에서의 문제점은 각 차선의 경계점이 입력 이미지에 대해 구분이 되지 않는 점으로 구성된다는 것이다. 이러한 이유로 인해, 자아 차량(Ego-vehicle)에 대한 주행 차선을 독립적으로 추출하는 것이 어렵다. 따라서, 각 차선 경계에 대한 특징들을 추출기를 통해 추출하고 입력이미지에서 고정된 수의 점을 샘플링한다. 추출된 포인트는 입력 이미지에서 인덱스에 따라 정렬되고, 제 2 신경망에 의해 처리되는 이미지로 배열된다. 


이미지 크기에 따른 특징 추출기는 그림2와 같다. 제 2 신경망의구조는 H-Net을 활용하였으며, 구조는 그림 3과 같다.


Results



C는 옳게 탐지된 Points를 나타내며, S는 Ground Truth Points를 나타낸다. 각 점에 대해 정답 데이터와 20픽셀 미만의 오차가 있는 경우에는 올바르게 탐지 된것으로 간주하였다.


Tusimple 데이터 셋에 대한 Top 3 접근 방법들은 다음과 같으며, 512x256 크기의 이미지에 대해 평가하였다. 


  


반응형