연세대ㆍ카이스트 공동 연구팀이 홀로 사는 젊은 성인들의 사회적인 연결을 도와주는 소셜 네트워킹 로봇 ‘프리보(Fribo)’를 개발했다.
연세대와 카이스트에서 HCI, BMI 등 분야를 연구하고 있는 9명의 연구자들은 지난달 'ACM/IEEE' 주최로 열린 제13차 연례 컨퍼런스(HRI 2018)에서 소셜 네트워킹 로봇 '프리보'에 관한 논문(제목:Fribo: A Social Networking Robot for Increasing Social Connectedness Through Sharing Daily Home Activities from Living Noise Data)을 발표해 ‘우수 논문상(Best Paper Award:HRI User Studies‘)을 수상했다. 프리보는 독신자를 위한 소셜 네트워킹 로봇이다. 두개의 눈을 가진 검은 고양이 모양의 탁상형 로봇으로, 소셜 로봇처럼 생겼으나 ‘소셜 로봇’과는 개념이 다르다. 프리보간에 네트워크를 형성해 사회적인 상호 작용을 돕는다.
프리보는 현관문 여닫는 소리, 냉장고 여닫는 소리, 세탁기나 청소기 움직이는 소리, 옷장 여는 소리 등 생활 속에서 발생하는 소음을 주목한다. 생활 속의 소음을 인식해 다른 곳에 있는 프리보에 알려주거나 친구 그룹을 형성하고 있는 프리보 전체 네트워크에 알려주기도 한다. 초음파 센서, 온도, 습도, 광센서 등을 갖추고 있어 사람이 집안에 있는지 외출했는지를 파악할 수 있다.
본 연구는 Giannakopoulos(2015) 의 선행연구 결과를 참고하였고, 해당 연구에서 개발한 pyAudio -Analysis 라이브러리를 활용하였다. Python으로 작성된 해당 라이브러리는 다양한 분석 기법을 제공하여 음성 및 음향 분석 분야에 광범위하게 활용이 가능하며, 미리 학습된 모형이 제공되어 본 연구에서 진행하는 방식에 적합한 것으로 판단하였다. 본 연구에서는 해당 라이브러리의 기능을 활용하여 실제 일상생활에서 얻어진 소음 데이터를 수집하여 전 처리, 특징 추출, 분류 과정을 수행하였다.
특징 추출을 위한 알고리즘에는 kNN, SVM, Random Forest, gradient boosting, Extra Trees 등이 있으나, 이 중 SVM은 복잡한 패턴 인식, 분류 문제에 뛰어난 성능을 발휘하여 문자, 얼굴 및 물체 인식 등의 실제분야에 성공적으로 적용되고 있다. 따라서 본 연구에는 ‘SVM’이 여러 학습 방법에 비해 다소 계산량이 많지만, 가장 우수한 성능을 보여 적합하다고 판단하였다.
서포트 벡터 머신(support vector machine, SVM)은 기계 학습의 분야 중 하나로 패턴 인식, 자료 분석을 위한 지도 학습 모델이며, 주로 분류와 회귀 분석을 위해 사용한다. 두 카테고리 중 어느 하나에 속한 데이터의 집합이 주어졌을 때, SVM 알고리즘은 주어진 데이터 집합을 바탕으로 하여 새로운 데이터가 어느 카테고리에 속할지 판단하는 비확률적 이진 선형 분류 모델을 만든다. 만들어진 분류 모델은 데이터가 사상된 공간에서 경계로 표현되는데 SVM 알고리즘은 그 중 가장 큰 폭을 가진 경계를 찾는 알고리즘이다. SVM은 선형 분류와 더불어 비선형 분류에서도 사용될 수 있다. 비선형 분류를 하기 위해서 주어진 데이터를 고차원 특징 공간으로 사상하는 작업이 필요한데, 이를 효율적으로 하기 위해 커널 트릭을 사용하기도 한다.
SVM 학습 알고리즘을 사용하여 의 일상생활 소음 데이터 [조명 켜는 소리], [컴퓨터 재부팅 소리], [대문 여닫는 소리], [서랍 여닫는 소리], [책 넘기는 소리], [냉장고 여닫는 소리]의 특징을 추출한 기계학습 데이터 세트를 준비하였다. 소음 데이터의 특징 추출과 같이 SVM 학습 알고리즘을 사용하였으며, 전 처리, 특징 추출, 분류 과정을 수행하여 기계학습된 소음 데이터와 비교하여 보았다.
집안소음을 인식하는 머신러닝 코드
def speakerDiarization(fileName, numOfSpeakers, mtSize=2.0, mtStep=0.2, stWin=0.05, LDAdim=35, PLOT=False):
[Fs, x] = audioBasicIO.readAudioFile(fileName)
x = audioBasicIO.stereo2mono(x)
Duration = len(x) / Fs
[Classifier1, MEAN1, STD1, classNames1, mtWin1, mtStep1, stWin1, stStep1, computeBEAT1] = aT.loadKNNModel(os.path.join("data","knnSpeakerAll"))
[Classifier2, MEAN2, STD2, classNames2, mtWin2, mtStep2, stWin2, stStep2, computeBEAT2] = aT.loadKNNModel(os.path.join("data","knnSpeakerFemaleMale"))
[MidTermFeatures, ShortTermFeatures] = aF.mtFeatureExtraction(x, Fs, mtSize * Fs, mtStep * Fs, round(Fs * stWin), round(Fs*stWin * 0.5))
MidTermFeatures2 = numpy.zeros((MidTermFeatures.shape[0] + len(classNames1) + len(classNames2), MidTermFeatures.shape[1]))
for i in range(MidTermFeatures.shape[1]):
curF1 = (MidTermFeatures[:, i] - MEAN1) / STD1
curF2 = (MidTermFeatures[:, i] - MEAN2) / STD2
[Result, P1] = aT.classifierWrapper(Classifier1, "knn", curF1)
[Result, P2] = aT.classifierWrapper(Classifier2, "knn", curF2)
MidTermFeatures2[0:MidTermFeatures.shape[0], i] = MidTermFeatures[:, i]
MidTermFeatures2[MidTermFeatures.shape[0]:MidTermFeatures.shape[0]+len(classNames1), i] = P1 + 0.0001
MidTermFeatures2[MidTermFeatures.shape[0] + len(classNames1)::, i] = P2 + 0.0001
인식결과 값을 저장하는 코드
fileName = "data/diarizationExample.wav"
def speakerWrapper(inputFile, numSpeakers, useLDA):
if useLDA:
aS.speakerDiarization(inputFile, numSpeakers, PLOT = True)
else:
aS.speakerDiarization(inputFile, numSpeakers, LDAdim = 0, PLOT = True)
speakerDiarization(fileName, numOfSpeakers, 2.0, 0.2, 0.05, 35, True)
speakerWrapper(fileName, 2, None)
실생활 소음을 11분간 녹음하여 묵음 처리한 결과, 92개의 소음 데이터가 수집되었다. 이 중, 사람의 말소리가 41개, 노이즈가 20개로 분류되어 분석에서 제외하였고, 수집 대상인 일상생활 소음으로 인식된 소음 데이터는 21개였다. 실제로 입력된 일상생활 소음 19개는 모두 정확하게 분류되었으나, 2개의 노이즈를 일상생활 소음으로 분류하는 오경보가 있었다. 예측의 정확도는 90.48%로 나타났다.
프리보 네트워크를 형성하고 있는 사용자들은 카카오톡 등 소셜 미디어를 통해 사람들간 사회적인 소통과 연결을 강화할 수 있다. 가령 퇴근해서 문을 열고 집에 들어가면 프리보가 이를 인식해 다른 프리보에 알려주고 이후 서로 카카오톡으로 안부를 물을 수 있다. 세탁기나 전자레인지를 돌리면 프리보가 이를 인식해 프리보 네트워크를 통해 알려줄 수도 있다. 그러면 소셜 미디어로 친구들간에 “빨래가 밀렸어“, ”무슨 요리 해먹을 건데?“ 등등 대화를 유도할 수 있다.
‘IEEE 스펙트럼’은 프리보가 대부분 소셜 미디어와 달리 가능한한 다른 사람의 프라이버시를 보장한다는 특징을 갖고 있다고 지적했다. 프리보를 통해 메시지를 보내더라도 익명성이 어느 정도 보장된다는 것이다. 처음에는 누구한테 프리보 메시지가 왔는지 잘 모른다. 다른 사람의 관심을 유도할뿐이다. 하지만 프리보를 통해 메시지를 보내고 식탁을 노크하는 방식으로 가까운 이웃에 대화를 하고 싶다는 신호를 보내면서 사회적 상호작용을 돕는다. 프리버는 사회적인 상호작용을 촉진하는 일종의 ‘트리거(trigger)’인 셈이다.
집에 들어서면 까만 고양이 로봇이 기다렸다는 듯 눈을 반짝 뜹니다. “이제 온 거야? 친구 두 명은 벌써 집에 와있어. 최근에 TV를 켰네?”라고 알려주죠. 친구의 집에 있는 또 다른 고양이 로봇은 친구에게 ‘친구가 현관문을 열었다’고 알려줍니다. 로봇은 냉장고 문을 열거나 세탁기를 돌리고, 전자레인지를 가동시키고 TV를 켜는 것도 알아챕니다. 곧바로 네트워크로 연결된 친구들에게 알려주죠. 연세대·카이스트 공동연구로 만들어진...
✓ Java, C, C++, HTML, Javascript, CSS, Python, MySQL, Scratch
✓ Flash, PhotoShop, Illustrator, Sketch, Zeplin, AdobeXD, Protopie
✓ Service Blueprint, Customer Journey Map, Infograohic, FGI, Pilot test
✓ Double diamond, Design Sprint, Design Thinking
✓ Aftereffect, Premiere