no image
[boostcamp] 부스트캠프 AI Tech 23주차 돌아보기
1. 잘한 것Leetcode, 백준, 프로그래머스 등 코딩 테스트 문제를 매일 풀었습니다.Audio-Language Model, LLM Knowledge Distillation에 관한 논문을 읽고 정리했습니다.ONNX에 대한 내용을 찾아보면서 파이토치 모델의 변환을 시도하고 있습니다. 2. 부족한 것fairseq에 대한 지식 부족으로 EAT 인코더 실험을 진행하지 못했습니다.현재 적용하고 있는 모델에서는 ONNX로 변환이 쉽지 않아 제대로 변환을 수행하진 못했습니다.Knowledge Distillation을 해보려고 했지만, 여기에 적용할만한 적절한 방법론을 찾지 못했습니다.3. 배운 것LoRA Config를 활용하면 데이터 타입 32비트로 적용ONNX라는 프레임워크가 딥러닝 모델의 효율성을 높이고, 배..
2025.02.07
no image
[boostcamp] 부스트캠프 AI Tech 22주차 돌아보기
1. 잘한 것Leetcode, 백준, 프로그래머스 등 코딩 테스트 문제를 매일 풀었습니다.SQL 공부 및 정리를 완료했습니다.여러 LLM backbone에 대해 실험을 진행했습니다.여러 Adapter에 대해 실험을 진행했습니다. 2. 부족한 것LLM 실험을 진행했지만, 훈련에 적은 epoch만 할애했기 때문에 좋지 못한 성능을 보였습니다.LLM 모델 중 Adapter 실험 중 제대로 동작하지 않는 것3. 배운 것LoRA에서 개선된 방식들(VB-LoRA 등)이 있는데, 유명한 LoRA보다 더 경량화가 진행되는 것으로 보입니다. (Inference Time 기준 약 20% 감소) 다른 LLM에 Adapter를 적용하기 위해서는 target modules를 정의해야 하는데, LLM마다 PEFT 진행을 위해 모..
2025.01.24
no image
[boostcamp] 부스트캠프 AI Tech 21주차 돌아보기
1. 잘한 것Leetcode, 백준, 프로그래머스 등 코딩 테스트 문제를 매일 풀었습니다.SQL 공부 및 정리를 지속하고 있습니다.SALMONN 논문 리뷰를 진행하고, 관련 내용을 공유했습니다. 프로젝트 베이스라인을 정리했습니다. 2. 부족한 것지난 주에 '시도할 것'으로 내세웠던 것을 이행하지 못했습니다.코드 이해 부족, 데이터 업로드 지연 등의 이유로 제대로 베이스라인을 돌려보지 못했습니다.처음 보는 팀원도 베이스라인을 보고 잘 이해할 수 있도록 문서화하고 싶었지만, 코드 이해 부족 및 프로젝트 크기가 생각보다 커서 제대로 수행하지 못했습니다.3. 배운 것📖 SALMONN 모델의 구조 및 동작 방식 4. 시도할 것베이스라인 실행을 통한 SALMONN 학습 방법론 익숙해지려고 합니다.LLM 모듈을 바..
2025.01.17
no image
[Review] SALMONN (오디오 - 언어 모델) 논문 리뷰
Introduction최근 LLM 연구는 언어가 아닌 다른 입력을 넣어 인체의 다른 감각적 양상(modality)을 불어넣는 방향으로 이뤄진다. 이를 통해 AI가 여러 형태의 데이터를 입력으로 이해하고 연산 값을 출력할 수 있게 된다. 이러한 방식은 Multi-modal (멀티모달)이라 불리며 연결 모듈이나 LLM 어댑터를 통해 훈련이 가능하다. 다만, 이러한 방식에는 특정 작업에 제한되는 문제가 발생한다. 특정 작업에는 잘 작동되지만 범용적으로 사용되기가 제한되는데, 이를 task over-fitting이라 하며 AI의 사용 가능성을 제한하는 요소가 된다. 따라서 많은 문제를 해결하는 AI 적용을 위해서는 훈련을 통해 학습한 것이 아닌 것을 해결하는 것이 필요한데, 이를 emergent ability라..
2025.01.13
no image
[boostcamp] 부스트캠프 AI Tech 20주차 돌아보기
1. 잘한 것Leetcode, 백준, 프로그래머스 등 코딩 테스트 문제를 매일 풀었습니다.SQL 공부 및 정리를 지속하고 있습니다.수업 및 과제를 제시간에 마무리했습니다.2. 부족한 것디퓨전 모델에 대한 이론적 지식 및 구현에 대해 충분히 이해하지 못했습니다.과제의 결과물 퀄리티가 많이 떨어집니다..3. 배운 것📖 오디오 처리 라이브러리(librosa, torchaudio)📖 오디오 데이터 처리 개요📖 이미지 생성 관련 최신 트렌드 정리4. 시도할 것이력서 피드백이 온 것을 바탕으로 수정을 해서 제출할 계획입니다.Transformer에 대한 추가적인 이해가 필요할 것으로 보여
2025.01.09
[CV] 이미지 생성 관련 트렌드 기본 정리 | 2023~204년 상반기까지
기본 디퓨전 모델여기서 기본 디퓨전 모델은 별도의 조건이 주어지지 않고, 이미지를 생성하는 모델을 말한다.DDPM (Denoising Diffusion Probabilistic Model)DDPM은 점진적인 노이즈 추가와 제거 과정을 통해 이미지를 생성한다. 이는 마르코프 체인 기반의 확률적 모델링을 활용한다. 순전파에서는 원본 이미지에 점진적으로 가우시안 노이즈를 추가하고, 역전파에서는 노이즈를 단계적으로 제거하면서 이미지를 복원한다. 이러한 훈련은 U-Net 구조에서 이뤄진다.Improved DDPMDDPM에서 노이즈 스케줄링, 가우시안 전이 모델링, 목적함수를 개선하여 나온 모델이다. 이를 통해 샘플링 속도와 학습 효율성을 개선할 수 있었다.Latent Diffusion Models (LDM)LDM..
2025.01.08
no image
[CV] SAM Demo 활용해보기 | 위성사진 탐색, 동영상 객체 트래킹
SAMSegment Anything Model(SAM)은 Meta 인공지능 연구소(FAIR)에서 연구개발을 하고 있는 대표적인 이미지 분할 모델로 별도의 학습 없이도 이미지 객체를 분할해주는 Zero-shot 모델이다.  Demo는 SAM & SAM2 모델의 Demo는 여기서 확인할 수 있다. SAM : 이미지에 적용SAM2 : 동영상에 적용 실제로 가져다가 쓰기 위해서는 GitHub에서 안내해주는 방법에 따라 클론해서 사용할 수 있으며, 여기서는 위성 이미지와 스포츠 영상에 테스트하였다.  적용 1. 위성 이미지위성 이미지를 활용하면 지상의 물체 및 활동을 포착할 수 있다. 다만, 고도에 따라 물체의 크기가 달라져서 포착하지 못하는 경우도 발생하기 때문에 적절한 고도를 설정하는 것이 필요하다. 예를 들..
2025.01.01
no image
효율적인 딥러닝 학습을 위한 병렬화 기본 개념 정리 | Data, Tensor, Pipeline Parallelism
주요 개념병렬화(Parallelism)는 모델이나 데이터를 여러 개의 GPU로 분산시켜 큰 모델도 학습이 가능하도록 하는 것입니다. 이런 방법론의 필요성은 딥러닝 모델이 커짐에 따라 하나의 모델을 GPU에 넣을 수 없는 상황이 오고, 이를 학습시키기 위한 데이터들의 양이 방대해졌기 때문입니다.딥러닝에서 병렬화의 방식은 크게 두 가지가 있습니다. 하나는 데이터를 병렬화하는 것이고, 또 다른 하나는 모델의 병렬화입니다. 두 방식은 목적이 서로 다른데, 전자는 데이터를 나눔으로써 학습 속도를 높이기 위함이고 후자는 현존하는 GPU에 올릴 수 없는 초거대 모델의 학습을 위함입니다.먼저, 데이터의 병렬화는 큰 데이터를 여러 GPU에 분할하여 동시에 처리합니다. 동일한 모델로 처리해야 하기 때문에 모든 GPU로 모..
2024.12.30
no image
[boostcamp] 부스트캠프 AI Tech 19주차 돌아보기
1. 잘한 것수업을 모두 듣고 배운 내용들을 바로 정리했습니다.Leetcode, 백준 등 코딩 테스트 문제를 매일 풀었습니다.기업 해커톤을 위한 자료 작성을 마무리했습니다. 2. 부족한 것DACON 시계열 이상치 탐지에 대한 타 팀 솔루션에 대해 살펴보지 못했습니다.과제를 모두 마무리하지는 못했습니다.이력서의 완성도가 떨어지는 것을 확인했습니다.3. 배운 것📖 GitHub Actions로 자동화하기📖 Pruning📖 Knowledge Distillation📖 Quantization📖 Adapter, LoRA4. 시도할 것DACON 시계열 이상치 탐지에 대한 타 팀 솔루션에 대해 살펴볼 예정입니다.최신 AI 모델을 적용해 멘토링 과제를 수행할 예정입니다.이력서 개선 및 포트폴리오를 위한 프로젝트 ..
2024.12.27
반응형

1. 잘한 것

  • Leetcode, 백준, 프로그래머스 등 코딩 테스트 문제를 매일 풀었습니다.
  • Audio-Language Model, LLM Knowledge Distillation에 관한 논문을 읽고 정리했습니다.
  • ONNX에 대한 내용을 찾아보면서 파이토치 모델의 변환을 시도하고 있습니다.

2. 부족한 것

  • fairseq에 대한 지식 부족으로 EAT 인코더 실험을 진행하지 못했습니다.
  • 현재 적용하고 있는 모델에서는 ONNX로 변환이 쉽지 않아 제대로 변환을 수행하진 못했습니다.
  • Knowledge Distillation을 해보려고 했지만, 여기에 적용할만한 적절한 방법론을 찾지 못했습니다.

3. 배운 것

  • LoRA Config를 활용하면 데이터 타입 32비트로 적용
  • ONNX라는 프레임워크가 딥러닝 모델의 효율성을 높이고, 배포를 위해 필요

4. 시도할 것

  • 컴포넌트별 ONNX 변환 시도
  • 부스트캠프에서 수행했던 내용들을 정리
  • 정리한 내용들을 바탕으로 기업 지원
반응형
반응형

1. 잘한 것

  • Leetcode, 백준, 프로그래머스 등 코딩 테스트 문제를 매일 풀었습니다.
  • SQL 공부 및 정리를 완료했습니다.
  • 여러 LLM backbone에 대해 실험을 진행했습니다.
  • 여러 Adapter에 대해 실험을 진행했습니다.

2. 부족한 것

  • LLM 실험을 진행했지만, 훈련에 적은 epoch만 할애했기 때문에 좋지 못한 성능을 보였습니다.
  • LLM 모델 중
  • Adapter 실험 중 제대로 동작하지 않는 것

3. 배운 것

  • LoRA에서 개선된 방식들(VB-LoRA 등)이 있는데, 유명한 LoRA보다 더 경량화가 진행되는 것으로 보입니다. (Inference Time 기준 약 20% 감소)
  • 다른 LLM에 Adapter를 적용하기 위해서는 target modules를 정의해야 하는데, LLM마다 PEFT 진행을 위해 모델 구조를 알아야 합니다.

4. 시도할 것

  • AAC 분야 가장 좋은 성능을 보인 최신 모델인 SLAM-AAC의 인코더를 활용해볼 예정입니다.
  • 잘못 생성된 텍스트를 LLM으로 후처리할 수 있는 방법에 대해 탐구해볼 예정입니다.
  • Knowledge Distillation으로 더 효율적인 학습과 경량화가 가능할지 방법을 찾아보고 시도해볼 예정입니다.
반응형
반응형

1. 잘한 것

  • Leetcode, 백준, 프로그래머스 등 코딩 테스트 문제를 매일 풀었습니다.
  • SQL 공부 및 정리를 지속하고 있습니다.
  • SALMONN 논문 리뷰를 진행하고, 관련 내용을 공유했습니다.
  • 프로젝트 베이스라인을 정리했습니다.

2. 부족한 것

  • 지난 주에 '시도할 것'으로 내세웠던 것을 이행하지 못했습니다.
  • 코드 이해 부족, 데이터 업로드 지연 등의 이유로 제대로 베이스라인을 돌려보지 못했습니다.
  • 처음 보는 팀원도 베이스라인을 보고 잘 이해할 수 있도록 문서화하고 싶었지만, 코드 이해 부족 및 프로젝트 크기가 생각보다 커서 제대로 수행하지 못했습니다.

3. 배운 것

📖 SALMONN 모델의 구조 및 동작 방식

4. 시도할 것

  • 베이스라인 실행을 통한 SALMONN 학습 방법론 익숙해지려고 합니다.
  • LLM 모듈을 바꿔서 실험을 진행해볼 계획입니다.
  • Visual Language Model에 대해 살펴보고 구조를 개선할 수 있을지 검토할 계획입니다.
반응형
반응형

Introduction

최근 LLM 연구는 언어가 아닌 다른 입력을 넣어 인체의 다른 감각적 양상(modality)을 불어넣는 방향으로 이뤄진다. 이를 통해 AI가 여러 형태의 데이터를 입력으로 이해하고 연산 값을 출력할 수 있게 된다. 이러한 방식은 Multi-modal (멀티모달)이라 불리며 연결 모듈이나 LLM 어댑터를 통해 훈련이 가능하다.

 

다만, 이러한 방식에는 특정 작업에 제한되는 문제가 발생한다. 특정 작업에는 잘 작동되지만 범용적으로 사용되기가 제한되는데, 이를 task over-fitting이라 하며 AI의 사용 가능성을 제한하는 요소가 된다. 따라서 많은 문제를 해결하는 AI 적용을 위해서는 훈련을 통해 학습한 것이 아닌 것을 해결하는 것이 필요한데, 이를 emergent ability라고 한다.

 

SALMONN(Speech Audio Language Music Open Neural Network)은 사전학습된 LLM과 오디오 인코더를 통합한 멀티모달 모델이다. LLM이 오디오 입력을 이해하고 처리하도록 도와주면서 새로운 능력인 emergent ability를 나타낼 수 있도록 훈련 방법을 고안했다. 논문에 따르면, 일반적인 오디오 - 텍스트 문제를 해결할 수 있는 최초로 시도된 모델이라고 한다. [각주:1]

SALMONN [1]



Structure

SALMONN은 크게 다음과 같은 요소들로 구성된다.

 

  • 오디오 입력 데이터를 처리하는 인코더
  • 인코더 출력값을 LLM에 입력할 수 있도록 토큰 변환
  • LLM을 통한 출력

 

각 구성 요소별로 아래에서 살펴보자.

 

Dual Auditory Encoders

먼저 음성 데이터를 처리가능하게끔 인코딩해야 하는데, SALMONN에서는 두 개의 인코더(Whisper, BEATs)로 구성된다. 두 개를 도입한 이유는 일반적인 오디오 데이터를 처리하기 위해 스피치와 스피치가 아닌 오디오를 처리할 수 있는 두 종류의 인코더를 활용한다. 인코더는 음성 데이터를 인코딩하는 역할로 직접적인 학습을 수행하지 않는다.

 

Whisper는 스피치 인식 및 번역을 위해 학습된 모델이고, BEATs는 스피치가 아닌 오디오 정보 추출을 가능하도록 학습된 모델이다. 스피치와 다르게 Mel spectogram 을 입력으로 받아 처리를 하게 된다. 두 인코더의 출력은 50 Hz로 동일하기 때문에 총 T개의 프레임으로 합쳐(concatenate)준다.

 

Window-level Q-Former

합쳐진 인코더 출력을 LLM에 입력하기 위한 토큰으로 변환하기 위해 Q-Former를 활용한다. Q-Former는 이미지 인코딩에서 텍스트와 관련된 정보를 추출하고 LLM에 의해 해석 가능하도록 훈련된다. [각주:2] 

 

T개의 인코더 출력 이미지를 N개의 고정된 숫자 쿼리로 변환한다. 여기서 음성은 가변적인 크기를 갖기 때문에 L 크기의 윈도우로 분할하게 되고, 마지막 윈도우는 제로 패딩 처리를 한다. 이를 식으로 나타내면 아래와 같다.

 

LLM & LoRA

SALMONN에서는 LLaMA에서 파생된 언어모델 중 하나인 Vicuna를 활용한다. 그리고 파라미터 효율적인 학습을 위해 LoRA 기법을 활용한다.



Training & Evaluation

Training

먼저, 음성 인식 및 오디오 캡션 생성 데이터로 Q-Former와 LoRA를 사전학습한다. 그리고 본격적인 훈련을 위해 Audio-Text Instruction 쌍으로 구성된 학습을 수행한다. (이를 Instruction Tuning으로 지칭한다) 마지막으로 더 길고 다양한 응답을 생성하기 위해 Zero-shot Instruction(Activation Tuning) 훈련을 진행한다. 이 논문에서 제안한 방법은 스토리텔링이나 질의응답 데이터로 추가 학습을 진행하거나, LoRA의 Scaling factor를 감소시키는 방법이 있다.

 

Evaluation

해당 논문에서는 일반적인 오디오 문제 해결을 평가하기 위해 총 3가지 레벨로 구분한 평가를 제안한다. 우선 Instruction Tuning에서 학습한 문제들을 평가한다. 두번째는 훈련하지 않은 일반적인 NLP 문제들(예를 들어, 키워드 추출, 질의응답, 번역 등)을 평가한다. 마지막으로 좀 더 일반적인 해결 능력을 평가하기 위해 오디오 기반 스토리텔링, 스피치-오디오 추론 등 어려운 작업으로 구성한다.



결론

SALMONN은 일반적인 오디오 문제(Generic hearing)를 처리할 수 있는 모델로 구조를 제안했을 뿐 아니라, 이를 훈련하고 평가하는 방법까지 제안하였다. 특히, 여기서 제안한 Activiation Tuning은 emergent abilities를 갖기 위해서 필요했고, 단순히 LoRA scaling factor를 줄이는 방법만으로도 성능 향상이 나타나는 것을 확인했다.

 

👆 PPT로 살펴보기 

 

참고자료

반응형
반응형

1. 잘한 것

  • Leetcode, 백준, 프로그래머스 등 코딩 테스트 문제를 매일 풀었습니다.
  • SQL 공부 및 정리를 지속하고 있습니다.
  • 수업 및 과제를 제시간에 마무리했습니다.

2. 부족한 것

  • 디퓨전 모델에 대한 이론적 지식 및 구현에 대해 충분히 이해하지 못했습니다.
  • 과제의 결과물 퀄리티가 많이 떨어집니다..

3. 배운 것

📖 오디오 처리 라이브러리(librosa, torchaudio)
📖 오디오 데이터 처리 개요
📖 이미지 생성 관련 최신 트렌드 정리

4. 시도할 것

  • 이력서 피드백이 온 것을 바탕으로 수정을 해서 제출할 계획입니다.
  • Transformer에 대한 추가적인 이해가 필요할 것으로 보여
반응형
반응형

기본 디퓨전 모델

여기서 기본 디퓨전 모델은 별도의 조건이 주어지지 않고, 이미지를 생성하는 모델을 말한다.

DDPM (Denoising Diffusion Probabilistic Model)

DDPM은 점진적인 노이즈 추가와 제거 과정을 통해 이미지를 생성한다. 이는 마르코프 체인 기반의 확률적 모델링을 활용한다. 순전파에서는 원본 이미지에 점진적으로 가우시안 노이즈를 추가하고, 역전파에서는 노이즈를 단계적으로 제거하면서 이미지를 복원한다. 이러한 훈련은 U-Net 구조에서 이뤄진다.

Improved DDPM

DDPM에서 노이즈 스케줄링, 가우시안 전이 모델링, 목적함수를 개선하여 나온 모델이다. 이를 통해 샘플링 속도와 학습 효율성을 개선할 수 있었다.

Latent Diffusion Models (LDM)

LDM은 오토인코더를 통해 차원을 축소하고, 저차원의 잠재공간에서 확산 활동이 수행된다. 이를 통해 연산능력에 대한 요구사항이 줄어들고, 더 빠른 학습 및 추론이 가능해졌다. 이로 인해 현재 많이 사용되는 기술인 Stable Diffusion의 기반이 되는 기술이다.


Fast Sampling

여전히 디퓨전 모델은 속도에 관한 문제가 있었고, 이를 극복하기 위해 제안된 것이 샘플링의 속도를 빠르게 하기 위한 노력이 있다.

DDIM (Denoising Diffusion Implicit Models)

DDIM은 이전 이벤트에 의해서 확률이 의존하는 마르코프 프로세스가 아닌 방법으로 샘플링을 진행한다. 이를 통해 샘플링의 속도를 빠르게 하고, 적은 과정만으로도 이미지를 생성할 수 있게 된다.

Progressive Distillation

증류(Distillation)이라는 단어가 있는 것처럼, Teacher - Student 모델을 활용하는 지식 증류에서 방법을 가져와 샘플링 단계를 줄일 수 있다. 먼저 모든 과정으로 학습을 진행하고, 그 다음에는 지식 증류를 수행한다. 이를 반복하면서 전체 스텝을 감소시키고 추론 속도를 향상 시킨다.

Consistency Models

추계 미분 방정식(Stochastic Differential Equation, SDE)을 상미분방정식(Ordinary Differential Equation, ODE)으로 바꾸는 방식이다. SDE를 푸는 것보다는 ODE를 푸는 수치해석적인 방법으로 접근하여 속도를 높이고자 시도하였다.


Text-to-Image Synthesis

쓸만한 이미지를 만들어내는 일은 그동안 예술적인 감각이나 훈련을 받은 사람의 영역이었지만, 이미지 생성 모델이 들어오면서 텍스트만으로 이미지를 생성할 수 있게 되었다.

DALL-E 2

DALL-E 2는 텍스트를 이미지 임베딩으로 바꾸는 Prior와 이미지 임베딩을 실제 이미지로 생성하는 Decoder 두가지 생성 과정을 거친다.

Stable Diffusion

많이 언급되는 모델인 Stable Diffsuion 모델은 CLIP의 잠재 공간에서 확산을 진행하고, VAE를 통해 이미지를 압축하는 구조를 채택해 계층적으로 생성한다.

Imagen

CLIP 대신에 T5 텍스트 인코더를 사용하는 방식으로 생성 크기가 점진적으로 커지는 캐스케이드 방식(64 x 64 ➡️ 256 x 256 ➡️ 1024 x 1024)으로 디퓨전을 실행한다.


Image-to-Image Translation

Image-to-Image Translation은 이미지를 입력으로 다른 이미지를 생성하는 기술이다. 특정 스타일로 변형하는 Stylization, 해상도를 높이는 Super-Resolution 등의 기술이 여기에 속한다.

SDEdit

SDEdit은 대략적인 이미지 (예를 들어, 형태만 갖춘 크로키 같은)에서 정밀한 이미지를 생성할 수 있다. 입력 이미지에서 노이즈를 부분적으로 생성하고 추계 미분방정식을 통한 노이즈를 제거하는 과정을 거치면서 원본의 이미지의 구조는 유지하되, 세부적인 내용만 수정하는 것이 가능하다.

ControlNet

기존 텍스트-이미지 모델에 프롬프팅을 통한 추가적인 제어 기능을 부여해 조금 더 유연하게 이미지를 생성할 수 있도록 한 기술이다. 다른 이미지 해석 문제처럼 엣지, 포즈, Depth map, 이미지 분할 등을 통해 이미지의 구조를 기반으로 텍스트 임베딩을 더해 이미지를 생성한다. 여기서 특징적인 부분은 Zero Convolution을 통해 모델을 확장을 시도했다는 점이다.


Image Customization

Textual inversion

새로운 의미나 개념을 나타내는 토큰(S*)를 학습해 텍스트 임베딩 공간에서 이미지를 생성하는 기술이다. 비교적 적은 수의 이미지로도 학습이 가능하다는 이점이 있다.

DreamBooth

DreamBooth는 특별한 식별자와 클래스의 단어 쌍을 활용하여 특정 주제에 대한 재현과 생성을 가능하게 했다. 클래스 보존을 위해 prior-preservation loss를 도입하였다.


Erasing Concept

생성 이미지는 간혹 저작권이나 적절하지 않은 표현이 발생할 수 있다. 이런 경우에 제거해주는 과정에 대한 연구도 이뤄지고 있다.하나는 학습된 디퓨전 모델에서 특정 개념을 선택적으로 제거하는 기술이다. 제거하고자 하는 개념의 네거티브 샘플을 수집하고, 개념별 마스크를 생성하여 불필요한 개념을 제거하는 것이다. 또 다른 하나는 Regularization을 도입해 전체 모델을 통합적으로 편집하도록 하는 방법이다.


Video Generation

Video Diffusion Model (VDM)

VDM은 이미지 디퓨전 모델에서 비디오로 확장된 버전이다. 주요 변화는 3D U-Net 구조를 사용했고, 시공간에 대한 어텐션 메커니즘을 채택했다.

Video Probabilistic Diffusion Model (VPDM)

VPDM은 압축된 잠재 공간에서 비디오를 생성해 메모리 효율적으로 이뤄진다는 특징이 있다. 이미지보다 복잡해진 상황에서 NeRF와 같이 압축적으로 정보를 표현하는 방식을 도입해 디퓨전이 가능하도록 했다.

Align your Latents: High-Resolution Video Synthesis

VPDM에서 더 나아가 정렬된 잠재 표현을 사용해 비디오를 생성하는 방식이다. 이는 비디오는 이미지(프레임)이 연속적으로 이뤄진 집합체고, 인접한(시간이 거의 비슷한) 장면끼리는 유사하다는 사실을 활용해 높은 시간적 일관성을 달성했다.


3D

DreamFusion

DreamFusion은 텍스트 프롬프트로부터 3D를 생성하는 모델이다. Score Distillation Sampling (SDS)을 사용해 학습하고, NeRF 기반으로 3D를 표현한다.

Zero-1-to-3

하나의 단면인 이미지를 보고 3D 모델을 생성하는 방식이다. 하나의 이미지만 있으면 되기 때문에 제로샷 방식이라고 할 수 있다.

Consistent 1-to-3

위의 Zero 1-to-3에서 더 나아가 프레임 단위로 학습되는 것을 연속성이 있게 만들 수 있도록 수정된 모델이다. Epipolar guided attention과 multi-view attention을 조합하여 사용한다.

참고자료

  1. 유재준. Recent Applications in Diffusion Models. 부스트캠프.
반응형
반응형

SAM

Segment Anything Model(SAM)은 Meta 인공지능 연구소(FAIR)에서 연구개발을 하고 있는 대표적인 이미지 분할 모델로 별도의 학습 없이도 이미지 객체를 분할해주는 Zero-shot 모델이다.  Demo는 SAM & SAM2 모델의 Demo는 여기서 확인할 수 있다.

 

  • SAM : 이미지에 적용
  • SAM2 : 동영상에 적용

 

실제로 가져다가 쓰기 위해서는 GitHub에서 안내해주는 방법에 따라 클론해서 사용할 수 있으며, 여기서는 위성 이미지와 스포츠 영상에 테스트하였다.  

적용 1. 위성 이미지

위성 이미지를 활용하면 지상의 물체 및 활동을 포착할 수 있다. 다만, 고도에 따라 물체의 크기가 달라져서 포착하지 못하는 경우도 발생하기 때문에 적절한 고도를 설정하는 것이 필요하다. 예를 들어, 154kV 보다 4배까지 크게 설계될 수 있는 365kV 송전탑은 100m 고도에서도 충분히 탐지하지만, 154kV 송전탑은 대략 80m는 되어야만 적절히 이미지를 분할한다.

지상 80m에서 바라본 지표면 (154kV 송전탑 포함)

 

지상 100m에서 바라본 365kV 송전탑

 

여러 이미지들을 슬라이딩 윈도우 방식으로 탐색하고 찾은 객체들을 GeoJSON이나 GeoPandas 형태로 저장해 특정 지도 GIS 파일을 만드는 프로젝트를 시도해볼 수 있을 것 같다. 

 

적용 2. 스포츠 

축구의 세트피스 상황(코너킥)에서 특정 선수들의 움직임을 추적할 수도 있다. 이러한 기술은 특정 상황에서 움직임을 분석하는데 요긴하게 사용 가능할 것으로 보인다.

 

 

 

반응형
반응형

주요 개념

병렬화(Parallelism)는 모델이나 데이터를 여러 개의 GPU로 분산시켜 큰 모델도 학습이 가능하도록 하는 것입니다. 이런 방법론의 필요성은 딥러닝 모델이 커짐에 따라 하나의 모델을 GPU에 넣을 수 없는 상황이 오고, 이를 학습시키기 위한 데이터들의 양이 방대해졌기 때문입니다.



딥러닝에서 병렬화의 방식은 크게 두 가지가 있습니다. 하나는 데이터를 병렬화하는 것이고, 또 다른 하나는 모델의 병렬화입니다. 두 방식은 목적이 서로 다른데, 전자는 데이터를 나눔으로써 학습 속도를 높이기 위함이고 후자는 현존하는 GPU에 올릴 수 없는 초거대 모델의 학습을 위함입니다.



먼저, 데이터의 병렬화는 큰 데이터를 여러 GPU에 분할하여 동시에 처리합니다. 동일한 모델로 처리해야 하기 때문에 모든 GPU로 모델을 복제해야 하고, GPU에서 학습 과정을 통해 나온 결과를 복제된 모델에 동일하게 업데이트 해주는 과정이 필요합니다. (만약 그렇지 않다면... 나눈 데이터로 각자 학습한 서로 다른 모델이 나오는 불상사가 나오겠지요) 그렇기 때문에 메모리 사용량이 증가하고, 동일하게 업데이트 해주는 방법을 고민할 필요가 있습니다.



다음으로 모델의 병렬화는 큰 모델을 여러 GPU로 분할하여 대형 모델 처리합니다. 여기서 문제는 '모델을 어떻게 나눌 것인가'인데, 생각해볼 수 있는 것은 가장 직관적인 모델을 구조(층) 단위로 분할하여 GPU에 할당하는 Pipeline Parallelism과 연산 단위로 나누는 Tensor Parallelism이 있습니다. 모델 병렬화는 하나의 모델로 동작을 해야하는 만큼 다른 GPU로부터 결과값을 이어받아야 하기 때문에 GPU 통신이 필요하고 이 과정에서 오버헤드로 인한 계산 부하 가능성을 고려해야 합니다.

데이터 병렬화

기본 방법

데이터 병렬화를 위해서는 크게 '초기화' - 'Forward' - 'Backward'로 딥러닝의 일반적인 학습 방법에 맞춰 과정이 진행되어야 합니다. 여기서 전체 모델을 뿌리고 결과를 취합하는 컨트롤 타워인 Master GPU가 존재합니다. 우선, 초기화 단계에서는 다음과 같은 일들이 수행되어야 합니다.

 

  • 데이터셋을 미니배치 단위로 나눔 (GPU 개수에 맞춰서)
  • Master GPU가 각 GPU에 모델 전달 (동일한 가중치)

그 다음 순전파 과정 입니다. Forward 과정에서는 각 GPU 할당 받은 데이터에 대한 각 연산을 병렬적으로 수행합니다.

 

  • 각 GPU는 전달받은 데이터의 logit 계산
  • Master GPU가 모든 logit 취합
  • Master GPU가 전체 logit에 대한 loss 계산

마지막으로 역전파 입니다. Backward에서는 각 GPU에서 계산된 gradient를 하나의 최종 gradient로 합치고, 마스터 노드 병합 및 모델 파라미터 업데이트 수행합니다.

 

  • Master GPU는 계산한 loss를 각 GPU 전송
  • 각 GPU에서 그래디언트 계산
  • Master GPU가 모든 그래디언트 취합
  • Master GPU에서 모든 가중치 업데이트 ➡️ 초기화 과정

개선 방법 : DDP

하지만, 위의 방법은 Master GPU가 할 일이 많아서 병목이 필연적으로 발생합니다. 따라서 이를 해결하기 위해 등장한 것이 분산된 데이터 병렬화 Distributed Data Parallelism (DDP) 입니다. DDP도 기본적인 데이터 병렬화와 동일하게 초기화 - Forward - Backward 과정을 거칩니다. 초기화의 경우 위와 동일하게 모든 모델을 GPU에 복제하고, 데이터셋을 미니배치 단위로 나누어 할당합니다.



다음으로 Forward입니다. 기존 과정과 다른 점은 loss를 계산하는 것이 하나의 Master GPU가 아니라 각 GPU마다 계산된다는 점입니다.

 

  • 데이터가 모든 GPU로 분산
  • 모든 GPU에는 동일한 모델 복제
  • GPU마다 데이터와 복제된 모델을 통해 독립적으로 logit 계산
  • GPU마다 계산된 logit으로 loss 계산

마지막으로 Backward 입니다. 여러 GPU에 흩어져있는 데이터를 주고받기 위한 방법으로 AllReduce 연산을 활용합니다.

 

  • GPU마다 그래디언트 계산
  • GPU마다 그래디언트를 AllReduce 연산으로 평균 그래디언트를 구함 (모든 GPU는 같은 평균 그래디언트 동기화)
  • GPU마다 평균 그래디언트로 업데이트 진행

텐서 병렬화

텐서 병렬화(Tensor Parellelism)은 행렬 또는 텐서 연산이 행/열을 따라 나누더라도 동일하게 연산이 유지된다는 점에서 고안된 방법입니다. 텐서 연산을 여러 차원의 슬라이스로 나눠 GPU에 할당해서 처리합니다.

 

Tensor Parallelsim [2]

 

텐서를 쪼개는 방향에 따라 세로(Column-wise)와 가로(Row-wise)로 구분되며, 각각 처리하는 방식은 조금 다릅니다. 먼저 Column-wise는 Input 행렬이 주어지면 각 GPU는 행렬의 열 부분을 나눠서 GPU의 output 값들의 열 부분만 계산합니다. 순전파 과정에서 GPU의 output을 이어붙여 하나의 output 행렬 완성하고, 역전파 과정에서 각 GPU의 열단위 그래디언트를 모든 GPU에 동일하게 공유하는 방식으로 연산이 구성됩니다.



반면, Row-wise는 Input 행렬이 주어지면 각 GPU는 행렬의 행 부분을 나눠서 계산합니다. 순전파 과정에서 GPU의 output을 합산해여 하나의 output 행렬 완성하고, 역전파 과정에서 각 GPU의 행단위 그래디언트를 이어붙여 전체 그래디언트를 형성합니다. 같은 듯 조금 다른데, 이는 행렬의 연산을 생각해보면 떠올릴 수 있습니다.

파이프라인 병렬화

파이프라인 병렬화는 모델을 여러 층을 스테이지 단위로 나눠 GPU에 분배하고 데이터들을 나눠 순차적으로 넣어주는 방법입니다. 여기서 스테이지 마다 연산량의 차이가 있는 경우 대기시간(pipeline bubble)이 발생하게 되는데, 이를 최소화할 수 있도록 메커니즘이 구성됩니다. 일반적인 파이프라인 수행 방법은 아래와 같습니다.

 

1) 배치를 더 작은 단위인 마이크로 배치로 분할합니다.
2) Forward는 첫 스테이지 연산이 완료되면 그 다음으로 전달, 두번째 미니 배치는 다시 첫번째로 주입하면서 순차적으로 진행합니다.
3) Backward는 스테이지에 들어간 역순으로 그래디언트가 모델 업데이트합니다.

 

여기서 마이크로 배치로 쪼개는 규모를 줄일수록 대기시간 감소할 수 있습니다만, 너무 많이 줄일 경우 데이터를 전달하는 시간이 증가할 수 있으므로 최적의 나누는 분할 수를 찾을 필요가 있습니다.



추가적으로 Forward와 Backward를 실행하는 시기에 따라 방법론이 분화될 수 있습니다. Synchronous pipeline은 Forward가 끝나기 전에는 Backward 연산이 시작되지 않도록 하고 최종 역전파가 마무리된 후 모델을 한번에 업데이트 합니다. 반면, Asynchronous pipeline : Forward와 Backward를 번갈아가면서 실행하는 방법으로 약간의 bubble이 생길 수 있지만, 전체적인 forward와 backward의 효율을 높일 수 있습니다.

참고자료

[1] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.
[2] Huggingface

반응형
반응형

1. 잘한 것

  • 수업을 모두 듣고 배운 내용들을 바로 정리했습니다.
  • Leetcode, 백준 등 코딩 테스트 문제를 매일 풀었습니다.
  • 기업 해커톤을 위한 자료 작성을 마무리했습니다.

2. 부족한 것

  • DACON 시계열 이상치 탐지에 대한 타 팀 솔루션에 대해 살펴보지 못했습니다.
  • 과제를 모두 마무리하지는 못했습니다.
  • 이력서의 완성도가 떨어지는 것을 확인했습니다.

3. 배운 것

📖 GitHub Actions로 자동화하기
📖 Pruning
📖 Knowledge Distillation
📖 Quantization
📖 Adapter, LoRA

4. 시도할 것

  • DACON 시계열 이상치 탐지에 대한 타 팀 솔루션에 대해 살펴볼 예정입니다.
  • 최신 AI 모델을 적용해 멘토링 과제를 수행할 예정입니다.
  • 이력서 개선 및 포트폴리오를 위한 프로젝트 수행 내역 정리를 진행할 예정입니다.
반응형