논문 리뷰
- Reading Self-supervised learning (자기지도학습)과 Contrastive learning (대조학습): 개념과 방법론 톺아보기 ** 본 포스팅은 NeurIPS2021의 self-supervised learning 튜토리얼에 필자의 소소한 설명을 덧붙인 글입니다. Supervision을 위한 대량의 labelled data 특히 high-quality의 labelled data를 얻는 것은 비용이 많이 든다. unlabelled dataset만으로 task-agnostic하게 데이터를 잘 표현하는 '좋은 representation'을 얻으면 얼마나 좋을까? "unsupervised learning을 통해 좋은 representation을 얻는다면 다양한 downstream task에 빠르게 적응할 수 있을 것이다, 더 나아가서는 supervision보다 더 좋은 성능을 얻을 수 있을 것이다" 라는 생각에서 self-supervi..
- Reading Semi-supervised learning (준지도학습): 개념과 방법론 톺아보기 Semi-supervised learning overview 논문 [14-16] 및 여러 방법론 관련 논문들 [1-13] 읽으며 얻은 지식을 바탕으로 글로 정리해보려고 한다. 오랜만에 쓰는 기술글이라 설렌다!! 나도 처음 공부하는 분야이기 때문에 부족한 부분도 있겠지만, 틀린 부분이나 덧붙여 설명이 필요한 부분이 있다면 댓글에 남겨주시면 더 풍부한 글이 될 것 같다. 그럼 시작! Supervised learning 의 한계 딥러닝의 가장 대표적인 방법론은 supervised learning (지도학습)이다. 하지만 supservised learning은 어쩌면 학습 데이터의 패턴을 외우는 학습법에 불과하다. 그러므로 한번도 보지 않은 데이터에 대해서는 맞추기 쉽지 않다. 일반화가 잘되기 위해서는 필연적으..
- Reading Glow: Generative Flow with Invertible 1X1 convolutions 논문 리뷰 논문은 이곳에 링크를 걸어두겠다. 동아리에서 논문세미나(WaveGlow)를 했던 내용으로 발표영상도 있으니 참고하면 좋겠다. 순서로는, 생성모델의 종류를 알아본다. flow기반 방법을 이해하기 위한 수학적 근간을 알아본다. flow기반 방법의 수식을 이해해본다. Normalizing flow가 복잡한 분포를 생성해내는 것을 알아본다. Glow가 어떻게 normalizing flow를 구현했는지 model구조를 알아본다. Generative model의 3가지 유형 1. Generative adversarial networks(GAN) GAN은 생성자(generator)와 구분자(discriminator)로 구성되어있다. 구분자는 생성자가 생성해낸 fake sample들로부터 진짜 데이터를 구별하는 일을..
PyTorch로 시작하는 딥러닝
- PyTorch [PyTorch] 시계열 데이터를 위한 RNN/LSTM/GRU 사용법과 팁 순차적으로 들어오는 정보들의 맥락(context)을 잘 기억하는 딥러닝의 구조로 RNN계열이 있다. 오늘은 RNN이나 LSTM을 처음 사용하는 초심자를 위한 간단한 pyTorch에서의 RNN/LSTM/GRU layer 사용법을 정리한다. RNN 내부 구조보다 input, output의 차원에 초점을 둔 설명이 될 것이다. 그럼 시작! RNN/LSTM/GRU 먼저 RNN/LSTM/GRU 각각의 cell은 모두 동일한 파라미터를 가지고 있기 때문에 LSTM을 기준으로 PyTorch에서 어떻게 사용하는지 그리고 파라미터는 무엇이 있는 지 하나씩 알아보자. import torch.nn as nn lstm = nn.LSTM(input_size, hidden_size, num_layers, bias=True, ba..
- PyTorch [PyTorch] 시계열 데이터를 위한 1D convolution과 1x1 convolution 오늘은 시계열 데이터처리에 많이 사용되는 1D convolution이 PyTorch에 어떻게 구현되어 있는지와 어떤 파라미터가 존재하는지 차원은 어떻게 계산하는 지를 정리해 보려고 한다. 자꾸 까먹는 나 자신을 위한 포스팅이 될 것 같다. 시작해보자! 간단한 1D convolution 예시 2D convolution이 가로,세로로 모두 이동하면서 output이 계산되는 것과 다르게 1D convolution 연산은 가로로만 이동하면서 output을 계산해낸다. 우리가 알고있는 신호처리에서의 convolution과 다르게 사실은 cross correlation 연산과 같다. 아래의 예시를 계산해보면 쉽게 이해할 수 있다. 직접 계산해보면 금방 이해할 것이다. (여기서 kernel은 filter라고도 부르며..
- PyTorch [PyTorch] PyTorch가 제공하는 Activation function(활성화함수) 정리 딥러닝 모델을 구축할 때, linear layer, convolution layer 등의 연산 layer뒤에 당연스럽게 activation function을 사용하는 것을 볼 수 있다. activation을 쓰지 않으면 layer를 계속 쌓아도 결국 하나의 layer를 쌓은 것과 다르지 않기 때문에 deep learning에서 activation은 중요한 역할을 한다. 현재 딥러닝 모델은 점점 더 커지고 깊어지고 있기 때문에 activation function은 더 깊은 모델을 잘 학습시킬 수 있게 gradient vanishing 문제를 극복하도록 발전하고 있다. 본 포스팅에서는 먼저 activation function이 무엇인지 간단히 설명하고 상황별 activation 사용법에 대해 요약한 뒤 Py..
- PyTorch [PyTorch] PyTorch가 제공하는 Learning rate scheduler 정리 (여기 내용을 많이 참고하여 작성하였습니다.) (** learning rate와 lr이라는 용어를 혼용해서 작성하였습니다.) learning rate는 gradient의 보폭을 말한다. learning rate는 성능에 꽤나 영향을 주는 요소(learning rate를 잘못 설정하면 아예 학습이 안되기도 한다.)이기 때문에 learning rate를 어떻게 설정할 지가 중요하다. 아래의 그림이 learning rate 설정에 따라 loss 그래프에서 어떻게 최적의 weight를 찾아나가는 지를 보여준다. 처음부터 끝까지 같은 learning rate를 사용할 수도 있지만, 학습과정에서 learning rate를 조정하는 learning rate scheduler를 사용할 수도 있다. 처음엔 큰 learn..
음성신호처리
- Speech Normalized log mel-spectrogram의 python 구현 import os import numpy as np import librosa import librosa.display import matplotlib.pyplot as plt min_level_db= -100 def normalize_mel(S): return np.clip((S-min_level_db)/-min_level_db,0,1) def feature_extraction(path): y = librosa.load(path,16000)[0] S = librosa.feature.melspectrogram(y=y, n_mels=80, n_fft=512, win_length=400, hop_length=160) # 320/80 norm_log_S = normalize_mel(librosa.power_t..
- Speech MFCC(Mel Frequency Cepstrum Coefficient)의 python구현과 의미 MFCC의 python 구현python의 librosa 라이브러리를 이용해 쉽게 구현할 수 있다. import matplotlib.pyplot as pltimport librosa.displayimport librosaimport numpy as nppath = 'sample1.wav'sample_rate=16000x = librosa.load(path,sample_rate)[0]S = librosa.feature.melspectrogram(x, sr=sample_rate, n_mels=128)log_S = librosa.power_to_db(S, ref=np.max)mfcc = librosa.feature.mfcc(S=log_S, n_mfcc=20)delta2_mfcc = librosa.feature...
- Speech LPC(Linear Prediction Coding, 선형예측부호화)와 formant estimation LPC에 대한 소개 음성신호처리에서 강력한 음성분석기법중 하나가 바로바로 Linear predictive analysis이다. 이 기법은 음성의 생성모델의 파라미터 (그 중 vocal tract 필터)를 예측하는 좋은 방법이다.(이에 대해 아래에 자세히 설명예정) 이 기법은 여러분야에 쓰일 수 있는데 첫째로 낮은 bit rate로 전송(통신)을 하기위한 신호의 한가지 표현으로 쓰일 수도 있고. 압축하여 저장하는데에 쓰일 수도 있다. 또한 automatic speech나 화자인식에 쓰일 수있다. 이번 포스팅에서는 실제적인 음성application에 널리 쓰이는 Linear predictive analysis에 대해 소개할 것이다. Linear prediction방법은 LPC 즉, speech를 coding..
- Speech Pitch detction(ACF, AMDF, Cepstrum) 유성음의 pitch 음성은 유성음과 무성음으로 구분할 수 있다. 유성음은 소리가 vocal tract를 타고 울려서 나오는 소리이므로 준 주기적인 성질이 나타나는데 이러한 준 주기적인 파형의 기본 주파수를 pitch라고 한다. 음성신호에서 Pitch는 40~400Hz 사이에 존재한다. Autocorrelation method [Autocorrelation을 통한 Pitch검출 방법] Autocorrelation은 어떤 신호가 잡음과 함께 있을 때 그 신호의 주기검출에 주로 이용된다. 따라서 autocorrelation을 이용하면 음성신호의 주기를 쉽게 확인할 수 있다. 유성음의 준 주기적 파형의 기본 주파수를 pitch라 한다. Pitch는 음성신호의 샘플링 주파수를 autocorrelation의 fir..
- Speech 음성신호처리에서 frame 생성시 overlap을 하는 이유 동아리에서 논문세미나를 하다가 speech를 전공하지 않으시는 분들에게 왜 frame을 overlap하냐는 물음을 받았다. 음성신호를 연구하는 사람들이라면 overlap을 당연하게 받아들이겠지만, 어떻게 말로 표현해야할지 고민이 되어서 간단히 정리해두기로 한다. (사실 이 링크 한글번역임) 그리고 왜 frame 단위의 처리를 하는 지에 대해서 내가 쓴 포스팅을 이 링크에서 확인할 수 있다. window 와 frame 음성신호는 stationary하지 않지만 생각보다 그렇게 빠르게 변하지도 않는다. 이때 신호를 stationary한 작은 청크로 잘라서 처리하면 되겠다는 생각을 할 수 있다. 윈도잉(windowing)은 신호를 어느부분을 볼 지 정하는 창이다. 이를 이용해 신호를 작은 청크로 자른다. 이 청..
- Speech STFT(Short-Time Fourier Transform)와 Spectrogram의 python구현과 의미 음성신호처리에서 아주 기본적인 feature로 spectrogram이 존재한다. spectrogram을 많이 쓰지만 왜 짧은 시간으로 나눠서 Fourier transform을 하는 지에 대해 생각하지 않고 쓰는 경우가 많다. Python에서 함수 한 줄로 구할 수 있는 spectrogram의 구현을 먼저 알아보고 후에 그 의미도 알아보자. STFT 와 Spectrogram python 구현 Spectrogram은 위와 같은 그림으로 표현할 수 있다. x축은 시간 축(단위: frame), y축은 주파수를 의미한다. 그리고 각 시간당 주파수가 가지는 값을 값의 크기에 따라 색으로 표현하여 3차원을 2차원으로 표현하게 된다. 즉, 시간의 흐름을 가지는 푸리에 변환이라고 생각할 수 있다. 각각의 frame(짧은..
- Speech DFT(Discrete Fourier Transform)와 Circular Convolution DSP를 공부해본 사람이라면 DFT(Discrete Fourier Transform)에 대해 들어본 적이 있을 것이다. DFT는 무엇인가? DTFT와 무엇이 다른가? 여러 궁금증에 앞서 DFT를 이해하기에 앞서 일단 식부터 살펴보고 시작하겠다. x[n]이라는 유한한 길이의 음성신호가 존재할 때, 각주파수(오메가)를 N개로 쪼갠 후 k번째 주파수에 해당하는 변환 값을 찾아내는 것이 DFT결과가 된다. 식을 먼저 소개했고, 자세한 내용은 아래의 설명들을 통해 차근차근 알아보도록하자. 왜 DFT를 하는가? 컴퓨터는 이산적인 값만 처리가 가능하다. 연속시간신호는 시간축(x축)에서 연속적이기 때문에 샘플링을 하여 이산시간 신호를 만들어야한다. 이와 같은 논리로, 이산시간신호에 대한 주파수변환인 DTFT결과를 확인..
유용
- Utils Windows terminal 설치 / 설정 변경하기 / 다양한 shell 추가하기 (anaconda prompt, cmder) 터미널 환경 컴퓨터의 interface는 크게 Graphical User Interface (GUI)와 Command Line Interface (CLI) 두 가지로 나눌 수 있다. 터미널 환경은 둘 중 CLI에 해당하고 마우스가 아닌 키보드로 명령(command)를 입력하는 방식을 통해 컴퓨터를 제어한다. 기본적으로 Window의 경우 윈도우키 + R 을 누르고 cmd 를 입력하여 터미널창을 열 수 있다. Shell (셸) 이란 무엇인가? 터미널의 명령어가 작동하는 interface 를 말한다. 셸을 통해 코어에 명령을 하면 코어에서 작동해서 리턴을 돌려준다. shell은 말그대로 껍데기라는 의미로, shell은 여러 종류가 존재한다. 윈도우의 powershell , cmd 등과 리눅스의 bashshe..
- Utils Window에서 Anaconda 가상환경 생성/활성화/삭제 아나콘다는 python기반 데이터분석을 위한 오픈소스를 모아놓은 것이다. 프로젝트마다 개별적으로 가상환경을 구축할 수 있어 프로젝트별 독립적인 라이브러리 관리가 가능하다. 가상환경에서 그 프로젝트에 필요한 라이브러리를 명령어 한 줄로 다운로드 할 수 있다. 이곳 에서 anaconda를 다운로드할 수 있고, anaconda prompt를 켜서 가상환경을 생성하고, 활성화, 삭제하는 방법을 알아보자. 가상환경 생성 맨 뒤에 anaconda를 붙여주면 spyder, jupyter notebook등을 같이 사용 가능하다. conda create -n 가상환경이름 python anaconda 가상환경 활성화 conda activate 가상환경이름 가상환경 패키지 확인 conda list 가상환경 정보 확인 con..
- Utils Window에서 GPU사용량 모니터링(nvidia-smi/ 작업 관리자) nvidia-smi 1. cmd창 열기(명령 프롬프트) 2. nvidia-smi.exe 경로 접근 cd C:\Program Files\NVIDIA Corporation\NVSMI 3. nvidia-smi.exe 실행 nvidia-smi.exe 4. 환경변수 설정 매번 경로로 접근하기 귀찮기 때문에 환경변수로 설정해두자. 먼저 시스템 환경변수 편집에 들어간다. path에 exe파일의 경로를 추가한다. cmd창을 한번 껐다가 켜면 아래와 같이 경로에 접속하지 않아도 실행 가능하다. 작업 관리자 검색으로 작업 관리자를 켜서 gpu에서 노란 하이라이트 친 부분을 클릭해 3D에서 Cuda로 변경한다.