in Computer, Diary

เทคนิคการนำโมเดล Tensorflow มารันบน Node.js โดยไม่ต้องใช้ tfjs-converter

ปกติเวลาเรามีข้อมูลที่ได้รับการเทรนเรียบร้อยแล้วทดสอบแล้วได้ผลที่แม่นยำตามที่เราต้องการ จากนั้นเรานำโมเดลที่ผ่านการเทรน และทดสอบแล้วมารันในโปรแกรมซึ่งส่วนใหญ่ก็จะเขียนในภาษาไพทอน แต่ทีนี้เราจะต้องดูปลายทางว่าเราจะนำข้อมูลที่เทรนมาทำงานบนเว็บเบราวเซอร์ มาไว้ในอุปกรณ์ IoT (Internet of Things) หรืออื่น ๆ

Tensorflow.js เป็นไลบรารีที่เกี่ยวกับ Machine Learning/Deep Learning ที่จัดทำโดยบริษัทกูเกิ้ลเพื่อให้เราเทรน ทดสอบข้อมูล หรือทำอะไรก็ตามแต่ที่เกี่ยวข้องโดยใช้ภาษาจาวาสคริปได้ ไลบรารีนี้เราสามารถทำงานบนเว็บเบราวเซอร์ หรือทำงานแบบ Native บน Node.js ได้เลย แต่ในบทความนี้เราจะพูดถึงบน Node.js ครับ

Tensorflow

เท่าที่อ่านตามบทความ Tensorflow.js ที่เป็นภาษาไทยตัวอย่างเช่น บทความนี้ เราจะพบว่าเราอินพอร์ตโมเดลที่ผ่านการแปลงโมเดลอยู่ในรูปที่สามารถทำงานบนเว็บเบราวเซอร์ได้ใช่ไหมครับ แต่จากที่อ่านใน Reference ของ Tensorflow.js บน Node.js จะพบความแตกต่างเมื่อเทียบกับการรันบนเว็บเบราวเซอร์ก็คือ บน Node.js จะมีฟังก์ชันที่สามารถนำ Savedmodel ของ Tensorflow มาทำงานได้เลย โดยจะมีฟังก์ชันที่มีชื่อว่า

tf.node.loadSavedModel("ที่อยู่ไฟล์ savedmodel", tags?, signature?)

คำอธิบายฟังก์ชัน และรายละเอียดเกี่ยวกับ tags, signature เราสามารถอ่านได้ใน Reference ของ Tensorflow.js ได้เลย

การส่งออกโมเดลในรูป savedmodel

ต่อไปเราจะอธิบายวิธีการนำเข้าโมเดล แต่ก่อนอื่นเราต้องส่งออกโมเดลที่ทำงานบน Tensorflow ในไพทอนก่อน วิธีการส่งออกโมเดล (ในตัวอย่างจะเป็นโมเดลที่ใช้ Keras) ออกมาเป็นไฟล์ในรูปแบบ savedmodel ทำได้โดย


save_path = 'savedmodel/'
tf.saved_model.save(pretrained_model, save_path)

โดยที่ pretrained_model คือโมเดลที่ผ่านการเทรนเรียบร้อยแล้ว ส่วน save_path เป็นตำแหน่งโฟลเดอร์ที่เราต้องกสารจะให้ส่งออกเป็น savedmodel เมื่อเราเข้าไปดูในโฟลเดอร์ที่เราได้ส่งออกแล้วจะอยู่ในรูปแบบตามด้านล่าง

assets  saved_model.pb  variable

ถ้าได้ตามข้างบนนี้แสดงว่าส่งออกเป็น savedmodel เรียบร้อย

การติดตั้ง Tensorflow.js บน Node.js

ขั้นตอนต่อไปจะเป็นการนำเข้าโมเดลเข้ามาใช้ใน Tensorflow.js บน Node.js แต่ถ้าผู้อ่านยังไม่ได้ติดตั้งไลบรารีตัวนี้ก็ติดตั้งเพื่อให้ใช้งานบนซีพียูได้โดย

yarn add @tensorflow/tfjs-node

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

yarn add @tensorflow/tfjs-node-gpu

ส่วนวิธีการติดตั้งแบบอื่น ผู้อ่านสามารถอ่านได้ในคู่มือการติดตั้งของกูเกิ้ลตรงหัวข้อ Node.js setup ได้เลยครับ

การนำเข้าโมเดลใน Node.js

เมื่อเราติดตั้งแล้ว เรานำเข้าโมเดลที่ได้รับการส่งออกในรูป savedmodel ซึ่งทำได้โดย

model = await tf.node.loadSavedModel('savedmodel/');

ตัวโมเดลจะนำเข้ามาในระบบเรียบร้อย จากนั้นนำข้อมูลที่ผ่านการแปลงในรูปแบบ Tensor เรียบร้อยแล้วมาให้โมเดลทำนายกันโดยพิมพ์คำสั่ง

output = model.predict(input ที่อยู่ในรูปแบบ tensor);

หลังจากนั้นข้อมูลที่เป็น input ได้รับการทำนายโดยโมเดลที่ผ่านการเทรนเรียบร้อย หลังจากนั้นจะเอาข้อมูลที่ได้ไปทำอะไรก็ขึ้นกับผู้อ่านว่าจะเอาไปทำอะไรดีล่ะ ของเราเป็น Face detection ก็นำตำแหน่งของใบหน้าที่ได้ไปประมวลผลเพื่อหาองศาการหันของศีรษะต่อหรือเรียกว่า Head pose estimation ครับ