Voice Style Transfer

 

اعضای گروه : محسن مدنی – یاسین اسفندیاری – سهیل اشعاری

چکیده

ما در این پروژه قصد داریم صوتی را از شخصی به عنوان ورودی بگیریم و با اعمال تغییرات توسط شبکه ی آموزش داده شده، صوت خروجی را به نحوی بسازیم که حاوی همان بیانات نفر اول به گونه ای که استایل صحبت نفر دوم در آن حفظ شده است، باشد.

مقدمه

شاید خیلی از افراد علاقه مند به تبدیل صدای خود به سایر افراد باشند اما بیشتر برنامه های موجود قابلیت صرفا قابلیت تغیر جنسیت صدا و یا تبدیل به برخی از صداهای خاص با استفاده از تکنیک های پردازش صوت و اعمال چند فیلتر ساده را دارند، اما ماشین تبدیل صدایی که ما آماده کردیم قابلیت تبدیل صدای بین دو شخص را دارا می باشد.

کاربرد ها

از این ماشین می توان در مصارف مختلفی همچون سرگرمی، صنعت بازی سازی، نظامی و امنیتی، سیاسی، رادیو و تلویزیون، انواع کنفرانس ها، صنعت دوبله و کنسرت… استفاده نمود.

چند مثال جزیی از کاربرد ها :

با این ماشین می توان متن آهنگ یک خواننده را با صدای خواننده دیگری شنید و لذت برد و یا برای سرگرمی صدای خود را تغیر داد.

فرض کنید در کنفرانسی هستید که صدایتان گرفته، می توانید با این ماشین صدای خود را رسا کنید و یا صدا را مشابه فردی خوش صدا کنید. همچنین از ترفند بالا میتوان در در کنسرت ها، کلاس درس، رادیو، تلویزیون و سایر موارد مشابه استفاده کرد.

این ماشین حتی برای موارد امنیتی که با صوت شخصی کار می کند ، تغییر صدای بدل شخصی برای طبیعی تر شدن بدل، جعل صدا در موارد خاص نظامی و سیاسی و یا سند سازی نیز بسیار پرکاربرد می باشد.

از دیگر موارد آن میتوان در صنعت دوبله استفاده کرد با این مزیت که می توان صدای گوینده دوبلر را به صدای بازیگری که در فیلم هنرنمایی می کند تبدیل کرد و به کیفیت دوبله افزود.

چالش های پیش رو

  • ذات مسئله به نحوی است که دیتاست برای آن کمیاب است.

راه حل :

ما ابتدا تعدادی جمله ی مشترک را در نظر گرفتیم و آن را به دو نفر از اعضای تیم برای روخوانی از روی جملات دادیم، این کار برای شروع مناسب به نظر می رسید ولی برای بهبود عملکرد مدل به داده های بیشتری نیاز داشتیم پس رفتیم سراغ برنامه ها و بات های تلگرامی که با گرفتن متن، voice های خروجی با صدا های مختلفی مثل زن و مرد و … می داد و یا سایر برنامه های تبدیل صدا که از روش های یادگیری عمیق استفاده نمی کنند.

نمونه ای از دیتا های جمع آوری شده :

 

 

  • همزمان و یکسان نبودن طول voice های وارد شده به شبکه

راه حل :

اگر voice ورودی کوچتر از طول مورد نظر ما بود آن را zero-padding کردیم و همچنین اگر بزگتر بود، از انتهای آن به اندازه طول مورد نظر خود جدا می کنیم.

  • تبدیل spectrogram خروجی شبکه به voice

راه حل :

ما برای این کار از تکنیک ISTFT استفاده کردیم. (همان inverse short time fourier transfer)

  • از بین بردن نویز صوت وروردی و خروجی

راه حل :

برای از بین بردن نویز از فیلتر ها و تکنیک های Denoising استفاده کردیم. ( مانند فیلتر ویینر )

روش آموزش مدل

autoencoder نوع خاصی از شبکه عصبی مصنوعی است که برای encode کردن بهینه یادگیری مورد استفاده قرار میگیرد و بجای آموزش شبکه و پیش بینی مقدار هدف Y در ازای ورودی X , یک autoencoder آموزش میبینید تا ورودی X خود را بازسازی کند. بنابر این بردارهای خروجی همان ابعاد بردار ورودی را خواهند داشت. فرآیند کلی یک autoencoder در شکل زیر نشان داده شده است. در حین این فرآیند، autoencoder با کمینه سازی خطای نوسازی (reconstruction error) بهینه میشود.

اما اگر بخواهیم روند کاریمان را به صورت جزئی تر بررسی کنیم، ما در ابتدا با پیش پردازش هایی نظیر STFT ورودی به اسپکتوگرام هایی برای آموش به مدل میرسیم و سپس با انجام دادن عکس فرآیند بالا خروجی مورد نظر حاصل می شود.

مدل استفاده شده در این ماشین GRU می باشد زیرا که فرآیند پردازش صوت همواره به لحظات قبل و بعد از خود وابسته است.

منابع

https://audiostyletransfer.wordpress.com

https://medium.com/intuitionmachine/voice-style-transfer-using-deep-learning-d173f1608af5

https://avdnoord.github.io/homepage/vqvae

 

سورس کد این پروژه در گیت هاب قابل دسترس است.