PAR을 CLIP/ LLM 중 어떤 타입으로 해야 하는지?
프로젝트에 LLM이 사용되는지?
-> LLM은 이미지와는 관련 없고, 텍스트 기반 모델이기에 이번 PAR 프로젝트에서 CLIP의 텍스트 인코더를 경량화하는 방법으로 진행하기로 했다.
1. pkl 파일 까보기



공통점
두 유형의 pkl 파일은 모두 MSP60K 데이터셋의 전처리된 정보를 담고 있다.
• root
• 이미지 데이터가 저장된 경로.
• attr_vectors, attr_words, attributes
• 57개 속성에 대한 정보:
• attr_vectors: 각 속성을 표현하는 768 차원 벡터 (numpy.ndarray, shape: (57, 768)).
• attr_words: 속성 이름 배열 (numpy.ndarray, shape: (57,)).
• attributes: 속성 이름 리스트 (길이: 57).
• image_name
• 데이터셋에 포함된 이미지 파일들의 이름 리스트 (약 60,122개).
• label
• 각 이미지에 대해 57개 속성의 라벨 정보 (numpy.ndarray, shape: (60122, 57)).
• partition
• 데이터 분할 정보가 포함되어 있으며, 각 파일에서 지정한 인덱스(예: train, trainval, test 또는 trainval, test)를 통해 학습/검증과 테스트 데이터를 구분한다.
• weight_train(또는 weight_trainval) / weight_test
• 해당 분할에 있는 이미지들의 각 속성 평균값을 산출한 정보로, 속성 분포나 클래스 불균형 분석에 활용할 수 있다.
차이점
1. 데이터셋 분할 방식 및 설명
dataset_random.pkl
• description: 보통 "msp" 정도를 간단히 설명한다.
• partition: 일반적으로 train, val, test, trainval 등 세부 분할 정보가 들어 있다.
• 데이터 선택 방식: random_split.json 파일을 기반해 train/val/test로 분할된 전체 데이터셋 정보(이미지 파일 이름, 라벨 등)를 모두 포함한다.
dataset_ms_split_1.pkl / dataset_ms_split_2.pkl
• description: 각각 "msp_split_1" 또는 "msp_split_2"로 기록되어 있어, 두 파일이 다른 분할 기준 또는 버전을 반영함을 나타낸다.
• partition: 이 파일들은 보통 trainval과 test 두 그룹으로 분할되어 있으며, 두 분할 간의 경계(인덱스 범위)가 서로 다르다.
• 데이터 선택 방식: Multi-Senses 관련 JSON 파일들(예: Multi_Sences2.json, merged_labels.json)을 기반으로 생성되어 random_split과는 다른 방식의 데이터 분할 전략을 사용한다.
2. 추가 정보의 존재 여부
• dataset_random.pkl에는 아래와 같이 추가 정보가 있을 가능성이 높다.
• sentences
• 각 이미지에 대한 레이블 바탕으로 생성된 문장(텍스트 설명)들 포함
• max_length
• 생성된 문장들 중 가장 긴 문장의 길이 정보 제공
• limit_word
• 문장 내에 등장하는 고유 단어 및 기호들의 리스트
• weight_train
• train 분할에 대한 속성 평균값(만약 별도로 계산되었다면)
dataset_ms_split_1/2.pkl
• 제공된 키 목록에는 sentences, max_length, limit_word와 같은 항목이 포함되어 있지 않다.
• 분할 정보는 trainval과 test만 포함하며, 가중치 정보로는 weight_trainval과 weight_test를 제공한다.
3. 생성 시 사용된 소스 파일 및 전처리 과정
dataset_random.pkl
• random_split.json을 기반으로 생성되며, 무작위 샘플링 및 전처리를 거쳐 만들어진다.
dataset_ms_split_1/2.pkl
• Multi_Senses 관련 JSON 파일(Multi_Sences2.json, merged_labels.json 등)을 이용해 특정 상황이나 다중 감각 분할 기준에 따라 데이터를 재구성한 결과다.
• 이로 인해 trainval과 test의 인덱스 범위 등이 달라질 수 있다.
2. MSP60K 랜덤 데이터셋에 대한 CLIP과 경량 CLIP 모델 인퍼런스 시간 비교
- 대부분 첫 몇 번의 실행은 warm-up 처리한 뒤, 개별 실행 시간 측정하고, 그 평균 및 중앙값을 사용하는 방식으로 인퍼런스 속도 평가
- 코드 실행 전 warm-up run 통해 GPU 초기화와 캐시 적재 진행하므로, 초기 GPU 로딩 시간이나 초기 오버헤드가 측정에 영향 주지 않도록 함
개별 모드 인퍼런스 프로세스
1. 토크나이즈 (Tokenization):
• 각 문장에 대해 CLIPTokenizer 사용해 텍스트 토큰화
• 토큰화 결과는 모델이 이해할 수 있는 텐서 형태 (예: input_ids, attention_mask 등)로 변환됨
2. 디바이스로 데이터 이동:
• 생성된 토큰 텐서를 지정된 디바이스(GPU 또는 CPU)로 옮김
3. 모델 전방 패스 (Forward Pass):
• torch.no_grad() 컨텍스트 내에서, CLIP 텍스트 인코더의 forward 함수 호출해 텍스트 임베딩 계산
4. 동기화 (Synchronization):
• GPU는 일반적으로 연산을 비동기적으로 처리 -> 정확한 추론 시간 측정 위해 torch.cuda.synchronize() 호출해 모든 GPU 연산 완료될 때까지 대기
-> 시작 시간과 종료 시간 사이의 실제 경과 시간을 정확히 기록 가능
5. 시간 측정:
• 각 샘플에 대해 위 과정을 하나씩 진행하며 시작 시각과 종료 시각의 차이 기록
• 모든 샘플에 대해 반복한 뒤 평균 및 중앙값 등 통계치 계산
6. 순차적(Serial) 처리:
• 개별 모드에서는 샘플마다 위 과정을 순차적으로 반복
• 이 때문에 배치 모드에 비해 매번 토크나이즈와 모델 호출 오버헤드 반복되어 단일 샘플당 처리 시간이 더 길게 측정됨
CLIP(Baseline Model)

배치 모드 인퍼런스: 50개 샘플 한 번에 처리할 때 전체 0.0258초, 즉 샘플당 약 0.0005초
개별 모드 인퍼런스: 한 문장당 평균 약 0.0091초, 중앙값 0.0089초 소요
TinyCLIP

배치 모드 인퍼런스: 50개 샘플 한 번에 처리할 때 전체 0.0034초, 즉 샘플당 약 0.0001초
개별 모드 인퍼런스: 한 문장당 평균 약 0.0029초, 중앙값 0.0028초 소요
MobileCLIP

배치 모드 인퍼런스: 50개 샘플 한 번에 처리할 때 전체 0.0141초, 즉 샘플당 약 0.0003초
개별 모드 인퍼런스: 한 문장당 평균 약 0.0117초, 중앙값 0.0117초 소요
3. 추후 진행사항


'Capstone' 카테고리의 다른 글
| [ Meeting ] 5월 1주차 - Baseline 측정(PyTorch FP32) (0) | 2025.05.05 |
|---|---|
| [ Meeting ] 4월 3주차 - Quantized clip 조사, Baseline 성능 측정 (0) | 2025.04.17 |
| [ Meeting ] 4월 1주차 - 경량 CLIP 모델 선정 및 실험 환경 최적화 (0) | 2025.04.07 |
| [ Meeting ] 3월 3, 4주차 - Roadmap, 논문리뷰 (0) | 2025.04.07 |
| [ Meeting ] 3월 2주차 - 인퍼런스 시간, Paper (0) | 2025.03.19 |