הדרכה: הרצת הסקה על טבלת אובייקטים באמצעות מודל וקטור תכונות

במדריך הזה נסביר איך ליצור טבלת אובייקטים על סמך התמונות ממערך הנתונים של פרחים, ואז להריץ הסקה על טבלת האובייקטים הזו באמצעות מודל MobileNet V3.

מודל MobileNet V3

מודל MobileNet V3 מנתח קובצי תמונות ומחזיר מערך של וקטור תכונות. מערך וקטור התכונות הוא רשימה של רכיבים מספריים שמתארים את המאפיינים של התמונות שנותחו. כל וקטור תכונות מתאר מרחב תכונות רב-ממדי, ומספק את הקואורדינטות של התמונה במרחב הזה. אתם יכולים להשתמש במידע הווקטורי של תמונה כדי לסווג אותה בצורה נוספת, למשל באמצעות דמיון קוסינוסי כדי לקבץ תמונות דומות.

הקלט של מודל MobileNet V3 הוא טנסור של DType tf.float32 בצורה [-1, 224, 224, 3]. הפלט הוא מערך של טנסורים של tf.float32 בצורה [-1, 1024].

ההרשאות הנדרשות

  • כדי ליצור את מערך הנתונים, צריך את ההרשאה bigquery.datasets.create.
  • כדי ליצור את משאב החיבור, צריך את ההרשאות הבאות:

    • bigquery.connections.create
    • bigquery.connections.get
  • כדי להעניק הרשאות לחשבון השירות של החיבור, צריך את ההרשאה הבאה:

    • resourcemanager.projects.setIamPolicy
  • כדי ליצור את טבלת האובייקטים, צריך את ההרשאות הבאות:

    • bigquery.tables.create
    • bigquery.tables.update
    • bigquery.connections.delegate
  • כדי ליצור את הדלי, נדרשת ההרשאה storage.buckets.create.

  • כדי להעלות את מערך הנתונים והמודל ל-Cloud Storage, צריך את ההרשאות storage.objects.create ו-storage.objects.get.

  • כדי לטעון את המודל ל-BigQuery ML, אתם צריכים את ההרשאות הבאות:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • כדי להריץ הסקה, אתם צריכים את ההרשאות הבאות:

    • bigquery.tables.getData בטבלת האובייקטים
    • bigquery.models.getData במודל
    • bigquery.jobs.create

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

  • BigQuery: You incur storage costs for the object table you create in BigQuery.
  • BigQuery ML: You incur costs for the model you create and the inference you perform in BigQuery ML.
  • Cloud Storage: You incur costs for the objects you store in Cloud Storage.

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

מידע נוסף על תמחור האחסון ב-BigQuery זמין במאמר בנושא תמחור האחסון במסמכי BigQuery.

מידע נוסף על התמחור של BigQuery ML זמין במאמר תמחור של BigQuery ML במסמכי BigQuery.

מידע נוסף על התמחור של Cloud Storage זמין בדף התמחור של Cloud Storage.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and BigQuery Connection API APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and BigQuery Connection API APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

יצירת בקשה לשמירת מקום

כדי להשתמש במודל מיובא עם טבלת אובייקטים, צריך ליצור הזמנה שמשתמשת במהדורות Enterprise או Enterprise Plus של BigQuery, ואז ליצור הקצאת הזמנה שמשתמשת בסוג העבודה QUERY.

יצירת מערך נתונים

יצירת מערך נתונים בשם mobilenet_inference_test:

SQL

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית Editor, מריצים את הצהרת ה-SQL הבאה:

    CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;

    מחליפים את PROJECT_ID במזהה הפרויקט.

BQ

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

  2. מריצים את הפקודה bq mk כדי ליצור את קבוצת הנתונים:

    bq mk --dataset --location=us PROJECT_ID:resnet_inference_test

    מחליפים את PROJECT_ID במזהה הפרויקט.

יצירת חיבור

יוצרים חיבור בשם lake-connection:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, לוחצים על Add data.

    תיבת הדו-שיח הוספת נתונים נפתחת.

  4. בחלונית Filter By, בקטע Data Source Type, בוחרים באפשרות Databases.

    אפשרות אחרת היא להזין Vertex AI בשדה חיפוש מקורות נתונים.

  5. בקטע מקורות נתונים מומלצים, לוחצים על Vertex AI.

  6. לוחצים על כרטיס הפתרון Vertex AI Models: BigQuery Federation.

  7. ברשימה Connection type בוחרים באפשרות Vertex AI remote models, remote functions, BigLake and Spanner (Cloud Resource).

  8. בשדה מזהה החיבור, מקלידים lake-connection.

  9. לוחצים על יצירת קישור.

  10. בחלונית Explorer מרחיבים את הפרויקט, לוחצים על Connections ובוחרים את החיבור us.lake-connection.

  11. בחלונית Connection info, מעתיקים את הערך מהשדה Service account ID. תצטרכו את הפרטים האלה כדי להעניק הרשאה לחשבון השירות של החיבור בקטגוריה של Cloud Storage שתיצרו בשלב הבא.

BQ

  1. ב-Cloud Shell, מריצים את הפקודה bq mk כדי ליצור את החיבור:

    bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \
    lake-connection
    
  2. מריצים את הפקודה bq show כדי לאחזר מידע על החיבור:

    bq show --connection us.lake-connection
    
  3. מהעמודה properties, מעתיקים את הערך של מאפיין serviceAccountId ושומרים אותו במקום כלשהו. תצטרכו את המידע הזה כדי להעניק הרשאות לחשבון השירות של החיבור.

יצירת קטגוריה של Cloud Storage

  1. יצירת קטגוריה של Cloud Storage
  2. יוצרים שתי תיקיות בדלי, אחת בשם mobilenet לקובצי המודל ואחת בשם flowers למערך הנתונים.

מתן הרשאות לחשבון השירות של החיבור

המסוף

  1. עוברים לדף IAM & Admin.

    כניסה לדף IAM & Admin

  2. לוחצים על הענקת גישה.

    תיבת הדו-שיח Add principals נפתחת.

  3. בשדה New principals, מזינים את מזהה חשבון השירות שהעתקתם קודם.

  4. בשדה Select a role, בוחרים באפשרות Cloud Storage ואז באפשרות Storage Object Viewer.

  5. לוחצים על Save.

gcloud

ב-Cloud Shell, מריצים את הפקודה gcloud storage buckets add-iam-policy-binding:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:MEMBER \
--role=roles/storage.objectViewer

מחליפים את MEMBER במזהה של חשבון השירות שהעתקתם קודם. מחליפים את BUCKET_NAME בשם הקטגוריה שיצרתם קודם.

מידע נוסף זמין במאמר בנושא הוספת חשבון משתמש למדיניות ברמת הקטגוריה.

העלאת מערך הנתונים ל-Cloud Storage

מקבלים את קובצי מערך הנתונים ומוודאים שהם זמינים ב-Cloud Storage:

  1. מורידים את מערך הנתונים של הפרחים למחשב המקומי.
  2. מבטלים את דחיסת הקובץ flower_photos.tgz.
  3. מעלים את התיקייה flower_photos לתיקייה flowers בקטגוריה שיצרתם קודם.
  4. אחרי שההעלאה מסתיימת, מוחקים את הקובץ LICENSE.txt בתיקייה flower_photos.

יצירת טבלת אובייקטים

יוצרים טבלת אובייקטים בשם sample_images על סמך מערך הנתונים flowers שהעליתם:

SQL

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית Editor, מריצים את הצהרת ה-SQL הבאה:

    CREATE EXTERNAL TABLE mobilenet_inference_test.sample_images
    WITH CONNECTION `us.lake-connection`
    OPTIONS(
      object_metadata = 'SIMPLE',
      uris = ['gs://BUCKET_NAME/flowers/*']);

    מחליפים את BUCKET_NAME בשם הקטגוריה שיצרתם קודם.

BQ

ב-Cloud Shell, מריצים את הפקודה bq mk כדי ליצור את החיבור:

bq mk --table \
--external_table_definition='gs://BUCKET_NAME/flowers/*@us.lake-connection' \
--object_metadata=SIMPLE \
mobilenet_inference_test.sample_images

מחליפים את BUCKET_NAME בשם הקטגוריה שיצרתם קודם.

העלאת המודל ל-Cloud Storage

מקבלים את קובצי המודל ומוודאים שהם זמינים ב-Cloud Storage:

  1. מורידים את מודל MobileNet V3 למחשב המקומי. כך תקבלו קובץ saved_model.pb ותיקייה variables עבור המודל.
  2. מעלים את הקובץ saved_model.pb ואת התיקייה variables לתיקייה mobilenet בקטגוריה שיצרתם קודם.

טעינת המודל ל-BigQuery ML

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית Editor, מריצים את הצהרת ה-SQL הבאה:

    CREATE MODEL `mobilenet_inference_test.mobilenet`
    OPTIONS(
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/mobilenet/*');

    מחליפים את BUCKET_NAME בשם הקטגוריה שיצרתם קודם.

בדיקת המודל

בודקים את המודל שהועלה כדי לראות מהם שדות הקלט והפלט שלו:

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer מרחיבים את הפרויקט, לוחצים על Datasets ואז לוחצים על מערך הנתונים mobilenet_inference_test.

  4. עוברים לכרטיסייה מודלים.

  5. לוחצים על המודל mobilenet.

  6. בחלונית המודל שנפתחת, לוחצים על הכרטיסייה סכימה.

  7. בודקים את הקטע Labels (תוויות). כאן מציינים את השדות שהמודל מוציא כפלט. במקרה הזה, הערך של שם השדה הוא feature_vector.

  8. מעיינים בקטע תכונות. כך מזהים את השדות שצריך להזין במודל. מפנים אליהם בהצהרה SELECT של הפונקציה ML.DECODE_IMAGE. במקרה הזה, הערך של שם השדה הוא inputs.

הרצת הסקה

מריצים הסקה על טבלת האובייקטים sample_images באמצעות המודל mobilenet:

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית Editor, מריצים את הצהרת ה-SQL הבאה:

    SELECT *
    FROM ML.PREDICT(
      MODEL `mobilenet_inference_test.mobilenet`,
      (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS inputs
      FROM mobilenet_inference_test.sample_images)
    );

    התוצאות אמורות להיראות כך:

    --------------------------------------------------------------------------------------------------------------
    | feature_vector         | uri                                                        | inputs               |
    -------------------------------------------------------------------------------------------------------------
    | 0.850297749042511      | gs://mybucket/flowers/dandelion/3844111216_742ea491a0.jpg  | 0.29019609093666077  |
    -------------------------------------------------------------------------------------------------------------
    | -0.27427938580513      |                                                            | 0.31372550129890442  |
    -------------------------                                                            ------------------------
    | -0.23189745843410492   |                                                            | 0.039215687662363052 |
    -------------------------                                                            ------------------------
    | -0.058292809873819351  |                                                            | 0.29985997080802917  |
    -------------------------------------------------------------------------------------------------------------
    

הסרת המשאבים

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.