wlsdml1114 / diff-svc

Singing Voice Conversion via diffusion model
GNU Affero General Public License v3.0
56 stars 19 forks source link

훈련 진행 할때 config_nsf 에서 load_ckpt 질문 입니다 #28

Closed jiseong1209 closed 1 year ago

jiseong1209 commented 1 year ago

제가 특정 대상의 목소리를 4만 스텝정도 훈련시켜놓은 모델이 존재한다면 그 모델의 경로를 load_ckpt에 입력하고 --reset을 지운 뒤 run.py를 실행하면 훈련을 4만 스텝부터 이어서 진행 할 수 있는것인가요? 아니면 load_ckpt에 디스코드에 있는 pe_model 같은 것의 경로를 넣어야 하는것인가요? 하나 더 궁금한게 있는데 44100Hz를 훈련 할 때 config_nsf 를 사용해서 훈련을 진행하는걸로 알고 있는데 훈련을 하게 되면 checkpoints 에는 config_nsf 가 아닌 config 파일이 생성되서 infer.py에선 이것을 이용하는것 같은데 정상적인것인가요??

MoorDev commented 1 year ago

따로 load_ckpt에 넣지 않고도 checkpoint/이름에 해당 모델이 있다면 --reset만 지우고 학습하면 이어서 됩니다. load_ckpt에 입력해서 사용해도 됩니다만 이 기능은 알고보니 만들어진 모델에 전이학습용으로 만든 기능으로 단순히 이어서 학습하는게 목표라면 굳이 적으실 필요 없습니다.

그리고 checkpoint/이름 경로에 config이 있다면 그걸 쓰는게 맞습니다. 그때는 run.py --exp_name test 이렇게만 해도 학습이 됩니다.

jiseong1209 commented 1 year ago

따로 load_ckpt에 넣지 않고도 checkpoint/이름에 해당 모델이 있다면 --reset만 지우고 학습하면 이어서 됩니다. load_ckpt에 입력해서 사용해도 됩니다만 이 기능은 알고보니 만들어진 모델에 전이학습용으로 만든 기능으로 단순히 이어서 학습하는게 목표라면 굳이 적으실 필요 없습니다.

그리고 checkpoint/이름 경로에 config이 있다면 그걸 쓰는게 맞습니다. 그때는 run.py --exp_name test 이렇게만 해도 학습이 됩니다.

감사합니다! 궁금한것이 하나 더 있는데 제가 3시간정도의 음원 데이터로 max sentence를 33으로 해서 학습을 시키는 중인데 15만 스텝정도를 했는데도 불구하고 고음부분에서 기계음이 들리면서 소리가 깨지는 현상이 발생합니다. 학습 시간의 부족인것일까요? 학습데이터에 있는 음역대임에도 불구하고 저런 현상이 발생합니다. 혹시 학습시간이 부족해서 그런것이라면 max sentence를 33정도로 하였을때는 어느정도 스텝을 돌려야 좋은 결과물이 나올수 있을까요?

MoorDev commented 1 year ago

따로 load_ckpt에 넣지 않고도 checkpoint/이름에 해당 모델이 있다면 --reset만 지우고 학습하면 이어서 됩니다. load_ckpt에 입력해서 사용해도 됩니다만 이 기능은 알고보니 만들어진 모델에 전이학습용으로 만든 기능으로 단순히 이어서 학습하는게 목표라면 굳이 적으실 필요 없습니다. 그리고 checkpoint/이름 경로에 config이 있다면 그걸 쓰는게 맞습니다. 그때는 run.py --exp_name test 이렇게만 해도 학습이 됩니다.

감사합니다! 궁금한것이 하나 더 있는데 제가 3시간정도의 음원 데이터로 max sentence를 33으로 해서 학습을 시키는 중인데 15만 스텝정도를 했는데도 불구하고 고음부분에서 기계음이 들리면서 소리가 깨지는 현상이 발생합니다. 학습 시간의 부족인것일까요? 학습데이터에 있는 음역대임에도 불구하고 저런 현상이 발생합니다. 혹시 학습시간이 부족해서 그런것이라면 max sentence를 33정도로 하였을때는 어느정도 스텝을 돌려야 좋은 결과물이 나올수 있을까요?

그건 데이터에 따라 많이 다를겁니다. 그리고 지금 학습하는 diffusion모델 외에 보코더로 쓰고 있는 hifi-GAN모델의 품질의 영향도 받을 겁니다. 그러니 해당 모델을 우리가 Fine Tuning을 하면 좋아질것이라고 생각합니다. 다만 이렇게 되면 HifiGAN도 학습을 해야하기 때문에 일이 커진다는 단점은 있겠네요.

hifiGAN대신 griffinlim을 쓰게 해보는것도 괜찮을거 같은데(이건 수학적복원이라 노이즈가 많습니다) 코드 수정이 많이 필요한게 문제군요...

jiseong1209 commented 1 year ago

좋은 의견 감사합니다!! 원래 학습을 진행 할 때 데이터셋을 음원 전체로 넣게 된다면 상대적으로 음원에는 고음역대 보단 중음역대가 많이 포함되어 있으니 중음역대가 완전히 학습되었다고해도 고음역대의 학습이 덜 진행되는것이 정상적인 것인가요?

wlsdml1114 commented 1 year ago

넵 모든 데이터에 대해 일반적으로 낮은 loss를 찾도록 되어있으니 일반적으로 그렇습니다. 고음부분의 데이터를 일부러 더 추가하시거나, 중음역대 데이터를 조금 빼서 밸런스를 맞추는것도 좋은 방법입니다.

jiseong1209 commented 1 year ago

자꾸 질문해서 죄송합니다. 훈련 과정에서 표기되는 total_loss 는 어떻게 구해지는건지와 어떤 의미를 가지고 있는지 혹시 알 수 있을까요?

wlsdml1114 commented 1 year ago

https://liusongxiang.github.io/diffsvc/ 이 논문을 기반으로 작성된거 처럼 보이는데 오피셜하지는 않습니다. 보통의 loss는 학습결과인 y_hat과 정답값인 y_target간의 특정 계산식으로 얻어지는 결과입니다. loss가 낮을수록 모델이 사용자가 원하는 결과물을 출력할 수 있다는 뜻입니다.