modelscope 번역

heyme·2022년 11월 23일

출처 : https://modelscope.cn/models/damo/speech_frcrn_ans_cirm_16k/file/view/master/README.md

tasks: acoustic-noise-suppression

inputs:

  • type : audio
    name : input
    title : 노이즈가 있는 원본 오디오
    validator : max_size: 10M

    examples:

  • name : 1
    title : 예시1

    inputs:

  • name: input
    data: git://examples/speech_with_noise1.wav

  • name: 2

    title: 예시2
    inputs:

  • name: input
    data: git://examples/speech_with_noise.wav

inference spec:

  • cpu: 1
  • memory: 1000
  • gpu: 0
  • gpu_memory: 1000

model_type: complex-nn
domain: audio
frameworks: pytorch
model-backbone: frcrn

customized-quickstart: True
finetune-support: True
license: Apache License 2.0
tags: Alibaba, Mind DNS, ANS, AI 노이즈 감소, 음성 향상, 오디오 전처리, 3A

datasets:

  • train: modelscope/ICASSP_2021_DNS_Challenge
  • evaluation: modelscope/ICASSP_2021_DNS_Challenge

FRCRN 음성 잡음 감소 모델 소개

이 모델은 다양한 소음 환경에서 음성 통화 시나리오 및 음성 오디오 녹음을 위한 단일 채널 음성 지능형 소음 감소 모델 알고리즘을 제공합니다.

모델 설명

모델의 입력 및 출력은 모두 16kHz 샘플링 속도 단일 채널 음성 시간 영역 파형 신호입니다. 입력 신호는 단일 채널 마이크에 의해 직접 녹음될 수 있으며 출력은 잡음이 억제된 음성 오디오 신호입니다[1]. 모델은 Deep Complex CRN 구조를 채택하고 있으며, 모델의 입력 신호는 STFT 변환을 통해 복소 스펙트럼 특징으로 변환되고 Complex FSMN은 주파수 영역에서 상관 처리를 수행하고 시계열 특징에서 긴 시퀀스 처리를 수행하는 데 사용됩니다. 중간 출력 대상을 예측하려면 복잡한 이상 비율 마스크를 사용하고 예측된 마스크를 사용하여 입력 스펙트럼을 곱하여 향상된 스펙트럼을 얻고 마지막으로 STFT 역변환을 통해 향상된 음성 파형 신호를 얻습니다.

예상 모델 사용 및 적용 범위

사용 방법

ModelScope를 설치한 후 speech_frcrn_ans_cirm_16k를 사용하여 추론할 수 있습니다. 모델의 입력 및 출력은 모두 16kHz 샘플링 속도 단일 채널 음성 시간 영역 파형 신호이며 입력 신호는 단일 채널 마이크에 의해 직접 녹음될 수 있으며 출력은 잡음이 억제된 음성 오디오 신호입니다. 사용을 용이하게 하기 위해 파이프라인은 모델 처리 전후에 wav 파일 처리 논리를 추가하여 wav 파일을 직접 읽고 지정된 wav 파일에 출력 결과를 저장할 수 있습니다.

환경 준비

이 모델은 1.8~1.11에서 테스트되었으며, PyTorch v1.12.0의 BUG로 인해 현재 v1.12.0에서 실행할 수 없습니다. 이 버전은 이미 설치되어 있습니다. 다음 명령을 실행하여 v1.11로 롤백하십시오.

conda install pytorch==1.11 torchaudio torchvision -c pytorch
  • 이 모델의 파이프라인은 타사 라이브러리 SoundFile을 사용하여 wav 파일을 처리합니다. Linux 시스템에서 사용자는 SoundFile의 기본 종속성 라이브러리 libsndfile을 수동으로 설치해야 합니다. Windows 및 MacOS에서는 설치됩니다. 사용자 조작 없이 자동으로 자세한 내용은 SoundFile 공식 웹사이트 참조해주세요. Ubuntu 시스템을 예로 들면 사용자는 다음 명령을 실행해야 합니다.
    sudo apt-get update
    sudo apt-get install libsndfile1

코드 예

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

ans = pipeline(
    Tasks.acoustic_noise_suppression,
    model='damo/speech_frcrn_ans_cirm_16k')
result = ans(
    'https://modelscope.cn/api/v1/models/damo/speech_frcrn_ans_cirm_16k/repo?Revision=master&FilePath=examples/speech_with_noise1.wav',
    output_path='output.wav')

모델 제한 및 가능한 편향

모델의 소음 억제 성능은 다중 화자 간섭이 있는 장면에서 다양한 정도로 감소합니다.

학습 데이터 소개

모델의 교육 데이터는 ICASSP 관련 과제를 위해 Microsoft 팀에서 제공하는 DNS-Challenge 오픈 소스 데이터 세트에서 가져옵니다.(https://github.com/microsoft/DNS-Challenge)[2] 우리 모델은 16k 오디오를 처리하는 데 사용되므로 풀밴드 데이터만 사용하고 약간의 조정을 합니다. 모두의 편의를 위해 DNS 챌린지 2020의 데이터셋을 modelscope의 DatasetHub로 마이그레이션했습니다. 사용자는 데이터셋 문서를 참조하여 다운로드하여 사용할 수 있습니다.

모델 훈련 과정

다음은 개발자가 환경을 빠르게 확인하고 프로세스와 유착할 수 있도록 테스트 데이터 세트를 사용하는 모델 교육용 샘플 코드입니다.교육에 더 많은 데이터를 사용하려는 경우 데이터 세트 설명서에 따라 로컬에서 교육 데이터를 생성한 다음, 다음의 주석 코드를 사용할 수 있습니다. 데이터 세트를 로드합니다.
참고 **데이터 세트 경로(/your_local_path/ICASSP_2021_DNS_Challenge)를 로컬 실제 경로로 업데이트해야 합니다

import os
from datasets import load_dataset
from modelscope.metainfo import Trainers
from modelscope.msdatasets import MsDataset
from modelscope.trainers import build_trainer
from modelscope.utils.audio.audio_utils import to_segment

tmp_dir = f'./ckpt'
if not os.path.exists(tmp_dir):
    os.makedirs(tmp_dir)

# Loading dataset
hf_ds = MsDataset.load(
    'ICASSP_2021_DNS_Challenge', split='test').to_hf_dataset()
mapped_ds = hf_ds.map(
    to_segment,
    remove_columns=['duration'],
    batched=True,
    batch_size=36)
mapped_ds = mapped_ds.train_test_split(test_size=150)
# Use below code for real large data training
# hf_ds = load_dataset(
#     '/your_local_path/ICASSP_2021_DNS_Challenge',
#     'train',
#     split='train')
# mapped_ds = hf_ds.map(
#     to_segment,
#     remove_columns=['duration'],
#     num_proc=8,
#     batched=True,
#     batch_size=36)
# mapped_ds = mapped_ds.train_test_split(test_size=3000)
# End of comment

mapped_ds = mapped_ds.shuffle()
dataset = MsDataset.from_hf_dataset(mapped_ds)

kwargs = dict(
    model='damo/speech_frcrn_ans_cirm_16k',
    model_revision='beta',
    train_dataset=dataset['train'],
    eval_dataset=dataset['test'],
    work_dir=tmp_dir)
trainer = build_trainer(
    Trainers.speech_frcrn_ans_cirm_16k, default_args=kwargs)
trainer.train()

데이터 평가 및 결과

DNS Challenge 2020 공식 테스트 세트의 다른 SOTA 모델과 비교한 결과는 다음과 같습니다.

지표 설명:

  • PESQ(Perceptual Evaluation Of Speech Quality)는 객관적이고 완전 참조된 음성 품질 평가 방법으로 점수 범위는 -0.5에서 4.5까지이며 점수가 높을수록 음성 품질이 좋은 것입니다.
  • STOI(Short-Time Objective Intelligibility)는 인간의 청각 지각 시스템에 의한 어음 명료도의 객관적인 평가를 반영하며, STOI 값은 0과 1 사이입니다.
  • SI-SNR(Scale Invariant Signal-to-Noise Ratio)은 정규화를 통해 신호 변화의 영향을 줄이기 위해 일반 신호 대 잡음비를 기반으로 한 스케일 불변 신호 대 잡음비입니다.
    광대역 잡음 왜곡을 위한 음성 향상 알고리즘입니다.

DNS 챌린지 결과는 (https://www.microsoft.com/en-us/research/academic-program/deep-noise-suppression-challenge-icassp-2022/results/)에 나와 있습니다.

모델 평가 코드

다음 코드를 사용하여 모델을 평가하고 검증할 수 있습니다.
DNS Challenge 2020 검증 세트를 modelscope의 DatasetHub에 저장하여 편리하게 사용할 수 있습니다.

import os
import tempfile

from modelscope.metainfo import Trainers
from modelscope.msdatasets import MsDataset
from modelscope.trainers import build_trainer
from modelscope.utils.audio.audio_utils import to_segment

tmp_dir = tempfile.TemporaryDirectory().name
if not os.path.exists(tmp_dir):
    os.makedirs(tmp_dir)

hf_ds = MsDataset.load(
    'ICASSP_2021_DNS_Challenge', split='test').to_hf_dataset()
mapped_ds = hf_ds.map(
    to_segment,
    remove_columns=['duration'],
    # num_proc=5, # Comment this line to avoid error in Jupyter notebook
    batched=True,
    batch_size=36)
dataset = MsDataset.from_hf_dataset(mapped_ds)
kwargs = dict(
    model='damo/speech_frcrn_ans_cirm_16k',
    model_revision='beta',
    train_dataset=None,
    eval_dataset=dataset,
    val_iters_per_epoch=125,
    work_dir=tmp_dir)

trainer = build_trainer(
    Trainers.speech_frcrn_ans_cirm_16k, default_args=kwargs)

eval_res = trainer.evaluate()
print(eval_res['avg_sisnr'])

관련 논문 및 인용 정보

[1]

@INPROCEEDINGS{9747578,
  author={Zhao, Shengkui and Ma, Bin and Watcharasupat, Karn N. and Gan, Woon-Seng},
  booktitle={ICASSP 2022 - 2022 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)}, 
  title={FRCRN: Boosting Feature Representation Using Frequency Recurrence for Monaural Speech Enhancement}, 
  year={2022},
  pages={9281-9285},
  doi={10.1109/ICASSP43922.2022.9747578}}

[2]

@INPROCEEDINGS{9747230,
  author={Dubey, Harishchandra and Gopal, Vishak and Cutler, Ross and Aazami, Ashkan and Matusevych, Sergiy and Braun, Sebastian and Eskimez, Sefik Emre and Thakker, Manthan and Yoshioka, Takuya and Gamper, Hannes and Aichner, Robert},
  booktitle={ICASSP 2022 - 2022 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)}, 
  title={Icassp 2022 Deep Noise Suppression Challenge}, 
  year={2022},
  pages={9271-9275},
  doi={10.1109/ICASSP43922.2022.9747230}}

0개의 댓글