چکیده:
در این پروژه، دو هدف دنبال شدهاست. یکی تشخیص تکبهتک نتهای موسیقی (نام نت و ارزش زمانی نت) از روی یکnote sheet(Note Reader)، و دیگری تشخیص سبک موسیقی(music genre recognition) از روی فایل صوتی (پاپ، راک،…) . و در هر بخش شبکههای متفاوتی آموزش دادهشده است.که یک به یک هر دو هدف توضیح داده خواهد شد.
Note Reader:
مقدمه
اولین قدم برای نواختن یک موسیقی، تشخیص و خواندن نتهای آن است.که نوازنده پس از خواندن تک به تک نت ها می تواند آنها را اجرا کند اما اجرای موسیقی از روی تصویر نت توسط کامپیوتر برای جامعه هنر بسیار کارامد خواهد بود و تاثیر بسزایی در آهنگ سازی و کمک به یادگیری موسیقی و… خواهد داشت. برای این کار ما سعی کردیم از بینایی ماشین و پردازش تصویر با کمک شبکههای عصبی استفاده کرده تا نتیجه دلخواه را داشته باشیم.
در این پروژه از سه روش برای تشخیص نت استفاده و نتیجه های آن بررسی شد، در ادامه هر سه روش به طور مفصل بیان خواهد شد.
آزمایشها و دادهها
برای جدا کردن خط های یک صفحه از نت شیت از contour استفاده کردیم اما برای جدا کردن نت ها ابتدا سعی میکردیم خطوط حامل را حذف کنیم و با استفاده از contour نت ها را از یکدیگر جدا کنیم. اما مشکلی که در این بخش با آن رو به رو بودیم وجود نت های چنگ است که به یکدیگر چسبیده هستند و جدا کردن آن ها به این روش ممکن نیست زیرا اگر میخواستیم کل خطوط افقی موجود در صفحه را حذف کنیم تا بتوانیم نت ها را از هم تفکیک کنیم، چنگ بودن این نت ها را از دست میدادیم.
برای رفع این مشکل با استفاده از الگوریتم DBScan سعی کردیم نقاط core را شناسایی کرده و از فاصله ای مناسب آن ها را ببریم.
Segmentation & RNN:
دیتاست این قسمت شامل تصویر نت شیت و یک فایل txt حاوی نام نت ها موجود در هر خط به طور جدا گانه است.
در این قسمت از شبکه lstm استفاده کردیم اما متاسفانه چون تمام نت ها به طور قطع در الگوریتم DBScan شناسایی نمی شدند یا موارد اضافه تری هم به عنوان نت شناسایی میشدند که در فایل txt نامی از آنها نبود، به همین خاطر که mapping درستی بین نت ها در نت شیت و فایل txt وجود نداشت و شبکه دچار مشکل میشد.
CTC Loss:
برای استفاده از CTC loss از مدل اماده توسعه داده شده به کراس در لینک زیر استفاده کردیم اما این بار هم به دلایل مشابه در قسمت segmentation به مشکل خوردیم و وقتی سعی کردیم مشکل را نادیده بگیریم و مدل را روی 5 نت شیت بدون ارور آزمایش کنیم سخت افزاری دچار مشکل شدیم.
CTC keras model:https://git.litislab.fr/TextRecognition/CTCModel/tree/master
CNN:
تشخیص نت شامل دو بخش نام نت(دو-ر-می-فا-…) و ارزش زمانی(گرد-سفید-سیاه-چنگ-دولا چنگ-…) مربوط نت است.که برای هر یک از این قسمت ها شبکه جداگانه آموزش دادیم. مشکل اصلی در این قسمت نبود دیتاست بود که سعی کردیم با استفاده از همان الگوریتم DBScan به تولید دیتا بپردازیم و لیبل بزنیم که نتیجه این نوع تولید دیتا وجود دو الی سه برابر دیتا در کلاس های پر کاربرد بود که پس از ترین کردن، شبکه تنها قادر به تشخیص یک نوع نت بود که سه برابر بقیه کلاس ها در آن دیتا وجود داشت. برای رفع این مشکل به علت کمبود وقت سعی کردیم دیتا ها را در همه کلاس ها یکسان کنیم اما این کار هم باعث overfit شدن شبکه با accuracy 99% شد.
music genre recognition:
مقدمه
تشخیص ژانر موسیقی میتواند در دسته بندی انواع موسیقی بسیار یاری رسان باشد. همچنین برای داشتن اطلاعات مربوط به یک موسیقی یکی از ویژگی های مهم میتواند ژانر آن موسیقی باشد. حال ما سعی کردیم با استفاده از شبکه های عمیق این قابلیت را ایجاد کنیم تا بتوانیم بدون گوش دادن به موسیقی و توسط کامپیوتر بتوانیم ژانر موسیقی را تشخیص دهیم.
آزمایشها و دادهها
دیتاست:
ما برای این قسمت از دیتاست GTZAN که شامل انواع سبک های ” classical, country, disco, hip hop metal, jazz, pop, reggae, blues, rock,” است استفاده کردیم.
برای این قسمت تصمیم گرفته شد تا از مدل RNNنوشته شده در لینک زیر استفاده شود و برای بهتر شدن آن کار شود.
http://github.com/ruohoruotsi/LSTM-Music-Genre-Classification
(دیتاست 6 کلاسه را کامل شد و بر روی شبکه آن کار شد)
برای تعیین ژانر موسیقی همانطور که در بقیه قسمت های مربوط به موسیقی در شبکه های عمیق مانند music generation مطرح است باید ویژگی های آن موسیقی را ابتدا استخراج کرد. که در اینجا از کتابخانه librosa برای این کار استفاده شده است.
ویژگی های استخراج شده شامل MFCC مربوط به طیف صدا و Spectral Centroid مربوط به مرکز طیف صداو CHROMA مربوط به اطلاعات اکتاو ها و نت های موسیقی و Spectral Contrast مربوط به کنتراست طیفی مبتنی بر اکتاو است.
در این سمت از دو لایه LSTM برای آموزش مدل استفاده شده است که با افزایش این تعداد لایه به accuracy پایین تر بر روی دیتا ها رسیدیم و حتی سعی کردیم از شبکه کانوولوشنالی هم قبل از لایه های lstm استفاده کنیم اما نتیجه ی بهتری نگرفتیم.
در نهایت accuracy ما بر روی این داده های validation به 75% رسید اما تشخیص درستی در پی نداشت.
منابع
http://github.com/ruohoruotsi/LSTM-Music-Genre-Classification
https://git.litislab.fr/TextRecognition/CTCModel/tree/master
اعضای گروه : معصومه سلیمیان – آرزو یوسفی
شبکه های اجتماعی