이것은 K. Drossos, S. Gharib, P, Magron 및 T. Virtanen의 "교사 강제 및 예약 샘플링을 사용한 사운드 이벤트 탐지를위한 언어 모델링"에 제시된 방법의 저장소입니다.
우리의 논문은 음향 장면 및 이벤트 (DCASE) 워크숍 2019의 탐지 및 분류에 제공됩니다. ARXIV : https://arxiv.org/abs/1907.08506에서 온라인 버전을 찾을 수 있습니다.
우리의 방법을 사용하는 경우 논문을 인용하십시오.
논문에 사용 된 코드 버전을 얻을 수 있습니다.
사운드 이벤트 감지 (SED)는 오디오의 짧은 시간 표현에서 사운드 이벤트 활동을 식별하는 작업입니다. 예를 들어, 0.04 초에서 추출 된 오디오 기능 벡터가 주어지면 SED 방법은이 벡터의 다양한 사운드 이벤트의 활동을 식별해야합니다. 일반적으로 SED는 일련의 짧은 시간 오디오 기능 벡터에 적용되며 모든 입력 기능 벡터에 대해 사운드 이벤트 활동의 식별이 수행됩니다. 즉, 입력에 매트릭스가 주어 지므로 T 와 F 각각 피처 벡터 및 피처의 양이되기 위해서는 각각의 t 특징 벡터에서 각 C 클래스에 대한 예측을 보유하는 행렬입니다.
실제 녹음에서 다양한 사운드 이벤트는 이벤트 내에서 그리고 전반적으로 일시적인 구조를 가질 수 있습니다. 예를 들어, "발자국"이벤트는 (이벤트 구조) 사이의 일시 정지로 반복 될 수 있습니다. 반면에,“Car Horn”은“Car Passing By By”사운드 이벤트 (이벤트 간 구조)를 따르거나 앞서있을 가능성이 높습니다. 이러한 시간 구조는 다른 기계 학습 작업, 예를 들어 기계 번역, 이미지 캡션 및 음성 인식에 사용 및 사용됩니다. 이러한 작업에서 개발 된 방법은 또한 대상 클래스의 시간적 연관성 모델을 학습합니다. 이러한 연관성은 일반적으로 언어 모델이라고합니다.
SED 방법은 언어 모델로부터 혜택을받을 수 있습니다. 이 저장소의 방법은 정확히 이것에 관한 것입니다. SED를위한 언어 모델을 활용하는 방법.
위에서 언급 한 시간 구조를 활용하기 위해 교사 강제 기술을 사용합니다. 교사 강제는 이전 단계에서 사운드 이벤트 활동을 통해 RNN에 대한 입력 조절입니다. 즉,
시간 단계 t 에서 RNN의 출력은 어디에 있습니까? 이전 레이어에서 RNN에 대한 입력 및 시간 단계 T 에서의 입력이며 시간 단계 T-1 에서의 사운드 이벤트의 활동입니다.
지상 진실 값을 사용하는 경우 RNN은 올바른 클래스 활동이 아닌 경우에 강력하지 않습니다. 예를 들어, 지상 진실 값이없는 테스트 프로세스에서.
분류기의 예측을 사용하는 경우, RNN은 훈련 중 (특히 훈련 과정의 시작 부분에서)가 잘못된 수업 활동을 공급 받기 때문에 RNN은 사운드 이벤트의 종속성을 배우기가 어려울 것입니다.
위의 두 가지를 모두 해결하기 위해 예정된 샘플링 기술을 사용합니다 [2]. 즉, 훈련의 시작 부분에서 우리는 지상 진실 가치로 사용합니다. 교육이 진행되고 분류기가 점점 더 올바른 클래스 활동을 예측하는 법을 배우면서 분류기의 예측을 점차적으로 사용합니다.
[1] RJ Williams와 D. Zipser,“완전히 반복되는 신경 네트워크를 지속적으로 실행하기위한 학습 알고리즘”, Neural Computation, Vol. 1, 아니오. 2, pp. 270–280, 1989 년 6 월.
[2] S. Bengio, O. Vinyals, N. Jaitly 및 N. Shazeer,“재발 성 신경망을 가진 서열 예측을위한 예정된 샘플링”, 28 번째 신경 정보 처리 시스템에 관한 국제 회의, 1 권, Ser. NIPS'15. 미국 매사추세츠 케임브리지 : MIT Press, 2015, pp. 1171–1179. 온라인. 사용 가능 : http://dl.acm.org/citation.cfm?id=2969239.2969370
프로젝트 사용을 시작하려면 다음을 수행해야합니다.
Python 3.6을 사용하십시오. 이 저장소의 코드는 테스트되어 Python 3.6에서 작동합니다. 아마도 다른 Python 3.x 버전을 사용하면 괜찮을 것입니다. 그러나이 코드는 Python 3.6을위한 것임을 명심하십시오.
pip (PIP_REQUIRMENTS.TXT) 또는 conda (CONDA_REQUIREMENTS.TXT) 파일을 사용하여 종속성을 설정하십시오. 프로젝트의 루트 디렉토리 (즉,이 저장소를 클로닝 한 후 생성 된 디렉토리) 내부의 터미널을 탐색 한 다음 터미널에서 올바른 명령을 발행하십시오.
pip 사용으로 종속성을 설정하려면 : $ pip install -r requirements/pip_requirements.txtconda 로 의존성을 설정하려면 명령을 발행 할 수 있습니다. $ conda install --yes --file requirements/conda_requirements.txt오디오 데이터를 다운로드하십시오. 세 가지 오디오 데이터 세트를 다운로드 할 수 있습니다.
Tut-Sed Synthetic 2016 데이터 세트는 여기에서 사용할 수 있습니다.
오디오 파일 (예 : 오디오 1/5, 오디오 2/5, ..., 오디오 5/5)을 다운로드하고 기능 추출을 수행하고 데이터 설정 섹션에서 지침을 따르십시오.
Tut Sound Events 2016은 여기에서 구입할 수 있습니다.
오디오 파일을 다운로드하고 기능 추출을 수행하고 데이터 설정 섹션에서 지침을 따르십시오.
Tut Sound Event 2017은 여기에서 구입할 수 있습니다
오디오 파일을 다운로드하고 기능 추출을 수행하고 데이터 설정 섹션에서 지침을 따르십시오.
이제 프로젝트가 설정되어 있으며 3 단계에서 얻은 데이터와 함께 사용할 수 있습니다.
데이터에 SEDLM을 직접 사용할 수 있거나 코드를 확인하고 SEDS 작업에 SEDLM을 채택하거나 당사에 설명 된 프로세스를 반복 할 수 있습니다.
SEDLM 코드는 Pytorch, 버전 1.1.0을 기반으로합니다.
현재 형식에서는 코드의 다른 변수가 YAML 파일에 지정되어 코드의 모든 설정을 유지합니다. 모든 YAML 파일은 settings 디렉토리에 있으며 YAML 파일의 settings 디렉토리에서 YAML로드 기능 검색에 있습니다. 일반적으로 Yaml 파일의 설정 값을 변경 한 다음 코드를 실행할 수 있습니다.
데이터는 data 디렉토리에 있어야합니다.
기존 데이터 로더를 사용하려면 특정 방식으로 데이터를 구성해야합니다. 우선, 입력 기능 및 대상 값에 대해 다른 파일이 있어야합니다. 예를 들어, input_features.npy 및 target_values.npy . 그런 다음 사용할 데이터 세트에 따라 다른 디렉토리에 데이터를 가져야합니다. 즉 :
Tutsed Synthetic 2016.
데이터는 data 디렉토리의 synthetic 이라는 디렉토리에 있어야합니다. 즉, data/synthetic . 그런 다음 교육, 검증 및 테스트 데이터를위한 파일은 다른 디렉토리에 있어야합니다. 즉 :
data/synthetic/trainingdata/synthetic/validationdata/synthetic/testing입력 기능과 대상 값에 대해 다른 Numpy 파일이 있어야합니다. Yaml 설정 파일에서 각 입력 또는 대상 파일의 이름을 지정할 수 있습니다. 예를 들어, 교육 파일은 다음과 같아야합니다.
data/synthetic/training/input_features.npydata/synthetic/training/target_values.npy코드는 Numpy 파일을로드하여 SEDLM 방법을 교육하는 데 사용합니다. 입력 기능과 대상 값이 올바르게 주문되도록 할 수 있습니다. 즉, 입력 기능의 첫 번째 요소는 대상 값의 첫 번째 요소에 해당합니다.
Tut Real Life 2016
데이터는 data 디렉토리의 real_life_2016 이라는 디렉토리에 있어야합니다. 즉, data/real_life_2016 입니다. 그런 다음 각 폴드의 파일은 다른 디렉토리에 있어야합니다. 즉 :
data/real_life_2016/fold_1data/real_life_2016/fold_2data/real_life_2016/fold_3data/real_life_2016/fold_4입력 기능과 대상 값, 각 접힘의 훈련 및 테스트를 위해 다른 피클 파일이 있어야합니다. 장면 당 여러 파일이 있고 접힘 당 여러 파일이 있으므로 모든 기능을 낭비한 배열에 가질 수는 없습니다. 따라서 피클 패키지를 사용하여 목록에있는 모든 데이터가 목록에 있고 직렬화 (즉, 디스크로 디스크)를 사용해야합니다. 또한 각 접힘마다 교육 및 테스트를위한 파일이 있습니다.
편의를 위해 SEDLM은 파일 이름에 대한 사전 고정을 자동으로 사용합니다. 즉, 지정된 파일 이름에 "트레인"및 "테스트"를 자동으로 추가합니다.
Yaml 설정 파일에서 각 입력 또는 대상 파일의 이름을 지정할 수 있습니다. 예를 들어, 파일은 다음과 같아야합니다.
input_features.ptarget_values.p그런 다음 SEDLM 코드는 적절한 파일과 각 접힘을 검색합니다. 예를 들어, Fold 1 및 Home Scene의 경우 다음 파일을 찾습니다.
data/real_life_2016/home/fold_1/train_input_features.pdata/real_life_2016/home/fold_1/train_target_values.pdata/real_life_2016/home/fold_1/test_input_features.pdata/real_life_2016/home/fold_1/test_target_values.p코드는 피클 파일을로드하고 SEDLM 방법을 훈련시키는 데 사용합니다. 입력 기능과 대상 값이 올바르게 주문되도록 할 수 있습니다. 즉, 입력 기능의 첫 번째 요소는 대상 값의 첫 번째 요소에 해당합니다.
Tut Real Life 2017
데이터는 data 디렉토리의 real_life_2017 이라는 디렉토리에 있어야합니다. 즉, data/real_life_2017 입니다. 그런 다음 각 폴드의 파일은 다른 디렉토리에 있어야합니다. 즉 :
data/real_life_2017/fold_1data/real_life_2017/fold_2data/real_life_2017/fold_3data/real_life_2017/fold_4입력 기능과 대상 값, 각 접힘의 훈련 및 테스트를 위해 다른 피클 파일이 있어야합니다. 주름 당 여러 파일이 있으므로 Numpy Array에 모든 기능을 가질 수는 없습니다. 따라서 피클 패키지를 사용하여 목록에있는 모든 데이터가 목록에 있고 직렬화 (즉, 디스크로 디스크)를 사용해야합니다. 또한 각 접힘마다 교육 및 테스트를위한 파일이 있습니다.
편의를 위해 SEDLM은 파일 이름에 대한 사전 고정을 자동으로 사용합니다. 즉, 지정된 파일 이름에 "트레인"및 "테스트"를 자동으로 추가합니다.
Yaml 설정 파일에서 각 입력 또는 대상 파일의 이름을 지정할 수 있습니다. 예를 들어, 파일은 다음과 같아야합니다.
input_features.ptarget_values.p그런 다음 SEDLM 코드는 적절한 파일과 각 접힘을 검색합니다. 예를 들어, Fold 1의 경우 다음 파일을 찾습니다.
data/real_life_2017/fold_1/train_input_features.pdata/real_life_2017/fold_1/train_target_values.pdata/real_life_2017/fold_1/test_input_features.pdata/real_life_2017/fold_1/test_target_values.p코드는 피클 파일을로드하고 SEDLM 방법을 훈련시키는 데 사용합니다. 입력 기능과 대상 값이 올바르게 주문되도록 할 수 있습니다. 즉, 입력 기능의 첫 번째 요소는 대상 값의 첫 번째 요소에 해당합니다.
하이퍼 파라미터는 Yaml 설정 파일에서 조정할 수 있습니다. 튜닝에 사용 가능한 하이퍼 파라미터는 다음과 같습니다.
Bash 스크립트를 사용하여 시스템을 실행할 수 있습니다. 이러한 스크립트의 예는 파일입니다.
example_bash_script_baseline.sh , sedlm의 기준 구성을 실행하는example_bash_script_tf.sh 는 Tut Real Life 2017 데이터 세트로 sedlm을 실행합니다.