สร้างระบบตรวจตรวจจับสิว ง่ายแบบสิว ๆ ด้วย big data เตรียมพร้อมต่อยอดสร้างธุรกิจเสริมความงามเงินล้าน

Petchakrit Pinyopawasutthi
botnoi-classroom
Published in
5 min readAug 30, 2020

จบไปแล้วครับสำหรับ Botnoi Weekly Project I ในหัวข้อของ Data Analytic หากใครสนใจอ่านรายละเอียดสามารถอ่านได้ที่ https://medium.com/@petchakritskopinyopawasutthi/botnoiweeklyproject-i-9e67e1f11bd3

สำหรับ Week ที่ 2 นี้ เนื่องจากทางทีมงาน Botnoi เห็นศักยภาพและความตั้งใจในการทำ Mini Project ในครั้งแรกของพวกเรา โจทย์ในครั้งนี้จึงเป็นโจทย์ที่จะใหญ่ขึ้นมาจากเดิมสักเล็กน้อย นั่นคือ

ให้ทุกคนใช้ความรู้ทางด้าน ML แล้ว ทำโจทย์สักชิ้นหนึ่งออกมาเป็น API ที่ Deploy อยู่บน Heroku server แล้ว host บน https://openapi.botnoi.ai/

โจทย์ดูจะยาวและยากขึ้นกว่า วีคแรกพอสมควร (จะทำยังไงดีละทีนี้ 555)

ฟังดูยากเลยใช่ไหมละ แต่ แต่ แต่ !!! สำหรับคนที่เรียนคอร์ส DataScienceEssential ของ Botnoi นั้น บอกเลยว่า ไม่ได้ยากขนาดนั้นเพราะ เรามี Guide line จากทางทีมงานบอทน้อยและมี Tutor คอยสอนอยู่ในทุกขั้นตอน :D

สำหรับวีคที่ 2 นี้ ทางกลุ่ม 15 ของเราได้แบ่งงานออกเป็นขั้นตอนมากขึ้น เพื่อให้การดำเนินการเป็นไปอย่างระบบมากขึ้น ดังนี้

  1. ทีม Business ช่วยกันหาโจทย์ในการทำครั้งนี้
  2. ทีมช่วยกันหา Dataset ไม่ว่าจะเป็น การทำโจทย์ด้าน Image, NLP หรือ DataScience
  3. ทีม Programmer ช่วยกันสร้าง model
  4. ทีม Programmer ทำ API, deploy บน Heroku, host บน https://openapi.botnoi.ai/
  5. สรุปผล
https://openapi.botnoi.ai/

Start!!!

1. หาโจทย์

ต้องบอกว่าเป็นเรื่องยากพอสมควรในช่วงแรก เนื่องจากมีปัญหามากมายเต็มไปหมดให้หยิบจับ แต่แล้วกลุ่มของเราก็ไปในทิศทางเดียวกันที่ว่า

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

ref. https://www.sanook.com/women/81009/

นอกจากนี้ในแง่มุมของธุรกิจนั้น อย่างที่ทราบกันว่า พิษโควิด-19 ได้ทำให้หลาย ๆ ธุรกิจต้องตกอยู่ในภาวะชะงักงัน ไปจนถึงติดลบ แล้ว ‘ตลาดความงาม’ ที่ก่อนหน้านี้แม้ภาวะเศรษฐกิจจะชะลอตัวหรือตกต่ำก็ยังมีการเติบโต ภาพรวมจะเป็นอย่างไร ทาง ลอรีอัล(ประเทศไทย) จึงได้มาอัพเดททั้งมูลค่าตลาด , เทรนด์และความท้าทายของตลาดนี้ในยุคที่คนต้องสวยภายใต้หน้ากากให้ฟังดังรูปด้านล่าง

https://www.marketingoops.com/reports/industry-insight/value-and-trend-beauty-market-2020/

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

เปลี่ยนจากการแนะนำผลิตภัณฑ์ทางหน้าร้านให้เป็นการแนะนำสินค้าผ่านทางออนไลน์ต่าง ๆ เป็นต้น

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

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

2. การ collect Data

เราใช้วิธี Scrape data จาก website มาใช้ ในที่นี้ แบ่งเป็นสองส่วน

2.1 Scrape data จาก http://www.dermnet.com/dermatology-pictures-skin-disease-pictures/

โดยเลือกเฉพาะหัวข้อที่มีคำว่า Acne เข้ามา

http://www.dermnet.com/

ตัวอย่างภาพที่นำมา (เนื่องจากภาพที่นำมาอาจมีความน่ากลัวอยู่บ้าง จึงไม่ได้นำมาให้ดูเต็มๆนะครับ 555)

แต่หลักการที่นำมาก็คือ เข้าไปที่แต่ละหัวข้อที่มีคำว่า Acne แล้วดึงภาพทั้งหมดออกมา ดังภาพด้านล่างคือ Acne Cystic มีทั้งหมด 13 หน้า เราก็จะนำภาพทั้งหมดตั้งแต่หน้าที่ 1 ถึง 13 มาเป็น data set ของเรา

2.2 Scrape data จาก google โดยใช้ module scrape จาก package ของ botnoi

Package ของทาง botnoi

เป็น Package ที่ทางทีม Botnoi สร้างเอาไว้แล้ว เราสามารถนำมาใช้ได้เลย (เห็นไหมครับ บอกแล้วว่าถ้าคุณมาลงเรียน DataScienceEssential กับทาง Botnoi แล้วละก็ ง่ายสุดๆไปเลย !!!)

สำหรับวิธีใช้ เราแค่กำหนดคำที่เราต้องการ search ลงไป ในที่นี้ผมนำคำที่ใช้ Search มาจากข้อ 2.1

Output : หลังจากที่ Scrape data มาจากทั้งสองส่วนแล้ว นำมารวมกัน output ที่ได้ของเราจะเป็น ลิ้ง url ของรูป ทั้งหมดที่นำมาใช้

ภาพประกอบตัวอย่าง all_srcs มาจาก data_srcs รวมกับ addon_srcs

3. Model

3.1 Feature extraction

แน่นอนว่าหลังจากที่เรามี Data set ในส่วนที่เป็น Image แล้ว เราจะดึง Feature เด่นๆ ของมันมาใช้ได้อย่างไร เช่น รูปหมา, แมว โดยปกติทั่วไปแล้ว ในการทำ classification ภาพจะมีกระบวนการที่เรียกว่า convolution เข้ามาใช้งานเพื่อช่วยสกัดเอา feature เด่นๆ ออกมา

Convolution Neural Network (https://www.aspexit.com/en/neural-network-lets-try-to-demystify-all-this-a-little-bit-3-application-to-images/)

ภาพข้างบนแสดงโครงสร้างของการใช้ convolution ร่วมกับ neural network จะประกอบไปด้วย Input layer นั่นก็คือ ภาพที่เรานำมาใช้เพื่อ train หรือ predict ในส่วนตรงกลางเรียกว่าเป็นส่วน Convolution and Pooling layers เป็นส่วนที่มีการสกัดเอา Features สำคัญๆ ของภาพออกมา ก่อนที่จะนำ Features สำคัญที่ได้ไปเข้าสู่ Output layer หรือ Multi-layer perceptrons ดังภาพ เพื่อ classify ภาพ

คำว่า Features ของภาพหมายความว่าอย่างไร

ก่อนอื่น ถ้าผมจะบอกว่าให้ ผู้อ่านทุกคนลองนึกภาพสุนัขขึ้นมาในหัวนะครับ จะมีอะไรเกิดขึ้นในหัวของเราบ้าง???

แน่นอนครับว่า แต่ละคนจะคิดลักษณะภายนอกของสุนัขแตกต่างกันไปขึ้นกับประสบการณ์การพบเจอสุนัขของแต่ละคน

แต่ลักษณะเด่นๆ ที่ผู้เขียนคิดว่า เกือบจะทุกคนต้องคิดไปในทิศทางเดียวกันแน่ๆ คือ สุนัขต้องประกอบด้วย ตา จมูก หู

https://byam.github.io/dlnd/2018/01/07/convolutional-networks.html

เริ่มเห็นภาพกันรึยังครับ???

ถูกต้องแล้ว ตา จมูก หู เหล่านี้ คือลักษณะเด่นๆ หรือ Features ที่บ่งบอกถึงความเป็นสุนัขครับ

คราวนี้กลับมาที่โจทย์ของเราว่า เรามีี Data set ที่เป็นภาพสิว แน่นอนครับว่าเราก็จำเป็นต้องนำภาพเหล่านี้ไปผ่านกระบวนการ train ด้วย convolution neural network มากมาย เพื่อดึง feature ออกมา (แต่ แต่ แต่!!! ด้วยความที่เรามาลงเรียน DataScienceEssential กับทาง Botnoi แล้วละก็ ชีวิตเราก็จะไม่ยุ่งยากอีกต่อไป )

Package ของทาง botnoi

ง่ายมากเลยใช่ไหมหละ??? ทางทีม ฺBotnoi เขาเตรียมทุกอย่างมาให้พร้อมใช้งานได้อย่างสะดวกสุดๆแล้ว ภาพด้านบนจะเป็นตัวอย่างการดึง feature มาจาก Resnet50 นะครับ แต่เนื่องจาก Project นี้เราจะทำเป็น API และ Deploy บน Heroku ซึ่งมีข้อจำกัดบางอย่าง ทำให้ตอนทำจริงเราจะเปลี่ยนไปใช้ mobilenet แทนครับ แต่วิธีใช้เหมือนกัน เพียงแค่เปลี่ยนจาก getresnet50() เป็น getmobilenet()

3.2 Pre-processing

หลังจากที่สกัด Feature ออกมาได้แล้ว เราจะนำไปเข้าสู่โมเดลเพื่อทำนายต่อไป แต่ก่อนอื่นเรามาลองใช้ความรู้จากวีคที่แล้วกันสักหน่อย ทำ Data Visualize สักเล็กน้อยเพื่อดูว่า Data set ที่เรานำมานั่นมีประเภทสิวแบบใดบ้าง

Each type of Acne

ว้าวววว !!! แต่ละประเภท มีจำนวนค่อนข้างแตกต่างกันอยู่นะ แบบนี้จะมีผลต่อการทำ model ของเราไหมน้าาา????

Imbalanced data คือปัญหาที่แต่ละ category มีจำนวน data ไม่เท่ากันมากเกินไป ซึ่งอาจส่งผลได้ ทางกลุ่มเราจึงปรึกษากันและมองว่า เราอาจจะทำโจทย์ให้ง่ายขึ้นมากว่านี้หน่อยด้วยการ list ว่า สิวแต่ละประเภทเหล่านี้ มีชนิดใดบ้างที่สามารถเกิดเป็นรอยแผลเป็น/Keloid ได้ ทำให้โจทย์ของเราจะเปลี่ยนไปเป็น binary classification เท่านั้น โดยแบ่งเป็นกลุ่มที่สามารถเป็นรอยแผลเป็นได้/Keloid กับ กลุ่มที่ไม่มีโอกาสเกิดเป็นแผลเป็น/Non-Keloid

binary classification

เมื่อเสร็จขั้นตอน pre-processing กันแล้ว เราก็ไปสู่ขั้นตอน Build Model กันเถอะ

3.3 Build Model

ใน Project ครั้งนี้ ทีมของเราเลือกที่จะใช้ SVM มาใช้ในการแก้ปัญหา

โดยให้แบ่ง train set, test set เป็น 70%, 30% ตามลำดับ ก่อนที่จะเข้า Model ให้มีการทำ scaling data ด้วย StandardScaler()

ผลที่ได้

Accuracy from SVM

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

3.4 Predict

ขั้นตอนการทำนาย เราจะรับ link url ของรูปภาพ เข้ามาเพื่อทำนายว่า ภาพสิวนั้นเป็น Keloid หรือ Non-Keloid

ตัวอย่าง Predict ภาพ

4. API, Deploy on Heroku, host บน openapi.botnoi

ว้าวๆๆๆ หลังจากทีี่ทำเสร็จเรียบร้อยขั้นตอนต่อไปคือ เขียนเป็น API, Deploy on Heroku แล้วก็ Host บน openapi.botnoi

ฟังดูยากอีกแล้ววว เช่นเดิมครับ อะไรก็ตามที่ยากแล้วละก็ หากคุณเรียน DataScience Essential มันจะง่ายไปในทันที

ขั้นตอนการทำทั้งหลายสามารถอ่านได้จาก Dr. Winn Voravuthikunchai

ตามลิ้งด้านล่างเลยครับ

ผลลัพธ์ที่ได้ของเราตอนนี้

เพียงแค่เราคัดลอก url ของภาพใส่ลงไปในช่อง พารามิเตอร์ ผลลัพธ์ก็จะแสดงออกมาดังภาพด้านล่าง

https://openapi.botnoi.ai/dashboard/api/sa-acne_predict

สุดยอดเลยใช่ไหมครับ หากคุณสนใจที่จะได้ทำโปรเจคที่น่าสนใจขนาดนี้ละก็ รู้แล้วใช่ไหมครับว่า ต้องทำยังไง :)

5. สรุปผล การต่อยอดและพัฒนาในอนาคต

  • ในอนาคต ตัวแอพพลิเคชั่นสามารถทำการพัฒนาต่อยอดให้ครอบคลุมกับปัญหาสุขภาพผิวหน้าได้มากกว่าสิวและรอยแผลเป็น โดยปัจจุบัน แอพพลิเคชั่นยังสามารถวิเคราะห์ปัญหาได้เฉพาะส่วนเท่านั้น แต่ในอนาคตอาจพัฒนาไปเป็นการวิเคราะห์สภาพผิวทั้งใบหน้า โดยใช้การตรวจจับความผิดปกติบนใบหน้า (Object detection) และวิเคราะห์ปัญหาทั้งหมดบนใบหน้าได้พร้อมกัน เพื่อให้แอพพลิเคชั่นนี้สามารถทำการวิเคราะห์สภาพของผิวอื่นๆ ได้หลากหลายมากขึ้น เช่น เฉดสีผิว ฝ้า กระ ริ้วรอย รูขุมขน(ตัวแทนความชุ่มชื้นของผิวบนใบหน้า) ความมันวาวของผิว ความหย่อนคล้อยของผิว ผื่นแพ้ต่างๆ เป็นต้น ซึ่งจะสามารถทำให้วิเคราะห์สภาพผิวได้อย่างมีมิติมากขึ้น หากสามารถทำให้แอพพลิเคชั่นแม่นยำมากยิ่งขึ้น ก็จะเป็นประโยชน์ต่อการคัดกรองสภาพผิวที่มีปัญหาได้ดียิ่งขึ้น
  • เมื่อพัฒนาความแม่นยำของแอพพลิเคชั่นได้ดีแล้ว ก็จะสามารถนำไปใช้กับ profession healthcare staff ได้ เช่น เภสัชกร หรือ Beaty Assistance ซึ่งจะช่วยทำให้สามารถวิเคราะห์ จำแนกปัญหาสภาพผิว พยากรณ์ปัญหาที่จะเกิดขึ้นในอนาคตได้ เช่น จะเกิดแผลเป็นจากสิวประเภทที่มีปัญหาหา ถ้าไม่ทำการรักษาหรือใช้ผลิตภัณฑ์ให้เหมาะสม ดังนั้นจึงจะสามารถนำไปใช้ในร้านขายยา หรือ ร้านขายผลิตภัณฑ์บำรุงผิวต่างๆ เพื่อใช้วิเคราะห์และช่วยแนะนำผลิตภัณฑ์ที่เหมาะสม อย่างมีความเป็นมืออาชีพมากยิ่งขึ้น
  • เมื่อมีปริมาณ Data ที่มากเพียงพอ เช่น คนในประเทศใช้กันทุกคน ก็จะสามารถนำปัญหาสภาพผิวต่างๆ ที่ได้รับ ทำการรวบรวมข้อมูล และ นำข้อมูลไปเสนอขายให้กับบริษัทต่างๆ ในรูปแบบงานวิจัยได้ ซึ่งบริษัทเครื่องสำอาง /โรงงานรับผลิต ก็จะสามารถนำข้อมูลต่างๆ เหล่านี้ไปกำหนดทิศทางพัฒนาผลิตภัณฑ์เครื่องสำอาง ครีมบำรุงผิวต่างๆ ออกมาเป็นสินค้าใหม่ๆ ให้สอดคล้องกับปัญหาสภาพผิวที่ผู้ใช้เป็นอยู่ เรียกได้ว่าทำการผลิตสินค้าออกมาได้อย่างตรงใจผู้บริโภค โดยมีข้อมูลการวิจัยผู้บริโภคอยู่ในมือ โดยไม่ต้องเริ่มทำ Reserach ใหม่เพื่อหาความต้องการเบื้องต้นของผู้บริโภคตั้งแต่แรก
  • เมื่อมีปริมาณ user ผู้ใช้แอพพลิเคชั่นมากเพียงพอ จะเกิด economy of scale ได้ media ads ใหม่ โดยจะทำให้แอพพลิเคชั่นสามารถทำการรับโฆษณาผลิตภัณฑ์ในระบบแนะนำสินค้า เพื่อให้ผู้บริโภคมีทางเลือกในการตัดสินใจ โดยอาจจะรับโฆษณาในลักษณะของแบนเนอร์ภายในแอพลิเคชั่น หรือ product reccomended ซึ่งจะมีค่าโฆษณา แตกต่างกันออกไป ตามตำแหน่งที่แสดงผลการโฆษณาในแต่ละแอพพลิเคชั่นได้
  • ใช้ในทางการแพทย์ โดยใช้ในการช่วยตรวจวินิจฉัยและประเมินอาการ ซึ่งจะช่วยลดระยะเวลาในการเตรียมการรักษาได้

ตัวอย่าง Application ที่มี

https://www.skinlog.tech/

เราสามารถแสกนหน้าของเรา แล้วมันจะประมวลผลลัพธ์ออกมาให้

https://www.skinlog.tech/

สุดท้ายนี้ ต้องขอขอบคุณเพื่อนทุกคนในกลุ่มเป็นอย่างสูงที่ให้ความร่วมมือและช่วยกันทำ Mini Project นี้ให้สำเร็จลุล่วงไปได้ด้วยดี

Team member:

  1. เพชรกฤษณ์
  2. ธนภัทร
  3. ณัฐพจน์
  4. กัลยรัตน์
  5. ธนบดินทร์
  6. อภิสิทธิ์
  7. อรวรรณ
  8. เพิร์ธ
  9. ณัฐรัชต์
  10. ภควรรฒน์
  11. ณฐพล
  12. กมลภัทร
  13. Peerapat
  14. ธราวัฒน์
  15. Mig
  16. ภัทริญญา
  17. ปรินดา
  18. ณัฐสกล

Special Thanks : ขอบคุณทางทีมงาน Botnoi ทุกคน ที่ร่วมกันสร้าง Classroom นี้ขึ้นมา ถือเป็นการมอบโอกาสและประสบการณ์ที่ดีมากๆให้กับพวกเรา ขอบคุณครับ

--

--