Seeing Through Pixel Motion: Learning Obstacle Avoidance from Optical Flow with One Camera 간단 리뷰

신희준·2026년 2월 10일

[Seeing Through Pixel Motion: Learning Obstacle Avoidance from Optical Flow with One Camera]([2411.04413] Seeing Through Pixel Motion: Learning Obstacle Avoidance from Optical Flow with One Camera) (Yu Hu, Yuang Zhang, Yunlong Song, Yang Deng, Feng Yu, Linzuo Zhang, Weiyao Lin, Danping Zou, Wenxian Yu / RAL, 2025)

Monocular vision (→ Optical flow) + Differentiable Simulation

  • TASK : flow-based monocular obstacle avoidance

기존 연구와의 차별점

  • 이전 연구는 depth estimation을 주로 활용 → Explicit depth가 없어도 자율 비행 장애물 회피 가능한가? → Optical flow를 활용해볼 수는 없을까?
  • Optical Flow
    • self-motion 과 spatial layout에 대한 정보를 가지고 있음
    • Sim2Real gap도 적음
    • Simulator가 실시간으로 rendering 가능.

Optical flow 활용이 어려운 이유

  • 먼저, optical flow는 transtion에 의한 성분과 rotation에 의한 성분으로 나눌 수 있음.
    [pˉ˙xpˉ˙y]=1pzb[1  0  pˉx0  1  pˉy]vb+[pˉxpˉy  (1+pˉx2)  pˉy1+pˉy2  pˉxpˉy  pˉx]wb\begin{bmatrix} \dot{\bar{p}}_x \\ \dot{\bar{p}}_y \end{bmatrix} = \frac{1}{p_{z_b}} \begin{bmatrix} -1 \ \ 0 \ \ \bar{p}_x \\ 0 \ \ -1 \ \ \bar{p}_y \end{bmatrix} v_b + \begin{bmatrix} \bar{p}_x\bar{p}_y \ \ -(1+\bar{p}_x^2) \ \ \bar{p}_y \\ 1+\bar{p}_y^2 \ \ -\bar{p}_x\bar{p}_y \ \ \bar{p}_x \end{bmatrix} w_b
    p˙transvZ,  p˙rotw\dot{p}_{trans}\propto \frac{v}{Z}, \; \dot{p}_{rot}\propto w
    • transition flow : 가까이 있는 장애물은 flow 크고, 멀리 있는 배경은 flow \approx 0
    • rotation flow : distance 정보 없음. 그냥 각속도 ww만으로 flow 생성

  1. Rotation flow 성분은 depth 정보가 없음

    • 위 그림 (a), (b)를 비교해보면,

    • (a)에서는 먼 배경은 픽셀이 거의 움직이지 않지만, (b)에서 카메라가 회전하면 먼 배경 픽셀도 이미지 위에서 큭게 움직여버린다는 것을 알 수 있다.

    • rotation flow를 어찌저찌 제거한다 하더라도 아래 문제가 더 큼

  2. FoE 부근 flow의 문제

    • FoE (Focus of Expansion) : 이동 중인 카메라의 시야에서 모든 flow가 밖으로 뻗어나가는 것 처럼 보이는 중심 점 (= 전진 비행한다고 하면 이미지 중앙)
    • FoE에서는 transition 운동을 한다고 하더라도 depth 정보를 상실 → 위에 수식에서 pˉx,pˉy=0\bar{p}_x, \bar{p}_y = 0 익고 vvzz 방향이므로 pzbp_{z_b}가 뭐든 pˉ˙=0\dot{\bar{p}}=0
    • 위 그림 (c), (d)를 보면 6m 거리에서 앞으로 가나, 9m 거리에서 앞으로 가나 flow가 비슷. 구분이 안감

Core Idea

Optical Flow + Differentiable Simulation

  • 가속도를 제어 입력으로 받는 point-mass model (즉, 네트워크 출력이 acc)
    ➡️ acc만으로 state 계산 가능 → 시뮬레이션 진행 빠름
    ➡️ 미분 계산이 간결해짐 → 강체 모델 쓰면 자세와 회전을 다뤄야해서 비선형성이 추가됨
    ➡️ low-level control은 내부 FC → 드론 하드웨어 의존성 낮음
  • 학습 시에는 Rendering Engine으로 GT optical flow를 생성

  • Deploy 시에는 학습된 NeuFlow 네트워크 활용해서 estimate. NeuFlow(ok,ok1)NeuFlow(o_k,o_{k-1})

  • Optical flow는 downsampling해서 low-resolution 활용

    → 학습도 효율적이고, 의미 없는 detail에 overfit하지 않도록 해줌

Central Flow Attention with Active Sensing

  • Central Flow Attention
    • Full FOV flow 이미지와 Central Area flow 이미지를 같이 사용.
    • Low res optical flow 쓴다고 했는데 가운데 부분은 high res로 자르고 down sample
      ➡️ 이미지 중앙에 flow가 취약할 수 있으니 더 자세하게 보게 만드는 듯
      ➡️ 그리고 조금 더 task-relevant한 곳에 집중하도록
  • Active Sensing
    • Central attention의 가정을 만족시키기 위해 image center를 드론의 진행 방향에 맞춤.
      → 즉 yaw 방향을 실제 이동 방향에 맞춰 정렬

Policy Optimization via Differentiable Simulation

  • Forward simulation 하는 동안에는 드론의 trajectory를 계속해서 생성
    1. state 주어지면 이거로 observation 랜더링 하고

    2. observation 주어지면 policy network로 acc 출력하고

    3. acc를 기반으로 point mass dynamics 시뮬레이션

    4. 다음 state를 계산해서 다시 반복

      … 정해진 time만큼 수행

  • Loss는 위의 trajectory 전체에 대해 구해짐.
    • velocity tracking / obstacle avoidance / control smoothness 포함

      ☑️ 여기서도 마찬가지로 policy가 implicit하게 velocity의 느낌을 이해하게 됨.

  • 그 다음 BPTT로 한번에 backpropagation

Note

  • RTX 3090 GPU + Intel i9 CPU로 2시간만에 학습 완료
  • Real world deploy에서는 offboard setup
    • Optical flow를 계산해주는 모델 필요
    • 실제 고주파 제어 안정화는 onboard FC가 수행.
  • 결국은 Depth image 사용하는게 성능은 더 좋음
profile
공부하고 싶은 사람

0개의 댓글