기계 학습으로 V 노래 배달에서 노래 만 자릅니다.
v 노래 배달은 좋다 ......
(이것은 아프다)
이번에는 노래 전달에서 자동으로 노래 부분만 추출하는 녀석을 만들었습니다.
이것을 사용하여 뭔가하고 싶지만 대부분 저작권에 걸릴 것 같아서 회개하고 있습니다.
개요
준비
기계 학습의 지견은 전혀 없기 때문에 검색합니다.
특히 여기을 참고로 (제설) 모델을 빌렸습니다. 대단히 감사합니다.
전처리
멜 주파수 스펙트로그램이 좋을 것 같으므로, 전달을 10초로 끊어 구합니다.
# メル周波数スペクトラムを返す
def calculate_melsp(x, n_fft=1024, hop_length=128):
stft = np.abs(librosa.stft(x, n_fft=n_fft, hop_length=hop_length))**2
log_stft = librosa.power_to_db(stft)
melsp = librosa.feature.melspectrogram(S=log_stft,n_mels=128)
return melsp
_x, fs = librosa.load("wavファイル", sr=48000, duration=9.9)
_x = calculate_melsp(_x)
librosa.display.specshow(_x, sr=48000)
plt.colorbar()
plt.show()
이런 느낌의 이미지가 나옵니다. (이것은 와라베다의 6조년의 녹입니다)
잘 모르겠네요. 이것을 CNN에서 학습시킵니다.
CNN에서 학습
테스트 데이터는 네 가지 배포에서 생성되었습니다. 노래·그 이외 맞추어 1200 데이터입니다.
여기 망마 사용했습니다. 데이터 세트를 제공하는 방법은 다음과 같습니다.
x_train ... 데이터 수 * 128 * 3713 * 1
y_train ... 데이터 수 * (1 or 0) ← 노래인가 아니면
model.fit(x_train, y_train, epochs=20, verbose=1, validation_split=0.1, batch_size=5)
model.save("model.h5")
일괄 처리 크기는 기본값 (25)이므로 메모리가 죽었으므로 5로 설정했습니다.
결과는 이런 느낌입니다.
Accuracy 0.9333 val_accuracy 0.9750은 꽤 좋지 않을까요 (전혀 모르겠지만)
추론하고 잘라보자
model = load_model("model.h5")
ret = model.predict( 1*128*3713*1のデータ )
# ret[0] -> 歌 の確率
# ret[1] -> それ以外 の確率
100%가 아니기 때문에 확률을 잘 사용해 노래만 잘라낼 수 있도록 짜였습니다.
간단히 설명합니다.
1로 대략적인 노래 구간을 냅니다. 에코가 붙은 잡담이나 노래처럼 판정된 잡담이 섞이지 않게, 확률의 평균으로 지워 버립니다.
이것만으로는 발라드계 악곡이 분할되어 버리는 문제가 있으므로, 1로 남은 노래 구간의 사이가 2구간(=20초) 이하이면 결합합니다. 다만, 이 방법은 「연장으로 노래되면 2곡이 합체해 버린다」문제가 있습니다. 그래서 결합 후에 6분을 넘지 않도록 했습니다. (노래는 대개 6분 이내라고 생각하기 때문입니다)
여기까지 대략적으로 노래를 취할 수 있습니다. 다만 인트로나 아웃로가 끊어져 버린다·딱 맞는 문제가 있기 때문에, 전후가 노래 같은(확률이 40%이상 있는) 때는 결합했습니다.
결과
데이터 세트에 없는, 「미나토 아쿠아」씨의 노래 프레임을 잘라 보았습니다.
미나토 아쿠아 「【Vtuber】1일 한정! 아이돌 메이드의 전력 Live! 【노래 테두리】」
자동으로 잘라낸 것이 여기입니다.
아주 좋은 느낌으로 잘라낼 수있었습니다.
다만, 곡의 뒤를 길게 잘라 버리는 일이 있기 때문에, 거기를 개선하면서 이 기술의 사용법을 검토해 가고 싶습니다.
더 이상 정밀도 올리고 싶을 때는 어떻게 하는 것이 정답일까 ......
Reference
이 문제에 관하여(기계 학습으로 V 노래 배달에서 노래 만 자릅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taittide/items/753b1680807bcf628025텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)