CoolFace
Modelpublic

ETRI-TANGO/tango2-sds-vlm-eva

sourceHugging Faceotherupdated 27d agoView on Hugging Face
0likes
Model Card

TANGO2 SDS Vision Language Model

선박 및 해양 도메인에 특화된 시각 언어 모델(Vision Language Model, VLM)의 프로젝터와 저순위 적응(Low-Rank Adaptation, LoRA) 가중치 모음이다. 구조는 LLaVA 계열을 따르며, 동결된 비전 인코더의 특징을 프로젝터가 언어 모델의 임베딩 공간으로 옮긴다.

학습과 추론 코드는 ML-TANGO/TANGO2 의 Field_Test/SDS/VisionLanguageModel 에 있다.

구성

CLIP 계열 체크포인트의 비전 인코더는 openai/clip-vit-large-patch14-336 이고 동결 상태이다. Gemma 4 기준선은 계보가 달라 아래에 따로 적는다. 프로젝터는 mlp2x_gelu 이며 이미지 토큰 수는 576 이다. LoRA 는 r=128, lora_alpha=256 이고 대상 모듈은 q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj 이다.

각 디렉토리에는 projector.bin, LoRA 어댑터, 그리고 프로젝터 구조를 기록한 vlm_config.json 이 함께 들어 있다. 추론 경로는 vlm_config.json 을 읽어 프로젝터를 재구성한 뒤 가중치를 적재한다.

체크포인트

Qwen3-8B 계열

디렉토리학습 단계학습 데이터
clip_qwen3_proj프로젝터LLaVA-CC3M-Pretrain-595K
clip_qwen3_proj_lora프로젝터와 LoRALLaVA-CC3M-Pretrain-595K
clip_qwen3_proj_lora_marine텍스트 전용 LoRA 계속학습LLaMarine-SFT 54,657건
clip_qwen3_proj_lora_marine_sds_ko_9kSDS 도메인 LoRASDS 20260728 한글 9,000건

Llama-3.1-8B-Instruct 계열

디렉토리학습 단계학습 데이터
clip_llama31_proj프로젝터LLaVA-CC3M-Pretrain-595K
clip_llama31_proj_lora프로젝터와 LoRALLaVA-CC3M-Pretrain-595K
clip_llama31_proj_lora_marine텍스트 전용 LoRA 계속학습LLaMarine-SFT
clip_llama31_proj_lora_marine_sds_ko_9kSDS 도메인 LoRASDS 20260728 한글 9,000건
clip_llama31_proj_lora_marine_sds_lora_koSDS 도메인 LoRA이전 SDS 데이터셋, 한글
clip_llama31_proj_lora_marine_sds_lora_enSDS 도메인 LoRA이전 SDS 데이터셋, 영문

Gemma 4 기준선

디렉토리학습 단계학습 데이터
gemma4_e4b_sds_ko_9k_lora커넥터와 LoRASDS 20260728 한글 9,000건

google/gemma-4-E4B-it 의 네이티브 멀티모달 구조를 그대로 쓴다. 위의 CLIP 계열과 계보가 다르다. 동결 CLIP 에 직접 구현한 프로젝터를 붙이는 대신, Gemma 4 가 이미 갖고 있는 비전 타워(Gemma4VisionModel, hidden 768, 16 층)와 커넥터(embed_vision, RMSNorm + Linear 768→2560)를 쓴다. 오디오 인코더는 audio_config 를 None 으로 두어 제외했다. 비전 타워는 동결하고 커넥터와 언어 모델 LoRA 를 학습했다.

이 체크포인트에는 projector.bin 과 vlm_config.json 이 없다. 대신 학습된 커넥터가 connector.bin 에, 학습 설정이 gemma4_train_config.json 에 있다. 적재 방법은 해당 디렉토리의 README 에 적었다.

이름 끝의 _9k 는 20260728 데이터셋의 한글 시나리오 9,000건으로 학습했다는 뜻이다. 접미사가 없는 _sds_lora_ko 와 _sds_lora_en 은 그보다 앞선 SDS 데이터셋으로 학습된 별개의 체크포인트이므로 혼동하지 않도록 한다. 이름이 비슷하지만 학습 데이터가 다르다.

20260728 학습 설정과 측정값

CLIP 계열 _9k 두 체크포인트는 같은 데이터, 같은 분할, 같은 하이퍼파라미터로 학습되었다. Gemma 4 기준선은 데이터와 분할, 유효 배치, 학습률 일정, 에포크 수가 같지만 GPU 한 장에서 돌아 per-device 배치와 누적 단계가 다르다.

항목값
학습 데이터20260728 한글 9,000건
검증 데이터20260728 한글 1,000건
분할9 대 1, 시드 42 고정 셔플
유효 배치per-device 2 × grad accum 4 × 4 GPU = 32
학습률2e-4, cosine, warmup 0.03
에포크와 step3 epoch, 846 step
정밀도와 분산bfloat16, DeepSpeed ZeRO stage 2
하드웨어NVIDIA A100-PCIE-40GB 4장

학습에 쓰지 않은 1,000건에 대한 검증 손실은 다음과 같다.

epoch`clip_qwen3_..._sds_ko_9k``clip_llama31_..._sds_ko_9k`
0.360.29490.3766
0.710.25350.3212
1.060.23310.2921
1.420.21770.2704
1.780.20320.2485
2.130.19950.2405
2.480.19370.2303
2.840.19040.2262
3.000.19030.2260

Gemma 4 기준선의 같은 지점 값은 0.3182, 0.2817, 0.2629, 0.2438, 0.2291, 0.2190, 0.2124, 0.2087, 0.2085 이다.

이 수치가 말하지 않는 것

이 값은 참조 문장에 대한 다음 토큰 예측 손실이다. 생성 품질, 해상상황 묘사의 사실 정확도, COLREG 조항 인용의 타당성, 모델이 이미지에 근거를 두는지 여부는 이 수치로 알 수 없다.

세 계열의 값을 같은 척도로 비교할 수 없다. 서로 다른 토크나이저가 만든 서로 다른 토큰 열에 대한 교차 엔트로피이기 때문이다. 어휘 크기는 Qwen3 가 151,670, Llama3.1 이 128,257, Gemma 4 가 262,144 이다. 또한 두 실행은 이어받은 체크포인트가 다르다. Qwen3 계열은 4 GPU 유효 배치 64 로 855 step 학습된 LLaMarine 어댑터에서, Llama 계열은 6 GPU 유효 배치 96 으로 570 step 학습된 어댑터에서 출발했다.

사용법

bash
hf download ETRI-TANGO/tango2-sds-vlm-eva --local-dir ~/tango2-sds-vlm-eva
bash
python test.py \
    --projector_path ~/tango2-sds-vlm-eva/clip_qwen3_proj_lora_marine_sds_ko_9k/projector.bin \
    --lora_path      ~/tango2-sds-vlm-eva/clip_qwen3_proj_lora_marine_sds_ko_9k \
    --llm_model      Qwen/Qwen3-8B \
    --image          sea_ship.jpg \
    --question       "사진을 바탕으로 현재 해상상황을 묘사해줘."

프롬프트 형식

_9k 체크포인트는 이미지 한 장과 자동 식별 시스템(Automatic Identification System, AIS) 텍스트를 함께 받는 형식으로 학습되었다. 사용자 메시지는 다음 순서로 구성된다.

<image>
[선박 AIS 정보]
- 자선 (ID:0) | 위도:... 경도:... | 속도:...kt 방향:...° | 선체:...m × ...m 흘수:...m
- 주변선박 (ID:1) | 위도:... 경도:... | 속도:...kt 방향:...° | 선체:...m × ...m 흘수:...m | CPA:...NM TCPA:...초

사진과 AIS 데이터를 바탕으로 현재 해상상황을 묘사하고 COLREG 규칙에 따른 올바른 항해 조력 메시지를 생성해줘.

응답은 해상상황 묘사와 항해 조력 메시지를 빈 줄로 이어 붙인 하나의 문단이다.

20260728 데이터셋의 bbox_* 좌표는 이미지와 다른 카메라 기준으로 생성되어 이미지 위의 선박 위치와 일치하지 않는다. 그래서 학습 프롬프트의 AIS 텍스트에서 바운딩박스를 제외했고 추론에서도 같은 형식을 쓴다. 이 문자열을 만드는 코드는 저장소의 scripts/prepare_sds_dataset.py 의 format_ais() 와 demo/app.py 의 _format_ais_df() 에 있다.

라이선스

ETRI TANGO License 를 따른다. 기반 언어 모델인 Qwen/Qwen3-8B 와 meta-llama/Llama-3.1-8B-Instruct 의 라이선스도 함께 적용된다.