GYM EQUIPMENT IDENTIFICATION

Vickie
botnoi-classroom
Published in
3 min readSep 1, 2020

Background: บทความนี้เป็นส่วนหนึ่งของ Data Science Essential ของ Botnoi Classroom หัวข้อ Machine Learning จัดทำโดย ทีม DSEs G12

ในบทความนี้เราจะอธิบายวิธีการพัฒนา Machine Learning Model รวมถึงการสร้าง Gym Equipment Identification ซึ่งเป็น Image Classification API ตามขั้นตอนของ Machine Learning.

Team members : มน, เอ็ม, วิกกี้, หนุ่ม, บิ๊ก, นุ, แก้ว, ก้อง, พัด, บอย, เอ็ม, บีน, ออย ,ซาน,มุ่ย, ต้น,พี, นน, เจ็ม

Gym Equipment Identification delivers you the missing piece

Reference Document Link https://colab.research.google.com/drive/1Wgac_OyzHAmCFk23wzrjm9IPBMcHLwDS?usp=sharing

Machine Learning และ การประยุกต์ใช้งาน

Machine Learning คือการกำหนด algorithms เพื่อใช้เป็น criteriaให้ computer สามารถวิเคราะห์ข้อมูลที่เราป้อนเข้าไป และนำเอาผลลัพธ์ที่ได้ไปใช้ประโยชน์ในรูปแบบต่างๆ เช่น แอปพลิเคชันที่ใช้ในการจำแนกรูปภาพ เครื่องมือที่ใช้ในการคาดการณ์ ตลอดจนถึงการวิเคราะห์ข้อความและเสียงพูด

ทางทีมได้เล็งเห็นถึงความสามารถในการทำ Image Classification หรือการจำแนกรูปภาพซึ่งนำมาใช้ประโยชน์ในการช่วยจำแนกชนิดของสิ่งต่างๆได้อย่างมีประสิทธิภาพ และจากประสบการณ์ที่มีสมาชิกในทีมหลายท่านได้เคยไปออกกำลังกายที่ยิม โดยเฉพาะผู้ที่เพิ่งเริ่มต้น มักจะเกิดความรู้สึกประหม่าเมื่อต้องพบเจอกับอุปกรณ์หลากหลายชนิด และไม่รู้วิธีการใช้อุปกรณ์เหล่านั้น หากจะใช้บริการเทรนเนอร์ก็ติดปัญหาในเรื่องของราคาที่สูง ในปัจจุบันถึงแม้ว่าการค้นหาข้อมูลจากอินเตอร์เนตจะอยู่เพียงแค่ปลายนิ้ว แต่การหาข้อมูลวิธีการใช้อุปกรณ์ออกกำลังกายเหล่านี้ก็ไม่สามารถทำได้ง่ายหากไม่ทราบชื่อของอุปกรณ์ แต่ถ้ามีตัวช่วยที่เราเพียงแค่ป้อนข้อมูลภาพถ่าย จะสามารถบอกชื่ออุปกรณ์ยิมชนิดนั้นได้ทันที ก็จะทำให้เราหาข้อมูลการใช้งานอุปกรณ์ได้อย่างถูกต้อง ดังนั้นทางทีมจึงได้นำโจทย์นี้มาใช้ในการสร้าง GYM Equipment Identification API

Machine Learning & API Creation Process :

Machine Learning Process

Data Collection :

การรวบรวมข้อมูลคือขั้นตอนแรกของการทำงาน ซึ่งมีความสำคัญมากเนื่องจากคุณภาพและปริมาณของข้อมูลที่รวบรวมได้จะเป็นตัวแปรสำคัญในการทำให้ผลลัพธ์การคาดการณ์ของเราจะออกมาแม่นยำ

ข้อมูลของทีมเราถูกรวบรวมจากรูปภาพบนอินเทอร์เน็ตสำหรับอุปกรณ์ออกกำลังกาย ในช่วงแรกนี้ทีมของเราต้องการจะจำกัดปริมาณของข้อมูลไม่ให้เยอะจนเกินไป จึงได้เลือกใช้ภาพอุปกรณ์ออกกำลังกายเพียง 4 ประเภทในการเริ่มทำงานนี้ ประกอบด้วย: Roman chair, Lateral pull-down, Squat rack, และ Stationary Bicycle

เริ่มแรกเราใช้วิธีการดึงรูปภาพจากการคำค้นหาใน google image search เพื่อหลีกเลี่ยงการใช้แรงงานคนมาคัดแยกรูปภาพ แต่พบว่าวิธีการนี้ได้รูปภาพที่ไม่มีคุณภาพ ทำให้ประสิทธิภาพของ model ที่สร้างขึ้นนั้นไม่ดีเท่าที่ควร ทำให้เกิดความผิดพลาดสูงในการบอกชนิดของอุปกรณ์ออกกำลังกาย เราจึงต้องเปลี่ยนมาให้สมาชิกในทีมเป็นผู้คัดเลือกเพื่อให้ได้รูปภาพที่ดีและถูกต้องโดยได้คัดเลือกรูปภาพมาชนิดละประมาณ 100 ภาพ และใส่ชื่อหรือ Labels ไว้

โดยทีมของเราคิดว่าถ้าหาก API สามารถทำงานได้อย่างแม่นยำตามที่คาดหวัง เราจะเพิ่มจำนวนชนิดของอุปกรณ์ให้มากยิ่งขึ้นในลำดับต่อไป

Feature Extraction :

ในขั้นตอนการเตรียมข้อมูล เราจะโหลดข้อมูลไปไว้ใน Google drive จากนั้นนำไปสกัด Features เพื่อนำไปใช้ในการ Train model ในขั้นตอนถัดไป ส่วนในขั้นตอนการสกัด feature นี้เราได้เลือกใช้ pre-trained neural network model ของ MobileNetV2 (สามารถดาวน์โหลดได้จากเว็บ TensorFlow hub) ซึ่งสามารถให้ feature ออกมามากถึง 1,280 features

บางครั้งข้อมูลที่รวบรวมได้ อาจจำเป็นต้องปรับเปลี่ยนและแก้ไขข้อผิดพลาดของตัวข้อมูล เพื่อให้ข้อมูลมีความเหมาะสมและถูกต้อง เพิ่มประสิทธิภาพในการนำไปใช้ Train model ให้ดียิ่งขึ้น

นอกจากนี้เราควรต้องแบ่งข้อมูลออกเป็นสองชุดในอัตราส่วน ชุดแรก 80% และ ชุดที่สอง 20% ซึ่งชุดแรกที่ใช้ในการ Train model ของเราจะเป็นชุดข้อมูลส่วนใหญ่ ส่วนชุดที่สองจะใช้ในการประเมินประสิทธิภาพของโมเดลที่ได้รับการ Train เรียบร้อยแล้ว

Model Training :

Model Training Process

เป้าหมายของการทำ Train Model คือ การทำให้ Classification หรือการแยกชนิดของข้อมูลเกิดขึ้นอย่างถูกต้องในเปอร์เซ็นต์ที่สูงตามความคาดหวัง

ในการ Develop skillset โดยทั่วไปแล้วก็จะเกิดจากการฝึกฝนทักษะนั้นซ้ำๆ จนเกิดความชำนาญในสิ่งที่ฝึกฝน

ในขั้นตอนการ Train Model นี้ก็คล้ายคลึงกัน เราจะใช้ข้อมูลรูปภาพที่ได้รวบรวมมาจำนวนมาก นำมา process ซ้ำๆเพื่อพัฒนา Model ให้ฉลาดยิ่งขึ้น สามารถจดจำและแยกแยะได้ว่าอุปกรณ์ยิมนั้นคืออุปกรณ์อะไร และเมื่อทำการ Train Model เป็นที่เรียบร้อยเราก็จำเป็นต้องทำ Performanct Test เพื่อที่จะได้ทราบว่าความสามารถของ Model นั้นเพียงพอและพร้อมที่จะนำไปใช้งานจริงหรือยัง

Evaluation :

เมื่อทำ Model Training เสร็จแล้ว ก็ถึงเวลาประเมิณว่า Model ที่เราสร้างขึ้นนั้นมีประสิทธิภาพหรือไม่ โดยการนำชุดข้อมูลอีกชุดที่ได้ถูกเตรียมไว้มาใช้ในการประเมินผล ช่วยให้เราสามารถทดสอบ Model ของเรากับข้อมูลที่ไม่เคยถูกใช้ในการ Train มาก่อน การทดสอบนี้ทำให้เราเห็นว่า Model มีความสามารถในการนำไปใช้งานจริงด้วยประสิทธิภาพในระดับไหน ถ้าหากเปอร์เซ็นต์การจำแนกอุปกรณ์ออกกำลังในยิมอยู่ในระดับที่ต่ำกว่าความคาดหมาย เราสามารถเพิ่มปริมาณข้อมูลรูปภาพในการใช้สกัด Features ให้มากยิ่งขึ้น ก็จะสามารถทำการ Train Model ให้มีประสิทธิภาพที่สูงขึ้น หรืออาจจะปรับเปลี่ยน algorithm ที่ใช้อยู่ให้มีความเหมาะสมซึ่งจะช่วยส่งเสริมให้ Model ทำงานได้ดียิ่งขึ้น

** Lesson Learned **

ดังที่กล่าวไว้ข้างต้น ว่าเริ่มแรกเราใช้รูปภาพจาก google image search โดยตรง และเราได้เลือกใช้โมเดลชนิด Support Vector Machines (SVMs) จาก library ที่ชื่อว่า Scikit-learn เป็นตัวต้นแบบ (ใช้ 1000 features ที่สกัดโดยใช้ฟังก์ชัน getmobilenet() จาก library ของ botnoi) ซึ่งหลังจากได้ทำการ Train และ Test Model ครั้งแรกนั้นเปอร์เซ็นต์ความแม่นยำของ Model ก็ออกมาค่อนข้างเป็นที่น่าพอใจ แต่เรายังต้องการปรับให้ค่าความแม่นยำของ Model สูงขึ้นอีก

ผลการทดสอบ SVMs Model : Accuracy 64.81 %

ดังนั้นสมาชิกของกลุ่มจึงได้ทำการทดลองเลือกรูปภาพด้วยตนเองและเปลี่ยนมาใช้ Neural Network model จาก library ที่ชื่อว่า Keras โดยใช้ 1,280 features ที่สกัดโดยใช้ MobileNetV2 ซึ่งพบว่ามีประสิทธิภาพดีขึ้นกว่าในครั้งแรกและมีเปอร์เซ็นต์ความแม่นยำสูงกว่าเดิมมาก

ผลของการทดสอบ Neural Network Model : Accuracy 93.26 %

Annotation :

(1) Coding ที่ใช้ได้รับแรงบันดาลใจจาก: https://medium.com/analytics-vidhya/how-to-do-image-classification-on-custom-dataset-using-tensorflow-52309666498e

(2) TensorFlow hub: https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4

Model Deployment :

ในขั้นตอนสุดท้ายของการสร้าง Image Classification Model คือการนำโมเดลที่ได้ไป deploy เป็น API เพื่อให้สามารถนำไปใช้ในการวิเคราะห์ปัญหาที่เกิดขั้นในชีวิตประจำวันจริงๆ โดยทางสมาชิกได้เลือกใช้การ deploy บน Heroku และนำ API ที่ได้ไปฝากไว้กับ Botnoi OpenAI ที่ลิงค์นี้

https://openapi.botnoi.ai/dashboard/api/sa-gym-equipment-images-api

โดย Model ถูกพัฒนาขึ้นจากฐานข้อมูลรูปภาพที่เรารวบรวมมาเพื่อให้มีความสามารถแยกชนิดของอุปกรณ์ยิมที่เราต้องการจะทราบ เพียงแค่นำภาพของอุปกรณ์ออกกำลังที่เราอยากจะทราบชื่อ ป้อนเข้าไปให้กับ Gym Equipment Identification API.

Conclusion & Suggestion :

ทีมของเราประสบผลสำเร็จในการเขียนและทดสอบการใช้งานของ Gym Equipment Identification API ซึ่งเป็นส่วนหนื่งของทำ Machine Learning ในประเภท Image Classification

Machine Learning มีขีดความสามารถที่สูงเมื่อเทียบกับความสามารถที่มีอยู่จำกัดของคน ตัวอย่างที่เห็นได้ชัดคือ Gym Equipment Identification สามารถจดจำและแยกแยะชนิดของอุปกรณ์ยิมได้อย่างรวดเร็วมีประสิทธิภาพ และยังสามารถเรียนรู้เพิ่มเติมได้มากมายจนแทบไม่มีขีดจำกัด

Gym Equipment Identification API ที่ทีมเราได้ทำขึ้นมา ยังสามารถนำไปต่อยอดสร้าง web หรือ mobile application ที่เป็นประโยชน์ได้อีกมากมาย เช่น นำ API นี้ไปพัฒนาเพิ่มความสามารถของ Model ให้แยกชนิดและบอกวิธีใช้งานตามประเภทของอุปกรณ์ บอกจำนวนแคลรอรี่ที่จะสามารถเผาผลาญหากออกกำลังกายด้วยอุปกรณ์นี้ตามเวลาที่กำหนด รวมถึงให้คำแนะนำว่าอุปกรณ์ยิมนี้เหมาะสมกับสิ่งที่ผู้ใช้งานคาดหวังหรือไม่ ถ้าหากต้องการจะสร้างกล้ามเนื้อขาให้แข็งแรง ควรใช้อุปกรณ์ตัวนี้หรือไม่ ต่างๆเหล่านี้เป็นต้น

นอกจากบอกชื่ออุปกรณ์แล้ว หาก application ที่พัฒนาจะสามารถแนะนำลิงค์วิดีโอที่เหมาะสม ให้ผู้ใช้สามารถกดเพื่อดูวิธีการใช้งานอุปกรณ์ก็น่าจะช่วยให้ผู้ใช้สามารถเข้าไปออกกำลังกานในยิมได้อย่างถูกต้อง มั่นใจ และมีสุขภาพร่างกายที่แข็งแรง

ท้ายนี้..ทีมของเราหวังเป็นอย่างยิ่งว่า Gym Equipment Identification จะสามารถเป็นตัวอย่างในการเรียนรู้ขบวนการทำ Machine Learning และมีการนำไปต่อยอดใช้งานได้อย่างเหมาะสม

--

--