[VideoLLaMA 3] action recognition

FSA·2025년 2월 23일
0

[video] foundation model

목록 보기
8/10
  • 4개 했음 (6개 남음)

해결해야할 의문점

Vision Encoder에 비디오 input 넣는 법 찾기
  • 이 링크를 보면 된다.
  • 질문
    • Video Language Model("DAMO-NLP-SG/VideoLLaMA3-7B") 내의 Vision Encoder 가 video input을 어떤 format으로 받는지 파악하기
    • Vision Encoder 가 video input을 어떤 format으로 받는지 파악하기
      • Vision Encoder의 processor로 이를 만들 수 있는지 확인하기
  • 예상
    • "DAMO-NLP-SG/VideoLLaMA3-7B" processor의 역할
      • input에 비디오가 있는지 없는지를 체크한 후
        • 비디오니까, 프레임별로 for문을 돌면서
          • 이미지를 받아, patch화 한 후, 선형 layer을 거쳐서
            • patch당 초기 patch embedding vector 를 추출한다.
    • "DAMO-NLP-SG/VL3-SigLIP-NaViT" processor의 역할
      • input에 비디오가 들어왔을 경우를 처리하는 경우는 없을 것으로 추정됨
  • 확인 결과
    • processor
      • input
        • 'assets/goal_video.mp4'
          • 171초 짜리 비디오
        • "fps": 1
        • "max_frames": 180
      • 로직
        • default hyperparameter
          • 1 fps로 샘플링
          • 가로 51 / 세로 41 로 patch 만드는 것 같음
        • 내가 알고 싶은 것
          • 비디오를 어떻게 처리하나?
            • fps를 내가 조절할 수 있나?
          • patch size는 어떻게 되어 있을까?
      • output: Dict
        • pixel_values : shape (61880. 588)
        • grid_sizes : shape (1, 3)
          • [[170, 14, 26]]
          • 참고 : 170 (프레임 수) 14 (세로 패치 수) 16 (가로 패치 수) = 61880
        • merge_sizes : shape (1)
          • [2]
          • 전처리 과정에서 시각적 특징을 합치는(merge) 방식에 대한 정보를 담고 있습니다.
          • 여기서 값 [2]는 예를 들어,
            • 특정 영역이나 인접 패치의 정보를 결합하는 전략(예: 두 개씩 merge)으로 해석할 수 있습니다.
Video Language Model("DAMO-NLP-SG/VideoLLaMA3-7B")의 Vision Encoder("VideoLLaMA3-7B Vision Encoder")을 쓰고 있음
Video Language Model("DAMO-NLP-SG/VideoLLaMA3-7B")의 Vision Encoder이 비디오를 input으로 받을 때
  • 질문
    • 어떤 type과 format으로 비디오 input을 받는가?
    • Vision Encoder은 어떤 type과 format의 output을 출력하는가?
    • 어떻게 이를 확인할 수 있는가? 무엇을 참고해야하는가?
  • 예상
    • processor가
      • TODO: .mp4를 input으로 받을 수 있나? 아니면 내가 직접 frames화 해서 넣어줘야 하나?
    • Vision Encoder의 output format 예상
      • (N*F,D shape의 임베딩 벡터 출력)
Video Language Model("DAMO-NLP-SG/VideoLLaMA3-7B")의 Video compressor의 input / output format은 어떻게 되는가?
  • 예상
    • input: (N*F,D) shape의 임베딩 벡터 출력
    • output: (NnewN_{new}, D) shape의 임베딩 벡터 출력
      • NnewN_{new} 의 길이는 매번 바뀔 것 같음
Video encoder을 학습시키는 코드 공부하기
  • 질문
    • 데이터셋은 어떻게 구성되어 있나?
    • 코드가 어떤 식으로 데이터셋을 불러오나?
    • data augmentation 은 어떤 것들을 이용하나?
Attentional Pooling 코드는 어떻게 되어있나?
binary classification을 위해서는 어떤 네트워크를 구축해야하는지 알아보기



네트워크 구조 어떻게 짤 것인가?

앞부분

  • "DAMO-NLP-SG/VideoLLaMA3-7B" processor 사용 (혹은 "DAMO-NLP-SG/VL3-SigLIP-NaViT" processor)
    • 목적: 비디오 input의 tokenize
  • "DAMO-NLP-SG/VL3-SigLIP-NaViT"을 forward
  • 결정사항(고민)
    • "DAMO-NLP-SG/VideoLLaMA3-7B"의 Video compressor 을 활용
      • output: (NnewN_{new}, D) shape의 임베딩 벡터 출력
        • NnewN_{new} 의 길이는 매번 바뀔 것 같음


Attentional Pooling



Linear layer

  • (dim)을 input으로 받아, (2)를 출력하는 layer 만들기
  • TODO
    • binary classification을 위해서는 어떤 네트워크를 구축해야하는지 알아보기



데이터셋?

데이터셋을 어떻게 만들 것인가?

  • 내가 생각하는 데이터셋 구조
    • 10초짜리 비디오 clips을 저장해놓은 폴더
      • 제목은 어떻게 할 것인가? 시작 tiemstamp를 이름으로 하면 좋겠다.
    • 데이터에 대한 annotation을 해 놓은 json 파일
      • 비디오 파일 제목과, 0,1 표시만 있으면 됨
    • 구조는 kinetics 400 데이터셋의 구조를 따라하자.
  • 데이터셋을 어떻게 만들 것인가?
    • 10초 길이로 자르자.
    • 득점 인지 아닌지 라벨링하기
      • 득점 클립
        • 1:9 ~ 9:1 까지 총 9개를 득점 클립으로 만들어내자.
      • 득점 클립이 아닌 클립
        • 골장면 플러스 마이너스 12초 구간은 잘라내고,
        • 남은 시각에서 random sampling하여 클립 만들어내기
    • 경기 중인지 아닌지 라벨링하기
      • 경기 중이 아닌 클립
        • 부상 상황
        • 시작하기 전 상황
        • 끝난 후 상황


data augmentation을 어떻게 할 것인가?

해상도

  • 720 by 1080을, 0.5배 ~ 1배를 랜덤 샘플링하여 input에 넣어줍니다.

상하좌우 반전

  • 상하좌우 반전을 전부 시켜줍니다.

Random Frame Sampling

  • 비디오에서 frame을 추출하는 방식을 다양하게 설정합니다.
  • video llama3 에서는 1~10 FPS 까지 지원하더라.
    • TODO: 이걸 논문에서 어떻게 지원하는지 확인해보기


inference 시에는 어떻게 판단할 것인가?

  • 8초 간격으로 시작 시점을 jumping해서 비디오 클립을 만들어서, 폴더에 저장한다.
  • batch 개 씩 불러오면서 inference 한다.
  • 득점 clip을 전부 모아서, clip 중 겹치는게 있으면, 겹치는 시각의 중간점을 득점 시각으로 잡고,
    • 앞 뒤 시간 설정해서 고정된 길이의 골 clip으로 설정할 수 있음


profile
모든 의사 결정 과정을 지나칠 정도로 모두 기록하고, 나중에 스스로 피드백 하는 것

0개의 댓글

관련 채용 정보