Review Paper: AI แยกเสียงร้อง เสียงกลอง เสียงเบส จากเพลงต้นฉบับอัตโนมัติ!! (มี Demo สร้างเพลงคาราโอเกะให้เล่นได้ด้วย)

Share on facebook
Facebook
Share on google
Google+
Share on twitter
Twitter
Share on linkedin
LinkedIn

หากคุณอยากจะฝึกร้องเพลงแบบ Karoke จากเพลงต้นฉบับที่ออกมาสดๆร้อนๆ จะทำอย่างไร?

Paper งานวิจัยนี้เหมาะสำหรับทางสายดนตรีมากๆ จากทีมนักวิจัยของ Facebook AI Research (FAIR) เค้าได้พัฒนา AI ที่มีความสามารถคัดแยกเสียงจากเพลงต้นฉบับที่ออกโดยค่ายเทป อาทิเช่น

เพลง รักติดไซเรน (อันนี้ลูกสาวผมชอบมาก)

 

เพลงต้นฉบับ (Input)

อันนี้คือส่วนที่ตัดออกมาเพื่อทำการให้ AI คัดแยกเสียง 

 

ผลลัพท์จาก AI (Output)

อันนี้คือเสียงที่ AI ตัวนี้แยกแยะมาให้ได้โดยอัตโนมัติ

เสียงนักร้อง

เสียงกลอง

เสียงเบส

และเสียงเพลงประกอบอื่นๆ

 

ทางเรามือซนเลยพัฒนาต่อยอด ทำเป็นเครื่องมือสร้างเสียงเพลงคาราโอเกะอัตโนมัติจากเพลงอะไรก็ได้ซะเลย ตามนี้

เสียงคาราโอเกะ (เสียงทุกเสียงยกเว้นเสียงร้อง) 

 

ฝึกร้องเพลงกันเต็มที่เลย

 

เอาไปใช้ในงานตัดเสียงรบกวน Sound Production ต่างๆ เช่น Podcast

งานนี้สามารถนำไปใช้อะไรได้หลากหลายกว่านี้เยอะมากครับ อาทิเช่น สามารถช่วยตัดเสียงรบกวน (Noise) ของไฟล์เสียงพวกงาน Podcast ก็ได้ ผมเลยลองทดสอบดู สมมุติผมกำลังอัด Podcast อยู่ อัดอยู่ข้างๆ ขณะที่ลูกสาวกำลังดู บรีอาน่า และลูกชายกำลังดู Starwars ไปพร้อมๆกัน 

Podcast ไฟล์ต้นฉบับ (Input)

ฟังผมรู้เรื่องไหมครับ? ฮ่าๆ 

 

ผลลัพท์จาก AI (Output)

เสียงเนื้อหา Podcast

เสียง Noise ที่กรองออกไป

เห็นได้ว่าเทพมากครับ เสียงผมชัดแจ๋วเลย

เรามาดูวิธีการทำงานของ AI กันเถอะ

Paper งานวิจัย: Music Source Separation in the Waveform Domain
ดาวน์โหลด: https://arxiv.org/pdf/1911.13254.pdf

Paper นี้ผมถือว่าฉบับชั้นครูเลยทีเดียว และอ่านง่ายมากกกก หลักการคือ Encoder + Decoder (อีกแล้ว)  แล้วใช้ LSTM มาใช้งานร่วมกันได้อย่างลึกซึ้งมาก มาดูวิธีกันครับ

 

Concept พื้นฐาน

การที่เสียงเข้ามาปนเปกันจนเป็นเสียงเพลงได้นั้น เกิดจาก เครื่องเล่นแต่ละตัวผลิตเสียงเป็นแหล่งเสียง (Source เราย่อว่า s) โดยผลิตเสียงโดยเสียงในรูป Waveform (แทนด้วย x_s ) นั้นคือค่าที่บ่งบอกถึงความดังของเสียงในแต่ละ Source ในช่วงเวลา ถ้าเขียนเป็นสมการ เสียงเพลงของเรา (x) ก็คือ

เป้าหมายของ Paper ชุดนี้คือการหาค่า Parameter θ  ที่ใช้กำกับ Model g โดยที่ g คือ Model AI ตัวนึง (Encoder + LSTM+ Decoder) นี่แหละ แล้วให้ Output ของการ inference ของดนตรีรวม g(x) เท่ากับผลคูณการ inference ของทุกๆแหล่งเสียง g_s(x; θ) โดยที่  g_s(x; θ) คือค่า Output Inference จาก Model g ของแต่ละแหล่งเสียง (s) ในกรณีที่มีเสียงนั้นเล่นอยู่เครื่องเดียว จากเสียงผลรวม (x) และใช้ค่าพารามิเตอร์ที่กำกับใน Parameter θ นั้นเอง 

โอ้ คณิตศาสตร์ช่างสวยงามมมม

 

Goal ของ AI ก็แค่เหลือแต่หา Parameter θ  ที่ทำให้สมการข้างต้นเป็นจริงมากที่สุด เราก็สามารถกำหนด Cost Function (ลด Error ให้ได้มากที่สุดดังนี้)

โดยที่ L คือ Reconstruction Error สำหรับ Dataset D นั้นเอง

Architecture

ใช้หลักการ Encoder -> Bi-LSTM -> Decoder ดังนี้ครับ
0. Preprocessing เอาเพลงจำนวน t วินาทีมาเข้า Short Time Fourier Transform (STFT) หา Mel-spectorgram แล้วเอาเข้า Encoder

1. Encoder คือใช้ Convolutional Auto-Encoder ประกอบไปด้วย 6 Block ใหญ่ต่อกัน และสามารถเลือกว่ากระโดดไป Decoder ที่อยู่ตรงข้ามชั้นกับเราได้เลย (U-network structure) หรือออกจาก Block หรือไป Encoder ชั้นถัดไป 

โดยที่ในแต่ละ Block จะลดความยาวของข้อมูลลงเรื่อยๆ (t) แต่จะเพิ่มจำนวน Channel เรื่อยๆ (Channel เหมือน Filter ใน งาน Vision)  เพื่อหา Respresentation ที่เหมาะสมในการเป็นตัวแทนของเพลงนั้นๆ 

โดยในแต่ละ Block 
    A. ใช้ Conv1D สำหรับจับ Pattern เพลง สร้าง Channel ออกมา โดยที่ Block แรกจะเซ็ตไว้เลยว่าจำนวน Channel ที่ออกมาต้องเป็น 100 Channel ส่วนใน Block ถัดๆไปจะเพิ่มขนาด Channel ขึ้นเป็น 2 เท่าเสมอ 
  
    B. แล้วเอาเข้า Relu Activation Function

    C. ทำ Conv1D อีกรอบ เพิ่มขนาด Channel ขึ้นเป็น 2 เท่า 

    D. ใช้ Activation Function เป็น GLU (Gated Linear Unit) ทำหน้าที่ลดขนาดข้อมูลหาร 2 ข้อมูลลง (เหมือน Pooling Layer นั้นเอง ใน Vision) ทำให้จำนวน Channel เท่าเดิม

ทำไปเรื่อยๆจนครบ 6 Block มีจำนวน Channel รวมเป็น 3200 Channels

2. ใช้ Bi-directional LSTM จำนวน Hidden size = 3200 ทำให้มีจำนวน Channel เพิ่มเป็น 6400 Channel

3. แล้วต่อด้วย Dense Net ลดลงเหลือ 3200 nodes

4. เอาเข้า Decoders โดยที่ลดขนาดลงเรื่อยๆ (ย้อนกลับ Encoder) ลดจาก 3200 จนเหลือ 100 แล้วบังคับให้ Decoder ชั้นสุดท้ายออกมาเหลือ 8 (แยกเสียงเพลงออกมา 4 แบบคือ เสียงกลอง, เสียงเบส, เสียงคนร้อง, และเสียงอื่นๆ และ x 2 เพราะเป็น Storeo)  ก็คือ Output ที่เราต้องการ นั้นเอง

Results

วัดโดยการดูค่า Average signal-to-noise ratio (SDR) ของเสียง Channel ต้นฉบับ (เสียงกลอง, เสียงคนร้อง) ที่อัดแยกไว้จริง กับเสียงที่ AI สร้าง Channel ออกมาให้ ค่า SDR ยิ่งมากยิ่งดี (ดูที่ Demucs)

เด็ดไหมครับ paper นี้  หากใครต้องการ AI ที่ใกล้เคียงกับงานแบบนี้ สามารถลองมาปรึกษาที่ iApp Technology #iApp #AI ได้เลยนะครับ iApp คือผู้เชี่ยวชาญด้านปัญญาประดิษฐ์โดยเฉพาะอย่างยิ่งในด้านภาษาไทย ถนัดทั้งข้อความ เสียง และรูปภาพ (OCR) หากท่านกำลังหามืออาชีพช่วยเป็นที่ปรึกษาหรือพัฒนา AI เพื่อเพิ่มประสิทธิภาพของธุรกิจของคุณ สามารถติดต่อมาที่เราได้เลยนะครับ info@iapp.co.th หรือลองเล่นผลงานของเราที่ https://ai.iapp.co.th ได้เลยนะครับ ขอบคุณมากครับ

หากชอบบทความนี้ฝากกด Like กด Share ให้ด้วยนะครับ

More to explorer

TestWork

EGAT

0 Comments
    thไทย
    en_USEnglish thไทย