Search
Duplicate

시각적 이해를 위한 머신러닝/ Multimodal Modeling II

image가 아니라 video-text 대응을 transformer에 적용.
transformer는 sequential 데이터가 필요한데, 애초에 video가 frame들의 sequence이므로 문제 없음.
video-text pair는 어떻게 수집할까?
비디오 검색과 클릭된 비디오 쌍을 보거나, video의 title, description을 보거나, video의 ASR(Auto Speech Recognition)을 쓰거나 등. 물론 이런 방법에는 noise가 많이 있음.
VideoBERT는 BERT처럼 token을 만들어서 함. text와 video에서 1.5초마다 뽑은 image를 함께 넣음.
text에 mask를 씌우거나, image에 mask를 씌워서 맞추게 함.
문제는 image mask를 채우는게 어려움.
모든 video의 frame들을 clustering 한 후에 frame들에 같은 cluster id를 줌.
클러스터는 k-mean를 돌려서 사용.
그렇게 묶인 cluster에 대해 centroid에 가까운 frame을 찾아서 대표로 설정.
frame에 mask를 씌운 후에 어떤 cluster에 해당하는지를 맞추게 함.
text와 video가 같은 내용을 담고 있는지를 학습하는게 Linguistic-visual alignment. 이게 가장 중요함.
text에 mask 씌워서 맞추게 하는게 전통적인 MLM(masked language modeling)
frame에 mask 씌워서 이미지 cluster를 맞추게 하는게 MFM(masked frame modeling)
응용 사례 - 비어있는 프레임 채우기, 다음 프레임 예측하기, 비디오 captioning 등
Zero-shot은 좀 오해의 소지가 있는 용어
labeling된 데이터셋을 안 쓴 경우에 zero-shot이라고 함.
실제로 학습을 안한게 아님. 오히려 그런 경우에 훨씬 큰 데이터셋을 사용함.
VideoBERT와 같은 저자들이 만든 모델.
VideoBERT는 clustering 때문에 end-to-end 학습이 안되서 그걸 걷어낸 모델. 대신 contrastive learning을 씀.
text tower, video tower를 따로 돌림.
text만 갖고 bert까지 돌리고
video도 S3D를 돌리고, CBT까지 돌린 후에,
그 두 결과를 합쳐서 Cross-modal transformer를 돌림
최종적으로 그 둘을 합한 것과, video만 보는 것을 따로 사용 함.
clustering을 안하는대신 contrastive learning을 하는게 CBT
같은 video는 positive로 하고 다른 video는 negative로 하는 NCE loss를 사용함
이때 모든 video를 negative를 쓰지 않고 샘플링해서 씀.
softmax는 기본적으로 정답인 것은 분자에 넣고, 분모에는 정답을 포함해서 모든 것을 넣고, 정답일 때는 값을 올리고, 그 외의 것은 낮아지게 함.
NCE도 정답을 분자에 넣고, 분모에는 정답을 포함해서 나머지 것들 중에서 sampling 해서 사용함. 정답인 것은 값이 올라가게 하고, 그 외의 것은 낮아지게 함.
softmax와 NCE는 개념적으로 달라 보이지만 실제 수식은 비슷함.
분자는 동일하고, 분모가 negative를 모두 쓰지 않고 sampling해서 사용하는 부분만 차이가 있음.
NCE는 label이 필요 없음.
Cross-modal transformer에서도 NCE loss를 써서 같은 것끼리 가까워지게 하고, 다른 것은 멀어지게 함.
다만 Cross-modal transformer에서는 exp를 쓰지 안고 정보이론에서 사용하는 mutual information을 사용함.
이렇게 하면 cluster하는 과정이 끊어지지 않고 end-to-end 학습이 됨
video에 text query를 줬을 때 그 location을 찾아주는게 Hammer
하나의 video에 대해 하면 MLSV이고, 여러 비디오에 대해 하면 MLVC
qeury가 주어졌을 때, 그 moment를 찾기 위해 베이지안 룰을 사용
우선 query에 해당하는 video를 찾고
그 찾아진 video와 query를 이용해서 video에서 moment를 찾는다.
video 검색에는 contrastive learning을 사용.
negative pair를 text를 바꾸거나 image를 바꾸어서 만들어 줌.
이렇게 충분히 큰 데이터셋에서 학습 시키면 잘 align 된다.
video 내 localization 분류를 위해 begin, end, other를 나눠서 함
Hammer 아키텍쳐
기본적으로 VilBERT와 동일한데, 마지막에 frame classifier 하는 부분만 차이가 있음.
그냥 하면 성능이 잘 안 나와서, 일정 간격의 clip들로 쪼개서 frame별로 돌리고 그 결과를 clip으로 묶어서 다시 한번 돌림.
조금 성능 개선이 되긴 했지만, 크게 올라가진 않음.
결과 예시
기존 아이디어를 다 합쳐서 사용한게 HERO
별로 성능이 좋지 않았음
아키텍쳐
새로운 아이디어는 별로 도움이 안 됐다.
기존 아이디어들을 사용해서 했는데, 성능이 잘 나왔음.
그 이유는 데이터셋 덕분이라고 추측 됨.
모델 아키텍쳐
기존 아이디어들을 조합해서 사용 함.
데이터셋 수집을 잘 함.
27M 유튜브 비디오를 수집해서 잘 정제해서 6M 정도로 만들어서 사용함.
성능이 잘 나왔다.
기존 아이디어들이 데이터와 컴퓨팅 파워가 부족했는데, 그걸 잘 하니 잘 되더라.
Audio는 visual이랑 비슷하게 함.
2차원 공간에 소리를 시각화하는걸 spectrogram이라고 함.
(근데 whisper 같은 경우는 이렇게 시각화하지 않고 그냥 conv1d를 사용함)
그렇게 visual로 바꾼 정보에 대해 transformer 돌림.
transformer가 cnn을 이긴 이유가 데이터셋이 커서인데, audio는 그런 데이터셋이 없음.
그래서 ImageNet에서 pretrained된 모델을 가져와서 audio 용으로 학습함.
VAAT는 visual, audio, text를 모두 사용하는 모델.
visual도 linear projection하고, audio도 바꿔주고, text도 embedding해서 한 번에 넣음
loss는 NCE loss를 사용
학습은 3가지를 한 번에 안 함.
visual과 audio는 1:1 매칭이 쉬워서 같은 시간이었으면 가까워지게 하고, 다른 시간이었으면 멀어지게 함.
text는 그 자체가 sequence라서 하나로 통합해야 함. 그래서 sum해서 사용한 (이게 MIL_NCE)
그렇게 sum한 것을 audio-visual embedding과 contrastive learning 함.
Multimodal은 metric learning이 대세이고, CLIP이 그냥 끝냄.
모델이 단순한데, 데이터 파워로 끝냄.
Text feature와 image feature에 대해 가까운 것은 1이 나오게 하고, 그 외의 것은 0이 나오게 학습 시킴. contrastive learning
이렇게 학습된 결과가 잘 나오면 흥미롭게도 Identity Matrix처럼 보이게 됨.
학습 결과는 Identity matrix가 됨.
이 embedding이 대단히 강력해서 BERT도 넘어서고, 이후 모델들은 그냥 CLIP을 가져다 씀
실제로 stable diffusion도 그냥 clip을 가져다 씀.
사례
MuLan은 Audio에 대한 CLIP
visual 대신 audio와 text에 pair 대해 clip 처럼 돌림.
music과 language라서 모델 이름이 mulan임