Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Wdrażaj modele niestandardowe i zarządzaj nimi

Możesz wdrażać modele niestandardowe i zarządzać nimi za pomocą konsoli Firebase lub pakietów Firebase Admin Python i Node.js. Jeśli chcesz tylko wdrożyć model i od czasu do czasu go zaktualizować, zwykle najłatwiej jest użyć konsoli Firebase. Pakiet Admin SDK może być pomocny podczas integracji z potokami kompilacji, pracy z notatnikami Colab lub Jupyter i innymi przepływami pracy.

Wdrażaj modele i zarządzaj nimi w konsoli Firebase

Aby wdrożyć model TensorFlow Lite przy użyciu konsoli Firebase:

  1. Otwórz stronę modelu niestandardowego Firebase ML w konsoli Firebase.
  2. Kliknij Dodaj model niestandardowy (lub Dodaj inny model ).
  3. Podaj nazwę, która będzie używana do identyfikacji Twojego modelu w projekcie Firebase, a następnie prześlij plik modelu TensorFlow Lite (zwykle kończący się na .tflite lub .lite ).

Po wdrożeniu modelu można go znaleźć na stronie Niestandardowe. Stamtąd możesz wykonywać zadania, takie jak aktualizowanie modelu nowym plikiem, pobieranie modelu i usuwanie modelu z projektu.

Wdrażaj modele i zarządzaj nimi za pomocą pakietu Firebase Admin SDK

W tej sekcji pokazano, jak wykonać typowe zadania związane z wdrażaniem modelu i zarządzaniem za pomocą zestawu Admin SDK. Aby uzyskać dodatkową pomoc, zobacz dokumentację SDK dla języka Python lub Node.js.

Aby zapoznać się z przykładami używanego zestawu SDK, zobacz przykład szybkiego startu dla języka Python i przykład szybkiego startu Node.js.

Zanim zaczniesz

  1. Jeśli nie masz jeszcze projektu Firebase, utwórz nowy projekt w konsoli Firebase . Następnie otwórz projekt i wykonaj następujące czynności:

    1. Na stronie Ustawienia utwórz konto usługi i pobierz plik klucza konta usługi. Chroń ten plik, ponieważ zapewnia on dostęp administratora do Twojego projektu.

    2. Na stronie Storage włącz Cloud Storage. Zwróć uwagę na nazwę swojego wiadra.

      Potrzebujesz zasobnika na dane do tymczasowego przechowywania plików modeli podczas dodawania ich do projektu Firebase. Jeśli korzystasz z abonamentu Blaze, możesz w tym celu utworzyć zasobnik inny niż domyślny i używać go.

    3. Na stronie Firebase ML kliknij Rozpocznij, jeśli nie włączyłeś jeszcze Firebase ML.

  2. W konsoli interfejsów API Google otwórz projekt Firebase i włącz interfejs Firebase ML API.

  3. Zainstaluj i zainicjuj pakiet Admin SDK .

    Podczas inicjowania pakietu SDK określ poświadczenia konta usługi i zasobnik pamięci, którego chcesz używać do przechowywania modeli:

    Pyton

     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();
     

Wdrażaj modele

Aby wdrożyć model TensorFlow Lite, prześlij go do swojego projektu, a następnie opublikuj:

Pyton

 # 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)
 

Jeśli Twój model ma zapisany format modelu TensorFlow, możesz przekonwertować go na TensorFlow Lite i przesłać do zasobnika Cloud Storage w jednym kroku:

 # Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_saved_model('./model_directory')

# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...
 

Jeśli masz model Keras, możesz również przekonwertować go na TensorFlow Lite i przesłać w jednym kroku. Możesz użyć modelu Keras zapisanego w pliku HDF5:

 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.)
# ...
 

Możesz też przekonwertować i przesłać model Keras bezpośrednio ze swojego skryptu szkoleniowego:

 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.)
# ...
 

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);
 

Wypisz modele swojego projektu

Możesz wymienić modele swojego projektu, opcjonalnie filtrując wyniki:

Pyton

 # 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);
 

Możesz filtrować według następujących pól:

Pole Przykłady
display_name display_name = example_model
display_name != example_model

Wszystkie nazwy wyświetlane z przedrostkiem experimental_ :

display_name : experimental_*

Należy pamiętać, że obsługiwane jest tylko dopasowywanie prefiksów.

tags tags: face_detector
tags: face_detector AND tags: experimental
state.published state.published = true
state.published = false

Połącz filtry za pomocą operatorów AND , OR i NOT oraz nawiasów ( ( , ) ).

Zaktualizuj modele

Po dodaniu modelu do projektu możesz zaktualizować jego nazwę wyświetlaną, tagi i plik modelu tflite :

Pyton

 # 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.
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);
 

Cofnij publikację lub usuń modele

Aby cofnąć publikację lub usunąć model, przekaż identyfikator modelu do metod cofania publikacji lub usuwania. Po cofnięciu publikacji modelu pozostaje on w Twoim projekcie, ale nie jest dostępny do pobrania dla Twoich aplikacji. Kiedy usuwasz model, jest on całkowicie usuwany z projektu. (Cofnięcie publikacji modelu nie jest oczekiwane w standardowym przepływie pracy, ale można go użyć do natychmiastowego cofnięcia publikacji nowego modelu, który został przypadkowo opublikowany i nigdzie nie jest jeszcze używany, lub w przypadkach, gdy użytkownicy mogą pobrać „zły” model niż uzyskać błędy nie znaleziono modelu).

Jeśli nadal nie masz odniesienia do obiektu Model, prawdopodobnie będziesz musiał uzyskać identyfikator modelu, wymieniając modele projektu z filtrem. Na przykład, aby usunąć wszystkie modele oznaczone jako „face_detector”:

Pyton

 # 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);