boostcamp 4th NLP Final Project :
영상 콘텐츠 맞춤형 BGM 생성
김건우
: 모델 학습, 파이프라인 설계, Riffusion
백단익
: 모델 설계 및 분석, whisper
손용찬
: 모델 설계 및 분석, 감성분류
이재덕
: Frontend, Backend, 아키텍처, Riffusion
정석희
: Backend, 아키텍처
1인 미디어 시장 규모가 성장하고 있으며, 동영상 콘텐츠 제작의 비중이 대부분이고 이에 따라 BGM 수요 또한 증가하고 있다. 그러나, 늘어나는 동영상 수요와는 달리, 영상제작에 활용 가능한 BGM 의 경우 제한사항(저작권 분쟁과 로열티 비용 등)이 많이 존재하며 이 부분을 해결하고자 AI 기반 음악 생성 모델을 활용하여 저작권 없는 BGM을 제공하고자 한다.
동영상을 입력하면, 해당 동영상으로부터 내용을 추출하여 감성 분석 후, 콘텐츠 내용에 맞는 감성을 분류하여 이를 바탕으로 riffusion 모델을 적용하여 BGM을 생성하고자 한다.
Speech-to-Text
- Openai의 Whisper model을 사용하여 전체 발화 내용을 텍스트로 추출.
WHISPER 모델 사용 이유 :
- SPEECH RECOGNITION에서 SOTA로 사용되는 wav2vec 2.0 대비 평균적으로 55.2% 낮은 오류율이라는 우수한 성능을 가졌음.
- Any-to-English speech translation multitask 기능을 제공하기에, STT와 번역기능을 함께 사용할 수 있어 추후 영문 데이터셋 활용 가능한 장점을 가져 선택하게 됨.
Sentiment Classifier
- 전체 텍스트 내용을 알 수 있으면서 내용의 특징을 살릴 수 있도록, 텍스트 구문별로 감성 분류를 시도함.
- 전체 텍스트에 대해 구문별로 감성 분석하여 행복,슬픔,역겨움,분노,놀람,두려움, 중립 7가지 감정으로 분류함.
https://huggingface.co/j-hartmann/emotion-english-distilroberta-base
- 구문별 감성분류 후, 감정 유지기간이 임계값 보다 낮은 경우 해당 감정을 무시했으며, 무시된 감정의 앞뒤로 같은 감정일 경우 그 감정들과 이어진다고 판단하여 대체하는 후처리 과정을 진행.
- 그 결과 타임라인에 따라 안정된 감정을 파악할 수 있었고, 따라서 Sentiment Classifier 방식을 채택함.
Riffusion Model 활용 및 학습
- 리퓨전은 디퓨전 모델에 소리나 파동을 시각화하여 파악하기 위한 도구인 스펙트로그램을 학습한 모델.
- Step2에서 얻어진 감성 분류 결과를 prompt로 활용하여 그 감성과 같은 감성의 스펙트로그램을 seed image로 사용함.
- 사용자 편의를 위해 기존 영상에서 말소리를 제외한 음악이나 노이즈를 삭제하고 생성된 BGM을 합쳐서 최종 결과물을 생성함.
- Model: JD97/Riffusion_sentiment_LoRA(huggingface)
https://huggingface.co/JD97/Riffusion_sentiment_LoRA
Input(Source data) → 데이터 추출 → 다운샘플링 → 구간분할 → 전처리 → Output(Spectrogram with caption)
(1) Source data로 부터 Sentiment classifier와 유사한 label 선정 및 추출(6680개)
- Source_data: Chr0my/Epidemic_music(huggingface)
https://huggingface.co/datasets/Chr0my/Epidemic_music
- 유사한 7가지 label : angry, fear, funny, happy, quirky, sad, weird
(2) 추출한 Music file 다운샘플링(22.05khz → 8khz)
(3) 다운샘플링된 Music file 10초 구간분할(with Random sampling)
- Riffusion 모델 학습 데이터와 유사한 샘플 생성위해 10초 구간 설정
- 구간 변화에 강건한 모델 학습 위해 Random sampling 수행
(4) 전처리 수행
- STFT(Short time fourier transform) → Griffin-Lim → Mel scale
- Source data의 metadataTags, moods data 활용하여 caption 작성
(5) 최종 dataset
- gwkim22/spectro_caption_dataset(huggingface)
https://huggingface.co/datasets/gwkim22/spectro_caption_dataset
.
|-- LoRA
| |-- README.md
| |-- text_to_image_lora.py
| `-- train.sh
|-- MLOPS
| |-- README.md
| |-- front
| |-- kubernetes
| `-- serving
|-- dataset
|-- model
| |-- README.md
| |-- _interpolation.py
| |-- _sum_by_sent.py
| |-- oneway_pipeline.py
| |-- pre_to_stt.py
| |-- pretrained_models
| |-- stt_to_rif.py
| `-- utils.py
|-- project_requirements.txt
|-- riffusion
|-- whisper
`-- README.md
Ubuntu 18.04.5 LTS
CPU : Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz x 8
GPU : Tesla V100-PCIE-32GB
Python Version 3.9
# Install project_requirements.txt
$pip install -r project_requirements.txt
# Install the following additional files:
$apt-get update
$sudo apt-get install ffmpeg
$conda install pyworld -c conda-forge
$apt-get install -y libsndfile1-dev
$pip install git+https://github.com/openai/whisper.git
$pip install git+https://github.com/huggingface/diffusers
- whisper: Radford, A., Kim, J. W., Xu, T., Brockman, G., McLeavey, C., & Sutskever, I. (2022). Robust speech recognition via large-scale weak supervision. arXiv preprint arXiv:2212.04356.
- LoRA: Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., ... & Chen, W. (2021). Lora: Low-rank adaptation of large language models. arXiv preprint arXiv:2106.09685.