Probabilistic lane estimation from ENet-SAD's result

How to draw probline from points

Probline

ENet-SAD가 50 frame이 나오는 것을 확인했고, 이제 차선이 있을 것 같다는 probline 그려 표시하기로 했다.
ENet-SAD가 100% 정확하게 차선이 있다는 것을 알아맞추는 것이 아니기 때문에 outlier들이 많았다.
-> outlier 처리를 통한 성능 향상
-> 원내 dataset을 학습을 통한 성능 향상
두 가지를 목표로 5일간 probline과 annotation을 진행했다. 여기서는 probline에 대한 이야기만 나눌 예정이다.

4개의 차선 즉, leftleft, left, right, rightright 차선을 그려주기로 했다. 총 5차례의 시도에 거쳐 어느 정도 안정화시켰다.

1. ENet-SAD에서 나온 probability list의 점들을 모두 이어보았다.

draw1
결과는 당연히 좋지 않았다. 처음엔 probline이니까 차선이 있을 것 같은 점들을 모두 이으면 된다고 생각했는데, outlier가 있음을 간과했다.

2. linear regression을 통해 outlier를 처리해보았다.

draw2_1
outlier를 모두 무시했으나 두 가지 문제점이 있다.

3. 곡선의 문제를 해결하기 위해 polynomial regression을 해보자.

draw3
결과가 나쁘진 않았다. 하지만 여전히 outlier를 해결하지 못하는 결과를 볼 수 있다.
이를 해결하기 위해서는 머리를 조금 더 써야할 것 같다.

4. outlier를 처리하기 위해 ransac을 적용시켰다.

draw4
ransac은 random sample consensus의 약자로, 가장 많은 수의 데이터들로부터 지지받는 모델을 선택한다. least square method보다 더 효과적인 모델을 만들어내기도한다.
하지만 우리가 처리하는 data들의 양이 많지 않다. 가장 많은 수가 어떤 값을 가리키고 있는지 명확하지 않다.
inlier가 주를 이루고 있을 때가 존재해 ransac으로 몇몇 점들은 무시하지만 outlier가 주를 이루고 있을 땐 inlier를 outlier로 취급해버린다.
또한, for문을 돌면서 모델을 만들 sample들을 선택하기 때문에 시간도 오래걸린다. 조작해야하는 parameter 수가 많은 것도 문제였다.
그 결과로, 좋은 성능을 이끌어내기 어려웠다. 더 좋은 성능을 내는 알고리즘을 고민해봐야한다.

5. start point를 잡고 각도 범위 밖이면 삭제하는 알고리즘 적용시켰다.

draw5
위의 영상들과 달리 안정적인 것을 볼 수 있다. 각 차선마다 나올 수 있는 각도를 계산해 각도의 범위로 outlier를 제거했다.

–> 개선시켜야할 점은 여전히 존재한다.

계산 가속화 및 최적화

numba를 이용해 계산 가속화를 하려고 했다. numba는 이중 list 처리를 하지 못하고 지원하는 library가 적다. 심지어 numpy library 전체를 지원하지 않아 쓰기가 까다롭다.

–> lane estimation을 할 때, point를 가지고 하지 않고 결과가 잘 나오는 segmentation image를 이용하기로 결정했다.