อุตสาหกรรมเลี้ยงผึ้งเพื่อให้ได้น้ำผึ้งเพื่อจำหน่ายนั้นจัดเป็นอุตสาหกรรมขนาดใหญ่ ที่มีมูลค่าตลาดมากกว่า 1.17 พันล้านดอลลาร์ (USAID 2012) และอีกทั้งการนำผึ้งมาประยุกต์ใช้การในช่วยผสมเกสรทางการเกษตรซึ่งช่วยให้เพิ่มผลผลิตได้ 15 – 130% จากเดิม [1] ด้วย 2 สาเหตุนี้ การเลี้ยงผึ้งจึงเป็นอุตสาหกรรมการเกษตรที่เป็นที่นิยม อย่างไรตามในปัจจุบันผู้เลี้ยงผึ้งจำเป็นที่จะต้องเปิดรังที่ตนเองดูแล โดยใช้เวลาเฉลี่ย 15-30 นาที/รัง เพื่อประเมินสภาพรังในทุกๆสัปดาห์ ซึ่งปกติอุตสาหกรรมหรือสวนที่มีขนาดใหญ่มีรังผึ้งมากกว่า 1,000 รัง จึงยากต่อการที่จะเข้ามาดูแลให้ทั่วถึง โดยเหตุนี้จึงมีคำถามจากผู้เลี้ยงว่า “เราจะทราบได้อย่างไรผึ้งที่เราเลี้ยงอยู่นั้น มีกิจกรรมภายในรังที่ปกติ หรือผิดปกติ” , “สถานะของรังนั้นมีปัญหาอะไรหรือไม่?”
เทคโนโลยีเซนเซอร์ในปัจจุบัน และเทคโนโลยี Internet of things มีก้าวหน้ามากขึ้น ดังนั้นจึงเริ่มมีการศึกษาโดยการเก็บข้อมูลจากรังผึ้งไม่ว่าจะเป็นการติดตั้ง Doppler Sensor บริเวณปากทางเข้ารังของผึ้ง การถ่ายภาพเพื่อนำมาทำ image processing หรือการใช้ไมโครโฟนเก็บข้อมูลเสียงที่เกิดขึ้นภายในรังมาวิเคราะห์ โดยในบทความนี้จะแสดง “การประยุกต์ใช้เทคนิคทางการวิเคราะห์สัญญาณที่มีชื่อว่า Fourier Transform ร่วมด้วยกับ Convolutional Neural Network ในการระบุสถานะของรังผึ้งด้วยสัญญาณเสียง” ซึ่งจะแบ่งหัวข้อในบทความนี้ออกเป็น 5 ประเด็น ดังนี้
สัญญาณเสียงของผึ้ง
พื้นฐานและการทำงานของ Fourier Transform
การแสดงผลข้อมูลในรูปแบบสเปคโตแกรม (Spectrogram)
พื้นฐานและการทำงานของ Convolutional Neural Network
การประยุกต์ใช้ Fourier Transform ร่วมกับ Convolutional Neural Network ในการแยะแยก Hissing Signal
1. สัญญาณเสียงของผึ้ง
ขั้นแรกลักษณะของสัญญาณเสียงของผึ้ง ผู้เขียนเลือกสัญญาณที่มีชื่อว่า “Hissing Signal” ซึ่งเป็นเสียงที่มีลักษณะต่อเนื่องเป็นเวลา 1 – 1.5 วินาที ความถี่ 200-3,600 Hz จะพบสัญญาณนี้เมื่อผึ้งกำลังข่มขู่ศัตรูในธรรมชาติ ณ ขณะนั้น โดยสัญญาณนี้จะเป็นสัญญาณที่ถูกสร้างจากผึ้งจำนวนหลายตัวภายในรัง
ผู้อ่านสามารถทำการ Load ไฟล์เสียง ตัวอย่างขึ้นมาในโปรแกรม Python ได้ด้วยคำสั่งตามภาพที่ 1 โดยจะเห็นได้ว่าข้อมูลมีความยาวในการอัดเป็น 60 วินาทีหรือ 1 นาที ซึ่งมีขนาดข้อมูลเป็น 2,880,000 จุด แบ่งเป็น 2 แชนแนล, Sampling rate ที่ใช้ในการเก็บคือ 48,000 จุด/วินาที อย่างไรก็ตามข้อมูลที่ถูกอ่านขึ้นมานั้นจะอยู่ในโดเมนของเวลา
ภาพที่1 การอ่านไฟล์เสียงเข้าสู่โปรแกรม Python
หากต้องการฟังเสียงและแสดงผล ดูข้อมูลตัวอย่างข้อมูลในโดเมนเวลาสามารถเขียนเรียกด้วยคำสั่งตามภาพที่ 2 ซึ่งแกน x คือจุดเวลาของข้อมูล และแกน y คือ amplitude ของสัญญาณที่สัมพันธ์กับความดัง (Loudness)
ภาพที่ 2 ตัวอย่างโค้ดการสร้างหน้าต่างฟังเสียงและแสดงข้อมูลตัวอย่าง
2. พื้นฐานและการทำงานของ Fourier Transform
เนื่องจากข้อมูลที่อยู่ในรูปแบบดิจิตอลที่ถูกใช้ในคอมพิวเตอร์จะเป็นข้อมูลที่มีลักษณะเป็น Discrete ดังนั้นเทคนิคที่นำมาใช้ในการวิเคราะห์จะเป็น Discrete Fourier Transform โดยทำการแปลงข้อมูลในโดเมนของเวลาให้อยู่ในโดเมนของความถี่โดยบทความนี้จะพูดถึงอัลกอลิทึมที่มีชื่อว่า Short-Time Fourier Transform (FTFT) โดยมีสมการดังสมการที่ 1 ซึ่งมีหลักการคือการ Shift Window (w[n]) ไปตลอดสัญญานในโดเมนเวลา (x[t]) อย่างไรก็ตามเมื่อทำการ Shift Window ไปตลอดสัญญาณจะเกิดเหตุการณ์ที่ข้อมูลบางส่วนหายไปเพราะขอบของ Window มีค่าเข้าใกล้ศูนย์ ดังนั้นจึงมีเทคนิคที่ชื่อว่าการทำ Overlapping เพื่อลดผลกระทบจากการใช้ Window ดังกล่าว
สมการที่ 1 Short-Time Fourier Transform
ภาพที่ 3 ตัวอย่างการ Overlapping อ้างอิง https://dsp.stackexchange.com/questions/19311/stft-why-overlapping-the-window
ผลลัพธ์ที่ได้จากการทำ STFT กับข้อมูลจะได้ผลลัพธ์ออกมาเป็นเวกเตอร์และขนาดของความถี่ที่มีสัญญาณช่วงเวลาหนึ่ง Window ดังภาพที่ 4
ภาพที่ 4 ผลลัพธ์หลังการทำ STFT กับข้อมูลเสียง
3. การแสดงผลข้อมูลในรูปแบบสเปคโตรแกรม (Spectrogram)
เนื่องจากการพิจารณาข้อมูลที่ได้หลังจากการทำ STFT ในแต่ละช่วง Window นั้นเป็นเรื่องซับซ้อน ดังนั้นจึงมีการนำข้อมูลทั้งหมดดังกล่าวมาแสดงผลให้อยู่ในรูปแบบของสเปคโตรแกรม ซึ่งสเปคโตรแกรมแกน x จะเป็นแกนเวลา, แกน y เป็นแกนความถี่ และสีที่แสดงอยู่ในภาพแสดงถึงความเข้มของขนาดของความถี่ ณ จุดนั้นๆ จากภาพที่ 5.1 และ 5.2 ผู้เขียนได้ทำการแสดงข้อมูลที่มีสัญญาณ Hissing ความยาว 1 วินาที ที่เกิดขึ้นที่ระหว่างวินาที 50-51 ในไฟล์เสียง จะพบว่าบริเวณช่วงความถี่ 1,000-3,000Hz ของภาพที่ 5 มีปริมาณความเข้มของสัญญาณมากกว่าภาพที่ 6.1 และ 6.2 ที่สัญญาณไม่มีองค์ประกอบของสัญญาณ Hissing อย่างไรก็ตามการแสดงในรูปแบบสเปคโตรแกรมนั้น มี Trade-off ในเรื่องรายละเอียดระหว่างเวลาและความถี่ กล่างคือ หากให้รายละเอียดในเชิงเวลาที่มากจนเกินไป (ในที่นี้ 60 วินาที) จะส่งผลให้รายละเอียดเชิงความถี่ด้อยลง ดังนั้นในการแสดงในรูปแบบสเปคโตรแกรมส่วนใหญ่นิยมให้ช่วงเวลาในหลักมิลลิวินาที ถึง วินาที เพื่อให้ได้รายละเอียดเชิงความถี่ที่มากขึ้น ซึ่งช่วงเวลาที่เหมาะสมก็ขึ้นอยู่กับลักษณะและธรรมชาติของสัญญาน ในที่นี่ Hissing มีช่วงเวลาในการเกิดอยู่ที่ 1-1.5 วินาที ดังนั้นควรเลือกช่วง 1-2 วินาที
ภาพที่ 5.1 ลักษณะข้อมูลในเชิงเวลาของสัญญาณที่มีสัญญาณ Hissing เป็นองค์ประกอบ
ภาพที่ 5.2 ลักษณะข้อมูลในเชิงสเปคโตรแกรมของสัญญาณที่มีสัญญาณ Hissing เป็นองค์ประกอบ
ภาพที่ 6.1 ลักษณะข้อมูลในเชิงเวลาของสัญญาณที่ไม่มีสัญญาณ Hissing เป็นองค์ประกอบ
ภาพที่ 6.2 ลักษณะข้อมูลในเชิงสเปคโตรแกรมของสัญญาณที่ไม่มีสัญญาณ Hissing เป็นองค์ประกอบ
4. พื้นฐานและการทำงานของ Convolutional Neural Network (CNN)
CNN เป็นเทคนิคหนึ่งใน Deep Learning ที่นิยมในการนำมาวิเคราะห์เกี่ยวกับรูปภาพเป็นอย่างมากในปัจจุบัน อย่างไรก็ตามบทความนี้จะไม่ได้ลงรายละเอียดในเชิงลึกเกี่ยวกับ CNN และรายละเอียดเชิงลึกของ Deep Learning แต่นำเทคนิคดังกล่าวมาประยุกต์ใช้ โดยเบื้องต้นเราสามารถแบ่งประเภทของเลเยอร์ (layer) ของ CNN ได้เป็น 3 ส่วน ดังนี้
Convolution Layer ใช้สำหรับการสร้าง Feature Map บนรูปภาพ ปกตินิยมใช้ขนาด 3×3, 5×5 และ 7×7 ซึ่งเลเยอร์นี้ถือได้ว่าเป็นจุดเด่นของ CNN
Pooling Layer ใช้สำหรับการลดขนาดของข้อมูล ซึ่งมีหลายรูปแบบเช่น Max Pooling, Average Pooling เป็นต้น
Fully Connected Layer ใช้สำหรับ Mapping ข้อมูลทั้งหมดที่เป็น Input ให้เชื่อมต่อกับ Perceptron ของ Deep Learning
ภาพที่ 7 ตัวอย่างโครงสร้างของ CNN อ้างอิง https://peltarion.com/article/classifying-images-of-clothes-with-the-peltarion-platform
5. การประยุกต์ใช้ Fourier Transform ร่วมกับ Convolutional Neural Network ในการแยะแยก Hissing Signal
ดังที่กล่าวในตอนต้นของบทความ เป้าหมายการวิเคราะห์ คือ “การระบุสถานะของรังผึ้งด้วยสัญญาณเสียง” โดยปัจจุบันเทคนิคการแปลงสัญญาณในเชิงโดเมนของเวลาให้กลายเป็นข้อมูลเชิงโดเมนความถี่ด้วยการใช้เทคนิค STFT และแสดงผลของข้อมูลให้เป็นสเปคโตรแกรมเพื่อนำผลลัพธ์ที่ได้สร้างเป็น Input ในการเรียนรู้ของโมเดล CNN เป็นที่นิยมในการใช้วิเคราะห์ [2, 3, 4]
ผู้เขียนได้ทำการจัดเตรียมข้อมูลซึ่งเป็นส่วนที่ใช้เวลานาน เริ่มต้นจากการเริ่มฟังเสียงผึ้งที่ผู้เขียนได้ทำการบันทึกมาไว้ก่อนหน้านี้ โดยแต่ละไฟล์มีความยาว 60 วินาที/ไฟล์ ต่อมาทำการแบ่งข้อมูลเสียงออกเป็น 60 ช่วง ช่วงละ 1 วินาที และทำการระบุคลาสของข้อมูลว่าในแต่ละช่วงนั้นมี Hissing Signal เกิดขึ้นหรือไม่ หลังจากนั้นนำข้อมูลเสียงที่อยู่ในโดเมนเวลาไปผ่าน STFT เพื่อให้ได้ข้อมูลในเชิงสัญญาณและแปลงข้อมูลเหล่านั้นให้เป็นสเปคโตรแกรมดังตัวอย่างในภาพที่ 5 โดยเบื้องต้นจัดเตรียมสเปคโตรแกรมที่เกิดจากข้อมูลเสียงที่ไม่มี Hissing Signal 600 ไฟล์ และมี Hissing Signal จำนวน 400 ไฟล์
ลำดับต่อมาคือการออกแบบโครงสร้างของ CNN ที่จะใช้ในการเรียนรู้ข้อมูลสเปคโตรแกรม โดยผู้เขียนได้ออกแบบ ดังภาพที่ 8 โดยอ้างอิง 6th rule of thumb จากหนังสือ Guide to Convolutional Neural Network [5] ซึ่งมีรายละเอียดดังนี้
ขนาดของข้อมูลก่อนที่จะเชื่อมต่อกับส่วน Fully Connected Layer ควรมีขนาดน้อยกว่า 8×8
จำนวนของ Feature Map ควรเริ่มต้นจากขนาดเล็กใน Convolution Layer ในชั้นแรกๆ และเพิ่มจำนวน Feature Map มากขึ้นใน Convolution Layer ชั้นถัดๆไป
ขนาดของ Kernel ใน Convolution Layer ควรเป็น 3×3, 5×5, 7×7
Activation Function นิยมถูกออกแบบไว้หลัง Convolution Layer
ไม่ควรใช้ Activation เกิน 2 แบบใน Convolution Layer
ใช้ Activation ในเครือของ Relu เช่น Rellu, Leaky Relu, PReLU, ELU หรือ Noisy ReLU.
ขั้นตอนสุดท้ายแบ่งข้อมูลภาพสเปคโตรแกรมด้วยอัตราส่วน 60% เพื่อสร้างการเรียนรู้ และ 40% เพื่อทดสอบกับโมเดล CNN ซึ่งในขั้นตอนนี้จะใช้เวลาในการเรียนเรียนรู้ของ CNN ค่อนข้างนานหากใช้การประมวลผลแบบ CPU โดยหากผู้อ่านท่านใดต้องการนำหลักการในบทความนี้ไปวิเคราะห์ข้อมูลเสียงที่ตนเองมีอยู่ ผู้เขียนขอแนะนำให้เลือกใช้ช้การประมวลผลแบบ Graphic Processing Unit:GPU เพื่อเพิ่มประสิทธิภาพและความเร็วในการสร้างโมเดล โดยท้ายที่สุดเมื่อนำข้อมูลสเปคโตรแกรมอีก 40% (มี Hissing 200 รูป, ไม่มี Hissing 200 รูป) ที่เหลือไปทำการทดสอบโมเดล CNN ได้ Confusion Matrix ดังภาพที่ 9 โดยโมเดลสามารถทำนายสเปคโตรแกรมที่ไม่ Hissing Signal ได้ 179 จาก 200 ภาพ และทำนายสเปคโตรแกรมที่มี Hissing Signal ได้ 106 จาก 200 ภาพ ซึ่งภาพรวมความแม่นยำของโมเดลอยู่ที่ 71.21%
ภาพที่ 8 โครงสร้าง CNN
ภาพที่ 9 Confusion Matrix
สรุป
ในบทความนี้กล่าวถึงการนำ AI ไปประยุกต์ใช้ในการเลี้ยงผึ้ง โดยการนำเทคนิค STFT ในการแปลงข้อมูลเสียงผึ้งที่อยู่ในโดเมนของเวลาให้กลายเป็นข้อมูลในเชิงของความถี่ จากนั้นนำข้อมูลในเชิงความถี่ดังกล่าวมาแสดงผลในรูปแบบสเปคโตรแกรม และนำผลลัพธ์สเปคโตรแกรมที่เป็นรูปภาพดังกล่าวไปสร้างเป็น input ในการเรียนรู้ของโมเดล CNN เพื่อนำมาแยกแยะว่าข้อมูลเสียงมีองค์ประกอบของ Hissing Signal หรือไม่
ข้อเสนอแนะ
อย่างไรก็ตามการแยะแยะสัญญาณในบทความนี้มีพารามิเตอร์หลายตัวที่มีผลต่อผลลัพธ์ของการแยกแยะสถานะได้ เช่น ขนาดของ Window ที่ใช้ใน STFT, ชนิดของ Window, Overlapping percentage อีกทั้งยังมีพารามีเตอร์ต่างๆที่สามารถปรับแต่งในส่วนของ CNN ได้ ดังนั้นจึงจำเป็นที่จะต้องมีทำ experimental design เพื่อหากลุ่มพารามิเตอร์ที่เหมาะสม นอกเหนือจากการวิเคราะห์ด้วยเทคนิคตามบทความนี้แล้ว ยังสามารถทำในรูปแบบอื่นๆได้ เช่นการทำ Feature Extraction ของสัญญาณ และนำกลุ่มของฟีเจอร์ที่ได้ดังกล่าวไปใช้ในการแยกแยะประเภทของสัญญานเสียงก็ได้
*สามารถดาวน์โหลดโค้ดตัวอย่างได้ที่ https://drive.google.com/drive/folders/15WTvwx0Z3PuuKS_Z5sTXOXqmlZLj4jhH?usp=sharing
References
[1] Geslin, Benoît & Aizen, Marcelo & Garcia, Nancy & Pereira, Ana-Julia & Vaissière, Bernard & Garibaldi, Lucas. (2017). The impact of honey bee colony quality on crop yield and farmers’ profit in apples and pears. Agriculture, Ecosystems & Environment. 248. 153-161. 10.1016/j.agee.2017.07.035.
[2] Karol J. Piczak,(2015). ENVIRONMENTAL SOUND CLASSIFICATION WITH CONVOLUTIONAL NEURAL NETWORKS. Institute of Electronic Systems Warsaw University of Technology. IEEE INTERNATIONAL WORKSHOP ON MACHINE LEARNING FOR SIGNAL PROCESSING, pp. 17–20
[3] Khamparia, Aditya & Gupta, Deepak & Nhu, Nguyen & Khanna, Ashish & Pandey, Babita & Tiwari, Prayag. (2019). Sound Classification Using Convolutional Neural Network and Tensor Deep Stacking Network. IEEE Access. PP. 1-1. 10.1109/ACCESS.2018.2888882.
[4] K. Jaiswal and D. Kalpeshbhai Patel, “Sound Classification Using Convolutional Neural Networks,” 2018 IEEE International Conference on Cloud Computing in Emerging Markets (CCEM), Bangalore, India, 2018, pp. 81-84.
[5] Khan, Salman & Rahmani, Hossein & Shah, Syed & Bennamoun, Mohammed. (2018). A Guide to Convolutional Neural Networks for Computer Vision. Synthesis Lectures on Computer Vision. 8. 1-207. 10.2200/S00822ED1V01Y201712COV015