Tensor Flow를 이용한 음향인식기 제작

대화형 사용자 인터페이스 개론(구명완 교수님)
이동: 둘러보기, 검색

목차

프로젝트 소개

프로젝트 명


Tensor Flow를 이용한 음향인식기

팀원 구성


학 부 학 번 이 름
서강대학교 컴퓨터공학과 10학번 오준석(팀장)
서강대학교 컴퓨터공학과 10학번 김기환(팀원)

프로젝트 목표


10가지의 카테고리를 분류할 수 있는 음향인식기를 Tensorflow를 활용하여 구현한다.

프로젝트 산출물


  • Server상의 Tensor Flow 코드 / Dataset 생성을 위한 Python Code
  • iOS상에서 음향을 녹음하고 이를 확인 할 수 있는 Application
  • Git Hub Repository : 주소

프로젝트 구현

시작하기


본격적인 프로젝트 소개에 앞서 구현환경 및 필요 라이브러리들의 설치방법을 설명하도록 한다.

서버환경

프로젝트를 실행한 서버의 환경은 다음과 같다.

CPU Intel(R) Core(TM) i7-5960X CPU @ 3.00GHz

(8코어, 16쓰레드)

Memory 126GB
VGA GeForce GTX TITAN X(12GB) x2 SLI

GeForce GTX 1080(8GB) x2 SLI

OS Ubuntu 16.04.1 LTS

요구 환경


Python 2.7 or 3.5
SoX : SoX는 커맨드라인 유틸리티로서 Wav파일을 재생 및 변환할 수 있는 기능을 가지고 있다.
SoX와 쉘스크립트를 이용하여 Wav파일들을 일괄적으로 변환하여 Dataset으로 사용할 수 있도록 하는데 사용한다.
주소 : http://sox.sourceforge.net/

Python Library


파이썬 라이브러리를 다수 필요로 하며, 설치법은 동일하게
$ pip install <library name> 이다. sudo권한을 필요로 하는 경우 --user옵션을 추가하면 유저 스페이스에 설치된다.

Numpy
Numpy(넘파이)는 파이썬에서 사용할수 있는 강력한 수학관련 Library이다.
Array관련된 여러가지 편의기능과 Tensorflow의 의존성에 의해 설치해줘야한다.

Matplotlib
여러가지 파형이나 그래프를 그릴 때 사용할 수 있는 Library이다.

Tensorflow
머신러닝과 딥러닝을 수행할 수 있는 Library이며 구글에서 개발 및 공개한 오픈소스 Library이다.
TensorFlow 설치방법

Librosa
음악 파일에서 여러가지 특징들을 추출하거나 음악파일을 파이썬에서 편집할 수 있도록 도와주는 Library이다.
Python Library : Librosa 설치방법

Flask
플라스크는 백엔드사이드에서 파이썬만을 이용하여서도 웹페이지와 소통할 수 있도록 해주는 Library이다.
본프로젝트에서는 모바일 어플리케이션을 위한 웹주소를 생성하고 소통하는데 사용하였다.
python Library : Flask 설치방법

sklearn
scikit-learn은 파이썬에서 머신러닝 관련된 여러가지 작업을 도와주는 툴로써 본 프로젝트에서는 평가와 Cross-Validation에 사용되었다.

음향인식 카테고리 선정


SOS의 음향인식기는 10개의 카테고리를 분류한다
음향자료 Dataset은 freesound에서 수집하도록 하였다.
Freesound : http://www.freesound.org/

분류 번호 소리 유형 파일 개수 # of Input Vector 총 길이 선정 이유
0 아이 울음 소리 10 46,525 07m 45.25s 자녀가 있는 가정의 경우 아이들의 상태변화에 빠르게 반응하는 것은 중요하다.

특히, 영유아의 경우 스스로 문제를 해결하지 못 하고 사고의 발생을 예상하기 어렵다는 점에서
울음소리에 대한 즉각적인 알림은 생활에 꼭 필요하다.

1 고양이 소리 25,221 4m 15.21s 반려동물에 대한 인식이 향상됨에 따라, 반려동물은 하나의 가족 구성원으로 자리매김하고 있다.

반려동물은 사람과 언어적인 소통을 할 수 없다는 점과 위급 상황이 발생할 경우 이를 경고해 줄 수 있다는 점에서
가장 대표적인 반려동물인 개와 고양이의 소리를 선정하였다.

2 강아지 소리 9,649 1m 36.49s
3 알람음 15,058 2m 30.58s 전자기기의 사용이 증가함에 따라 기기 상태의 이상이나 완료를 표시하기 위한 알림음은

일상생활에서 흔하게 접할 수 있는 소리 유형 중 하나이다.

4 전자레인지 소리 33,575 5m 35.75s 일반인의 경우 전자레인지(가스레인지)의 불이 켜져 있다면 음식물이 끓는 소리에 반응해 알아차릴 수 있지만,

청각장애인의 경우 시각으로 확인하기 전까지는 이를 발견하기 어려울 것이며, 이러한 상황은 사고로 이어질 수 있다.
전자레인지가 사용되는 소리를 추가하여 이러한 사고의 발생을 방지할 수 있을 것이다.

5 헤어드라이어 소리 21,366 3m 33.66s 마찬가지로 일반인의 경우, 기기의 작동음을 듣고 쉽게 상황을 인지할 수 있지만

청각장애인의 경우 인지할 수 있는 범위가 시각으로 제한된다.
이와 관련한 알림을 제공함으로써 전력 낭비와 관련 사고를 예방할 수 있을 것이다.
대표적인 가전기기 중 하나인 헤어드라이어 소리를 선택하였다.

6 노크 소리 5,419 54.19s 누군가가 방문했을 경우 이에 대한 알림을 제공하여 사용자의 편의를 향상시킬 수 있다.
7 문 열리는 소리 3,217 32.17s 문이 열리는 소리는 외부인의 출입을 확인할 수 있는 가장 쉬운 청각정보 중 하나이다.

문에서 발생하는 소리를 통해 허가 받지 못 한 외부인의 출입과 이와 관련된 사고를 방지할 수 있다.

8 비 소리 119,371 19m 53.71s IoT에 관한 인식과 기대가 증가하면서 관련 제품들이 상품화되고 있다.

날씨에 대한 정보를 추가함으로써 상황에 알맞은 대처(창문의 개폐 등)를 할 수 있을 것이다.

9 바람소리 43,137 7m 11.37s

전체 프로젝트 순서도


Flowchart.png
그림.1 전체 프로젝트 순서도

학습을 위한 Data set 구축


Python librosa library를 사용하여 추출한다. 이 때 코퍼스의 사양은 다음과 같다.

Sample Rate 44,100Hz
Encoding Signed PCM
Bit 16bit
Channel Mono

위 와 같은 파일로 부터 Python Librosa Library를 이용하여 39차 MFCCs벡터를 추출한다.


import librosa
import numpy as np
X, sample_rate = librosa.load(file_name)
mfccs = librosa.feature.mfcc(y=X,
sr=sample_rate,
n_mfcc=39,
hop_length=int(sample_rate*0.01),
n_fft=int(sample_rate*0.02),
htk=True).T

특징을 추출한 결과를 Mathplotlib를 이용하여 나타내면 아래와 같아진다.

Mfcc.png
그림.2 문소리에 대한 특징 추출

코퍼스를 분류하려는 라벨별로 하위 폴더를 생성한 뒤 폴더에 따라 레이블을 붙이고 이를 통해 학습을 하도록 한다.
학습하기전에 이를 numpy library를 이용하여 미리 .npz파일로 저장해둔 뒤 Tensorflow를 이용하여 학습 시키도록 한다.

TensorFlow를 이용한 DNN 구현


DNN.png
[그림] Tensor Flow DNN Topology


학습을 하기 위한 DNN 네트워크를 Tensorflow를 통하여 구현한다.
이때 각 레이어별 자세한 사양은 다음과 같다.


DNN topo.png
[그림] 3-Hidden Layer DNN Topology




1차와 3차 히든 레이어의 입력단에서는 Sigmoid보다 성능이 좋은 ReLu함수를 활성함수로 사용하였고
2차 히든레이어에서는 좀더 많은 변화폭을 보장하는 하이퍼볼릭 탄젠트함수를 활성함수로 사용하였다.

Sigmoisvsrelu.png
[그림] Sigmoid vs ReLu


ReLu함수의 경우 연속이지만 미분불가능 하기 때문에 Back propogation 과정에서 오류가 발생할 수 있으나
정확히 '0'이 될 확률이 무시가능할 정도이기때문에 Tensor Flow에서 기본적으로 지원해주고 이를 택하였다.


Tanh.jpeg
[그림] Tanh함수

2차 레이어의 입력단에서는 Relu함수가 아닌 Hyperbolic Tangent함수(이하tanh)를 활성함수로 사용하였는데,
tanh함수의 경우 sigmoid함수 값을 음수범위까지 확장 시킬 수 있기때문에 중간 레이어인 2차 히든레이어에서 사용하였다.

3차레이어와 출력단 사이의 Activation Function은 Softmax Function을 사용하였는데
이 함수는 각 결과를 상대적으로 비교하여 총합이 1이 되도록 확률값을 출력하는데 사용할 수 있다.
Softmax Fuction은 Classification문제에 대하여 적절한 출력값을 추출하여 주고 이를 이용하여 에러를 최소화시킬 수 있으므로 마지막 레이어의 출력단에는 이를 택하였다.

Cost Function, Optimizer Algorithm 및 여러기법


이 부분을 설명하기에 앞서서 Tensor Flow의 학습기법에대해 간략히 설명하겠다.
우선 Cost Function은 Labeling된 학습데이터에 대하여 머신이 학습과정에서 생성한 결과값과 기대값의 차이를 계산하는 함수이다.
Tensor Flow는 Optimizer Algorithm을 통하여 Cost Function의 값이 최소가 되도록 Back propagation을 수행하여 준다.

Xentrophy.png
그림6. 5000번 학습시의 Cross Entropy Loss의 감소

Cost Function

Cost Function으로는 Cross Entropy Function을 사용하였다.
기초적으로 사용되는 Cost Fucntion인 MSE(Mean Square Error)함수는 Sigmoid와 결합 될 경우 학습속도의 저하를 불러 일으킨다.
Cross Entropy Fucntion은 MSE함수보다 빠른 학습속도를 보장하기에 이를 택하였다.

Optimizer Algoritm

Optimize과정에서는 Adam Optimizer를 사용하였는데, 많이 사용되는 방법인 경사하강법에 비하여 높은 정확도를 보장해준다.

사용 기법

3차레이어에서는 50%의 weight값들을 무시하는 Dropout기법을 사용하였는데
Overfitting에 대한 해결책으로 사용할 수 있는 기법이다. 하지만 현재 Overfitting에대해 걱정할만한 문제가 나타나지 않고 있기 때문에
미리 구현해두는 식으로 사용하게 되었다.

Tensor flow를 이용한 DNN 학습


Dataset 생성

39차 MFCC Vector를 추출한 파일의 Class에 따라서 라벨링을 해준다. 결과는 아래와 같이 나온다.

Dataset.png
그림7. Labeling된 Data set


학 습

학습은 각 스텝마다 Cost Function을 최소화하도록 히든레이어들의 weight값들을 재조정해주며 반복한다.
일정 횟수마다 Dataset에 대한 정확도를 판별할 수 있다.
Cross-Validation을 이용하여 Test set과의 비교를 하는 것이 정석이지만 이부분에 대한 구현은 아직 이루어지지 않았다.

Learnning.png
그림8. 학습과정


Accuracy.png
그림9. 5000번 학습시의 정확도의 변화

Tensor flow와 Flask를 이용한 API구현


Flask를 이용하여 Http Post method에 대하여 Python코드를 실행할 수 있다.
이를 이용하여 어플리케이션에서 Upload를 하게되면 자동으로 학습된 Machine에 Upload된 파일로부터 특징을 추출하고
이에대한 결과를 Json으로 Return하여준다.
iOS Application에서는 이 JSON데이터를 파싱하여 적절한 결과값을 화면에 표시하여 주도록 한다.
이에관한 Flask Code for Post Method는 아래와 같다.

@app.route('/uploads', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file :
            filename = file.filename
            audio_file=os.path.join(app.config['UPLOAD_FOLDER'], filename)
            file.save(audio_file)
            mfccs = extract_feature(audio_file)
            np.array(mfccs)
            print("mfcc len : " +str(mfccs.size))
            x_data = np.hstack([mfccs])
            print(x_data,x_data.size)
            print(x_data.shape)
            #
            y_hat = sess.run(y_, feed_dict={X: x_data})
            ans_list = np.argmax(y_hat,1)
            ans_p1 = np.zeros(shape=[10], dtype=np.float32)
            ans_p2 = np.zeros(shape=[10], dtype=np.float32)
            ans_1sec = np.zeros(shape=[10], dtype=np.float32)
            ans_fin = np.zeros(shape=[10], dtype=np.float32)
            #
            j=0 # 아래 for문을 위한 index
            for k in ans_list:
                ans_p2[k] += 1 # 정답을 모은다.
                if(j%(win_size/2) == 0):
                    # 25개(0.5초, Sliding size)를 모았으면, 50개(1초 = Window Size)에 대한 정답을 낸다.
                    ans_1sec = ans_p1 + ans_p2
                    ans_1sec /= ans_1sec.sum()
                    # 최종 정답에 50개의 정답 결과를 반영한다.
                    ans_fin[ans_1sec.argmax()] += 1
                    # 한 칸을 슬라이드 시킨다.
                    ans_p1 = ans_p2
                    ans_p2 = np.zeros(shape=[10], dtype=np.float32)
                j += 1
            # 맨 마지막에 나온 값도 처리를 해줘야한다.
            ans_1sec = ans_p1 + ans_p2
            ans_1sec /= ans_1sec.sum()
            ans_fin[ans_1sec.argmax()] += 1
            ans_fin /= ans_fin.sum()
            # 추측한 정답을 출력한다.
            with printoptions(precision=3, suppress=True):
                print(ans_fin)
            index = ans_fin.argmax()
            print(index)       
            #index = 0
            #
            return jsonify(classification=index.tolist(),prob=ans_fin.tolist())
    return '''
    <!doctype html>
        <title>Upload new File</title>
        <h1>Upload new File</h1>
    <form action="" method=post enctype=multipart/form-data>
    <p><input type=file name=file>
    <input type=submit value=Upload>
    </form>
    '''


Flask를 실행시 "http://서버주소:5000/uploads"에서 다음 그림과 같은 화면을 확인 할 수 있고 이 화면에서도 업로드 시에 결과를 얻을 수 있다.


Upload.png
그림10 Upload 화면
Result.png
그림11. 결과 화면

Application 구현


Flow chart

App.png
그림12. Application flow chart


주요기능

Application에서 구현해야할 것은 별로 많지 않다. 하지만 주요한 기능들과 시각적인 기능이 필요하므로 미리 구현해야하는 기능들에 대하여 설명하도록 한다.

  1. 녹음 기능
  2. 녹음한 파일을 확인할 수 있는 재생 기능
  3. 업로드 기능
  4. JSON Parsing
  5. 화면 출력
  6. 차트 출력

어플리케이션 실행화면

녹음 뒤 업로드를 하여 결과값을 출력한 화면이다.

App result.png
그림13. 어플리케이션 실행 및 결과화면

평가


K-fold cross validation


K-fold cross Validtaoin이란?

제한된 Dataset을 가지고 Test와 Train을 할 수 있는 방법 중 하나로 보유한 데이터들에대해 일부는 Test용으로 일부는 Train용으로 사용하도록한다.
본 프로젝트에서는 5 Fold Cross Validation을 수행하였으며 Fold는 각 Class의 비례한 크기를 갖도록 랜덤하게 20 %씩을 Test용으로 사용하였다.
실행시 아래 그림과 같이 실행된다.
Kfold table.png

K-fold cross Validtaoin Accuracy

5개의 Fold를 각각 한 번씩 Test set으로 설정하여 총 5회의 '학습->테스트' 과정을 반복한다.
각 회차당 5,000번씩 학습을 하였으며, 인식률은 아래와 같다.(5000번이 최적의 학습 횟수)

0-fold accuracy 0.917629
1-fold accuracy 0.91809
2-fold accuracy 0.913871
3-fold accuracy 0.922612
4-fold accuracy 0.912811
average 0.917003
std dev 0.00347618

Acc.png
따라서 이 알고리즘은 91%의 성능을 굉장히 안정적으로 뽑아내는 것을 확인할 수 있다.
(표준편차가 작을 수록 학습이 안정적으로 이루어지는 것)

혼동 행렬(Confusion matrix)

오류 경향을 세밀하게 분석하기 위해 사용한다.
본 프로젝트에서는 다중 클래스 분류모델을 평가하는 혼동행렬을 사용하였다.

K-fold Confusion Matrix K-fold Confusion Matrix
0 0confusion matrix.png 1 1confusion matrix.png
2 2confusion matrix.png 3 3confusion matrix.png
4 4confusion matrix.png

row: actual , column: predicated 을 나타내며 6, 7번 category의 경우 sample이 부족하여 기대이하의 결과를 나타내었다.

결과물


실행 방법

  1. Tensorflow, Flask, librosa를 위에 설치 방법을 참조하여 Server에 설치한다.
  2. 밑에 Github를 통해 Server에 소스 파일을 다운 받는다.
  3. a_cnn.py를 실행시켜 벡터를 추출해둔 mytotaldata.npz로 학습 모델을 만든다.
  4. flask_dnn.py를 실행시켜 웹페이지에 올린다.
  5. http://서버주소:5000/uploads 홈페이지로 가서 녹음한 파일을 upload한다.
  6. 카테고리별 확률값을 확인한다.




  1. iPhone App의 경우 Github를 통해 Xcode에 프로젝트를 만든다.
  2. iPhone App을 Simulator로 실행한다.
  3. 밑에 App 실행 순서를 참고하여 테스트 해본다.

시연영상

https://youtu.be/DNIlgrTRkl4

어플 실행 순서

Lanuch.png
1.사용자는 S.O.S앱을 설치, 실행시킨다.

음향인식.png
2.사용자는 메인 화면에서 녹음 버튼을 선택한다.

Uploadbutton.png
3.사용자는 주변 음향 정보 입력이 완료된 경우 Upload 버튼을 선택한다.

Resultplay.png
4.S.O.S앱은 인식된 음향 정보를 서버로 보내고 분석 결과를 확률 정보와 이미지 정보로 화면에 나타낸다.

Source Code

https://github.com/melon1024/sos - iOS Application
https://github.com/melon1024/Soundclassifier_backend - Tensorflow

회의록

161027


팀 계획서 작성
1. 과제내용
음향 인식기
- 사람의 음성 언어가 아닌 일상에서 들리는 소리를 인식하는 프로그램입니다.
- 10가지 종류의 소리를 인식할 수 있습니다.

2. 과제목표
평소 생활에서 들리는 소리를 인식하는 프로그램
- 사람의 음성 언어가 아닌 일상에서 들리는 소리를 인식하고 텍스트로 소리 정보를 출력한다.
- 10가지 종류의 소리를 학습 시켜 10가지 소리를 구분할 수 있다.

3. 과제 수행 방법
iPhone에서 녹음된 파일을 서버로 보내고 서버에서는 matlab library에 구현되어 있는 함수들을 통해 10가지의 소리 코퍼스를 학습시킨 프로그램을 이용하여 녹음된 파일을 분석하여 파악된 정보를 텍스트로 iPhone으로 보내서 iPhone 앱을 통해 확인한다. iOS용 어플리케이션을 개발하여 iPhone뿐만 아니라 iPad, Mac에서도 사용 가능한 어플리케이션을 개발한다.

4. 기대효과 및 활용분야
- 음향인식기를 통해서 귀가 들리지 않는 청각장애인을 위한 앱을 통해 사람의 음성 언어 뿐만 아니라 주변 소리까지 전달할 수 있다.
- SKT의 NUGU, 아마존의 에코 등 음성인식 디바이스에 음향인식기능을 추가하여 더 많은 서비스를 제공할 수 있다.

161107


matlab library를 이용하여 학습 -> tensorflow를 이용하여 학습으로 바꿈
BBC library에서 제공하는 음향 데이터를 교수님 랩에서 지원받기로 함
10월27일 작성한 팀 계획서 내용을 좀 더 구체적으로 작성하기로 함

161113


Tensorflow Tutorial에서 MNIST 예제 연습 - single layer
Flask를 이용하여 iOS에서 wav 파일을 서버로 전송
- wav파일은 txt나 jpg보다 용량이 크기 때문에 단번에 전송이 불가능
- multipart를 이용하여 여러개로 나눠서 보내야함

161120


BBC library는 11월 23일에 받으러 가기로 함
- 전체 data 크기는 12.5gb
- RWCP라는 일본에서 만든 데이터 셋이 있었지만 메일로 따로 요청을 해야해서 포기
앱에서 소리를 녹음할 때 start와 stop을 사용자가 직접 눌러서 녹음하기로 함
iOS Speech kit을 이용하면 어플에서 음성을 텍스트로 변환해서 사용 가능 함 - Siri를 이용 가능하다.
Tensorflow MNIST에서 softmax를 이용하여 10개 중 확률이 가장 높은 벡터를 추출 - one key hot vector
- 소리 카테고리를 10개로 한정하여 각각 번호를 지정하여 소리를 구분하기로 함

161123


도서구입
RESTful Web API - 레오나르드 리챠드 28,800원
iOS 앱 개발을 위한 Swift 3 - 김근영 38,700원
꼼꼼한 재은 씨의 Swift 3 기본편 - 이재은 43,200원
텐서플로 첫걸음 - 조르디 토레스 14,400원

161126


BBC library에서 10개 카테고리 선정
0 - 강물,시내,호수,수돗물소리
1 - 아기, 아이들 소리
2 - 깨지는, 부수는, 폭발음 소리
3 - 바람, 비소리
4 - 물끓는소리
5 - 초인종, 알림, 사이렌, 경적, 진동 소리
6 - 전화 소리
7 - 청소기 소리
8 - 헤어드라이어 소리
9 - 고양이, 강아지 소리

HTK를 이용하여 BBC PCM 파일에서 80개의 벡터를 추출
- HTK 설치시 리눅스 환경이 32bit인지 64bit인지에 따라 설정을 다르게 해줘야함
- configure 파일에서 -m32 라고 써있는 부분을 -m64로 바꿔야함
- 64비트 환경에서는 hslab을 사용할 수 없다.(녹음기능)
- $./configure --disable-hslab --enable-hdecode 로 해야지 64비트에서 제대로 됨
- HTK를 까는 서버가 본인 서버가 아니라 권한이 없을 경우 따로 경로를 지정해주면 된다
- HTK에서 PCM 파일의 헤더를 읽으려면 SOX를 이용해야한다
- sox -r 44100 -e signed -b 16 -c 1 -t raw 0.pcm -r 16000 -e signed -b 16 -c 1 -t nist 0.wav
- 44100, 16비트, mono 타입의 파일일 경우 위의 명령어를 통해 wav로 변환하면 HTK에서 벡터를 추출할 수 있다
- HCopy -C HCopy.config 0.wav 0.fb80
- HList -r 0.fb80 > 0.fb80txt
- Tensorflow에서 dictionary 타입을 사용하기 때문에 추출된 벡터 fb80을 dictionary 형태의 fb80txt로 변환하여 사용한다

161129


회의비 : 21,400원

Tensorflow에서 학습을 시킬 때 주의사항
- SOS 프로젝트를 예로 들면 카테고리 0번을 100번 학습 -> 1번 100번 학습 -> ... -> 9번 100번 학습 의 방식으로 하면 학습이 안된다.
- 0 ~ 9번까지 전부 집어넣고 100번을 학습해야 올바른 W가 나온다.
- 안그러면 맨 마지막에 학습한 카테고리에 편중된 W가 나온다.
- 25ms로 나눈 윈도우 총 갯수가 파일마다 다르기 때문에 제일 작은 사이즈로 다른 파일도 다 맞추는 게 좋다.
- dictionary 형태로 집어넣으면 에러가 발생 -> npz 형태로 집어넣어야 한다.

161201


앱에서 pcm파일을 전송한 다음 wav로 변환하여 벡터를 추출한 후 결과를 테스트하는 데 문제가 있다.
- 학습을 시켰던 벡터를 추출하는 방식과 앱에서 전송 받은 pcm파일에서 벡터를 추출하는 방식을 똑같게 해야 한다.
- shell script에서 python a.py 식으로 입력하여 Flask에서 shell script를 호출하는 방식으로 Tensorflow를 돌려보는 것도 방법이다.
   -> librosa을 이용하여 벡터를 추출한다.

161202


히든 레이어 3개를 이용한다.
- 1. 시그모이드 -> 2. 하이퍼볼릭탄젠트 -> 3. 시그모이드
- 1. 300개 -> 2. 200개 -> 3. 100개
Fully connected layer와 Convolution 중 Fully connected layer를 이용한다.
-> Fully를 해보고 뒤에 Convolution으로 업그레이드 하자.

161206


회의비 : 43,000원
시그모이드보다는 Relu가 더 좋은 성능을 보이므로 Relu로 바꾼다.
Gradient descent보다 Adam optimizer가 더 좋은 성능을 보인다.
Convolution으로 업그레이드
25ms로 쪼개진 애들을 4개씩 묶어서 25ms씩 겹치면서 슬라이딩으로 넘어가면서 학습하면 성능이 더 좋아진다.

161207


물소리는 모든 MFCC 대역이 크게 나옴

MFCC 39차 벡터에대한 플룻이 뭔가 이상함

레이어 개수에대한 명시 필요.

표를 입력이 가장 아래에 있도록 바꾸고

분류 사양 -> 레이어

레이어차원 -> 노드 수

레이어 갯수 선정 이유 논의

그레디언트 배니싱 문제

렐루 및 탄젠트하이퍼볼릭

모델 파라미터별 비교

후배들이 보고서 바로 알 수 있도록 위키페이지만 보고도 이 프로젝트를 다시 진행할 수 있도록 하자.

10개 카테고리에 대한 명시

Tensorflow를 활용한 음향인식기에서 텐서플로우가 중요한것이 아니라 음향인식이 중요한 것이다.

텐서플로우 레퍼런스 추가하기.

회의록 예산 집행사항 - 회의록을 올리도록
참고문헌을 적어놓자

음향은 CNN별로일꺼같고 영상처리에서는 효과가 좋을 것

언어 모델은 RNN이 필요하겟지만 음향은 RNN이 필요없을 것이다.
얘는 차라리 프레임단위를 길게 잡아서 이 특성들을 묶어서 사용하는게 나을 것이다.

161208


회의비 20,400원
Hidden Layer 갯수를 조정해보자
K-folder cross validation 구현

161212


회의비 89,000원
시험기간 주의 일정 조정

161213


회의비 56,000원
k-folder cross validation 구현 논의

161214


회의비 60,000원
예산 남은 현황 파악
예산 결제 계획 회의

161215


회의비 25,000원
금요일 회의 일정 잡음
금요일 이후 개발 일정 계획

161216


회의비 56,000원
시험 종료에 따른 구체적인 일정 계획
위키 작성 내용 논의

참고

  1. TensorFlow: https://www.tensorflow.org/
  2. Librosa: https://librosa.github.io/
  3. Flask: http://flask.pocoo.org/
  4. sklearn : http://scikit-learn.org/stable/
  5. Model Evaluation Error Metrics  : https://www.analyticsvidhya.com/blog/2016/02/7-important-model-evaluation-error-metrics/
  6. Activation Function 관련 : http://pythonkim.tistory.com/m/40
  7. 음성/음악신호+머신러닝 초심자를 위한 가이드 : http://keunwoochoi.blogspot.kr/2016/01/blog-post.html
  8. Tensorboard 사용법 : http://pythonkim.tistory.com/39
  9. RESTful Web API - 레오나르드 리챠드
  10. iOS 앱 개발을 위한 Swift 3 - 김근영
  11. 꼼꼼한 재은 씨의 Swift 3 기본편 - 이재은
  12. 텐서플로 첫걸음 - 조르디 토레스
개인 도구
이름공간

변수
행위
둘러보기
LINC 사업단
도구