คุณสามารถทำให้โมเดลที่กําหนดเองและโมเดลที่ AutoML ฝึกไว้ใช้งานได้ รวมถึงจัดการโมเดลเหล่านั้นได้โดยใช้คอนโซล Firebase หรือ Firebase Admin Python และ Node.js SDK หากต้องการเพียงแค่ทำให้โมเดลใช้งานได้และอัปเดตเป็นครั้งคราว วิธีที่ใช้ง่ายที่สุดคือการใช้Firebaseคอนโซล Admin SDK มีประโยชน์เมื่อผสานรวมกับไปป์ไลน์การสร้าง การทำงานกับ Colab หรือสมุดบันทึก Jupyter และเวิร์กโฟลว์อื่นๆ
ติดตั้งใช้งานและจัดการโมเดลในคอนโซล Firebase
โมเดล TensorFlow Lite
วิธีทำให้โมเดล TensorFlow Lite ใช้งานได้โดยใช้คอนโซล Firebase
- เปิดFirebase MLหน้าโมเดลที่กำหนดเองในคอนโซล Firebase
- คลิกเพิ่มรูปแบบที่กําหนดเอง (หรือเพิ่มรูปแบบอื่น)
- ระบุชื่อที่จะใช้ระบุโมเดลในโปรเจ็กต์ Firebase จากนั้นอัปโหลดไฟล์โมเดล TensorFlow Lite (มักจะลงท้ายด้วย
.tflite
หรือ.lite
)
หลังจากติดตั้งใช้งานรูปแบบแล้ว คุณจะเห็นรูปแบบนั้นในหน้า "กําหนดเอง" จากตรงนั้น คุณจะทํางานต่างๆ ให้เสร็จสมบูรณ์ได้ เช่น อัปเดตโมเดลด้วยไฟล์ใหม่ ดาวน์โหลดโมเดล และลบโมเดลออกจากโปรเจ็กต์
ติดตั้งใช้งานและจัดการโมเดลด้วย Firebase Admin SDK
ส่วนนี้จะแสดงวิธีทำให้งานทั่วไปในการติดตั้งใช้งานและการจัดการโมเดลเสร็จสมบูรณ์ด้วย Admin SDK ดูความช่วยเหลือเพิ่มเติมได้ในข้อมูลอ้างอิง SDK สำหรับ Python หรือ Node.js
ดูตัวอย่างการใช้งาน SDK ได้ที่ตัวอย่างการเริ่มต้นใช้งาน Python และตัวอย่างการเริ่มต้นใช้งาน Node.js
ก่อนเริ่มต้น
หากยังไม่มีโปรเจ็กต์ Firebase ให้สร้างโปรเจ็กต์ใหม่ในคอนโซล Firebase จากนั้นเปิดโปรเจ็กต์และทำดังนี้
ในหน้าการตั้งค่า ให้สร้างบัญชีบริการและดาวน์โหลดไฟล์คีย์บัญชีบริการ โปรดเก็บไฟล์นี้ไว้อย่างปลอดภัยเนื่องจากไฟล์นี้จะให้สิทธิ์เข้าถึงระดับผู้ดูแลระบบแก่โปรเจ็กต์
เปิดใช้ Cloud Storage ในหน้าพื้นที่เก็บข้อมูล จดชื่อที่เก็บข้อมูลไว้
คุณต้องมีที่เก็บข้อมูล Cloud Storage เพื่อจัดเก็บไฟล์โมเดลไว้ชั่วคราวขณะเพิ่มลงในโปรเจ็กต์ Firebase หากใช้แพ็กเกจ Blaze คุณสามารถสร้างและใช้ที่เก็บข้อมูลอื่นที่ไม่ใช่ที่เก็บข้อมูลเริ่มต้นเพื่อวัตถุประสงค์นี้
ในหน้า Firebase ML ให้คลิกเริ่มต้นใช้งานหากคุณยังไม่ได้เปิดใช้ Firebase ML
ในคอนโซล Google API ให้เปิดโปรเจ็กต์ Firebase และเปิดใช้ Firebase ML API
-
เมื่อเริ่มต้นใช้งาน SDK ให้ระบุข้อมูลเข้าสู่ระบบของบัญชีบริการและที่เก็บข้อมูล Cloud Storage ที่ต้องการใช้จัดเก็บโมเดล ดังนี้
Python
import firebase_admin from firebase_admin import ml from firebase_admin import credentials firebase_admin.initialize_app( credentials.Certificate('/path/to/your/service_account_key.json'), options={ 'storageBucket': 'your-storage-bucket', })
Node.js
const admin = require('firebase-admin'); const serviceAccount = require('/path/to/your/service_account_key.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), storageBucket: 'your-storage-bucket', }); const ml = admin.machineLearning();
ทำให้โมเดลใช้งานได้
ไฟล์ TensorFlow Lite
หากต้องการทำให้โมเดล TensorFlow Lite ใช้งานได้จากไฟล์โมเดล ให้อัปโหลดไฟล์ไปยังโปรเจ็กต์แล้วเผยแพร่ ดังนี้
Python
# First, import and initialize the SDK as shown above.
# Load a tflite file and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example.tflite')
# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
display_name="example_model", # This is the name you use from your app to load the model.
tags=["examples"], # Optional tags for easier management.
model_format=tflite_format)
# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
ml.publish_model(new_model.model_id)
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
// Upload the tflite file to Cloud Storage
const storageBucket = admin.storage().bucket('your-storage-bucket');
const files = await storageBucket.upload('./example.tflite');
// Create the model object and add the model to your Firebase project.
const bucket = files[0].metadata.bucket;
const name = files[0].metadata.name;
const gcsUri = `gs:/⁠/${bucket}/${name}`;
const model = await ml.createModel({
displayName: 'example_model', // This is the name you use from your app to load the model.
tags: ['examples'], // Optional tags for easier management.
tfliteModel: { gcsTfliteUri: gcsUri },
});
// Publish the model.
await ml.publishModel(model.modelId);
process.exit();
})().catch(console.error);
โมเดล TensorFlow และ Keras
เมื่อใช้ Python SDK คุณจะแปลงโมเดลจากรูปแบบโมเดลที่บันทึกไว้ของ TensorFlow เป็น TensorFlow Lite และอัปโหลดไปยังที่เก็บข้อมูล Cloud Storage ได้ภายในขั้นตอนเดียว จากนั้นจึงนำไปใช้งานด้วยวิธีเดียวกับที่ใช้กับไฟล์ TensorFlow Lite
Python
# First, import and initialize the SDK as shown above.
# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_saved_model('./model_directory')
# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
display_name="example_model", # This is the name you use from your app to load the model.
tags=["examples"], # Optional tags for easier management.
model_format=tflite_format)
# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
ml.publish_model(new_model.model_id)
หากมีโมเดล Keras คุณสามารถแปลงเป็น TensorFlow Lite และอัปโหลดได้ในขั้นตอนเดียว คุณใช้โมเดล Keras ที่บันทึกไว้ในไฟล์ HDF5 ได้ดังนี้
Python
import tensorflow as tf
# Load a Keras model, convert it to TensorFlow Lite, and upload it to Cloud Storage
model = tf.keras.models.load_model('your_model.h5')
source = ml.TFLiteGCSModelSource.from_keras_model(model)
# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...
หรือจะแปลงและอัปโหลดโมเดล Keras จากสคริปต์การฝึกโดยตรงก็ได้ โดยทำดังนี้
Python
import tensorflow as tf
# Create a simple Keras model.
x = [-1, 0, 1, 2, 3, 4]
y = [-3, -1, 1, 3, 5, 7]
model = tf.keras.models.Sequential(
[tf.keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
model.fit(x, y, epochs=3)
# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_keras_model(model)
# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...
โมเดล TensorFlow Lite ของ AutoML
หากฝึกโมเดล Edge ด้วย AutoML Cloud API หรือ UI ของคอนโซล Google Cloud คุณจะทําให้โมเดลใช้งานได้ใน Firebase โดยใช้ Admin SDK
คุณจะต้องระบุตัวระบุทรัพยากรของโมเดล ซึ่งเป็นสตริงที่มีลักษณะดังตัวอย่างต่อไปนี้
projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER |
หมายเลขโปรเจ็กต์ของที่เก็บข้อมูล Cloud Storage ที่มีโมเดล ซึ่งอาจเป็นโปรเจ็กต์ Firebase ของคุณหรือโปรเจ็กต์ Google Cloud อื่น คุณดูค่านี้ได้ในหน้าการตั้งค่าของFirebaseคอนโซลหรือแดชบอร์ดของGoogle Cloudคอนโซล |
STORAGE_LOCATION |
ตำแหน่งทรัพยากรของที่เก็บข้อมูล Cloud Storage ที่มีรูปแบบ ค่านี้จะเท่ากับ us-central1 เสมอ |
MODEL_ID |
รหัสของโมเดลที่คุณได้รับจาก AutoML Cloud API |
Python
# First, import and initialize the SDK as shown above.
# Get a reference to the AutoML model
source = ml.TFLiteAutoMlSource('projects/{}/locations/{}/models/{}'.format(
# See above for information on these values.
project_number,
storage_location,
model_id
))
# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
display_name="example_model", # This is the name you will use from your app to load the model.
tags=["examples"], # Optional tags for easier management.
model_format=tflite_format)
# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
new_model.wait_for_unlocked()
ml.publish_model(new_model.model_id)
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
// Get a reference to the AutoML model. See above for information on these
// values.
const automlModel = `projects/${projectNumber}/locations/${storageLocation}/models/${modelId}`;
// Create the model object and add the model to your Firebase project.
const model = await ml.createModel({
displayName: 'example_model', // This is the name you use from your app to load the model.
tags: ['examples'], // Optional tags for easier management.
tfliteModel: { automlModel: automlModel },
});
// Wait for the model to be ready.
await model.waitForUnlocked();
// Publish the model.
await ml.publishModel(model.modelId);
process.exit();
})().catch(console.error);
แสดงรายการโมเดลของโปรเจ็กต์
คุณสามารถแสดงรายการโมเดลของโปรเจ็กต์โดยกรองผลลัพธ์ได้ (ไม่บังคับ) ดังนี้
Python
# First, import and initialize the SDK as shown above.
face_detectors = ml.list_models(list_filter="tags: face_detector").iterate_all()
print("Face detection models:")
for model in face_detectors:
print('{} (ID: {})'.format(model.display_name, model.model_id))
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
let listOptions = {filter: 'tags: face_detector'}
let models;
let pageToken = null;
do {
if (pageToken) listOptions.pageToken = pageToken;
({models, pageToken} = await ml.listModels(listOptions));
for (const model of models) {
console.log(`${model.displayName} (ID: ${model.modelId})`);
}
} while (pageToken != null);
process.exit();
})().catch(console.error);
คุณกรองตามช่องต่อไปนี้ได้
ช่อง | ตัวอย่าง |
---|---|
display_name |
display_name = example_model display_name != example_model ชื่อที่แสดงทั้งหมดที่มีคำนำหน้า display_name : experimental_*
โปรดทราบว่าระบบรองรับเฉพาะการจับคู่คำนำหน้าเท่านั้น |
tags |
tags: face_detector tags: face_detector AND tags: experimental
|
state.published |
state.published = true state.published = false
|
รวมตัวกรองเข้ากับโอเปอเรเตอร์ AND
, OR
และ NOT
รวมถึงวงเล็บ ((
,
)
)
อัปเดตโมเดล
หลังจากเพิ่มโมเดลลงในโปรเจ็กต์แล้ว คุณจะอัปเดตชื่อที่แสดง แท็ก และtflite
ไฟล์โมเดลได้ ดังนี้
Python
# First, import and initialize the SDK as shown above.
model = ... # Model object from create_model(), get_model(), or list_models()
# Update the model with a new tflite model. (You could also update with a
# `TFLiteAutoMlSource`)
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example_v2.tflite')
model.model_format = ml.TFLiteFormat(model_source=source)
# Update the model's display name.
model.display_name = "example_model"
# Update the model's tags.
model.tags = ["examples", "new_models"]
# Add a new tag.
model.tags += "experimental"
# After you change the fields you want to update, save the model changes to
# Firebase and publish it.
updated_model = ml.update_model(model)
ml.publish_model(updated_model.model_id)
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
const model = ... // Model object from createModel(), getModel(), or listModels()
// Upload a new tflite file to Cloud Storage.
const files = await storageBucket.upload('./example_v2.tflite');
const bucket = files[0].metadata.bucket;
const name = files[0].metadata.name;
// Update the model. Any fields you omit will be unchanged.
await ml.updateModel(model.modelId, {
displayName: 'example_model', // Update the model's display name.
tags: model.tags.concat(['new']), // Add a tag.
tfliteModel: {gcsTfliteUri: `gs:/⁠/${bucket}/${name}`},
});
process.exit();
})().catch(console.error);
ยกเลิกการเผยแพร่หรือลบโมเดล
หากต้องการเลิกเผยแพร่หรือลบโมเดล ให้ส่งรหัสโมเดลไปยังเมธอดเลิกเผยแพร่หรือลบ เมื่อยกเลิกการเผยแพร่โมเดลแล้ว โมเดลจะยังคงอยู่ในโปรเจ็กต์ แต่จะดาวน์โหลดไม่ได้สำหรับแอป เมื่อลบโมเดล ระบบจะนำโมเดลนั้นออกจากโปรเจ็กต์โดยสมบูรณ์ (การเลิกเผยแพร่โมเดลไม่ใช่ขั้นตอนการทำงานมาตรฐาน แต่คุณใช้การเลิกเผยแพร่เพื่อเลิกเผยแพร่โมเดลใหม่ที่เผยแพร่ไปโดยไม่ตั้งใจและยังไม่ได้ใช้งานในตำแหน่งใดเลย หรือในกรณีที่การดาวน์โหลดโมเดล "ไม่ดี" ส่งผลเสียต่อผู้ใช้มากกว่าการได้รับข้อผิดพลาด "ไม่พบโมเดล" ทันที)
หากยังไม่มีการอ้างอิงออบเจ็กต์โมเดล คุณอาจต้องรับรหัสโมเดลโดยการแสดงโมเดลของโปรเจ็กต์ด้วยตัวกรอง เช่น หากต้องการลบโมเดลทั้งหมดที่ติดแท็ก "face_detector" ให้ทำดังนี้
Python
# First, import and initialize the SDK as shown above.
face_detectors = ml.list_models(list_filter="tags: 'face_detector'").iterate_all()
for model in face_detectors:
ml.delete_model(model.model_id)
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
let listOptions = {filter: 'tags: face_detector'}
let models;
let pageToken = null;
do {
if (pageToken) listOptions.pageToken = pageToken;
({models, pageToken} = await ml.listModels(listOptions));
for (const model of models) {
await ml.deleteModel(model.modelId);
}
} while (pageToken != null);
process.exit();
})().catch(console.error);