Backend
🔉

딥러닝과 음성 처리를 통한 응급 음성 분류 API

0. Repo 및 프로젝트 수상 경력

레포
Audio_classification_fastapi
HaJunYoo
수상 목록
1.
한국외국어대학교 산업경영공학과 졸업 해커톤 프로젝트 최종 1등
2.
2023 한이음 ICT 프로젝트 (진행중)

1. 프로젝트 소개

1) 프로젝트 개요

사용 모델 : Densenet, Early fusion(STFT, Mel Spectrogram, MFCC), KoBERT, Late Decision fusion(Softmax)
사용 언어 : python
사용 대표 라이브러리 : Apache Airflow, librosa, numpy, pytorch, fastapi, jinja2, boto3, timm, densenet, kobert
KoBERT 설치는 https://github.com/SKTBrain/KoBERT 참고
Local PC : Macbook Pro M1
S3 : AWS S3
AWS EC2 : t2.medium ubuntu 20.04
프로젝트 간단 소개
프로젝트 구조

프로젝트 소개

범죄 상황에서 발생하는 음성 데이터의 위급 상황(성추행, 강도, 절도, 폭행, 도움 요청)과 일반(정상) 상황을 분류를 분류하는 API를 개발.
[데이터 엔지니어링]
ETL 프로세스에 맞춰 로컬에 저장되어 있는 음성 데이터들을 Librosa를 활용하여 2차원 이미지들로 변환 후, AWS S3에 Hook을 시켜 업로드를 하는 DAG를 구축
[모델링]
S3에 적재된 위급 음성으로부터 추출된 여러 컨텍스트 정보들을 활용하여 위급 음성을 분류하는 API 를 구축하였습니다. 이를 위해 Feature Extractor 모델로써 Densenet과 KoBERT를 사용하여 하였습니다 음성 피쳐 추출 모델의 일반화 성능 향상을 위해 STFT, Mel-Spectrogram, MFCC를 Early fusion을 통해 음성 피쳐를 추출합니다. 이후, Imagenet 기반의 가중치를 가지는 Densenet를 Early Fusion 피쳐에 Fine-tuning 한 후, 오디오 데이터로부터 피쳐를 추출합니다. 하지만 음성 데이터만으로는 완벽한 분류를 하지 못하기 때문에 음성 데이터에서 AWS Transcribe를 통해 추출된 텍스트 데이터를 함께 사용하였습니다. 한국어 분류에 용이한 KoBERT 모델을 Fine-tuning 한 후, 텍스트 데이터에서 피쳐를 추출합니다. 위 2개의 피쳐를 Mean Concatenate 형식으로 이어붙인 후, softmax를 활용한 Late Fusion 과정을 통해 최종 결과를 추론하였습니다.
[API]
해당 분류 API를 pytorch와 FastAPI, Docker를 사용하여 EC2 환경에 구축하였습니다. 사용자가 음성 데이터를 어플을 통해 ML server API에 S3 URI와 함께 요청을 하면 API에서 응급 상황 여부를 보다 더 정확하게 판별할 수 있게 구성하였습니다.

2. 상황 분류 정보 제공 (위급 음성 분류 로직)

ML 로직의 목표는 현장 오디오, 상황 분류를 통해 상세한 응급 상황을 전달해주는 것입니다.
앞선 목표를 이루기 위해서 해결해야할 ML 로직의 문제를 정의해보았습니다. 크게 톤을 통한 위급 분류와 음성을 통한 상세 분류 문제가 있습니다.
앞서 설정한 문제를 해결하기 위해 구현한 ML 서버의 처리 로직은 다음과 같습니다. ML 서버의 로직은 크게 5가지 단계로 구성됩니다. 첫 번째로 오디오 데이터를 수집하고, 이어서 오디오 피쳐 엔지니어링을 수행합니다. 그리고 오디오 응급 체크를 실행한 후, 오디오와 텍스트에서 피쳐를 추출합니다. 마지막으로 오디오와 텍스트 피쳐를 결합하여 라벨을 예측합니다.

1단계 : DataSet 설명

그 과정 중 첫 단계인 오디오 데이터 확보 과정은 다음과 같습니다. 위급 상황 레이블 정의와 응급 음성 데이터 구축으로 나누어집니다. 위급 상황 분류체계의 사전 정의는 행정안전부의 위급상황 분류체계를 참고하였습니다. 위급 상황은 크게 강제추행, 강도, 절도, 폭력범죄, 도움요청 그리고 정상 상황은 실내 소리, 실외 소리, 일반 대화로 이루어져 있습니다.
목소리 톤이 존재하더라도 일상적인 대화는 위급 상황이 아닌 정상 범주로 분류되어야 합니다. 아이엠알(위급 상황 음성, 음향) 데이터에서 제공되는 정상 범주 내의 실내와 실외 라벨 데이터는 사람의 대사가 아닌 주변 소리(사물, 공간의 의성어, 의태어, 공간 내에서의 군중 잡음)만 존재합니다. 따라서 기존 AIHUB 아이엠알 위급 상황 음성 음향에서 제공되는 Capsule-net 모델은 정상 상황의 대사가 포함된 음성 데이터를 정상으로 분류하는 데 어려움이 있습니다.
위급 음성 내 실내, 실외 데이터
정상 대사가 포함된 데이터
이에 자유 대화 음성 데이터를 AIHUB로부터 추가적으로 가져와 데이터셋을 구축하였습니다. NHN 다이퀘스트에서 구축한 일상 대화가 담긴 오디오 데이터 세트인 성인 남녀 및 영유아 자유 대화 데이터를 AIHUB로부터 제공받을 수 있습니다. 이를 이용하여 응급 음성 데이터셋과 성인 남녀, 영유아 자유대화 데이터를 병합하여 데이터 세트를 구축하였습니다. 정상적인 일상 대화가 포함된 음성 데이터를 추가하여 일반 대화 역시 정상으로 분류할 수 있게 하였습니다.
데이터 종류
데이터 출처
위급상황 음성/음향
출처 : 아이엠알
자유 대화 음성 데이터 (성인 남녀, 영유아)
출처 : NHN 다이퀘스트
원본 음성 데이터셋에서 고유 오디오 대사를 기준으로 데이터 샘플링을 진행하여 약 43GB를 추출하여 진행하였습니다. 샘플링 시 주의한 점은, 데이터셋에서 대사가 누락되는 것을 방지하여 상황의 고유성을 보존하였습니다.
8가지 상황 라벨에 대한 총 음성 데이터셋은 훈련 데이터 16571개, 테스트 데이터는 4200개로 구성하여 약 3:1의 비율로 구성했습니다.
음성 학습 데이터 : 총 37GB
Train data
정상-대사
823
실외
1132
실내
2865
강도범죄
3383
강제추행(성범죄)
758
절도범죄
2012
폭력범죄
4538
도움요청
1060
16571
테스트 음성 데이터 : 6GB
Test data
정상-대사
623
실외
234
실내
354
강도범죄
613
강제추행(성범죄)
625
절도범죄
610
폭력범죄
604
도움요청
577
4200
실외, 실내, 정상 대사 라벨은 정상 라벨로 취급됩니다. 이에 따른 아래 실험에서 사용될 라벨은 아래와 같습니다. 6개의 라벨 : 정상, 강도범죄, 강제추행(성범죄), 절도범죄, 폭력범죄, 도움요청
2개의 라벨 : 정상(노랑), 위급(빨강)

2단계 : Feature Engineering

Early Fusion(STFT, MelSpectrogram, MFCC)

위와 같이 구축된 음성 데이터를 학습시키기 전, 모델에게 의미있는 특징을 학습시키기 위해 고려해야할 사항으로는 피쳐 엔지니어링이 있습니다. 단순 음성의 파동을 이용한 웨이브폼 형태로는 음성의 제대로 된 분류가 어렵습니다. 음성 분류의 일반화 성능을 높이기 위해 Early Fusion을 추가로 사용했습니다.
Early fusion은 다양한 입력 특징을 조합하고, 이들을 초기 단계에서 결합하여 하나의 통합된 특징 벡터로 만드는 기술입니다. 이는 각각의 특징들이 개별적으로 추출된 후 결합되는 late fusion과는 다릅니다. Early fusion은 다양한 특징들 사이의 상호작용 및 상호보완성을 이용하여 더 풍부한 특징 표현을 얻을 수 있습니다.
Early fusion의 장점은 다음과 같습니다:
1.
정보 손실 최소화: 다양한 특징들을 초기 단계에서 결합함으로써 정보의 손실을 최소화할 수 있습니다. 각 특징이 개별적으로 사용될 때보다 종합된 특징 벡터는 더 많은 정보를 포함할 수 있습니다.
2.
상호작용 및 보완성 강화: 다양한 특징들이 조합되면 서로 다른 관점에서 데이터를 해석할 수 있으며, 이는 각 특징이 가진 강점을 상호보완적으로 활용할 수 있음을 의미합니다. 이는 모델의 데이터 인식 성능을 향상시키는 데 도움이 될 수 있습니다.
3.
더 풍부한 특징 표현: 초기(Early) 단계에서 다양한 특징들을 결합하면 입력 데이터의 특징 표현이 더욱 풍부해집니다. 이는 분류 모델이 더 의미 있는 특징을 학습하고 구분할 수 있도록 돕는데 도움이 됩니다.
이렇듯 Early fusion은 다양한 특징들 사이의 상호작용 및 상호보완성을 이용하여 더 풍부한 특징 표현을 얻을 수 있습니다. Early Fusion에는 다음과 같은 방법이 존재합니다.
1.
소스로부터 추출된 다수의 피쳐를 각각의 인코더 모델로 피쳐를 추출 후, 산출값을 합치는 방법
2.
소스로부터 추출된 피쳐를 이어붙인 후, 인코더 모델로 피쳐를 추출하는 방법
여기에서는 지연 시간을 줄이기 위해 모델의 개수를 최소한으로 사용하는 후자의 방식을 선택하겠습니다.
Plant species classification using flower images—A comparative study of local feature representations, 13p, Marco Seeland1
위의 기대효과를 이끌어내기 위해서 음성으로부터 추출된 2차원 표현 벡터인 STFT, MFCC, Mel Spectrogram를 각각 정규화시킨 후, 이어 붙여 인풋 벡터로 사용했습니다.
zt=Concat(st,mt,ct)=[st;mt;ct]\begin{align} \mathbf{z}_t &= \text{Concat}(\mathbf{s}_t, \mathbf{m}_t, \mathbf{c}_t) \\ &= [\mathbf{s}_t; \mathbf{m}_t; \mathbf{c}_t] \end{align}
(64,64)의 2차원 피쳐를 이어 붙입니다(Concatenate).
t는 시간 인덱스입니다.d
S : STFT, M : Mel Spectrogram, C : MFCC
아래는 Early Fusion에 이용된 STFT, MFCC, Mel Spectrogram 피쳐들에 대한 설명입니다.
MFCC의 변환 과정 중에 생성되는 일련의 스펙트로그램(STFT, MFCC, Mel Spectrogram)들을 피쳐 엔지니어링에 활용하였습니다.
STFT (단기 푸리에 변환,Short-Time Fourier Transform)
STFT는 주파수 변화를 시간적으로 추적하는 데 사용되며, 시간 축과 주파수 축으로 이루어진 2D 스펙트로그램을 생성합니다.
STFT는 시간 영역의 신호를 주파수 영역으로 변환하는 변환 기술입니다.
시간적인 특성 변화를 분석하기 위해 신호를 작은 윈도우로 분할하고, 각 윈도우에 대해 Fourier Transform(퓨리에 변환)을 수행합니다.
결과적으로, 주파수와 시간의 2D 표현인 스펙트로그램(Spectrogram)이 생성됩니다.
STFT는 오디오 신호의 주파수 변화를 시간적으로 추적하는 데 사용됩니다.
Mel-Spectrogram(멜 스펙트로그램)
Mel-spectrogram은 STFT를 Mel 스케일로 변환하여 주파수 축을 더 인간 친화적인 방식으로 표현한 것입니다. 주로 음악 분류나 음성 처리에 사용됩니다.
Mel-spectrogram은 STFT를 기반으로 만들어진 주파수 영역의 표현입니다.
Mel 스케일은 인간의 청각 특성을 모델링한 척도로, 주파수 대역을 인간의 청각 특성에 더 잘 부합하도록 변환합니다.
Mel-spectrogram은 STFT의 주파수 영역을 Mel 스케일로 변환하여 표현한 것으로, Mel 스케일의 밴드를 사용하여 주파수 축을 얻습니다.
Mel-spectrogram은 오디오 신호의 주파수 컨텐츠를 더 인간 친화적인 방식으로 표현합니다. 주로 음악 분류, 음성 인식 등에서 사용됩니다.
MFCC(멜-주파수 케프스트럼 계수, Mel-frequency cepstral coefficients)
MFCC는 Mel-spectrogram을 로그 스케일로 변환하고, 이산 코사인 변환(DCT)을 적용하여 주파수 축을 MFCC 계수로 변환한 것입니다. MFCC는 음성 및 음악 신호의 특징을 캡처하는 데 주로 사용되며, 음성 인식이나 화자 인식과 같은 작업에 적용됩니다.
MFCC는 주로 음성 및 음악 신호의 특징 추출에 사용되는 메소드입니다.
MFCC는 Mel 스케일로 변환된 스펙트로그램의 주파수 영역을 적절한 방식으로 변환하여 표현합니다.
주로 다음과 같은 단계로 이루어집니다
1.
STFT를 사용하여 스펙트로그램을 얻습니다.
2.
Mel 스케일로 변환된 스펙트로그램을 계산합니다.
3.
로그 스케일로 변환한 뒤, 이산 코사인 변환(DCT)을 적용하여 주파수 축을 MFCC 계수로 변환합니다.
MFCC는 주파수의 청각적인 특성을 캡처하고, 신호의 주파수 컨텐츠와 시간적인 특성 정보를 모두 포착하는 효과적인 방법입니다. 일반적으로 MFCC는 음성 및 음악 신호 처리에서 많이 사용되며, 음성 인식, 화자 인식, 음악 장르 분류 등 다양한 음성 관련 작업에 활용됩니다.

Audio Feature Extraction Model : Densenet

Early Fusion 이후 사용할 음성 모델인 Densnet에 관한 내용입니다.
Densenet 소개
DenseNet은 컴퓨터 비전 작업을 위해 개발된 심층 신경망 구조입니다. 이 모델은 밀집한 연결 구조를 특징으로 하며, 각 층의 출력이 이전 층의 입력으로 직접 전달되는 방식으로 구성됩니다. 이러한 밀집한 연결 구조는 이미지 분류, 객체 감지, 세그멘테이션 등 다양한 컴퓨터 비전 작업에서 우수한 성능을 발휘합니다.
Layer간의 정보가 흘러가는 것을 개선하기 위해, DenseNet에서는 ResNet과는 조금 다른 연결 패턴을 제안했습니다. 아래 그림처럼 DenseNet에서는 모든 이전 레이어의 출력 정보를 이후의 레이어의 입력으로 받아오는 방법을 사용합니다.
여기서 [x0,x1,x2,][x_0,x_1,x_2,…][0,1,,Lth][0,1,…,L_{th}] 레이어에 의해 생성된 기능 맵의 연결을 나타냅니다.
위와 같이, DenseNet의 주요 구성 요소는 밀집 블록(Dense Block)입니다. 밀집 블록은 여러 개의 층으로 구성되며, 각 층에서 생성된 특성 맵이 모든 이후 층에 직접 전달됩니다. 이를 통해 네트워크의 깊이가 깊어져도 그래디언트 흐름을 유지할 수 있으며, 많은 수의 특성이 동시에 사용될 수 있습니다. 또한, 밀집한 연결 구조는 특성 재사용을 촉진하며, 매개 변수의 효율적인 사용을 가능하게 합니다. 이러한 연결 구조는 모델을 경량화하는 데 도움이 됩니다.
DenseNet은 ResNet보다 몇 가지 측면에서 더 나은 성능을 보일 수 있습니다.
위의 표 그림과 같이 Densenet은 Resnet 모델보다 적은 파라미터로 낮은 Validation error을 기록할 수 있게 됩니다.
또한 Densenet은 이번 프로젝트에서의 주요 피쳐인 스펙트로그램 분류에 있어 다음과 같은 이점을 가지고 있습니다.
Densenet in Spectrogram Classification
1.
시간 특징 공유: 오디오 스펙트로그램은 시간 축과 주파수 축으로 구성된 2D 이미지입니다. DenseNet의 밀집한 연결 구조는 각 층에서 생성된 특성 맵을 이후의 모든 층에 전달하여, 시간적으로 인접한 특성 사이의 관계를 보다 잘 포착할 수 있습니다.
2.
그래디언트 흐름 유지: DenseNet은 그래디언트 흐름을 효과적으로 유지하는 장점이 있습니다. 오디오 스펙트로그램 분류와 같은 복잡한 작업에서는 깊은 신경망을 사용해야 할 때가 많은데, DenseNet의 밀집한 연결 구조는 그래디언트 소실 문제를 완화할 수 있습니다.
3.
매개 변수 효율성: DenseNet은 입력 데이터에 대해서도 작은 필터 크기를 사용하고, 밀집한 연결 구조를 통해 매개 변수의 수를 줄일 수 있습니다. 이는 모델의 경량화와 메모리 사용량 감소에 도움이 됩니다.
4.
다양한 컨텍스트 학습: DenseNet의 밀집한 연결 구조는 다양한 컨텍스트를 학습하는 데 도움이 됩니다. 각 층의 출력이 이후의 모든 층에 전달되기 때문에, 이전 층에서 학습된 특징과 현재 층에서 새로운 특징이 결합되어 다양한 수준의 추상화를 달성할 수 있습니다.
5.
효율적인 특성 재사용: DenseNet은 각 층의 출력을 이후의 모든 층에 전달하는 것이 특징입니다. 이는 특성 재사용을 촉진하고, 모델이 학습하는 특성의 양을 증가시킵니다. 오디오 스펙트로그램 분류에서는 중요한 특징이 시간적으로 연속적으로 나타날 수 있으므로, 이러한 특성 재사용은 분류 성능을 향상시키는 데 기여할 수 있습니다.
Densenet 훈련 파라미터
Epoch
10
learning rate
1e-4
optimizer
Adam
loss function
CrossEntropyLoss
pretrained
True
위의 2개 모델은 모두 사전 훈련된 모델을 기반으로 Fine tuning 과정을 거친 것입니다. 단일 Mel spectrogram 피쳐에서의 훈련 및 실험 결과, Densenet-121 모델이 이전 ResNet-18 모델보다 더 나은 성능을 보였습니다. Precision(약 47%)과 Accuracy(약 20%)에서도 큰 향상을 보였습니다.
Transfer Learning과 Finetuning이 필요한 이유
이렇게 개발된 모델은 학습 데이터에서는 높은 훈련 정확도를 보였지만, 실제 테스트 환경에서는 분류 성능이 떨어지는 문제가 있었습니다. 이를 해결하고 일반화 성능을 향상시키기 위해 ImageNet에서 사전 학습된 가중치를 초기값으로 사용하고 Fine Tuning하는 방식을 선택했습니다. 이를 위해 DenseNet 모델을 이용하여 오디오 특성을 분류 작업을 수행했습니다. 이 모델은 Transfer Learning 방식을 통해 학습되었으며, ImageNet에서 사전 학습된 가중치를 초기값으로 사용하여 Fine Tuning을 적용했습니다.
사전 훈련된 모델은 다양한 데이터셋에서 학습되었으며, 이를 통해 보다 일반화된 특징을 학습할 수 있습니다. Fine Tuning은 이 사전 훈련된 모델을 새로운 작업에 맞게 조정하는 과정입니다. 이를 통해 사전 훈련된 모델의 일반적인 특징을 유지하면서 새로운 작업에 적합한 특징을 학습할 수 있습니다. 이를 통해 작은 데이터셋에서도 좋은 성능을 얻을 수 있고, 빠른 수렴을 가능하게 하며, 일반화 능력을 향상시킬 수 있습니다. 이는 초기 가중치가 잘 조정되어 있기 때문에 전체 모델을 처음부터 학습하는 것보다 더 빠르게 성능을 향상시킬 수 있습니다.
위급 상황 분류에서 동일한 오디오 피쳐를 사용한 경우, Fine Tuning을 적용하여 약 30%의 일반화 성능 개선을 이끌어냈습니다.
6개의 라벨 테스트 (정상, 강도범죄, 강제추행(성범죄), 절도범죄, 폭력범죄, 도움요청)
좌 - 사전 훈련 모델 X , 우 - 사전 훈련 모델, Fine tuned

Early Fusion Test (STFT, Mel-Spectrogram, MFCC)

Early Fusion의 경우, 6개의 라벨 실험 데이터를 이용한 테스트에서 단일 스펙트로그램 피쳐만을 사용했을 때보다 Test Accuracy가 1.2%, 미세하게 향상되었습니다. 하지만 눈여겨볼 부분은 Recall 수치입니다. 여기서 Recall이 29% 정도 향상되었다는 것은 모델이 더 많은 실제 양성을 식별할 수 있다는 것을 나타냅니다. 이는 Early Fusion 과정을 통해 모델이 양성 클래스인 위급 상황들을 더 많이 식별하게 되었다는 것을 의미합니다.

3단계 - 오디오 위급 체크 단계(Audio Alert Check)

다음 과정은 오디오 위급 체크 과정입니다. ML 로직의 분류 성능을 높이기 위해 텍스트를 추출함에 있어 STT API를 사용하는데 이는 지연이 발생하는 작업입니다. 이 과정을 최소화하기 위해 위급 정상 체크 과정을 사용합니다. 이 과정에 필요한 실험을 2가지 종류로 진행했습니다. 하나는 위급-정상의 이진 분류 성능 체크입니다. 또 하나는 텍스트와 톤이 다른 장난과 같은 오 신고 분류가 가능한지에 대한 실험입니다.

Audio 응급-정상 테스트 1

ML 서버는 앱 서버로부터 1분 간의 음성을 5초 간격으로 받아옵니다. 하지만 AWS Transcribe는 평균 9초 정도의 시간이 걸리는 작업이기 때문에 모든 음성에 대해서 텍스트 추출은 어렵습니다. 따라서, 응급 상황 체크를 통하여 응급 음성만 텍스트를 추출하여 활용하기 위해 오디오 위급 체크 필터링을 사용합니다.
Early Fusion(STFT, MelSpectrogram, MFCC)
Early Fusion Two Labels (정상-위급 분류)
먼저 모델이 위급 상황을 얼마나 잘 판별하는지 알아보는 실험을 진행하였습니다. 위급-정상 이진 분류의 정확도가 92% 정도로 어느 정도 응급과 정상 음성을 잘 구분해낸다는 사실을 확인 가능했습니다. 이 결과를 바탕으로 모델의 이진 분류 결과 필터링을 통해 음성 텍스트 추출 하는 작업의 근거 중 하나로 삼았습니다.

Audio 응급-정상 테스트 2

오디오 위급 체크 필터링 작업에 관해 설득력을 얻기 위하여 추가적인 데이터를 포함시켜 추가 실험을 진행했습니다.
먼저 상황을 가정해보겠습니다. 만약 장난으로 들릴 수 있는 음성이 들어오면, 그것을 위급한 상황으로 오인할 수 있습니다. 예를 들어, “살려주세요!” 와 같은 정상 톤의 음성은 텍스트는 위급이지만, 톤이 정상이기 때문에 오인하기 쉽습니다. 이 장난 같은 음성을 정상으로 분류해야 합니다. 이 실험에서, 모델이 위급한 데이터를 정확하게 식별하고, 잘못된 양성 예측을 최소화하는 경향성을 보이는지 체크하기 위해 Precision, FPR 지표를 추가적인 Metric으로 설정하여 실험을 진행했습니다. 위급 음성 200개와 정상 음성 100개를 기반으로 각각 50개씩 총 100개의 음성을 톤을 바꿔 직접 녹음하여 실험 데이터를 우측과 같이 구축했습니다. 이 과정에서 교내 연극 동아리를 동원하여 녹음을 진행했습니다.
데이터 분포
300개 : 원본
 정상 100
 위급 200 (상세 범죄 라벨 각 40개 씩)
100개 : 자체 구축
 텍스트 정상 50 → 음성 위급 (위급한 톤으로 바꿔서 녹음)
 텍스트 위급 50 → 음성 정상 (음성 톤 바꿔서 정상 같이)
위급 데이터를 양성, 정상 데이터를 음성으로 설정하여 오디오 피쳐, 텍스트 피쳐에 대한 성능 실험을 진행했습니다.
실험의 메인 지표 : Accuracy, Precision, FPR(Fall out)
precision=number of correct answersnumber of total answers=TPTP+FP\begin{equation} \text{precision} = \frac{\text{number of correct answers}}{\text{number of total answers}} = \frac{\text{TP}}{\text{TP} + \text{FP}} \end{equation}
fallout=number of incorrect answersnumber of total answers=FPFP+FN\begin{equation} \text{fallout} = \frac{\text{number of incorrect answers}}{\text{number of total answers}} = \frac{\text{FP}}{ \text{FP} + \text{FN}} \end{equation}
Precision은 모델이 얼마나 정확하게 양성(위급) 클래스를 예측하는지를 측정하므로, 위급 데이터의 중요성을 잘 반영할 수 있습니다. 수치가 1에 가까울 수록 제대로 위급 클래스를 예측하는지 나타냅니다.
Fall-out은 FPR(False Positive Rate)으로도 불리며, 실제 False인 data 중에서 모델이 True라고 예측한 비율입니다. 즉, 모델이 실제 false data인데 True라고 잘못 예측(분류)한 것입니다. FPR 수치가 1에 가까울 수록 정상인 데이터를 위급으로 잘못 분류하고 있다는 것을 의미합니다.
모델이 위급 데이터를 정확하게 식별하고, 잘못된 양성 예측을 최소화하는 경향성을 가지고 있는지 확인하기 위해 위와 같은 지표들을 선택하였습니다. 모델이 높은 Precision을 가지면, 위급 데이터로 분류된 것들 중 대부분이 실제로 위급한 경우일 것입니다. 반대로, Fall out(FPR)가 낮으면 낮을수록 정상 데이터를 제대로 정상으로 분류하고 있다는 것을 의미합니다.
Audio Feature Only
Early Fusion (STFT, MelSpectrogram, MFCC) - Densenet
Test Accuracy
83.19%
F1 score
0.833
Precision
83.23%
Recall
83.43%
Fall out(FPR)
30.19%
ROC Curve
Text Feature Only
KoBERT
Test Accuracy
73.81%
F1 score
0.657
Precision
80.94%
Recall
73.81%
Fall out(FPR)
87.38%
ROC Curve
Barchart를 이용해서 "KoBERT (텍스트 특성만 사용)"와 "Early Fusion (오디오 특성만 사용)" 두 가지 모델의 성능을 상세히 비교해보겠습니다.
왼쪽 : KoBERT (텍스트 특성만 사용), 오른쪽 : Early Fusion (오디오 특성만 사용)
좌 : Text Feature only, 우 : Audio Feature only
먼저, 텍스트 특성만 사용한 모델의 성능은 다음과 같습니다.
테스트 정확도: 73.81%
정밀도: 80.94%
재현율: 73.81%
FPR: 87.38%
이 모델은 텍스트만을 사용하여 분류를 수행하며, 전반적으로 괜찮은 성능을 보입니다. 하지만 FPR이 높은 편이므로, 음성인 데이터를 양성으로 잘못 분류하는 경향이 있습니다.
다음으로, 오디오 특성만 사용한 모델의 성능은 다음과 같습니다.
테스트 정확도: 83.19%
정밀도: 83.23%
재현율: 83.43%
FPR: 30.19%
이 모델은 오디오만을 사용하여 분류를 수행하며, 전반적으로 높은 성능을 보입니다. 특히, FPR이 낮으므로, 음성(정상)인 데이터를 양성(위급)으로 잘못 분류하는 경향이 적습니다.
따라서, 위급한 데이터를 정확하게 식별하고, 잘못된 양성 예측을 최소화하는 데는 오디오 특성만 사용한 모델이 더 효과적입니다. 이러한 결과는 오디오 특성이 해당 작업에서 텍스트 특성보다 더 중요하거나, 오디오 특성의 모델이 텍스트만 사용한 모델보다 더 효과적으로 특성을 활용하고 있다는 것을 의미할 수 있습니다.
위와 같이 오디오만 사용하는 경우가 텍스트만 사용하는 것의 성능보다 위급 음성 이진 분류에 있어 더 높았습니다. 이를 토대로 ML 로직을 구성함에 있어, 위급한 상황에서는 우선 음성으로 위급 여부를 판별한 후 음성의 상세 분류를 진행할 수 있다고 결론을 내렸습니다.

4단계 - Feature Extraction

먼저, 음성 피쳐 외에 텍스트를 추출하는 이유에 대한 내용을 다루었습니다. 그 후, 텍스트 추출하는 모델에 대해 간략히 설명하겠습니다.

텍스트를 추출하는 이유

먼저 저희는 저희의 음성 모델이 위급한 상황의 상세 라벨들을 얼마나 잘 판별하는지 알아보는 실험을 진행하였습니다. 라벨 6개 분류의 정확도는 이전의 음성의 위급 이진분류의 결과보다 33% 이상 낮았습니다. 이는 음성의 스펙트럼 정보만으로는 상세 범죄 분류가 어렵다는 것을 의미합니다.
따라서, 이를 보완하기 위해 위급 상황에서 사용될 수 있는 표현을 텍스트로 추출하여 함께 고려해야 한다고 결정하였습니다. 이를 통해 과적합 문제를 완화하고 일반화 성능을 향상 및 모델의 수용성을 확보할 것입니다.

텍스트 추출 모델 - KoBERT

ML 로직에서 KoBERT 모델을 음성 텍스트 특성 추출기로 사용했습니다.
기존의 자연어 처리 모델은 단방향이지만 BERT는 양방향으로 보기 때문에 다른 모델에 비해 매우 높은 정확도를 가집니다. 하지만 한국어는 조사와 어간과 같은 불규칙한 언어 특성을 보유하고 있어 기존의 BERT와 BERT Tokenizer만으로는 높은 분류 성능을 이끌어내기 쉽지 않습니다. KoBERT는 기존 BERT 모델의 한국어 분류 성능 한계를 극복하기 위해 SKT brain에서 개발하였습니다. KoBERT는 한국어의 미묘한 어감을 분류할 수 있습니다. 이를 근거로 하여 위급 음성과 일상 대화에서 발생하는 표현 텍스트 데이터를 KoBERT Tokenizer로 변환하여 입력 데이터로 사용했습니다.
12번의 학습을 통해 KoBERT 모델을 source data에 파인 튜닝을 수행하였으며, 단일 음성 모델 분류 대비 상세 분류 정확도가 16% 이상 높았습니다. 이를 특성 추출기로 활용하여 Late Fusion을 수행하였습니다.

5단계 - Decision Level Fusion (Late Fusion)

Densenet과 KoBERT에서 나온 피쳐를 단순 조합할 경우, 각 모델 별 Feature에 가중치 부여 문제가 존재한다는 한계점이 있습니다. 이러한 문제점을 해결하기 위해 Decision Level Fusion 모델을 사용하기로 했습니다. Decision Level Fusion은 여러 모델의 예측 결과를 결합하여 최종 예측을 수행하는 기술로, 다양한 모델들의 장점을 활용하고 단점을 보완하기 위해 사용됩니다.
이를 통해, 다양한 모델들의 예측 결과를 결합함으로써 각 모델의 예측 결과를 보완할 수 있습니다. 예를 들어, 오디오와 텍스트 데이터를 동시에 처리하는 음성-텍스트 멀티모달 시스템에서는, 오디오 모델과 텍스트 모델이 서로 다른 측면에서 정보를 추출할 수 있기 때문에 이들을 결합함으로써 상호 보완적인 예측 결과를 얻을 수 있습니다.
Late Fusion에는 크게 2가지 방법이 있습니다.
1.
다수의 피쳐를 입력값으로 설정, 하나의 ML 혹은 DL 모델을 이용하여 라벨을 산출하는 방식
Effective Music Genre Classification using Late Fusion Convolutional Neural Network with Multiple Spectral Features, Sung-Hyun Cho, 25p
2.
다수의 피쳐에 가중치를 부여한 후, 벡터 합을 거쳐 통합하여 함수를 적용하여 라벨을 산출하는 방식
Multi-model hybrid ensemble weighted adaptive approach with decision level fusion for personalized affect recognition based on visual cues, Nagesh JADHAV, 4p
AWS Transcribe 서비스의 STT 텍스트 추출 성능이 일정치 않아 1번 방식을 적용하기에는 모델의 학습이 일관되지 않다고 판단됩니다. 따라서, 이 과정에서는 2개의 모델에서 추출한 오디오 피쳐와 텍스트 피쳐를 합쳐 Late 퓨전을 거쳐 최종 응급 상황 라벨을 예측하도록 하겠습니다.
Densenet을 통해 음성 피쳐, KoBERT를 통해 텍스트 피쳐를 받아오게 됩니다. 하지만 각 모델의 피쳐를 어떻게 활용해야 할지에 대한 문제점이 발생합니다. 이를 해결하기 위해 단위 벡터화된 각 피쳐를 평균 softmax 하는 late fusion을 사용하기로 했습니다. 음성과 텍스트를 이용한 멀티모달 감정 인식 논문(김주희, 상명대학교, 2021, 5p)을 참고해서 음성 단일 모델과 텍스트 단일 모델을 사용할 때보다 퓨전했을 때 성능이 더 높다는 것을 확인했습니다.
음성과 텍스트를 이용한 멀티모달 감정 인식 논문(김주희, 상명대학교, 2021, 5p)
또한, DeepSafety: Multi-level Audio-Text Feature Extraction and Fusion Approach for Violence Detection in Conversations 논문 내용 중, 음성 분류 시 BERT와 CNN의 특성 추출 퓨전 모델이 가장 좋은 성능을 보인다는 내용을 참고하여 아래 실험을 진행하였습니다. DeepSafety 논문에서는 단일 스펙트로그램과 시계열 피쳐를 함께 사용하여 CNN 모델의 입력값으로 사용했지만 이번 프로젝트에서는 MFCC 변환 과정에서 생기는 일련의 스펙트로그램들을 Early Fusion하여 입력값으로 활용하였습니다.
DeepSafety: Multi-level Audio-Text Feature Extraction and Fusion Approach for Violence Detection in Conversations, 23p

Late Fusion(Audio feature - Text feature) with softmax Test

추출된 2개의 텍스트와 오디오 피쳐는 추출에 사용되는 모델이 다르기 때문에 피쳐 벡터의 스케일이 다릅니다. 이를 각각 단위 벡터화하여 Late Fusion 결과값이 특정 피쳐에 과도하게 영향을 받는 것을 방지하고, 모든 피쳐가 동일한 중요도를 가지도록 합니다.
Densenet 오디오 Feature (,6)과 KoBERT 텍스트 Feature (,6) 총 2개의 피쳐를 각각 단위 벡터화 과정을 거쳐 Mean-Concatenate을 수행합니다. 그리고 나서, SoftMax 함수를 적용하여 Late Fusion을 수행합니다.
LateFusion(DensenetFeature,KoBERTFeature)=SoftMax(12[DensenetFeature(6)DensenetFeature(6)+KoBERTFeature(6)KoBERTFeature(6)]) \text{LateFusion}(\text{DensenetFeature}, \text{KoBERTFeature}) = \text{SoftMax} \left( \frac{1}{2} \left[ \frac{\text{DensenetFeature}(6)}{||\text{DensenetFeature}(6)||} + \frac{\text{KoBERTFeature}(6)}{||\text{KoBERTFeature}(6)||} \right] \right)
Softmax(xi)=exij=1nexjSoftmax(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}
이 과정을 통해 라벨 6개의 상세 분류 테스트에서 음성 피쳐만 사용했을 때 보다 accuracy 및 Precision에서 30% 정도의 향상을 이끌어냈습니다.
정상, 상세 범죄 분류에서의 일반화 성능 Test Acc : 음성 Early Fusion 피쳐 (59%) ⇒ Late Fusion : 89.15% (약 30% Up) Precision : 음성 Early Fusion 피쳐 (59.51%) ⇒ Late Fusion : 91.34% (약 32% Up)

3. 프로젝트 API 실행 및 디렉토리 설명

1) 파일 및 디렉토리 소개

upload.html
API를 테스트하기 위해 만든 html 파일입니다.
jinja2를 이용하여 html을 만들었습니다.
upload 버튼을 누르면 음성 파일을 업로드 할 수 있습니다.
음성 파일을 업로드하면 음성 파일을 분류합니다.
2가지 옵션을 선택할 수 있습니다 (Post)
음성 파일을 직접 업로드(wav)
음성 파일을 S3에서 가져오기(s3_key)
2가지 옵션 모두 음성 파일에 포함된 텍스트를 필요로 합니다
main.py
FastAPI를 이용하여 API를 만들었습니다.
음성 파일을 업로드하면 음성 파일을 분류합니다.
S3 버킷에 저장된 음성 파일을 분류합니다.
audio 파일과 text 내용을 동시에 인풋으로 받아 응급 음성인지 아닌지 분류합니다.
densenet.py
Early Fusion-Densenet 모델을 사용하여 피쳐 추출을 수행하는 함수를 만들었습니다.
Densenet 아키텍처를 사용한 딥러닝 모델을 정의하고, 그 모델의 가중치를 저장된 파일에서 불러오는 코드입니다. 모델과 모델 관련 변수들을 선언하고, 각 변수들을 적절한 장치에 할당하는 작업을 수행합니다.
마지막으로 클래스 라벨의 이름을 정의하는데 사용됩니다.
audio_predict 함수를 이용해 해당 오디오 파일의 라벨 및 확률 값을 예측합니다.
kobert_model.py
KoBERT 모델을 사용하여 피쳐 추출을 수행하는 함수를 만들었습니다.
KoBERT 모델을 정의하고, 그 모델의 가중치를 저장된 파일에서 불러오는 코드입니다. 모델과 모델 관련 변수들을 선언하고, 각 변수들을 적절한 장치에 할당하는 작업을 수행합니다.
text_predict 함수를 이용해 해당 텍스트의 라벨 및 확률 값을 예측합니다.
Decision Fusion
Densenet 모델과 KoBERT모델을 통해 산출된 확률값들을 입력값으로 활용하여 Mean concatenate -SoftMax를 수행하여 예측합니다.

2) 프로젝트 실행 방법

음성파일은 static 폴더에 저장됩니다.
저장된 음성 파일이 응급 음성인지 아닌지 분류합니다.
엔드포인트 설명
/upload
음성 파일을 업로드합니다.
음성 파일을 직접 업로드(wav)하거나, 음성 파일을 S3에서 가져오기(s3_key)할 수 있습니다.
/predict
음성 파일을 분류합니다.
위의 엔드포인트는 클라이언트에서 업로드한 오디오 파일을 받아와서, 그 파일을 로컬 서버에 저장하고, librosa 라이브러리를 이용해 해당 파일의 오디오 데이터를 로드하고 리샘플링합니다.
이후 audio_predict 함수를 이용해 해당 오디오 파일의 라벨 및 확률 값을 예측하고, 예측 결과를 JSON 형태로 반환합니다. 이때, 엔드포인트에는 audio_file이라는 이름의 UploadFile 객체가 전달되며, 이 객체는 클라이언트에서 업로드한 파일의 정보를 담고 있습니다.
/s3predict
음성 파일을 분류합니다.
Post 형식의 요청을 받습니다.
S3에 저장된 음성 파일의 S3 URI와 음성 파일의 텍스트를 받아와서 해당 파일을 다운로드한 후 분류 모델로 예측을 수행하고, 예측 결과인 라벨과 확률값을 반환하는 FastAPI 엔드포인트입니다.

4. Reference

1.
음성과 텍스트를 이용한 멀티모달 감정 인식 논문(김주희, 상명대학교, 2021), 5p
2.
DeepSafety: Multi-level Audio-Text Feature Extraction and Fusion Approach for Violence Detection in Conversations, 23p, Amna Anwar, Eiman Kanjo, Dario Ortega Anderez
3.
(Early Fusion) Environment Sound Classification Based on Visual Multi-Feature Fusion and GRU-AWS (2020), 2p, 5p, NING PENG AIBIN CHEN, etc
6.
(Densenet) Efficient Classification of Environmental Sounds through Multiple Features Aggregation and Data Enhancement Techniques for Spectrogram Images, 3p, 11p, 21p 2020 ,Zohaib Mushtaq
8.
(Densenet Transfer learning) Efficient Classification of Environmental Sounds through Multiple Features Aggregation and Data Enhancement Techniques for Spectrogram Images, 3p, 11p, 21p 2020 ,Zohaib Mushtaq
9.
Densenet : Densely Connected Convolutional Networks (2019), Gao Huang∗ Cornell University, 6p
10.
Plant species classification using flower images—A comparative study of local feature representations, 13p, Marco Seeland1
11.
Effective Music Genre Classification using Late Fusion Convolutional Neural Network with Multiple Spectral Features, Sung-Hyun Cho, 25p
12.
Multi-model hybrid ensemble weighted adaptive approach with decision level fusion for personalized affect recognition based on visual cues, Nagesh JADHAV, 4p

아이디어 뱅크(아카이브)

응급 상황에 대한 오디오 분류

데이터 파이프라인 아이디어

모델 아이디어