_load_multimodal_data 메서드
를 호출하여 대화 내에서 이미지나 비디오와 같은 멀티모달 데이터를 추출_gather_multimodal_data
를 통해 추출된 데이터를 모아 리스트 형태로 준비_merge_kwargs 메서드
를 통해 텍스트, 이미지, 영상 등 각 모달리티별 처리에 필요한 다양한 옵션(kwargs)을 통합기본값
, 토크나이저 초기 설정
, 그리고 호출 시 전달된 인자
들이 적절히 병합process_images 메서드
를 통해 이를 모델 입력에 맞는 이미지 특징(예: 텐서 형태의 이미지 데이터)으로 변환make_batched_images 함수를 이용해 입력 형식을 정규화
하고, 이미지 프로세서(image_processor)를 호출하여 처리
BatchFeature 객체에 병합하여 반환
합니다. _load_multimodal_data
에서 비디오 경로에서 프레임으로 변환하는 것 같다._gather_multimodal_data
를 통해 추출된 데이터를 모아 리스트 형태로 준비process_images 메서드
: 비디오 데이터 처리 -> 내 생각: 패치화 후 -> 선형 임베딩 통과make_batched_images 함수를 이용해 입력 형식을 정규화
_load_multimodal_data
conversation = [
{
"role": "user",
"content": [
{
"type": "video",
"video": {"video_path": video_path, "fps": 1, "max_frames": 180}
},
{
"type": "text",
"text": "Please accurately provide the timestamps for all the moments when a goal occurs in the given futsal video."
},
]
}
..., {}
]
conversation = [
{
"role": "user",
"content": [
{
"type": "video",
"video": List[Image.Image],
"num_frames": int,
"timestamps": List[float]
{
"type": "text",
"text": "Please accurately provide the timestamps for all the moments when a goal occurs in the given futsal video."
},
]
}
]
input
아래 말 무슨 뜻인지 공부하기
이미지 경로
비디오의 시작/종료 시간
등)를 기반으로 고유 식별자(data_id)를 생성
load_video
메서드를 호출하여 전체 비디오의 프레임들과 타임스탬프를 얻습니다. (공부하기)
각 개별 콘텐츠마다 지정한 시작/종료 시간에 해당하는 프레임과 타임스탬프를 필터링하여,
"num_frames"
), 타임스탬프 목록("timestamps"
)을 추가비디오 프레임 및 타임스탬프
)로 로드하고, 해당 데이터를 각 메시지에 주입
"type"
필드를 가져야 합니다. "type"
이 "image"
또는 "video"
이고, 해당 타입에 해당하는 데이터(예: content["image"]
또는 content["video"]
)가 딕셔너리라면, "video": {"video_path": video_path, "fps": 1, "max_frames": 180}
고유 식별자(data_id)를 생성
(그냥 위 예시 Dict를 json화 한거임)"start_time"
과 "end_time"
은 제외하여 multimodal_info
라는 defaultdict에 저장하여, "image"
인 경우, load_images
메서드를 호출하여 이미지를 로드합니다."image"
키에 이미지 데이터를 리스트 형태로 할당합니다."video"
인 경우, "start_time"
과 "end_time"
정보를 수집합니다. load_video
메서드를 호출하여 전체 비디오의 프레임들과 타임스탬프를 얻은 뒤, "num_frames"
), 타임스탬프 목록("timestamps"
)을 추가합니다.load_video
_gather_multimodal_data
_gather_multimodal_data 메서드는 대화(conversation) 내에 포함된 멀티모달 콘텐츠(이미지와 비디오)를 간단히 수집하여 별도의 리스트로 반환하는 역할을 합니다. 이 메서드의 주요 기능은 다음과 같습니다.
대화 메시지 순회
"content"
필드가 리스트나 튜플인지 확인합니다. 만약 그렇지 않으면 해당 메시지는 건너뜁니다.콘텐츠 필터링 및 수집
"type"
필드가 "video"
이면, 해당 콘텐츠에서 "video"
데이터를 추출합니다. 이때, 추출된 비디오 데이터가 유효한지 (is_valid_video
함수로) 검증한 후, 튜플 ("video", video)
형태로 결과 리스트에 추가합니다."type"
이 "image"
인 경우에는 "image"
데이터를 추출하여 튜플 ("image", image)
형태로 추가합니다.최종 결과 반환
None
을 반환합니다.즉, 이 메서드는 대화 내에서 이미지와 비디오 데이터를 식별하고, 이들을 나중에 멀티모달 처리를 위해 별도로 모으는 간단한 수집 단계로 볼 수 있습니다.
process_images
process_images 메서드는 입력으로 전달된 이미지 또는 영상 데이터를 모델이 사용할 수 있는 형식으로 전처리하는 역할을 합니다. 구체적인 기능은 다음과 같습니다.
입력 데이터 표준화
merge_size 설정
이미지 프로세서 호출
모달 정보 포함
최종적으로, process_images 메서드는 입력된 멀티모달 데이터를 일관된 형식으로 정리 및 전처리하여, 모델이 요구하는 형태의 입력(feature)으로 변환하는 핵심 파이프라인의 한 부분입니다.
make_batched_images
make_batched_images 함수는 입력으로 주어진 이미지 또는 비디오 데이터를 일관된 배치(batch) 형태로 변환하는 역할을 합니다. 다양한 입력 형식(예: 단일 이미지, 단일 비디오, 여러 이미지/비디오, 또는 이름(label)과 함께 제공된 데이터)을 모두 처리하여, 이후 프로세싱 단계에서 일관된 방식으로 다룰 수 있도록 모달리티(이미지 또는 비디오)와 실제 데이터를 별도의 리스트로 분리해 반환합니다.
주요 동작 과정은 다음과 같습니다.
리스트/튜플 형태의 'named image' 처리
(모달리티, 데이터)
형태(예: ("image", 이미지데이터)
또는 ("video", 비디오데이터)
)이면, 리스트/튜플 형태의 이미지 혹은 비디오 처리 (이름 없이 제공된 경우)
("image", 데이터)
또는 ("video", 데이터)
형태로 래핑한 뒤, 단일 named image 처리
(모달리티, 데이터)
형태)라면, 이를 단일 요소 리스트로 변환하여 반환합니다.단일 이미지 또는 비디오 처리
"video"
로, "image"
로 설정한 후 각각 단일 요소 리스트로 반환합니다.오류 처리
요약하면, make_batched_images 함수는 다양한 형태로 입력된 이미지 및 비디오 데이터를 "모달리티 정보"와 "실제 데이터"를 각각 리스트로 정리하여, 후속 이미지 전처리나 모델 입력에 적합한 형식으로 만드는 핵심 역할을 수행합니다.
image_processor
Videollama3Qwen2Processor 클래스의 image_processor는 입력된 이미지와 비디오 데이터를 모델이 요구하는 형식으로 전처리하는 핵심 구성요소입니다. 구체적으로는 다음과 같은 역할과 기능을 수행합니다.
원시 멀티모달 데이터 전처리
배치 형태로 데이터 구성
모델 요구사항 반영
즉, image_processor는 멀티모달 입력 중 이미지와 영상 데이터를 효과적으로 전처리하고 정제하여, 텍스트와 함께 모델에 전달될 수 있도록 하는 역할을 담당합니다.