ROIGather
Motivation
- 기존 ROIAlign은 lane prior가 정의하는 차선 후보 위치를 기준으로 FPN feature map에서 lane prior feature를 추출할 수 있음
- ROIAlign은 lane prior 위의 Np개 point를 균일하게 샘플링하고, 각 point 위치에서 bilinear interpolation으로 feature 값을 가져오는 방식임
- 즉, ROIAlign의 역할은 lane prior 위치에 해당하는 feature를 FPN feature map에서 추출하는 것임
- 하지만 ROIAlign은 기본적으로 지정된 위치의 feature를 샘플링하는 연산이기 때문에, 그 자체만으로는 차선의 주변 맥락 정보를 충분히 학습하지 못함
- 차선은 차량, 그림자, 강한 빛, 마모 등으로 인해 일부 구간이 가려지거나 흐려질 수 있음. 이 경우 해당 위치만 보면 차선이라는 명확한 시각적 증거가 부족하게 됨
- 하지만 차선은 일반적으로 연속적인 선 구조를 가지므로, 가려진 구간의 앞뒤 인접 구간을 보면 차선이 이어질 가능성을 추론할 수 있음
- 따라서 CLRNet은 ROIAlign으로 뽑은 lane prior feature를 그대로 사용하지 않고, ROIGather를 통해 주변 맥락 정보와 전체 feature map의 문맥 정보를 추가로 모아 lane feature를 보강함
주변 맥락 정보 기반 보강
- ROIAlign으로 얻은 lane prior feature는 다음 형태를 가짐
Xp ∈ R^{C × Np}
- 여기서 C는 feature channel 수이고, Np는 lane prior 위에서 샘플링한 point 수임
- 즉, 하나의 차선 후보는 Np개의 point feature sequence로 표현됨
- ROIGather는 이 feature sequence에 convolution을 적용함.
- 이 convolution은 lane prior 위의 point들 사이에서 수행되므로, 각 lane point가 주변 lane point의 정보를 모을 수 있음
- 이 과정의 목적은 각 lane point의 feature를 주변 point 정보까지 반영한 feature로 보강하는 것임
- 따라서 차선 일부가 가려져도 인접한 차선 구간의 정보로 해당 부분의 feature를 보강할 수 있음
전체 맥락 정보 기반 보강
- 주변 point 정보만으로도 부족할 수 있음. 차선 판단에는 더 넓은 도로 문맥도 중요함
- 예를 들어 현재 차선 후보가 진짜 차선인지 판단하려면 다음 정보들이 도움 될 수 있음.
- 도로의 전체 구조
- 다른 차선들의 위치
- 차량이나 장애물의 위치
- 차선이 이어지는 방향
- 이미지 내 멀리 떨어진 영역의 관련 feature
- 예를 들어 현재 차선 후보가 진짜 차선인지 판단하려면 다음 정보들이 도움 될 수 있음.
- 그래서 ROIGather는 lane prior feature만 보는 것이 아니라, lane prior feature와 해당 FPN feature map 전체 사이의 relation을 구성함
- feature map Xf 의 모든 spatial location을 펼쳐서 lane prior feature와 비교할 수 있게 만들고(B, C, HW) lane prior feature Xp와 전체 feature map Xf 사이의 attention을 계산함
W = softmax((Xp^T Xf) / sqrt(C))
- 이 수식은 lane prior feature가 feature map의 각 위치와 얼마나 관련 있는지를 의미함
- 그 결과 W는 feature map의 각 위치에 대한 중요도 가중치가 됨
- 이후 전체 feature map을 attention weight로 가중합하여 aggregated feature G를 얻음
G = W Xf^T
- 즉, G는 전체 feature map 중에서 현재 lane prior와 관련 있는 위치들의 정보를 모은 global context feature임
- 마지막으로 이 G를 원래 lane feature에 더하는 식으로 구성함(Residual 방식)
output = Xp + G
- 이렇게 해서 lane prior feature는 전체 feature map에서 얻은 문맥 정보로 보강됨
- 정리하면, 이 단계는 feature map 전체에서 global context를 모으는 과정임
ROIGather 구조 정리
입력:
- FPN feature map
- lane priors
1. Lane Prior ROI Feature 추출
- 각 lane prior 위에서 Np개 point를 균일하게 샘플링
- 각 point 위치에서 bilinear interpolation으로 feature 추출
- 결과: Xp ∈ R^{C × Np}
2. 이전 Layer ROI Feature Concatenation
- 현재 layer의 ROI feature와 이전 refinement layer의 ROI feature를 concat
- cross-layer refinement 과정에서 이전 단계의 lane 정보를 현재 단계에 전달
- 더 풍부한 lane representation을 만들기 위함
3. Lane Prior 방향 Convolution
- lane prior 위의 Np개 point feature들 사이에 convolution 수행
- 각 point가 주변 point 정보를 모음
- 차선의 연속성을 이용해 흐릿하거나 가려진 구간을 보강
- local context 보강 단계
4. FC Layer로 Lane Prior Feature 압축
- Np개 point로 표현된 lane feature를 하나의 lane-level feature vector로 압축
- Xp ∈ R^{C × Np} → Xp ∈ R^{C × 1}
- 메모리 사용량을 줄이고 global attention 계산을 효율적으로 하기 위함
5. Feature Map Flatten
- FPN feature map을 Xf ∈ R^{C × H × W}에서 Xf ∈ R^{C × HW}로 변환
- feature map의 모든 위치를 attention 대상으로 만들기 위함
6. Global Context Attention
- lane prior feature와 전체 feature map 사이의 attention matrix 계산
- W = softmax((Xp^T Xf) / sqrt(C))
- 현재 lane prior와 관련 있는 feature map 위치를 선택
7. Aggregated Feature 계산
- G = W Xf^T
- 전체 feature map에서 lane prior와 관련 있는 정보를 가중합
- global context feature 생성
8. Residual Addition
- aggregated feature G를 원래 lane prior feature에 더함
- ROIAlign으로 얻은 feature를 전체 문맥 정보로 보강
- 정리하면 ROIGather는 ROIAlign으로 얻은 lane prior feature를 그대로 쓰지 않고, lane prior를 따라 convolution으로 주변 point 정보를 모으고, 다시 전체 FPN feature map과 attention을 계산해 전역 문맥 정보를 모은 뒤, 이를 원래 lane feature에 더해 더 강한 lane feature representation을 학습하는 모듈임
ROIAlign = lane prior 위치의 feature 추출
ROIGather = 추출된 lane feature를 local context + global context로 보강
'차선인식' 카테고리의 다른 글
| 5-2 최적화 프로젝트 (0) | 2026.06.22 |
|---|---|
| 5-1. 최적화 프로젝트 (0) | 2026.06.22 |
| 4-1 CLRNet 논문 요약 (0) | 2026.06.18 |
| 3. CLRNet 모델 처리 흐름 (0) | 2026.06.17 |
| 2. CLRNet Lane Prior 정리 (0) | 2026.06.17 |