ไม่ว่าจะแบรนด์ไหน ให้ AI ทำนายกัน…..ทำนายยี่ห้อกระเป๋า Brandname ด้วย Machine Learning
(Handbag Brands Prediction)

สวัสดีค่า กลับมาเจอกันอีกครั้งกับกลุ่ม G6 และการบ้านใน week 2–3 ของ Data Science Essential: Botnoi Classroom ในหัวข้อ Machine Learning and Prediction Model โดยให้กลุ่มเลือกหัวข้อเรื่องที่สนใจเพื่อมาสร้าง Model ทำนาย และ Deploy API เพื่อให้สามารถนำไปใช้ได้และนำไปฝากไว้กับ https://openapi.botnoi.ai/ ของ Botnoi ซึ่งจะขอเล่าให้ฟังสั้นๆ เดี่ยวกับ Machine Learning ดังนี้ค่ะ

Machine Learning การเรียนรู้ของเครื่องคอมพิวเตอร์ เสมือนเป็นสมองของ AI (Artificial Intelligence) เราจะสอนให้คอมพิวเตอร์เรียนรู้ ทำความเข้าใจ ตัดสินใจ ทำนายผลลัพธ์ได้ด้วยตัวเองจากข้อมูลที่เราป้อนให้ ซึ่งมี 3 รูปแบบก็คือ Supervised Leaning, Unsupervised Leaning และ Reinforcement Leaning
- Supervised Leaning การเรียนรู้แบบมีผู้สอน อย่างเช่น การสอนเด็กน้อยให้แยกประเภทหมา แมว โดยเด็กก็จะสังเกตจากลักษณะต่างๆ ว่าเป็นประเภทใด เช่น หู ขน (เรียกว่า features) ซึ่งเราก็สามารถสอนคอมพิวเตอร์ให้แยก หมา แมว ได้เช่นกัน โดยป้อนข้อมูลหมาแต่ละรูป แมวแต่ละรูป โดยแปลงเป็นชุดตัวเลขให้คอมพิวเตอร์เข้าใจ (ซึ่งชุดตัวเลขก็คือ features นั่นเอง) พร้อมกันนี้ เราก็ป้อนข้อมูลผลลัพธ์ให้ด้วยว่า feature แบบนี้คือ หมา feature แบบนี้คือแมว (ซึ่งเรียกว่า labels) และเมื่อเราป้อนข้อมูลให้คอมพิวเตอร์เป็นจำนวนมากๆ (หรือเรียกว่า การ Train model), model ของเราก็จะสามารถแยกแยะ และทำนายผลออกมาว่าเป็นหมา หรือแมว (predictive model) ซึ่งในการจัดประเภทแบบนี้จะเรียกว่า classification ซึ่งสามารถนำไปใช้อย่างเช่น การอนุมัติสินเชื่อ (อนุมัติ หรือ ไม่อนุมัติ) หรือการย้ายค่ายมือถือ (ย้าย หรือ ไม่ย้าย) อีกรูปแบบนึงของ Supervised Leaning เรียกว่า Regression ซึ่งจะเป็นการทำนายผลลัพธ์ที่เป็น ผลลัพธ์ต่อเนื่องกัน เช่นการทำนายราคาบ้านจาก จำนวนห้อง ขนาดบ้าน ทำเล เป็นตัวเลขออกมา หรือ การพยากรณ์สภาพอากาศ

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

- Reinforcement Leaning เป็นการเรียนรู้เหมือนกับการเรียนรู้ของมนุษย์ เรียนรู้จากประสบการณ์การลองผิดลองถูก เรียนรู้ข้อดี ข้อเสียของวิธีนั้นๆ โดยมีการให้รางวัลเพื่อปรับพฤติกรรมการกระทำ หาวิธีซึ่งนำไปสู่ผลลัพธ์ที่มีประสิทธิภาพที่สุด โดยไม่จำเป็นต้องมีข้อมูลเพื่อฝึกฝน แต่ Machine จะพยายามเรียนรู้จากสิ่งที่ทำไปแล้ว รวมไปถึงวิธีการใหม่ๆ ที่อาจจะดีกว่า เป็นกระบวนการทำซ้ำๆ ยิ่งมี feedback กลับมามากเท่าไหร่ ก็จะทำให้ machine สามารถหาวิธีได้ดีมากขึ้น ตัวอย่างเช่น AlphaGo โปรแกรมแข่งโกะที่สามารถเอาชนะแชมป์โกะระดับโลกได้
สรุปความแตกต่างของทั้ง 3 แบบได้ตามรูปข้างล่างนี้เลยค่ะ

หลังจากได้เรียนรู้เกี่ยวกับ Machine Learning มาพอสมควรแล้ว ทีนี้เรามาเริ่มกระบวนการในการทำโจทย์ของเรากันดีกว่า เริ่มจากการตั้งโจทย์ในครั้งนี้
Get problem การตั้งปัญหา ตั้งโจทย์
ทำไมเป็นกระเป๋า Brandname ?
เพื่อนๆ เคยเป็นมั๊ยคะ โดยเฉพาะขา shop ทั้งหลาย เวลาเห็นซุปตาร์หรือ celeb ออกงานหรือไปเที่ยวต่างประเทศ แล้วจะต้องมี option accessories เกร๋ๆ ตลอดเวลา เราก็จะต้องไปส่องละไม่ว่าจะใน IG FB โดยเฉพาะกระเป๋าเนี่ย item เด็ดเลย เค้าถือไรกันน้า ช่วงนี้ฮิตอะไร เราจะได้ไม่ out กัน จะได้ไปตำกันบ้าง ออกเป็นแนว spectator เบาๆ ซึ่งในการที่เราจะต้องทำการหาข้อมูลกระเป๋า หารุ่น ราคา หรือที่ขายมีที่ไหน บ้างเนี่ย มันใช้เวลาเราไปเยอะเลยนะคะ 🤔

เราจึงได้ไอเดียขึ้นมาว่ามันคงจะดีไม่น้อย ถ้าเราแค่ใส่รูปกระเป๋าเข้าไป แล้วมี model ที่สามารถแสดงผลข้อมูลให้เราว่ากระเป๋านี้คือยี่ห้ออะไร รุ่นอะไร ราคาเท่าไหร่ ซื้อใน shop เท่าไหร่ หรือมีมือ 2 ราคาเท่าไหร่ มีที่ไหนขายบ้าง ถ้า model สามารถบอกเราได้ก็จะเลิศมาก ไม่ต้องเสียเวลาเป็นชั่วโมงๆ ไปนั่งหาเอง
รูปข้างล่างเป็นตัวอย่างที่เราคิดกันเอาไว้ว่าอยากจะให้เป็นนะคะ

………… แต่เดี๋ยวก่อน !!!!! ………ด้วยความที่เวลาจำกัด และด้วยกระเป๋า brandname มียี่ห้อ brand เยอะมาก และแต่ละ brand ก็มีหลายรุ่นหลายแบบอีก เราจึงตั้งต้นเริ่มโจทย์ของเรา ให้ model เริ่มทำนายยี่ห้อออกมาได้ก่อนว่าเป็นยี่ห้ออะไร และต่อไปเราค่อยเพิ่มเติมในเรื่องอื่นๆ นะคะ 😊
พอได้โจทย์แล้ว เราก็มาเริ่มขั้นตอนการสร้าง Prediction Model ด้วย Machine Learning กันเลยดีกว่า

เริ่ม!!!!!!!!!!!!
Collect Data การเก็บข้อมูล

Pilot แบรนด์กระเป๋าโดนใจสาว ๆ ด้วย Top 5 Hermes, Louis Vuitton, Dior, Issey Miyake, และ YSL เพื่อที่จะเทรน model ให้เรียนรู้และจำแนกแต่ละแบรนด์ได้ ด้วยการป้อนข้อมูลภาพมหาศาล (จริงๆก็ควรจะล้านรูปแหละ ราวกับว่าเห็นมาก จำมาก ย่อมแม่นมาก) แต่ด้วยระยะเวลาอันน้อยนิดจึงมีเวลาเก็บภาพได้แค่ 500 กว่ารูป ด้วยวิธี manual เซฟรูปจากเน็ต แต่ แต่ แต่ มันมีวิธีที่ง่ายต่อชีวิตมากด้วยการเขียนโค้ด Web scraping ดึงภาพจากอินเตอร์เน็ตเข้าโฟลเดอร์ได้เลย ประหยัดเวลาไปได้เยอะ ปล. Phrase I กะว่าจะทำแค่ให้ model แยกยี่ห้อได้ก่อน บวกกับเวลาน้อย การเลือกรูปเลยเน้นเป็นรูป 2D หน้าตรง เห็นโลโก้ชัด ๆ

Data cleaning ตอนที่ทำ Web scraping มาจาก Google Image มันอาจจะมีรูปอื่นๆ ที่เราไม่อยากได้ติดเข้ามา จึงเป็นหน้าที่ของ Data Cleaning ต้องออกโรงแล้ว ไป cut รูปที่ไม่อยากได้ออกไป หรือ เป็นรูปที่มีลักษณะตรงตามที่เราอยากจะ train model นั่นเอง เช่น รูปในกรอบสีแดง ที่เราจะไม่เอา


Feature extraction
- ขั้นตอนในการเปลี่ยนข้อมูลรูปภาพให้เป็นข้อมูลในรูปแบบที่คอมพิวเตอร์เข้าใจได้ โดยเราใช้ MobileNet ซึ่งใช้หลัก Convolutional Neural Network มาใช้เพื่อลดทรัพยากรทาง hardware และลดระยะเวลาในการทำ image classification model ซึ่งถ้าเราจะสร้างใหม่ตั้งแต่ต้นต้องใช้ทั้งเวลาและทรัพยากรจำนวนมากเพื่อสร้าง cnn ที่มีประสิทธิภาพเช่นนี้ เราจึงเลือกใช้ MobileNet เพื่อมาช่วยเรา
- นอกจากนี้ MobileNet ยังใช้เนื้อที่น้อย แต่ความแม่นยำอาจจะน้อยลงถ้าเทียบกับ model ตัวอื่นๆ ตารางเปรียบเทียบสามารถดูได้จากข้างล่างค่ะ

Train and Test Model
ต่อไปก็มาถึงขั้นตอนในการ train model เพื่อให้โมเดลเราเก่งขึ้นๆ และสามารถจำแนกประเภทกระเป๋า brandname ของเราให้แม่นยำขึ้นนั่นเอง ซึ่งเราจะนำ feature จากข้อที่แล้วมาป้อนให้โมเดล และสร้าง layer เพื่อให้ model สามารถคัดแยกกระเป๋าแบรนด์เนม on top of MobileNet อีกที

โดยเราได้แบ่งข้อมูลไว้เป็น 2 ชุด สำหรับ train และ test (70:30)

Model สร้างจาก MobileNetV1

Model สร้างจาก MobileNetV2

เราได้ลองทำ 2 model ก็คือ MobileNetV1 และ MobileNetV2 ซึ่งค่า accuracy f1 score ของ MobileNetV1 เท่ากับ 92% และ MobileNetV2 เท่ากับ 94% เราจึงเลือกใช้ MobileNetV2 เพื่อที่จะทำการ deploy ต่อไป
ข้างล่างเป็นตัวอย่างที่เราได้ลองใส่รูป แล้วให้ model ทำนายให้เราค่ะ

Deploy Model
หลังจากที่เราได้โมเดลที่จะนำไปใช้แล้ว โดยเราได้เลือก MobileNetV2 ขั้นต่อไปก็จะเป็นการนำโมเดลไปใช้วิเคราะห์ได้จริง โดยการสร้าง API นำไป run บน server ของ Heroku แล้วต่อไปก็จะนำไปฝากไว้ที่ API marketplace ของ Botnoi openapi.botnoi

ดูวิธีการสร้างและ host AI API บน Heroku และ BOTNOI OpenAPI กดที่นี่เลยค่ะ
Link API ของเราค่ะ เข้าไปลองเล่นกันดูได้นะคะ


สรุปผล
- จากที่เราใช้ MobileNetV2 โมเดลถือว่ามีความแม่นยำพอสมควร แต่เราก็สามารถที่จะเพิ่มจำนวนรูปภาพมากขึ้นอีกเพื่อจะ train ให้โมเดลมีความแม่นยำมากกว่านี้
- การจัดการข้อมูล การหาข้อมูล หรือการ clean data จะใช้เวลามากพอสมควร ถึงแม้เราจะสามารถใช้ web scraping แต่ก็ต้องมาคัดเลือกรูปที่ไม่ใช่ออกอีกที เพื่อความแม่นยำของโมเดล
- อีกหนึ่งการทดลองของเราก็คือ เราลองใส่รูปที่เป็นคนถือกระเป๋าเข้าไปให้โมเดลเราลองทายดูว่าจะทำนายได้มั้ย ปรากฎว่า โมเดลก็สามารถทำนายออกมาได้ ซึ่งจะถือว่าเป็นจุดเด่นของ machine learning ก็ได้ เพราะถึงแม้เราจะ train model ด้วยรูปกระเป๋า แต่เมื่อเรานำรูปอื่นๆ ที่ไม้ได้มีการ เทรนเข้าไปให้ model predict ก็ยังสามารถทำนายได้ถูกต้องถึงแม้ว่ารูปแบบคนถือกระเป๋าจะไม่ถูกนำมาใช้ในการเทรน ซึ่งเป็นจุดแข็งที่สำคัญของ machine learning ซึ่งแตกต่างจาก machine vision ในรูปแบบเดิมๆ ซึ่งใช้การเปรียบเทียบค่าของ pixel เป็นหลักเมื่อนำอะไรที่แตกต่างจากรูปแบบที่ทำ model มากๆ เช่นรูปแบบกระเป๋า กับคน ถือกระเป๋า จะไม่สามารถทำนายได้ถูกต้อง

แต่อย่างไรก็ดีถ้าจะให้โมเดลของเราแม่นยำมากขึ้นและใช้ได้จริง เราอาจจะต้องใช้ model Object Detection อย่าง Yolo มาใช้เพิ่มเติม ในการตรวจจับวัตถุในรูปภาพ

- สำหรับการต่อยอด เราสามารถต่อยอดไปเป็น application แบบที่เราได้เกริ่นไว้ในตอนแรกได้ โดยผู้ใช้ใส่รูปกระเป๋าที่ต้องการจะหาข้อมูลงไป ตัว application ก็สามารถแสดงผล brand รุ่น ราคา รวมไปถึงแสดงเพิ่มเติมถึง ร้านค้าทั้งมือ 1 มือ 2 ที่มีสินค้านี้ขายอยู่ ซึ่งผู้ใช้ก็จะสามารถกดเข้าไปดูรายละเอียดสินค้า ข้อมูลของร้านนั้นๆ ได้อีก นอกเหนือจากนั้น app อาจจะแนะนำเพิ่มเติมในลายอื่นๆ สีอื่นๆ หรือกระเป๋าที่มีรูปแบบคล้ายๆ กัน ใน brand อื่นๆ เพื่อให้ผู้ใช้ได้มีทางเลือกในการ shopping อีกก็ได้ ….. น่าจะตอบโจทย์ สาวก brandname ขา shop ทั้งหลายเลยล่ะค่ะ 🥰

เป็นไงกันบ้างค่ะ จากบทความนี้ เพื่อนๆ ก็คงพอจะเข้าใจเกี่ยวกับ Machine Learning และเห็นภาพว่า Machine Learning มีการใช้งานอย่างไร และมีประโยชน์อย่างไรกันบ้างนะคะ ยังไงก็ฝากเป็นกำลังใจให้กลุ่มเรา กดไลค์ หรือคอมเมนต์กันมาได้นะค้า อย่าลืมติดตามเรากันต่อในครั้งหน้านะคะ แล้วพบกันค่ะ 🙏😁
* สามารถดูการเขียนโค้ดเพิ่มเติมได้ที่นี่เลยค่ะ https://colab.research.google.com/drive/1ZuZccTBWkqs-RqelLzYa8pZZIU3luHYD#scrollTo=83VUWsZnaoPF
*ขอบคุณ TA จาก Botnoi คุณตู้และทีม Botnoi ที่ให้คำปรึกษาด้วยค่า
*ขอบคุณรูปจากอินเตอร์เน็ท
https://www.jeab.com/shoe-bag/solferino-it-bag-saint-laurent