รัน Neural Network model ใน Unity ด้วย Barracuda

วันนี้ผมจะมาสอนวิธีการรัน Neural Network model ใน Unity แบบง่ายๆ โดยใช้ Package Barracuda ของ Unity กันครับ

โดย Barracuda จะรับ model เป็นไฟล์ ONNX นะครับ ถ้าคุณทำ model ใน tensor flow ต้องทำการแปลงก่อนโดยใช้โปรแกรมเช่น GitHub - onnx/tensorflow-onnx: Convert TensorFlow models to ONNX หรือถ้าเป็น ML Lib ตัวอื่นก็ต้องหาตัว converter เพื่อแปลงเป็นไฟล์ .onnx ก่อนนะครับ

1. ลง Barracuda ใน Unity

ก่อนอื่นเลย เราต้องมาลง Barracuda ใน Unity กัน ซึ่งทำได้ไม่ยาก โดยให้กดเข้าไปที่ Window -> Package Manager

กด + และเลือก Add package from git URL แล้วใส่

https://github.com/Unity-Technologies/barracuda-release.git

แล้วกด Add ครับ

จริงๆตามใน Doc ของ Unity บอกว่าลงผ่าน Package Manager ก็ได้ แต่ผมหาไม่เจอ

2. ใช้งาน Barracuda

ที่นี้คุณก็แค่ลากไฟล์ model .onnx ของคุณเข้า project หากลง package ถูกต้อง มันจะขึ้นว่าเป็น NNModel หน้าตาแบบนี้

หลังจากนั้นคุณก็พร้อมใช้งานแล้วครับ!

วิธีการใช้งานหลักๆมีดังนี้

public NNModel modelSource; // ลากไฟล์ model เข้าตรง Inspector
<..>
var model = ModelLoader.Load(modelSource); // Load model
var mWorker = WorkerFactory.CreateWorker(WorkerFactory.Type.ComputePrecompiled, model); // สร้าง Worker เพื่อรัน Model

// รัน Model ให้โยน input เป็น Tensor object เข้าไป
var inputs = new Dictionary<string, Tensor>();
inputs[name1] = new Tensor(...);
inputs[name2] = new Tensor(...);
worker.Execute(inputs);

// เอา output ออกมาจาก worker
var O = worker.Peek(outputName); // output name คือชื่อ layer ที่จะดูนะครับ

// สุดท้ายอย่าลืม Free Resource จาก GPU
O.Dispose();
worker.Dispose();

แค่นี้คุณก็สามารถรัน Neural Net บน Unity แบบ Cross Platform ได้แล้วครับ 🎉

ความยากจริงๆจะอยู่ตรง Preprocess ข้อมูลเพื่อยัดเข้า model ของเรา เพราะอาจจะต้องเขียนเองครับ ไม่ได้มีตัวช่วยง่ายๆแบบ Keras Preprocessor

สุดท้าย สามารถไปอ่านเพิ่มเติมเกี่ยวกับ Barracuda ได้ที่ ลิงค์นี้ และก็ Barracuda ยังไม่ได้ Support ทุก Operatations กับ Activations นะครับ ลองเข้าดู list ที่ support ได้ที่ลิงค์ด้านบนเช่นเดียวกัน