[SLAM] 25. Visual Odometrym (Part 2) - feature

happy_quokka·2023년 12월 2일
0

SLAM

목록 보기
26/28

1. Feature Selection and Matching

  • feature, correspondence를 찾는 2가지 방법
    1. feature를 찾고 그 다음에 track
      • optical flow 또는 template matching 방법
      • local search technique이라고 한다
      • view point가 매우 가까울 때 사용하면 좋다
    2. 각각의 이미지에서 feature를 다 뽑고 나서 그 다음에 descriptor를 siminality metric 기반으로 match
      • description 방식
      • 큰 motion에 대해 적합 (keyframe, loop closure 상황)

1-1. Feature Detection

  • local feature = 주변보다 intensity, color, texture가 두드러지는 부분
  • point detector, corner, blob를 기반으로 VO를 많이 한다

좋은 feature detector의 특징

  • localization 정확도
  • repeatability (view point가 바뀌어도 잘 검출되어야한다)
  • 효율성
  • robustness : noise, 압축, blur에 대해
  • distinctiveness : 다른 이미지에서 동일하게 뽑을 수 있는지
  • invariance : 조명
  • geometric change : 회전, scale, 변화
  • harris, shi-tomaxi, FAST, SIFT

corner와 blob detector의 차이

  • corner detector
    • 빠르다
    • less distinctive
    • image position localization을 잘한다
    • scale 변화에는 약하다
  • blob detector
    • more distinctive
    • 느리다
    • scale 또는 view 변화에 강인

2 stage of feature detector

  • feature response function
    • feature인가 아닌가
    • harris corner 에서는 cornerness를 구한다
    • SIFT에서는 DoG를 구한다
  • nonmaxima suppression
    • strong corner point를 찾기 위해
    • 여러개 중에 대표적인것 하나를 뽑는다

SIFT

  • DoG를 사용해서 여러 scale에서 특징 뽑는다
  • 여러 scale에서 local minima, maxima를 뽑는다

SURF

  • DoG를 box filter를 통해 더 빠르게 추출한다

1-2. Feature Descriptor

  • descriptor가 나오기 전에 사용한 방식
    • sum of squared differences (SSDs)
    • normalized cross correlation (NCC)
    • template tracking에서 많이 사용
    • NCC가 SSDs보다 좋다
    • NCC는 매우 가볍다
  • 방향, 조명, scale이 바뀌면 이 방법들을 사용할 수 없다
  • SIFT descriptor
    • histogram of local gradient orientations 방식
    • 조명, 회전, scale, view point가 60도 이상 변화해도 가능
  • BRIEF
    • 밝기값을 비교해서 binary descriptor를 만들고 hamming 거리로 비교
    • 추출. 비교가 빠르다
  • ORB
    • orientation invariant
  • BRISK
  • 요즘은 딥러닝을 많이 사용한다

1-3. Feature Matching

  • SSD 또는 NCC 방법으로 similarity 방식으로 비교

mutual consistency check

  • 두 이미지에서 각각 feature를 뽑는다
  • descriptor를 비교하는데 비교하는 point 순서가 중요하다
  • 순서에 따라 결과가 바뀔 수 있다
  • 다음 이미지의 feature를 먼저 선점해버리면 진짜 match되는 point가 다른 point로 match
  • 이 문제를 해결하기 위해 한번 더한다
  • 첫번쨰 이미지에서 match 수행 후 두번째 이미지에서 match를 한번 더 수행
  • 그러면 동일하게 match되는 경우가 발생 -> 이것들만 정확하다고 판단

Constrained Matching

  • 두 개의 vector를 다 비교하는 것은 O(n2)O(n^2)이기 때문에 느릴 수 있다
  • 빨리 계산하는 방법은 hash table, multimensional search tree를 사용하는 방법이 있다
  • 실제 VO에서 쓰이는 방법은 motion model 사용하는 것
    • motion model : 첫번째에서 두번째 이미지로 가는 R, t의 초기값을 알 수 있다면 point를 예측하여 사용할 수 있다
    • 두 feature correspondence를 사용해서 E matrix를 구하고 거기서 R, t를 구하는데 초기에 R, t를 어떻게 알 수 있나?
    • imu, wheel odometry, laser, GPS를 사용해서 알 수 있다
    • 또는 constant velocity model을 사용할 수 있다
      • constant velocity model : 짧은 시간동안 급격하게 motion이 바뀌지 않을 것이다. 대략적인 위치에 들어올거다라고 예측
    • 자동차의 경우 wheel odometry를 사용하면 좋다
  • epipolar matching
  • stereo에서는 rectification
    • 두개의 이미지의 feature가 epipolar line에 위치하도록
    • matching은 빨라지는데 image warping(GPU에서)을 해야한다

1-4. Feature Tracking

  • detect-then-track
    • 이미지 relative model이 작은 경우에만 사용 가능
    • 이미지 사이의 거리가 길어질수록 tracking이 잘 안된다
  • 그래서 Kalnade Lucas Tomasi(KLT) tracker를 사용

1-5. Discussion

SIFT Matching

  • distance-ratio test(Lowe's test)
    • 비슷하게 생긴 feature가 있을 경우 match를 하지 않는다
    • 비슷한 feature 간의 거리가 threshold보다 큰 경우만 선택한다
    • 즉, ratio가 작은 경우에만 선택 (ratio가 1이면 거의 같은 거리)

Lines and Edgelets

  • point만 사용하는 것이 아니라 line, edge, plane을 사용가능
  • 자율주행에는 line을 사용하는 경우가 있다
    • 주차하는 경우
  • 벽은 서로 90도 라는 점 이용
  • line의 경우 가려지는 경우(occluded)가 있으면 쉽지 않다
    • 지금은 딥러닝 기술이 좋아져서 가려져도 추론할 수 있다

Number of Features and Distribution

  • feature를 몇개, 어떻게 뽑아야하는가
  • feature를 많이 뽑는게 좋은 편이다
  • 이미지에서 균일하게 뽑는게 좋다. grid로 나눠서 균일하게.
  • feature 수, grid의 크기를 조절한다

Dense and Correspondence-Free Methods

  • Correspondence-Free : Correspondence 사용하지 않는 방법
  • optical flow, feature-less method와 같은 dense mothod 사용 가능
  • frame간의 작은 motion이 있을때만 가능
  • feature-less method
    • direct 방식
    • low texture image에서도 가능
    • 계산량이 많다 + 부정확 (전체 이미지 사용)
    • 이후에는 발전해서 실시간으로 가능해졌다 (sparse한 이미지 사용)

2. outlier Removal

  • robust estimation 중에 m-estimation 기법
    • inlier가 outlier보다 많을 때만 가능

2-1. RANSAC

  • outlier가 많아도 가능
  • ramdom으로 데이터를 뽑아서 가설을 만들고 나머지 데이터로 검증
  • 그 후 가장 높은 합의도를 얻은 모델이 채택
  • N : 반복 횟수
  • ϵ\epsilon : inlier와 outlier의 비율 -> 알기 어렵다
  • 원하는 비율로 일단 설정한다
  • 그후 구해진 N에 1.5배와 같이 수를 곱하여 많이 반복되도록 사용
  • 추가로 early stop 방법을 사용
  • nondeterministic : 돌릴때마다 다른 값이 나온다 (확률적으로 푸는 방법이기 때문)

2-2. Minimal Model Parameterizations

  • N의 수가 적을수록 반복되는 수가 적기 때문에 좋다

  • 하지만 N은 s(sampling point 수)와 관련이 있다

  • s보다 N은 커야한다

  • Minimal 파라미터 of the model이 중요해지고 있다

  • 모델 파라미터를 줄여서 iteration 수를 줄였다

2-3. reducing the iterations of RANSAC

  • RANSAC의 속도를 높이는 방법

2.4 Is It Really Better to Use a Minimal Set in RANSAC

  • 안정성에 대한것
  • 속도 제한이 있는 경우 minimal point set을 쓰는 것이 좋다
  • 근데 꼭 그게 아닐 수도 있다
  • 5 point 방법도 outlier가 많으면 좋은 방법은 아닐 수 있다
  • minimal set을 쓰는 것보다 많은 데이터셋을 사용하는 것이 좋다
  • 많은 데이터셋을 쓰게 되면 노이즈가 평균이 되어 많이 상쇄된다
  • 구현할 때 봐야할 점
    • 우선 속도에 중점을 맞춰서 minimal set을 사용
    • RANSAC도 사용

3. Error Propagation

  • 누적되는 error를 어떻게 할 것 인가?
  • transformation의 부정확함은 camera geometry와 image feature에서 나타난다
    • camera geometry : intrinsixc, extrinsic, RANSAC, minimal solve estimation
    • feature : detector의 localization 정확도, descriptor, matching
  • covariance matrix로 표현 가능

4. Camera pose Optimization

  • 이전 n개의 시간을 고려하여 추정 -> sliding window BA

4-1. Pose-Graph Optimization

  • node : camera pose
  • edge : rigid body transformation
  • 이전 카메라 pose에 transformation을 적용하여 현재 pose를 예측하고 그 값과 실제 현재 pose의 차이를 제곱하여 cost function으로 사용
  • rotations이 비선형이기 때문에 nonlinear cost functino을 사용

loop constraint

  • loop constraint의 경우 시작과 끝이 drift로 인해 동일하지 않다
  • loop detection
    • loop constraint을 만드는 방법
    • 다시 돌아왔다는 의미
  • visual similarity 계산해서 구한다
    • global image descriptor : BoW 방법
    • local image descriptor : descriptor 비교
    • visaul word -> visual vocabulary

4-2. Windowed(or local) Bundle Adjustment

  • Pose-Graph Optimization와 다르다
  • Pose-Graph Optimization는 pose와 transformation만 있다
    • pose는 최적화가 잘 된다
    • 하지만 landmark와는 안 맞는다
    • BA보다 매우 빠르다
    • pose만 관심이 있다면 사용하면 좋다
  • 최적화 방법 2가지
  • 방법1
    • pose, landmark 동시에 최적화 -> BA 방법
  • 방법2
    • pose 먼저한 후 landmark 최적화
  • n개의 이미지를 통해 최적화 수행 (n개의 keyframe)
  • X : landmark
  • C : pose
  • g : reprojection 수식
  • p : pixel
  • reprojection error가 nonlinear -> nonlinear optimization 사용해야한다
  • 초기값이 실제 최적값과 가까워야한다
    • 2개의 view Vo 결과를 사용 -> E/F를 RANSAC에 돌린 결과가 필요
  • BA를 진행하면 drift가 줄어든다
  • window BA -> real time을 위한 것

5. applications

  • VO를 사용하는 곳
  • 우주, 땅, 해저 로봇
  • 드론
  • 자동차 : ADAS

0개의 댓글