차선인식

1. CLRNet 입력, 출력 처리(CULane Dataset)

newnewnewnew 2026. 6. 17. 13:44

입력 데이터 처리 순서

원본 CULane image:
  [590, 1640, 3]  BGR uint8

crop:
  image[270:, :, :]
  [320, 1640, 3]

resize:
  cv2.resize(..., (800, 320))
  [320, 800, 3]

normalize:
  float32 / 255.0
  [320, 800, 3], range 0~1

transpose:
  HWC -> CHW
  [3, 320, 800]

batch:
  [1, 3, 320, 800]
  • crop은 CULane 이미지의 위쪽 하늘/먼 배경 영역을 잘라내는 역할

모델 출력 처리 순서

model output:
  [1, 192, 78]

remove batch:
  predictions = predictions[0]
  [192, 78]

score 계산:
  softmax(predictions[:, :2])[:, 1]
  [192]

confidence filter:
  score >= 0.4
  [N, 78]
  N <= 192

NMS용 tensor 변환:
  [N, 77]
  class lane logit 하나를 제외하고 NMS에 필요한 geometry만 사용

NMS 단위 변환:
  length: normalized -> 72-point index scale
  x 좌표: normalized -> 800 input image pixel scale

NMS:
  겹치는 lane 후보 제거
  최대 4개 유지
  [M, 78]
  M <= 4

lane point 변환:
  각 lane 후보의 72개 x 좌표에서 유효한 point만 선택

x 좌표 복원:
  x_norm * 1640

y 좌표 복원:
  y_norm * 320 + 270

final output:
  [
    [(x, y), (x, y), ...],
    [(x, y), (x, y), ...],
  ]
  • model 출력은 Batch, 한 이미지당 차선 후보, 차선 후보를 표현하는 값
    • 차선 후보 : (background logit, lane logit, start_y, start_x, theta, length, 72개의 x좌표)
  • score 계산에서 각 후보의 앞 2개 값이 background logit, lane logit이기 때문에 2개만 슬라이싱해서 연산 수행
  • CULane 평가를 위한 Spline interpolation은 생략함
위 내용을 더 정리하면 아래와 같음

모델 출력:
  192개 후보

후처리:
  score filtering + NMS

최종 결과:
  최대 4개 lane point list

 

'차선인식' 카테고리의 다른 글

5-1. 최적화 프로젝트  (0) 2026.06.22
4-2 CLRNet 논문 요약  (0) 2026.06.18
4-1 CLRNet 논문 요약  (0) 2026.06.18
3. CLRNet 모델 처리 흐름  (0) 2026.06.17
2. CLRNet Lane Prior 정리  (0) 2026.06.17