Deep Learning

ลองทำ Machine Learning บนบอร์ด KB32-FT : Part2

สวัสดีครับ วันนี้ผมจะมาสอนเพื่อนๆลองสร้างตัว Machine Learning บนบอร์ด KB32-FT กัน โดยเราจะลองทำตัวอย่างการแบ่งแยกคำ (Word Classification) ที่จะทำการสอนให้บอร์ดรู้จักกับคำพูดต่างๆ เช่น หนึ่ง, สอง, สาม, เปิด และปิด ซึ่งเราจะทำการสอน AI แบบที่เรียกว่า Supervised learning โดยบทความนี้จะถูกแบ่งออกเป็น 3 Part โดย Part 1 จะเป็น Learning Phase : pre-processing, สร้าง datasets Part 2 จะเป็น Learning Phase : Create Model, Train Model, Convert model Part 3 จะเป็น Inference Phase Part 2 Learning Phase : Create Model, Train Model, Convert model VDO ประกอบ หลังจากที่เราได้ทำการเก็บ datasets มาเรียบร้อยแล้วนะครับ ก่อนอื่นเลยเนี่ยเราก็จะทำการแยกข้อมูลของแต่ละคำออกจากกัน เพื่อเตรียมข้อมูลสำหรับการ training นะครับ ซึ่งผมจะแยกเป็นไฟล์ csv ตามชนิดของคำ ซึ่งภายในไฟล์ csv จะเก็บข้อมูลองค์ประกอบของคำที่เราพูดแบ่งตามบรรทัด ในแต่ละบรรทัดจะหมายถึง แอมพลิจูด ขององค์ประกอบความถี่ย่อยของเสียงนั้นๆ เช่นรูปด้านล่างเป็น dataset ของเสียง หนึ่ง บรรทัดแรกคือองค์ประกอบความถี่ของเสียง หนึ่ง หนึ่งคำ คอลัมน์แรกเป็นแอมพลิจูดที่ความถี่ 17.85 *1 Hz คอลัมน์ที่สองเป็นแอมพลิจูดที่ความถี่ 17.85 *2 Hz เป็นต้น เมื่อทำการเตรียมชุดข้อมูลของแต่ละคำเรียบร้อยแล้วก็ให้ทำการสร้างเป็นไฟล์ zip เพื่อให้ง่ายต่อการอัพโหลดขึ้นไปใช้งานบน google Colab จากนั้นเปิด link Demo_KB32_tinyML.ipynb และกด Connect เพื่อเริ่มใช้งาน Session ตัว code ส่วนแรกจะเป็นการเตรียม library และฟังก์ชันที่ใช้งานในโปรแกรม รวมถึงทำการ unzip และโหลด datasets Code ส่วนที่ 2 จะเป็นการแบ่ง dataset ออกเป็น 2 ส่วนสำหรับ train และ validate จากนั้นทำการสร้าง neuron network พร้อมทั้งกำหนดค่า hyperparameter ต่างๆ ส่วนสุดท้ายเป็นการสั่ง train จำนวน 100 Epoch แล้วทำการ save model แต่หากเพื่อนๆยังไม่พอใจในผลลัพท์ก็สามารถเพิ่มจำนวน Epoch หรือปรับแต่ง hyperparameter ดูได้ครับ หลังจากที่ได้โมเดลเรียบร้อยแล้ว ใน Code ส่วนสุดท้ายนี้ก็จะเป็นการเรียกฟังก์ชันสำหรับแปลงตัว TensorFlow model ให้เป็น TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ ที่จะให้เราสามารถนำไปร้านในตัว KB32-FT ได้ครับ เท่านี้เราก็สามารถนำตัว AI ที่มีความสามารถแยกเสียงต่างๆที่เราสอนเข้าไป ทำงานในไมโครคอนโทรลเลอร์ได้ Part 1 GitHub Source Code LINK ผู้ที่สนใจบอร์ด KB32-FT สามารถดูข้อมูล หรือสั่งซื้อได้ที่ LINK ขอบคุณครับ

ลองทำ Machine Learning บนบอร์ด KB32-FT : Part2 Read More »

ลองทำ Machine Learning บนบอร์ด KB32-FT : Part1

สวัสดีครับ วันนี้ผมจะมาสอนเพื่อนๆลองสร้างตัว Machine Learning บนบอร์ด KB32-FT กัน โดยเราจะลองทำตัวอย่างการแบ่งแยกคำ (Word Classification) ที่จะทำการสอนให้บอร์ดรู้จักกับคำพูดต่างๆ เช่น หนึ่ง, สอง, สาม, เปิด และปิด ซึ่งเราจะทำการสอน AI แบบที่เรียกว่า Supervised learning โดยบทความนี้จะถูกแบ่งออกเป็น 3 Part โดย Part 1 จะเป็น Learning Phase : pre-processing, สร้าง datasets Part 2 จะเป็น Learning Phase : Create Model, Train Model, Convert model Part 3 จะเป็น Inference Phase Part 1 Learning Phase : pre-processing, สร้าง datasets VDO ประกอบ งั้นเรามาเริ่มส่วนแรกเลยนะครับ ส่วน learning phase จะเป็นการสร้างเอไอเพื่อที่จะให้เรียนรู้สิ่งที่เราต้องการ ดังนั้นในส่วนนี้ก็จะมีการสร้างชุดข้อมูล (datasets), การเตรียมตัวชุดข้อมูลและAI, การสอน AI (Train) โดยการทำ Word Classification โดย Framework ที่ใช้สร้าง train และ แปลง จะใช้ TensorFlow ส่วน Framework ที่ใช้เขียนโปรแกรมบนบอร์ด KB32-FT จะใช้ Arduino-ESP32 นะครับ ผมจะใช้เซ็นเซอร์ ไมโครโฟนแบบดิจิตอล ที่มี เอาท์พุต เป็น I2S เบอร์ MSM261S4030H0 เพื่อให้เราได้เสียงที่มีคุณภาพ ซึ่งตัวบอร์ด KB32-FT ที่ใช้ชิป ESP32 นั้นมีโมดูลภายในที่สามารถอ่านเซ็นเซอร์แบบ I2S ได้อยู่แล้วทำให้เราสะดวกมากขึ้น (ไมค์ตัวนี้แบบเอาของบอร์ด CorgiDude มาใช้ใครสนใจซื้อได้จาก LINK ) โดยในการที่จะทำให้ AI รู้จักคำพูดต่างๆ ที่เราพูดนั้น เพื่อให้เป็นการง่าย เราจะช่วยแยก Feature ของแต่ละคำที่เราพูดออกมา โดยใช้การแปลง Fourier transforms   แยกองค์ประกอบของความถี่แต่ละเสียงที่เราพูดออกมา และส่ง Feature นี้เข้าไปยัง input ของ neural network (neural network คือโครงสร้างเซลล์สมองของ AI นั้นเอง ) เพื่อให้ AI สามารถเข้าใจรู้จักเสียงแต่ละเสียงได้ครับ ดังนั้นก่อนอื่นเลยเราจะต้องทำการสร้าง datasets เพื่อที่จะสอน AI ให้รู้จักกับคำต่างๆ โดยผมจะสอนคำว่า หนึ่ง, สอง, สาม, เปิด และปิด โดยผมจะเก็บ datasets องค์ประกอบของเสียงตัวอย่างตัวอย่างละ 30 ถึง 40 ชุดคำ พร้อมบอกด้วยว่าเสียงนั้นคือเสียงอะไร(label) เพื่อใช้สอน(train) และทดสอบความแม่นยำ(validate)ของ AI ก่อนที่จะทำมาใช้จริง การต่อสาย Jumper สามารถเสียบบนบอร์ดทดลองได้เลย สะดวกมากๆ ก่อนอื่นเราไปดูตัวอย่าง code ที่ใช้สร้าง datasets กันเลย โค้ดส่วนนี้จะเป็น การเรียก Library ที่ต้องการใช้งานเข้ามาใช้, การกำหนดค่า Parameter การทำงานต่างๆ รวมถึงลูปการเรียกอ่าน ค่าจาก Sensor Microphone ซื่งลูป นี้ผมจะให้ทำงานบน CPU ตัวที่ 2 แยกกับ CPU หลัก ให้สามารถงานได้อิสระ จาก code การทำงานหลัก โค้ดส่วนนี้จะเป็นการ initainze โมดูลภายใน USART, I2S, GPIO, จอLCD, ปุ่มกด(ทำงานแบบ Interrupt), FFT ครับ ส่วนสุดท้ายนี้จะเป็น Code ในส่นที่วงลูปทำงาน โดยโปรแกรมจะรอให้เสียงมีค่าเกินค่า THRESHOLD ที่ผมตั้งไว้ให้มากกว่าเสียง Brackground ในห้องนิดหน่อย ดังนั้นเมื่อ เราพูด โปรแกรมถึงจะเริ่มเก็บเสียง และแปลง FFT เพื่อหาองค์ประกอบของเสียง และแสดงค่า Amplitude ของแต่ละความถี่ออกมาทาง Serial monitor เท่านี้ก็สามารถเก็บ datasets ของเสียงคำพูดได้แล้ว ต่อไปผมก็จะทำการ เก็บค่า เสียง ที่ละเสียงเพื่อสร้าง File CSV เป็น datasets ที่จะใช้ Train ต่อไปใน Part 2 ครับ Part 2 GitHub Source Code LINK ผู้ที่สนใจบอร์ด KB32-FT สามารถดูข้อมูล หรือสั่งซื้อได้ที่ LINK ขอบคุณครับ

ลองทำ Machine Learning บนบอร์ด KB32-FT : Part1 Read More »