후보 모델 선정
https://cafe.daum.net/SmartRobot/RoVa/2722
Parial FT (RTX 4070 SUPER 1대) VAD tiny // ETA 3days
config : image_backbone(ResNet50) freeze, epoch
학습 시간을 줄여보고 결과물을 일단 도출해보는 것을 목표로 학습을 시작했다.
EDA로 확인했을 때, nuScenes와 ETRI는 카메라 배치/화각/화질이 다른 것을 확인했다.
https://cafe.daum.net/SmartRobot/RoVa/2743
VAD를 nuScenes 사전학습 가중치로 초기화한 뒤에 ETRI로 Fine tuning 방향은 고정하였고,
그 안에서 backbone을 얼릴지 말지 고민했는데 결론적으로는 PC 사양, 대회 남은 기간 고려하여 얼리는 방향으로 결정했다.
https://arxiv.org/abs/2509.04711
위 논문에서는 센서 설정 변화에 대한 도메인 적응 전략으로 Partial Layer Fine-tuning을 제안하는데,
공간적 특징을 적응시키기 위해 backbone과 neck을 학습시키고 encoder와 head를 동결하는 방식을 사용한다.
같은 방식으로 사용하려 했는데 시간적으로 오래 걸려서 (단일 GPU 기준 44days) 제외했다...
또한 결과 내는 것이 목적이었기에 데이터도 서브 샘플링(35%)으로 같이 적용하여 시간을 최대한 압축했다.
학습은 안정적으로 끝까지 돌았지만 (10 epoch) loss가 epoch 3(스케줄 25% 지점)부터 8.2 사이에서 정체되었다.
현재 학습에서 중점적으로 봐야할 지표는 아래 지표들이다.
차선의 방향 예측 정확도가 학습 후반부에 오히려 나빠짐 확인
충돌 회피 학습이 초반 이후 정체된 것으로 보인다.
loss_plan_dir -> 계속 우상향 (1.2e-3 -> 2.4e-3, 2배 증가)
ego가 나아가야 할 방향에 대한 loss가 학습이 진행될수록 오히려 나빠지고 있음을 확인했다.
제출 결과로는 L2_avg = 1.69m가 나왔다.
Backbone이 얼어있는 채로는 nuScenes와 ETRI 사이의 fisheye 왜곡, 화각, 해상도/크롭 차이 같은
시각적 도메인 갭을 극복하지 못함을 알 수 있었다..
BEV encoder/head만 학습해서는 backbone이 뽑아주는 특징 자체에 한계가 있음을 알 수 있다.
따라서 backbone을 unfreeze하여 full finetuning한 모델을 기반으로 뭔가를 더 시도해야겠다고 방향을 결정했다.
Full Fine-tuning (RTX 5090 1대) VAD tiny // ETA 10days
config: epoch 10, lr (2e-4 / 10)
Partial FT 학습했을 때 정체 원인이 backbone freeze로 인한 한계라고 생각하고
backbone을 다시 학습 가능하게 풀어서 진행하였다.
backbone을 완전히 새로 학습시키면, 이미 nuScenes에서 학습된 초기화 지점에서 멀리 벗어나 성능이 오히려
망가질 위험이 있어서 base LR을 원본의 10분의 1로 낮추는 표준 전이학습 방식을 적용했다.
(사전학습 지식은 그대로 보존하면서, 도메인 갭만 맞추는 방향)
학습 결과 안정적으로 되었으며, Loss도 3점대까지 내려갔다.
(partial FT의 8점대와 비교하면 개선됨) == backbone freeze가 좋지 못한 선택이었음을 확인
학습 그래프에서 중요하게 볼 점은 아래 두 지표가 이전에
backbone freeze 때문에 우상향하는 줄 알았는데 그게 아니었다는 점이다.
| 점점 떨어지는 중이므로 추가 학습 시 개선될 가능성이 있음 |
direction loss 자체의 구조적 문제일 가능성이 있다..
앞서 했던 fine tuning보다 loss는 개선된 점이 보이므로 그대로 제출해봤다.
(validation 포함 full finetuning이라서 확인할 지표가 훈련 그래프로 판단해야한다.)
제출 결과로는 L2_avg = 0.69m가 나왔다.
이후에는 이 체크포인트에서 스케줄이 이미 끝난 상태였기 때문에
단순 resume이 아니라 load_from + 더 낮은 lr (2e-6)으로 loss 추가 수렴 시도 중이다. RTX 5090 단일 GPU
8월 내로 완료할 목표
1. EDA 결과 분석하여 TEST와 비슷한 Train dataset pkl 뽑아서 추가 fine-tuning 시키는 방향 - VAD
2. SparseDrive, DiffusionDrive 구조 확인 후 우선적으로 validation 돌려봐서 파이프라인에 적용 가능한지 확인
3. validation nuScenes L2 평가지표 현재 ETRI에 맞게 수정
4. VAD full finetuning한 모델에서 Cyclist(클래스 불균형) 문제 해결할 fine-tuning - VAD
첫댓글 매크릭스의 L2_1s, L2_2s, L2_3s 정의를 설명
L2_3s 를 줄일수 있는 방안
https://cafe.daum.net/SmartRobot/RoVa/2722
자율주행 모델이 계획한 미래 궤적과 실제 차량이 주행한 정답 궤적 사이의 유클리디안 거리 차이입니다.
L2_3s를 줄이기 위해서 초반 L2_1s를 엄청나게 줄여서 평균값이 낮게 나오게 하던가, 후반 스텝 자체의 예측력을 강화시키는 방법이 있는데 모두 추가 fine-tuning 방식으로 결정해야 하기 때문에 훈련 방법을 여러 개로 나눠서 확인해보고 있습니다.
제일 점수 올리기에 좋다고 생각한 방법은 ego status를 활성화해서 현재 모델은 카메라 이미지만 보고 미래 궤적을 예측하는데 현재 상태인 내 차의 속도, 가속도, yaw rate(회전 속도) 등 9개 수치(ego_lcf_feat)와 방금까지 온 과거 궤적 모양(ego_his_trajs)을 추가로 입력해서 학습하면 장기 예측에 효과적이라고도 하고 코드에도 이미 구현되어 있어서 config에서 활성화 해서 학습 중입니다.
이후로는 test dataset 특징에 맞게 오버샘플링 해서 학습하는 방식도 고려하고 있습니다.
@신민서 1s, 2s, 3s는 예측시간을(1,2,3초)를 의미하는가요?
훈련시 사용하는 loss 함수를 설명해주세요
훈련시 VRAM 사용량은?
@Sungryul Lee 1. 넵 (0~1초 2프레임 -> L2_1s)
2. 추가 보고서 작성해서 올리도록 하겠습니다.
3. 약 14GB입니다.