음성 분류 딥러닝 - eumseong bunlyu dibleoning

본 논문에서는 사람을 대신하여 분류, 예측 하는 딥러닝 기술을 활용하여 목소리를 통해 남녀노소를 분류하는 연구를 수행한다. 연구과정은 기존 신경망 기반의 사운드 분류 연구를 살펴보고 목소리 분류를 위한 개선된 신경망을 제안한다. 기존 연구에서는 도시 데이터를 이용해 사운드를 분류하는 연구를 진행하였으나, 얕은 신경망으로 인한 성능 저하가 나타났으며 다른 소리 데이터에 대해서도 좋은 성능을 보이지 못했다. 이에 본 논문에서는 목소리 데이터를 전처리하여 특징값을 추출한 뒤 추출된 특징값을 기존 사운드 분류 신경망과 제안하는 신경망에 입력하여 목소리를 분류하고 두 신경망의 분류 성능을 비교 평가한다. 본 논문의 신경망은 망을 더 깊고 넓게 구성함으로써 보다 개선된 딥러닝 학습이 이루어지도록 하였다. 성능 결과로는 기존 연구와 본 연구의 신경망에서 각각 84.8%, 91.4%로 제안하는 신경망에서 약 6% 더 높은 정확도를 보였다.


Research is carried out to categorize voices using Deep Learning technology. The study examines neural network- based sound classification studies and suggests improved neural networks for voice classification. Related studies studied urban data classification. However, related studies showed poor performance in shallow neural network. Therefore, in this paper the first preprocess voice data and extract feature value. Next, Categorize the voice by entering the feature value into previous sound classification network and proposed neural network. Finally, compare and evaluate classification performance of the two neural networks. The neural network of this paper is organized deeper and wider so that learning is better done. Performance results showed that 84.8 percent of related studies neural networks and 91.4 percent of the proposed neural networks. The proposed neural network was about 6 percent high.

//wikidocs.net/77950 참고

import os import librosa import numpy as np from sklearn.model_selection import train_test_split import tensorflow as tf tf.random.set_seed(777) #하이퍼파라미터 튜닝을 위해 실행시 마다 변수가 같은 초기값 가지게 하기 def load_data(data_dir): x_data = [] y_data = [] folder_names = os.listdir(data_dir) folder_names = [folder_name for folder_name in folder_names if os.path.isdir('{}/{}'.format(data_dir, folder_name))] folder_names = folder_names[:10] for folder_name in folder_names: file_names = os.listdir('{}/{}'.format(data_dir, folder_name)) file_names = [file_name for file_name in file_names if file_name.endswith('.wav')] file_names = file_names[:10] for file_name in file_names: #print(file_name) #01d22d03_nohash_0.wav file_name = '{}/{}/{}'.format(data_dir, folder_name, file_name) y, sr = librosa.load(file_name, mono=True, duration=30) ''' chroma_stft = librosa.feature.chroma_stft(y=y, sr=sr) spec_cent = librosa.feature.spectral_centroid(y=y, sr=sr) spec_bw = librosa.feature.spectral_bandwidth(y=y, sr=sr) rolloff = librosa.feature.spectral_rolloff(y=y, sr=sr) zcr = librosa.feature.zero_crossing_rate(y) ''' mfcc = librosa.feature.mfcc(y=y, sr=sr) # buffer = [] ''' buffer.append(np.mean(chroma_stft)) buffer.append(np.mean(spec_cent)) buffer.append(np.mean(spec_bw)) buffer.append(np.mean(rolloff)) buffer.append(np.mean(zcr)) ''' #print(mfcc.shape) #(20, 44) for element in mfcc: buffer.append(np.mean(element)) x_data.append(buffer) if folder_name == 'Background Noise': y_data.append(0) elif folder_name == 'left': y_data.append(1) elif folder_name == 'right': y_data.append(2) elif folder_name == 'up': y_data.append(3) elif folder_name == 'down': y_data.append(4) x_data = np.array(x_data) y_data = np.array(y_data) return x_data, y_data ##########데이터 로드 x_data, y_data = load_data('/Users/mac/Downloads/speech_command') labels = ['백그라운드 노이즈', '왼쪽', '오른쪽', '위', '아래'] ##########데이터 분석 ##########데이터 전처리 x_data = x_data.reshape(-1, 20, 1) y_data = tf.keras.utils.to_categorical(y_data) x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.3, random_state=777, stratify=y_data) ##########모델 생성 input = tf.keras.layers.Input(shape=(20, 1)) net = tf.keras.layers.LSTM(units=32, activation='relu')(input) net = tf.keras.layers.Dense(units=32, activation='relu')(net) net = tf.keras.layers.Dense(units=5, activation='softmax')(net) model = tf.keras.models.Model(input, net) ##########모델 학습 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x_train, y_train, epochs=50, validation_data=(x_test, y_test)) ##########모델 검증 ##########모델 예측 y, sr = librosa.load('left.wav', mono=True, duration=30) ''' chroma_stft = librosa.feature.chroma_stft(y=y, sr=sr) spec_cent = librosa.feature.spectral_centroid(y=y, sr=sr) spec_bw = librosa.feature.spectral_bandwidth(y=y, sr=sr) rolloff = librosa.feature.spectral_rolloff(y=y, sr=sr) zcr = librosa.feature.zero_crossing_rate(y) ''' mfcc = librosa.feature.mfcc(y=y, sr=sr) # buffer = [] ''' buffer.append(np.mean(chroma_stft)) buffer.append(np.mean(spec_cent)) buffer.append(np.mean(spec_bw)) buffer.append(np.mean(rolloff)) buffer.append(np.mean(zcr)) ''' #print(mfcc.shape) #(20, 44) for element in mfcc: buffer.append(np.mean(element)) x_test = np.array([buffer]) x_test = x_test.reshape(-1, 20, 1) print(x_test) y_predict = model.predict(x_test) label = labels[y_predict[0].argmax()] confidence = y_predict[0][y_predict[0].argmax()] print(label, confidence) #

Toplist

최신 우편물

태그