강사님 자료
아래 코드 짤 때 참고한 사람의 글에서 MFCC가 가장 중요한 지점.
▩ 음성 분류 신경망 만들기
이미지 ----------------> 신경망 음성 -----------------> 신경망
▩ 1. 개와 고양이 음성 분류 신경망 코드 설명
19기를 위한 개와 고양이 음성분류 신경망 만들기를 위한 사전 설명들_그림.pdf 를 다운 받습니다.
아래의 사이트에서 소리 데이터 데이터를 내려받습니다. https://www.kaggle.com/datasets/mmoreaux/audio-cats-and-dogs?select=cats_dogs 다운로드 받으면 archive.zip 파일이 생기는데 이 압축을 풀면 archive 라는 폴더가 생깁니다.
archive 폴더 밑에 cats_dogs 라는 폴더가 있는데 이 폴더를 압축해서 cats_dogs.zip 파일로 만드시오!
코렙에서 구글 드라이브를 마운트 시킵니다.
from google.colab import drive
drive.mount('/content/drive')
/content/drive/MyDrive/Colab Notebooks 밑에 cats_dogs.zip 파일을 올립니다.
/content/drive/MyDrive/Colab Notebooks 밑에 cats_dogs 라는 폴더를 만듭니다.
코렙에 올린 압축파일 cats_dogs.zip 파일을 /content/drive/MyDrive/Colab Notebooks/cats_dogs 폴더 밑에 압축을 풉니다.
!unzip -qq "/content/drive/MyDrive/Colab Notebooks/cats_dogs.zip" -d "/content/drive/MyDrive/Colab Notebooks/cats_dogs"
여기까지 하면 준비 작업은 된것 입니다.
이론 설명을 위해서 c 드라이브 밑에 sound 라는 폴더를 만들고 001.wav 와 002.wav 를 내려받으세요. sound 폴더에 다운로드 받으세요. 라이브로사 연습 샘플 파일 : https://cafe.daum.net/oracleoracle/SjiT/649
로컬 주피터 노트북에서 !pip install librosa 를 실행하여 라이브로사를 설치합니다.
!pip install librosa
그리고 커널 리스타트를 하세요.
예제1. 샘플 음악 파일을 주피터 노트북에서 소리로 들어봅니다.
import IPython.display as ipd
train_path = 'c:\\\\sound\\\\'
ipd.Audio(train_path + '002.wav')
예제2. 샘플 음악 파일을 숫자로 변환합니다.
이미지 ---> cv2.imread 함수 ---> 숫자
소리 ---> librosa.load 함수 ---> 숫자
import librosa
y, sr = librosa.load( train_path + '002.wav')
print(y)
print(sr)
# [-2.6078593e-09 -1.1360160e-08 1.0752378e-08 ... -2.3445109e-04 -9.1312686e-04 0.0000000e+00]
# 22050
y 값은 ? 파형의 amplitude(진폭)값, 소리의 세기, 파동을 특정지을 수 있는 중요량, 최고점의 수직 높이, 골의 깊이
sr 값은 ? sample rate 또는 샘플링 주파수 입니다. 아날로그 소리를 디지털 신호로 표현하기 위해서는 아날로그 소리를 잘게 쪼개는데 이 잘게 쪼갠 정보를 디지털 정보로 표현하게 sample 입니다. sample rate 는 1초당 들리는 sample 의 갯수를 단위로 나타낸것입니다. 오디오의 표본비율 또는 1초당 샘플의 빈도수 입니다.
예: 44.1KHz ----> 1초당 sample 의 수가 44100 개 들어있다는 뜻입니다.
예제3. 지금 방금 들은 음악을 진폭으로 시각화 해봅니다.
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
audio_data = np.array(y)
fig = plt.figure(figsize=(14,6) )
#소리를 시각화 하기 위해서는 소리를 숫자로 바꾼 y 값과 sample rate 가 필요합니다.
librosa.display.waveshow( audio_data[ 0 : 100000 ], sr = sr )
plt.ylabel("amplitude") # 진폭
plt.show()
※ 기억해야할 것 ! 1. sr 이 뭔지? 2. librosa 모듈? 소리 전처리하는 전문 파이썬 모듈
예제3. MFCC 란 ?
Mel-Frequency Cepstral Coefficient 의 약자
MFCC 는 오디오 신호에서 추출할 수 있는 특징으로 소리의 고유한 특징을 나타내는 수치입니다. ( 이미지를 CNN 을 통해서 특징을 잡아냈듯이 소리도 특징을 찾아야합니다.)
Mel 은 사람 귀의 달팽이관을 모티브로 따온 값
Cepstral 은 신호에서 어떤 특정 주파수가 강하고 어떤 특정 주파수가 약한지 한눈에 볼 수 있는 수치
Coefficient 의 뜻은 계수
예제4. Mel 이란 ?
사람 귀의 달팽이관을 모티브로 따온 값입니다.
ppt 의 사람 달팽이관을 보면 똘똘 말려있지만, 실제로 길게펴서 보면 달팽이관의 각 부분은 각기 다른 진동수(주파수)를 감지 합니다.
주파수가 낮은 대역에서는 주파수의 변화를 잘 감지하는데 주파수가 높은 대역에서는 주파수의 변화를 잘 감지하지 못합니다.
이 이유를 달팽기관 구조로 보면 달팽이관에서 저주파 대역을 감지하는 부분은 굵지만 고주파 대역을 감지하는 부분은 갈수록 얇아집니다.
그렇다면, 신경망에 특징 백터를 사용할 때 그냥 주파수를 쓰기보다는 이러한 달팽이관의 특성에 맞춰서 특징을 뽑아주는것이 더욱 신경망 학습할때 효과적인 피쳐를 뽑는 방법입니다.
예제5. 소리의 세기와 높낮이
가청 진동수란 ? 사람이 들을 수 있는 소리의 범위를 말합니다.
소리의 3요소 ?
소리의 세기
소리의 높낮이
음색
소리는 "공기속을 전해오는 파동" 입니다.
예제6. 주파수란 ?
주파수란 전파 또는 음파등의 파장이 반사 및 굴절하여 물결 모양과 같이 방향을 바꾸는 주기적 현상이 1초동안 반복되는 횟수를 애기합니다.
단위가 Hz(헤르츠) 로 1초라는 시간안에 반복적인 행동을 몇번하는지를 말합니다.
어떤일을 1번 하는데 0.1초가 걸린다면 1초동안 10번의 일을 할 수 있는것이고 이때의 주파수가 바로 10Hz 가 되는것입니다.
예: 주파수로 어떤일을 할 수 있는가 ?
예제7. 주파스 스펙트럼이란 ? <가장 중요>
햇빛을 프리즘에 통과 시키면 일곱 색깔의 무지개로 나누어지는 것처럼 소리도 주파수 순으로 펼쳐 놓을 수 있습니다. 이걸 주파수 스펙트럼이라고 합니다.
예제8. 푸리에의 변환 <가장 중요>
코드 설명을 위한 예제1:
예제: 로컬 주피터 노트북에서 수행하세요
코랩 실행
※ 중요:
코랩 실행