본문 바로가기
paper

EDGE: 코드 구현

by 기록 주인 2024. 9. 21.
**참고**
#wifi가 끊기는 상황에서 코드 진행중일때 계속 진행하는 법
#tmux 설치 방법
: Conda environment 에서 conda install tmux

#tmux사용하는 방법
: 터미널 ( tmux 밖에서) tmux new -s [세션이름]
그리고 티먹스에서 나오고 싶으면 ctrl + b 누르고 1초 뒤에 d

#다시 해당 세션에 접속하는 법
tmux attach -t [아까 만든 세션이름]

#아까 만든 세션 이름을 잊은 경우
tmux ls 를 tmux 밖에서 친다 -> 세션 리스트 확인

 

Requirements
# root사용자 경고 무시: 어차피 패키지 충돌 일어날 이유가 없기에 그냥 ㄱㄱ
pip install --root-user-action=ignore 

#conda 초기화
/root/miniconda3/bin/conda init

#bashrc 다시 로드 
source ~/.bashrc

#conda가상환경 활성화
conda activate base

#CUDA(GPU 병렬처리) 12.4을 사용할 수 있도록 PyTorch 설치
conda install pytorch torchvision torchaudio cudatoolkit=12.1 -c pytorch

#필수 라이브러리 설치 (jukemirlib, pytorch3d, accelerate)
#jukemirlib 설치 : Jukebox와 같은 음악 모델과의 통합을 지원하고, 음악 관련 특징 추출이나 데이터 전처리작업에 도움을 준다. 
pip install git+https://github.com/rodrigo-castellon/jukemirlib.git

# pytorch3d 설치 
pip install torch torchvision
pip install "git+https://github.com/facebookresearch/pytorch3d.git"

#accelerate 설치 : Hugging Face에서 제공하는 툴로, 모델 학습 속도를 높이고 여러 장치(GPU, TPU 등)에서 분산 학습을 쉽게 설정할 수 있게 돕는 라이브러리
pip install accelerate
accelerate config

#wine설치: Linux, macOS 같은 비윈도우 운영체제에서 Windows 프로그램을 실행할 수 있게 해주는 호환성 계층

Getting started
#Jupyter Notebook을 통해 demo.ipynb파일을 실행
jupyter notebook demo.ipynb

#커스텀 음악을 사용하여 모델을 테스트(예: custom_music 폴더에 있는 음악 파일로 테스트)
python test.py --music_dir custom_music/

#평가 및 출력 시각화 (Optional)
# 물리적 발 접촉(PFC) 점수 평가
python eval/eval_pfc.py

# 3D 렌더링을 위해 FBX 파일로 변환
python SMPL-to-FBX/Convert.py --input_dir SMPL-to-FBX/smpl_samples/ --output_dir SMPL-to-FBX/fbx_out

 


demo.ipynb 내부 test.py 파일 분석

 

from data.audio_extraction.baseline_features import extract as baseline_extract
from data.audio_extraction.jukebox_features import extract as juke_extract

 

(1) baseline_extract함수: 리듬/템포

baseline_extract는 data/audio_extraction/baseline_features.py파일에 정의된 extract함수를 불러온다. 일반적으로 baseline feature는 음향 신호의 기본적인 특성, 예를 들어 스펙트로그램, 음조, 리듬 등의 특징을 포함할 수 있다.

 

(2) juke_extract함수: 감정/스타일 등 고차원적 정보

juke_extract는 data/audio_extraction/jukebox_features.py파일에 정의된 extract함수를 불러온다.

Jukebox는 음악 생성 AI로, 복잡한 음악 신호를 매우 정밀하게 모델링하고 분석할 수 있는 특징을 추출하는 것으로 알려져 있다. juke_extract는 일반적인 오디오 특징보다 더 심화된, 예를 들어 음악적 구성, 장르, 악기 등의 고차원적인 정보까지 포함할 수 있다.

 

 

1. 음악 파일에서 특징 추출

feature_func = juke_extract if opt.feature_type == "jukebox" else baseline_extract

 

코드에서 feature_func는 baseline_extract 또는 juke_extract를 사용해 오디오 특징을 추출한다.

 

 

2. 음악 슬라이스

print(f"Slicing {wav_file}")
slice_audio(wav_file, 2.5, 5.0, dirname)

 

음악 파일을 2.5초 단위로 슬라이스하는 부분이다. slice_audio 함수를 호출하여 오디오 파일을 나눈다.

 

 

3. 모델을 사용해 춤 생성

model = EDGE(opt.feature_type, opt.checkpoint)
model.eval()

 

추출된 오디오 특징을 EDGE 모델에 입력하여 춤을 생성하는 부분이다. 모델은 opt.checkpoint에 저장된 가중치를 사용해 춤을 생성한다.

 

 

4. 옵션에 따라 처리 방식 선택

if opt.use_cached_features:
    print("Using precomputed features")
else:
    print("Computing features for input music")

 

코드에서는 opt.use_cached_features, opt.cache_features, opt.save_motions 등의 옵션을 통해 처리 방식을 선택한다. 이를 통해 캐시된 특징을 사용할지, 새로운 특징을 계산할지, 모션 파일을 저장할지 등을 결정한다.

 

 

5. 결과 저장

model.render_sample(
    data_tuple, "test", opt.render_dir, render_count=-1, fk_out=fk_out, render=not opt.no_render
)

 

생성된 춤 동작을 지정된 디렉토리에 저장하고, 필요하면 모션 파일로도 저장하는 부분이다. render_sample 함수가 그 역할을 한다.

 


 

'paper' 카테고리의 다른 글

AI Choreographer: Music Conditioned 3D Dance Generation with AIST++  (4) 2024.09.16
Music-Driven Group Choreography  (0) 2024.09.15
EDGE  (1) 2024.09.15