8월 26일에 총장님과 교수님들의 30주년 중간 보고 회의가 있다고 한다.

 

약 1년 간 연구/개발한 결과물의 중간 점검이랄까?

(기간으로 따지면 최종 시연 1달 전 마감 회의 느낌이지만..)

 

회의를 위한 영상 및 발표자료를 교수님께 요청받았다.

 

세미나 중간 중간 보고했던 진행 상황에 대한 내용들을 정리하고,

 

현재까지 개발한 결과들을 취합하여 영상을 촬영해본다.

 

본의아니게 우리 미션이 군집드론이 추가되버려서

 

생각보다 할 일이 많아졌다.

 

영상 제작이 목적이므로,

 

단일드론 결과물들은 rosbag 파일을 활용하였다.

 

군집드론은 LED 빛이 두드러지게 보여져야해서

 

저녁 이후부터 촬영하다보니 시간이 금방 새벽을 넘어갔다.

 

사실, 타학부 교수님이 지도학생들과 작품 촬영 중에 있으셔서 기다린 점도 없잖아 있다.

(밤 늦게까지 학생들과 함께 연구/개발하시는 모습... 참 대단하시다.)

 

촬영이 다 끝나고 교수님께 영상을 보낸 후 돌아가는 길.

 

이런 날은 역시 뒤풀이가 빠질 수 없다.

 

코로나로 인해 가게들이 문을 일찍 닫다보니

 

그냥 편의점에서 맥주를 사와서 먹는다.

(당연히 열심히 한 날에는 무엇이든 사준다.)

지금까지 열심히 같이 잘 개발해왔다는 칭찬과 함께

 

술자리의 필요성, 협상의 중요성, 말(言)의 힘, 제테크에 대한 관심 등 인생사 팁들을 준다.

 

이런저런 이야기를 주고 받다보니 어느덧 2시 즈음이 돼서

 

알딸딸한 상태로 귀가한다.

 

우리학교의 30주년 행사... 잘 끝맺을 수 있으면 좋겠다.

 

 

 

 

'Research > Projects' 카테고리의 다른 글

Audio pitch estimation  (0) 2021.07.19
pyaudio  (0) 2021.06.21

앞서, librosa, pyaudio 라이브러리를 활용하여 마이크로부터 audio를 실시간으로 추출, time/frequency domain에서 audio를 분석하는 방법에 대해 살펴보았다. 사물놀이 악기들의 소리를 주파수 Spectrum, Mel Spectrum 등에서 분석해보았으나 각각의 악기들이 가지고 있는 고유한 주파수의 영역이 넓어 분류하기가 어려웠다. 대안으로 사물놀이 공연 전체의 beat/tempo 또는 pitch에 매칭하는 방법을 생각해보았다.

 

이러한 관점에서 Google의 tensorflow model hub를 살펴보던 중 SPICE(Self-Supervised Pitch Estimation)이라는 모델을 찾았다. SPICE는 monophonic audio의 fundamental frequency를 추정하는 모델, pitch 추정 모델,이다. SPICE는 annotated data가 없을 때 pitch 추정 모델을 훈련하는 방식을 제안하였으며, 사람이 일반적으로 absolute pitch보다 relative pitch를 훨씬 쉽게 추정할 수 있다는 observation에서 영감을 받았다고 한다. (그래서 모델 구조 또한 그 영감을 반영하고 있다.) Deep learning 기반의 Pitch Estimation(예. CREPE) 알고리즘과 다른 점은 Annotated data가 없을 때, 즉 unlabeled data를 다루기 위하여 self-supervised learning 기법을 사용한 점이다.

* Self-supervised learning 기법에 대한 설명은 아래 참조를 확인

 

SPICE의 간략한 모델 architecture는 아래 그림과 같다. 모델의 Input은 Constant Q Transform으로 변환한 CQT 프레임이다. SPICE의 저자는 Constant Q Transform(CQT)이 다음과 같은 장점이 있다고 하였다.

Indeed, the CQT filter bank computes a wavelet transform [16], and wavelets can be effectively used to represent the class of locally periodic signals. 

앞서 말한 바와 같이 저자가 받은 영감을 모델에 그대로 반영하고 있다.

먼저, 2개의 CQT 프레임(pitch가 shifted된 frame과 아닌 frame)이 shared weighted를 갖는 2개의 Encoder에 input으로 넣어진다. Loss는 Encoder의 출력 간 차이가 상대적인 pitch 차이에 비례하도록 설계됐다. 즉, self-supervised learning에서 Pretext task(논문에서는 auxiliary task로 표현)에 해당하는게 바로 이 pitch difference를 추정하는 것이다.

Downstream task는 input 프레임에서 절대 pitch 값을 추정하는 pitch estimation이라고 할 수 있다. 더 상세한 내용은 저자의 논문을 읽어보기를..

Gfeller, Beat, et al. "SPICE: Self-supervised pitch estimation." IEEE/ACM Transactions on Audio, Speech, and Language Processing 28 (2020): 1118-1128.

 

Simplified SPICE Model Architecture

구글에서는 SPICE를 Freddie METER에 실제로 사용 중에 있다고 한다.

https://freddiemeter.withyoutube.com/

 

 

Constant-Q Transform 참조

출처 : http://marte.dongguk.edu/files/research_444455285-Spectrum%20Analysis_Constant%20Q%20filter%20(5).pdf 

 

 

 

Self-Supervised Learning 참조

self-supervised learning이란 Labeling 작업에 들어가는 노력 및 비용을 해결할 수 있는 방법 중 하나.

Unlabeled dataset을 input으로 받아 사용자가 정의한 문제(pretext task)를 network가 학습하게 하여 데이터 자체에 대한 이해도를 높이고, pretext task에서 나온 pre-training된 network를 궁극적으로 사용자가 풀고자 하는 문제인 downstream task에 transfer learning 하는 방법

출처 : http://dmqm.korea.ac.kr/activity/seminar/284

Self-Supervised learning - 그림 또한 위 글에서 발췌함

 

- Reference

https://blog.tensorflow.org/2020/06/estimating-pitch-with-spice-and-tensorflow-hub.html

https://ai.googleblog.com/2019/11/spice-self-supervised-pitch-estimation.html

 

http://dmqm.korea.ac.kr/activity/seminar/284

https://greeksharifa.github.io/self-supervised%20learning/2020/11/01/Self-Supervised-Learning/

https://hoya012.github.io/blog/Self-Supervised-Learning-Overview/

https://github.com/jason718/awesome-self-supervised-learning

 

'Research > Projects' 카테고리의 다른 글

30주년 연구 중간점검과 간단한 뒤풀이  (0) 2021.08.27
pyaudio  (0) 2021.06.21

 

실시간 음향 처리를 위한 python module 사용법

 

참조한 youtube link

https://www.youtube.com/watch?v=AShHJdSIxkY 

 

PyAudio는 cross-platform 오디오 I/O 라이브러리인 PortAudio에 대한 Python 바인딩을 제공한다.

 

PyAudio는 Python을 통해 Linux, Windows, Mac OS와 같은 다양한 플랫폼에서 오디오를 쉽게 재생/녹음할 수 있는 기능을 제공한다.

 

http://people.csail.mit.edu/hubert/pyaudio/

 

PyAudio: PortAudio v19 Python Bindings

PyAudio PyAudio provides Python bindings for PortAudio, the cross-platform audio I/O library. With PyAudio, you can easily use Python to play and record audio on a variety of platforms, such as GNU/Linux, Microsoft Windows, and Apple Mac OS X / macOS. PyAu

people.csail.mit.edu

 

CHUNK : the (arbitrarily chosen) number of frames the (potentially very long) signals are split into in this example

rate : Sampling rate

Channels : number of channels

format : Sampling size and format

input : Specifies whether this is an input stream

output : Specifies whether this is an output stream 

 

PyAudio와 librosa 같이 설치하기

 

Anaconda install

conda env 생성 후,

pip install librosa
conda install pyaudio

https://stackoverflow.com/questions/33513522/when-installing-pyaudio-pip-cannot-find-portaudio-h-in-usr-local-include

 

when installing pyaudio, pip cannot find portaudio.h in /usr/local/include

I'm using mac osx 10.10 As the PyAudio Homepage said, I install the PyAudio using brew install portaudio pip install pyaudio the installation of portaudio seems successful, I can find headers an...

stackoverflow.com

본 과제에서 요구하는 기능은 풍물/사물놀이 음향 데이터(form 마이크)를 받았을 때 harmonic과 percussive를 나누어 이를 활용하여 드론을 제어하는 것

컴퓨터에 연결된 blue yeti 마이크를 input channel로 audio stream을 받아서 이를 실시간으로 처리함

관련 코드

class AudioHandler(object):


    def __init__(self):
        self.FORMAT = pyaudio.paFloat32
        self.CHANNELS = 1
        self.RATE = 44100
        self.CHUNK = 1024 * 2
        self.p = None
        self.stream = None
        self.WAVE_OUTPUT_FILENAME = "output.wave"
        self.RECORD_SECONDS = 5
        self.frames = []
        self.data = []
        self.arr = np.array([])
        self.recording = True


    def start(self):
        self.p = pyaudio.PyAudio()
        self.stream = self.p.open(format=self.FORMAT,
                                  channels=self.CHANNELS,
                                  rate=self.RATE,
                                  input=True,
                                  output=False,
                                  stream_callback=self.callback,
                                  frames_per_buffer=self.CHUNK)

audio stream을 실시간으로 처리하기 위하여 stream_callback 활용, callback 함수를 call함

 

    def callback(self, in_data, frame_count, time_info, flag):
        numpy_array = np.frombuffer(in_data, dtype=np.float32)
        y_harmonic, y_percussive = librosa.effects.hpss(numpy_array)
        self.arr = np.append(self.arr,y_percussive)
        print(sys.getsizeof(self.arr))

해당 callback 함수 내 librosa 라이브러리를 활용하여 percussive audio data 구분

librosa.effects.hpss의 input은 numpy array를 받으며, output 또한 numpy array(harmonic / percussive)

np.append는 numpy array의 append

 

현재는 mainloop에서 특정 key 입력을 받으면 append된 numpy array를 wav 파일로서 출력하는 형태로 개발함

이 때 사용한 라이브러리는 soundfile

sf.write('output_percussive.wav',self.arr,self.RATE)

 

--> 마이크로부터 실시간으로 들어오는 audio stream을 time window로 구분, 구분된 stream의 평균 audio 세기에 따라 드론이 움직이는 함수 추가 개발 예정

 

2021.06.30. 추가

 

Real-time audio segmentation 관련 참조

 

https://github.com/tyiannak/pyAudioAnalysis

 

tyiannak/pyAudioAnalysis

Python Audio Analysis Library: Feature Extraction, Classification, Segmentation and Applications - tyiannak/pyAudioAnalysis

github.com

 

 

참조 블로그

https://hyongdoc.tistory.com/400?category=884319 

 

[파이썬으로 음성데이터 분석하기] 소리와 데이터의 형태

이번에는 음성 데이터를 분석하는 방법에 대해 다뤄보겠습니다. 아직 공부중이긴 합니다만, 지금까지 진행한 내역들에 대해 초심자의 마음으로 서술하고자 합니다. 혹시 잘못된 내용이 있으면

hyongdoc.tistory.com

 

https://dacon.io/competitions/official/235616/codeshare/1305?page=1&dtype=recent 

 

음성 중첩 데이터 분류 AI 경진대회

출처 : DACON - Data Science Competition

dacon.io

 

https://sanghyu.tistory.com/45

 

MFCC(Mel Frequency Cepstrum Coefficient)의 python구현과 의미

MFCC의 python 구현 python의 librosa 라이브러리를 이용해 쉽게 구현할 수 있다. import matplotlib.pyplot as plt import librosa.display import librosa import numpy as np path = 'sample1.wav' sample_rate..

sanghyu.tistory.com

 

사물놀이 주파수 관련 논문

https://www.kci.go.kr/kciportal/ci/sereArticleSearch/ciSereArtiView.kci?sereArticleSearchBean.artiId=ART001315664 

 

사물놀이의 사운드 분석을 통한 시공간적 표현에 관한 연구

사물놀이의 사운드 분석을 통한 시공간적 표현에 관한 연구 An Study on Visual Expression by Analysis of Analysis of Samulnori Sound 참고문헌(0) * 2019년 이후 발행 논문의 참고문헌은 현재 구축 중입니다. KCI에서

www.kci.go.kr

https://www.dbpia.co.kr/Journal/articleDetail?nodeId=NODE00536716 

 

[특집] 사물놀이 악기소리와 인간의 목소리 주파수 대역

논문, 학술저널 검색 플랫폼 서비스

www.dbpia.co.kr

 

 

 

 

Matplot for display spectrum

https://stackoverflow.com/questions/19181165/matplotlib-figure-as-a-new-class-attribute-how-to-show-it-later-on-command

 

Matplotlib figure as a new class attribute. How to show it later, on command?

I'm using Python 3 to analyze data from experiments. For that I created a Data class with load and fit methods and what I'd like to accomplish is that both methods define (or redefine) the attribut...

stackoverflow.com

 

https://gist.github.com/sshh12/62c740b329229c7292f2a7b520b0b6f3

 

Live mic -> live melspectrogram plot

Live mic -> live melspectrogram plot. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

MFCC 관련 설명 블로그

* https://brightwon.tistory.com/11

 

MFCC(Mel-Frequency Cepstral Coefficient) 이해하기

이 글은 음성/음악 등 오디오 신호 처리 분야에서 널리 쓰이는 특징값(Feature) 중 하나인 MFCC(Mel-Frequency Cepstral Coefficient)에 대해 정리한 글입니다. 알고리즘 구현보다는 MFCC의 전반적인 이해와

brightwon.tistory.com

 

http://keunwoochoi.blogspot.com/2016/03/2.html

 

음성/음악신호+머신러닝 초심자를 위한 가이드 [2편]

최근우 연구 관련 블로그.

keunwoochoi.blogspot.com

 

https://hyunlee103.tistory.com/45

 

오디오 데이터 전처리 (3) Cepstrum Analysis

오디오 데이터 전처리 (2)에서 이어지는 글입니다. 2편에서는 waveform에 푸리에 변환을 통해 spectrum을 뽑고, 각 frame을 옆으로 쌓아 시간 정보를 살려주는 spectrogram에 대해 알아봤습니다. 3편에서는

hyunlee103.tistory.com

 

'Research > Projects' 카테고리의 다른 글

30주년 연구 중간점검과 간단한 뒤풀이  (0) 2021.08.27
Audio pitch estimation  (0) 2021.07.19

+ Recent posts