본문 바로가기

Capstone

[ Meeting ] 4월 2주차 - 데이터셋 구성, 모델별 Inference Time 측정

 

PAR을 CLIP/ LLM 중 어떤 타입으로 해야 하는지?

프로젝트에 LLM이 사용되는지?

-> LLM은 이미지와는 관련 없고, 텍스트 기반 모델이기에 이번 PAR 프로젝트에서 CLIP의 텍스트 인코더를 경량화하는 방법으로 진행하기로 했다.

 


 

1. pkl 파일 까보기

dataset_random.pkl

 

dataset_ms_split_1.pkl
dataset_ms_split_2.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. 추후 진행사항

 

 

 


Tiny Star