Using Exported Model from Lobe

Hai Handsome
Super AI Engineer
Published in
5 min readMar 27, 2021

สวัสดีครับ เพื่อนๆ พี่ๆ น้องๆ ทุกท่าน ผมหมอไฮ้ หรือนายแพทย์คณิต คูศิริวิเชียรนะครับ วันนี้เราจะมาคุยกันในเรื่องการใช้ Model ที่ Export มาจากโปรแกรม Lobe กันนะครับ ซึ่งตอนนี้จะเป็นภาคต่อของตอนที่แล้ว สำหรับเพื่อนๆที่ยังไม่ได้ดูตอนที่แล้วสามารถค้นหาคำว่า Easy Image Classification using Lobe ใน Medium แล้วไปรับชมกันก่อนได้นะครับ เพราะเราจะใช้ Model ที่เราสร้างจากตอนที่แล้วมาทำงานต่อกันครับผม

สำหรับเพื่อนๆที่พร้อมแล้ว เรามาต่อกันเลยดีกว่าครับ ขั้นแรกนะครับ เปิดโปรแกรม Lobe ขึ้นมาได้เลย โดย Double-Click โปรแกรม Lobe ที่มี Icon แบบนี้นะครับ

เราจะเห็นโปรแกรมมีหน้าตาแบบนี้ครับ และเนื่องจากในตอนก่อนเราได้สร้าง Mask Detection Project เอาไว้แล้ว ดังนั้นโปรแกรม Lobe ก็จะแสดงรายการของ Project ที่เราสร้าง เอาไว้ทางด้านขวา ให้เรา Click ที่ Mask Detection Project ของเราเพื่อเปิด Project ขึ้นมาได้เลยครับ

โปรแกรมก็จะแสดงรายละเอียดของ Project ของเรานะครับ ว่ามีรูปทั้งหมดกี่รูป แบ่งเป็นกี่กลุ่ม และแต่ละกลุ่มมีกี่รูป พร้อมทั้งบอก Accuracy ทางด้านล่างซ้ายด้วยครับ

ถ้า Model ของเพื่อนๆยังไม่ OK ก็สามารถทำการ Import รูปเข้ามา และทำ Labeling เพิ่มเติมได้นะครับ แต่ถ้า OK แล้ว ก็ไปต่อที่ขั้นตอนถัดไปได้เลยครับ โดยการกดที่เมนูแฮมเบอร์เกอร์หรือเมนูที่เป็นเส้นสามขีด ที่อยู่ด้านบนซ้าย แล้ว Click ที่คำสั่ง Export… ครับ

จะเห็นว่าโปรแกรม Lobe สามารถ Export Model มาใช้งานได้หลากหลายรูปแบบ คือ

· TensorFlow Lite
สำหรับใช้งานใน Mobile เป็นหลัก ทั้ง Android และ Rasberry Pi

· TensorFlow.js
สำหรับใช้งานใน Browser เช่น Web App ต่างๆ ทั้ง Browser-Based Web App หรือ Server-Side Node App

· TensorFlow
สำหรับใช้ใน Python

· ONNX
หรือ Open Neural Network Exchange เป็นฟอร์แมตกลางสำหรับแลกเปลี่ยนโมเดล AI ที่ริเริ่มโดยไมโครซอฟท์และเฟซบุ๊ก สำหรับทำ Cross Platform Application

· Local API
สำหรับเป็น Host ผ่าน REST endpoint

· CoreML
สำหรับ iOS และ macOS App ซึ่งตัวเลือกนี้จะเห็นเฉพาะกรณีใช้ Lobe บน Apple platform นะครับ

ในบทความนี้เราจะพูดถึงเฉพาะการ Export ไปเป็น TensorFlow สำหรับใช้ในการโปรแกรมภาษา Python นะครับ ดังนั้นให้ Click เลือกที่ TensorFlow ได้เลยครับ จากนั้นเลือก Folder ที่ต้องการ Export Model ไปเก็บไว้นะครับ เมื่อเลือกเรียบร้อยแล้ว โปรแกรม Lobe จะขึ้นถามว่าจะ Optimize ก่อน Export หรือไม่ ให้เลือก Optimize & Export เพื่อให้โปรแกรมทำการ Optimize เพื่อ Performance ที่สูงขึ้นก่อน ทำการ Export นะครับ

โปรแกรมจะใช้เวลาซักครู่หนึ่งในการ Optimize จะเร็วหรือจะช้า ขึ้นอยู่กับขนาดของ Model ของเพื่อนๆ ของผมไม่ถึงนาทีก็เสร็จ เพราะ Model เล็ก มีรูปอยู่ไม่กี่รูป

หลังจาก Optimize เสร็จ โปรแกรมก็จะเริ่มทำการ Export ลงไปใน Folder ที่เราเลือกไว้ต่อเลยครับ

รอสักครู่การ Export ก็เรียบร้อย ให้เราปิดโปรแกรม Lobe ได้เลยนะครับ เพราะไม่ได้ใช้แล้วครับ

ขั้นตอนต่อไป ให้เราไปที่ Folder ที่เราทำการ Export แล้วเปิดด้วย VSCode หรือ Visual Studio Code ซึ่งเป็น Code Editor ยอดนิยมในยุคนี้ ถ้าเพื่อนๆยังไม่ได้ติดตั้ง VSCode ก็สามารถเข้าไป Download ได้จาก Web นี้ครับ https://code.visualstudio.com อย่าลืมติดตั้ง Python และ Python Extension ของ VSCode ด้วยนะครับ ซึ่งการติดตั้ง Python และ Python Extension รบกวนเพื่อนๆค้นหาจาก Google ได้เลยครับ

จะเห็นว่าเราได้ Folder Structure ดังรูปครับ ซึ่งไฟล์ที่สำคัญคือ save_model.pb และโฟลเดอร์ variables ซึ่งเก็บ Model และ Weight ของ Model ของเราไว้นะครับ ส่วน signature.json จะเก็บรายละเอียดการใช้งาน Model และโฟลเดอร์ example จะเก็บตัวอย่างการเรียกใช้งาน Model โดยใช้ภาษา python เอาไว้นะครับ

สำหรับตัวอย่างที่ผมจะแสดงให้ดูนี้จะเป็นการใช้งาน Jupyter Notebook ผ่าน VSCode ดังนั้นให้เพื่อนๆทำการ New File ขึ้นมา ตั้งชื่อว่า mask.ipynb โดยชื่อไฟล์เพื่อนๆอาจเปลี่ยนได้ตามใจชอบ แต่นามสกุลต้องเป็น .ipynb ซึ่งเป็นนามสกุลของ Jupyter Notebook นะครับ เมื่อสร้างเสร็จแล้ว โปรแกรม VSCode จะเปิด File ขึ้นมาให้ทันที ซึ่งจะได้หน้าตาคล้ายๆแบบนี้นะครับ

สำหรับเพื่อนๆที่เคยใช้ Jupyter Notebook, Jupyter Lab, Google Colab หรือ Kaggle มาแล้วก็จะค่อนข้างคุ้นเคยกับ Interface เพราะมีลักษณะเป็น Blockๆ เหมือนกันนะครับ บรรทัดแรกให้ใส่ Code ไปดังนี้ครับ

แล้วคลิ๊กที่ M$ เพื่อเปลี่ยนให้ Code เป็น MarkDown แล้วกด Shift-Enter เพื่อ Run Block จะได้ Title หน้าตาแบบนี้ครับ

จากนั้นให้เราทำการ Import Library ที่เราต้องการใช้งานทั้งหมดดังนี้ครับ

แล้วทำการเขียน Function loadMode() ขึ้นมาเพื่อทำการ Load Inputs และ Outputs Data Format จากไฟล์ signature.json จากนั้นทำการสร้าง TensorFlow Session ขึ้นมาแล้วทำการ Load Model เข้าไปยัง TensorFlow Session โดยการให้เราระบุ Path ไปยัง Folder ที่เก็บไฟล์ save_model.pb ซึ่งก็คือ “.” หรือ Folder ปัจจุบันนั่นเอง จากนั้นให้คืนค่า session, inputs และ outputs ออกมาเพื่อใช้งานต่อไป

จากนั้นให้เรียกใช้งาน loadModel() มาเก็บไว้ในตัวแปร session, inputs, outputs

ลองดูว่าใน inputs และ outputs มีอะไรอยู่บ้างนะครับ

จากนั้นเรามาเขียน Function prepareImage เพื่อทำการเตรียม Image File ให้อยู่ในรูปแบบที่ Model เรารองรับ โดยเริ่มจากเปิด Image File โดยใช้ Library PILLOW แล้วหาว่า width และ height ของ Image เป็นเท่าไหร่ กรณี Image ไม่ได้เป็นสี่เหลี่ยมจัตุรัส ให้ทำการ Crop บริเวณกึ่งกลางของรูป เพื่อให้เป็นสี่เหลี่ยมจตุรัส เนื่องจาก Model ของเราจะรับ Input เป็นสี่เหลี่ยมจัตุรัสเท่านั้น จากนั้นทำการ Resize ตามขนาดที่อ่านได้จาก inputs.Image.Shape และขั้นตอนสุดท้ายคือการ Normalize ค่าจากช่วง 0 ถึง 255 ให้กลายเป็น 0.00 ถึง 1.00 แทน

เรามาเขียน Code สำหรับทำนายผลกันต่อเลย โดยเพิ่ม Function predict() ซึ่งจะรับ Image ที่ผ่านการ prepareImage() มาแล้ว เข้าไปทำการ Predict ผ่านตัวแปร feed_dict ส่วนตัวแปร fetches จะส่ง name ของ Prediction และ Confidences ซึ่งเราต้องการเป็น Output เข้าไปใน Model โดยใช้ Model ที่เรา Load ไว้แล้ว ในรูปแบบ TensorFlow Session ทำการ run จะได้ผลลัพธ์ออกมา จากนั้นทำการ Postprocessing เพื่อทำการแปลงค่าบางค่าที่โปรแกรม Return มาเป็น bytes array ให้กลายเป็น string เพื่อให้สามารถแสดงผลได้ง่ายขึ้น

ก่อนจะทดลองเรียกใช้ Model ให้เราทำการหารูปที่ต้องการตรวจสอบว่ามีหน้ากากอนามัยหรือไม่ โดยผม Capture มาจาก WebCam 2 รูป ตั้งชื่อเป็น Mask.jpg และ NoMask.jpg ตามลำดับ

Mask.jpg
NoMask.jpg

ขั้นตอนสุดท้าย เรามาลอง Predict รูปกันเลย โดย Function ที่ต้องเรียกใช้มี 2 Functions คือ การ Prepare Image และการ Predict โดยเริ่มจากรูป Mask.jpg ก่อน

จะเห็นว่าโปรแกรมเรา Predict ได้ถูกต้อง ได้เป็น Mask คือใส่หน้ากากอนามัย โดยค่าความเชื่อมั่นเราดูที่ Confidences Array โดย Mask คือ สมาชิกตัวแรกของ Array ส่วน No Mask คือ สมาชิกตัวที่สองของ Array ดังนั้นได้ค่าความเชื่อมั่นเป็น 99.9997377% เลยทีเดียว

เรามาลองกันอีกรูปว่าจะ Predict ได้ถูกต้องเหมือนกันหรือเปล่านะครับ โดยคราวนี้มาลองกับรูป NoMask.jpg กันเลย

ซึ่งผลที่ได้ออกมา ก็ตามคาดครับ เป็น No Mask คือไม่ได้ใส่หน้ากากอนามัย โดยเราดูค่าความเชื่อมันที่สมาชิกตัวที่สองของ Confidences Array ได้ค่าความเชื่อมันที่ 99.9997854% ครับผม

เป็นไงบ้างครับเพื่อนๆ สรุปวันนี้ผมก็ได้พาเพื่อนๆทำการ Export Model จากโปรแกรม Lobe แล้วก็นำมาลองเขียน Code ด้วยภาษา Python เพื่อเรียกใช้งาน Model ที่เราได้สร้างขึ้นกันดูนะครับ ผมหวังว่าเพื่อนๆจะได้ความรู้และแรงบันดาลใจไปบ้าง ไม่มากก็น้อยในการทำงานเกี่ยวกับ AI นะครับ ถ้าชอบอย่าลืมกดติดตามและกดปรบมือรัวๆเพื่อเป็นกำลังใจให้ผมด้วยนะครับ ขอบคุณมากครับ

References

· https://docs.lobe.ai/docs/export/export

· https://www.blognone.com/node/97377

--

--