הרצת הסקה על טבלאות של אובייקטים בתמונות
במסמך הזה מוסבר איך להשתמש ב-BigQuery ML כדי להריץ הסקה על טבלאות של אובייקטים בתמונות.
אפשר להריץ הסקה על נתוני תמונות באמצעות טבלת אובייקטים כקלט לפונקציה ML.PREDICT.
כדי לעשות את זה, קודם צריך לבחור מודל מתאים, להעלות אותו ל-Cloud Storage ולייבא אותו ל-BigQuery על ידי הפעלת ההצהרה CREATE MODEL.
אתם יכולים ליצור מודל משלכם או להוריד מודל מ-TensorFlow Hub.
מגבלות
- השימוש ב-BigQuery ML במודלים מיובאים עם טבלאות אובייקטים נתמך רק כשמשתמשים בתמחור לפי קיבולת באמצעות הזמנות. תמחור לפי דרישה לא נתמך.
- קבצי התמונות שמשויכים לטבלת האובייקטים צריכים לעמוד בדרישות הבאות:
- קטנים מ-20MB.
- פורמט JPEG, PNG או BMP.
- הגודל הכולל של קובצי התמונות שמשויכים לטבלת האובייקטים צריך להיות קטן מ-1TB.
המודל חייב להיות אחד מהבאים:
- מודל TensorFlow או TensorFlow Lite בפורמט SavedModel.
- מודל PyTorch בפורמט ONNX.
המודל צריך לעמוד בדרישות ובמגבלות הקלט שמתוארות בהצהרה בנושא
CREATE MODELייבוא מודלים של TensorFlow.הגודל של המודל בסריאליזציה צריך להיות פחות מ-450MB.
הגודל של המודל אחרי הסרת הסריאליזציה (בזיכרון) צריך להיות קטן מ-1,000MB.
טנסור הקלט של המודל צריך לעמוד בקריטריונים הבאים:
- סוג הנתונים הוא
tf.float32והערכים הם[0, 1), או סוג הנתונים הואtf.uint8והערכים הם[0, 255). - הצורה
[batch_size, width, height, 3], כאשר:- הערך של
batch_sizeצריך להיות-1, Noneאו1. - הערכים של
widthו-heightחייבים להיות גדולים מ-0.
- הערך של
- סוג הנתונים הוא
המודל צריך להיות מאומן עם תמונות באחד ממרחבי הצבעים הבאים:
RGBHSVYIQYUVGRAYSCALE
אתם יכולים להשתמש בפונקציה
ML.CONVERT_COLOR_SPACEכדי להמיר תמונות קלט למרחב הצבעים שבו המודל אומן.
דוגמאות למודלים
המודלים הבאים ב-TensorFlow Hub פועלים עם BigQuery ML ועם טבלאות של אובייקטים של תמונות:
- ResNet 50. כדי לנסות להשתמש במודל הזה, אפשר לעיין במאמר הדרכה: הפעלת הסקה בטבלת אובייקטים באמצעות מודל סיווג.
- MobileNet V3. כדי לנסות להשתמש במודל הזה, אפשר לעיין במאמר הדרכה: הפעלת הסקה בטבלת אובייקטים באמצעות מודל וקטור תכונות.
ההרשאות הנדרשות
- כדי להעלות את המודל ל-Cloud Storage, צריך את ההרשאות
storage.objects.createו-storage.objects.get. כדי לטעון את המודל ל-BigQuery ML, אתם צריכים את ההרשאות הבאות:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
כדי להריץ הסקה, אתם צריכים את ההרשאות הבאות:
bigquery.tables.getDataבטבלת האובייקטיםbigquery.models.getDataבמודלbigquery.jobs.create
לפני שמתחילים
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.
העלאת מודל ל-Cloud Storage
כדי להעלות מודל:
- אם יצרתם מודל משלכם, שמרו אותו באופן מקומי. אם אתם משתמשים במודל מ-TensorFlow Hub, אתם צריכים להוריד אותו למחשב המקומי. אם אתם משתמשים ב-TensorFlow, אמור להתקבל קובץ
saved_model.pbותיקייהvariablesשל המודל. - במידת הצורך, יוצרים קטגוריה של Cloud Storage.
- מעלים את הארטיפקטים של המודל לקטגוריה.
טעינת המודל ל-BigQuery ML
טעינת מודל שעובד עם טבלאות של אובייקטים בתמונות זהה לטעינת מודל שעובד עם נתונים מובנים. כדי לטעון מודל ל-BigQuery ML:
CREATE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` OPTIONS( model_type = 'MODEL_TYPE', model_path = 'BUCKET_PATH');
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט.-
DATASET_ID: המזהה של מערך הנתונים שאמור להכיל את המודל. -
MODEL_NAME: שם המודל. -
MODEL_TYPE: משתמשים באחד מהערכים הבאים:-
TENSORFLOWלמודל TensorFlow -
ONNXעבור מודל PyTorch בפורמט ONNX
-
-
BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את המודל, בפורמט[gs://bucket_name/[folder_name/]*].
בדוגמה הבאה נעשה שימוש בפרויקט שמוגדר כברירת מחדל, ונטען מודל TensorFlow ל-BigQuery ML בתור my_vision_model, באמצעות הקובץ saved_model.pb והתיקייה variables מ-gs://my_bucket/my_model_folder:
CREATE MODEL `my_dataset.my_vision_model` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://my_bucket/my_model_folder/*');
בדיקת המודל
אפשר לבדוק את המודל שהועלה כדי לראות מהם שדות הקלט והפלט שלו. צריך להפנות לשדות האלה כשמריצים הסקה בטבלת האובייקטים.
כדי לבדוק מודל:
עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את הפרויקט ולוחצים על Datasets (מערכי נתונים).
לוחצים על מערך הנתונים שמכיל את המודל.
לוחצים על הכרטיסייה מודלים.
בחלונית המודל שנפתחת, לוחצים על הכרטיסייה סכימה.
בודקים את הקטע Labels (תוויות). כאן מציינים את השדות שהמודל מוציא כפלט.
מעיינים בקטע תכונות. כך מזהים את השדות שצריך להזין במודל. מפנים אליהם בהצהרה
SELECTשל הפונקציהML.DECODE_IMAGE.
כדי לבדוק מודל TensorFlow בצורה מפורטת יותר, למשל כדי לקבוע את הצורה של קלט המודל, צריך להתקין את TensorFlow ולהשתמש בפקודה saved_model_cli show.
עיבוד מקדים של תמונות
חובה להשתמש בפונקציה ML.DECODE_IMAGE כדי להמיר בייטים של תמונה לייצוג רב-ממדי של ARRAY. אפשר להשתמש בפלט של ML.DECODE_IMAGE ישירות בפונקציה ML.PREDICT, או לכתוב את התוצאות מ-ML.DECODE_IMAGE לעמודה בטבלה ולהפנות לעמודה הזו כשמפעילים את ML.PREDICT.
בדוגמה הבאה, הפלט של הפונקציה ML.DECODE_IMAGE נכתב לטבלה:
CREATE OR REPLACE TABLE mydataset.mytable AS ( SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM mydataset.object_table );
אפשר להשתמש בפונקציות הבאות כדי לעבד עוד את התמונות כך שיתאימו למודל שלכם:
- הפונקציה
ML.CONVERT_COLOR_SPACEממירה תמונות עם מרחב צבעיםRGBלמרחב צבעים אחר. - הפונקציה
ML.CONVERT_IMAGE_TYPEממירה את ערכי הפיקסלים שמוחזרים על ידי הפונקציהML.DECODE_IMAGEממספרים עם נקודה עשרונית למספרים שלמים בטווח[0, 255). - הפונקציה
ML.RESIZE_IMAGEמשנה את הגודל של תמונות.
אפשר להשתמש בהן כחלק מהפונקציה ML.PREDICT, או להפעיל אותן בעמודה של טבלה שמכילה נתוני תמונות שנוצרו על ידי ML.DECODE_IMAGE.
הרצת הסקה
אחרי שמעלים מודל מתאים, ואם רוצים, מעבדים מראש את נתוני התמונה, אפשר להריץ הסקה על נתוני התמונה.
כדי להריץ הסקה:
SELECT * FROM ML.PREDICT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, (SELECT [other columns from the object table,] IMAGE_DATA AS MODEL_INPUT FROM PROJECT_ID.DATASET_ID.TABLE_NAME) );
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את המודל ואת טבלת האובייקטים. -
DATASET_ID: המזהה של מערך הנתונים שמכיל את המודל ואת טבלת האובייקטים. -
MODEL_NAME: שם המודל. -
IMAGE_DATA: נתוני התמונה, שמיוצגים על ידי הפלט של הפונקציהML.DECODE_IMAGEאו על ידי עמודה בטבלה שמכילה את פלט נתוני התמונה שלML.DECODE_IMAGEאו של פונקציות אחרות לעיבוד תמונות. -
MODEL_INPUT: השם של שדה להזנת קלט למודל. כדי למצוא את המידע הזה, אפשר לבדוק את המודל ולעיין בשמות השדות בקטע תכונות. -
TABLE_NAME: השם של טבלת האובייקטים.
דוגמאות
דוגמה 1
בדוגמה הבאה נעשה שימוש בפונקציה ML.DECODE_IMAGE ישירות בפונקציה ML.PREDICT. הפונקציה מחזירה את תוצאות ההסקה של כל התמונות בטבלת האובייקטים, עבור מודל עם שדה להזנת קלט של input ושדה פלט של feature:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 480, 480, FALSE) AS input FROM `my_dataset.object_table`) );
דוגמה 2
בדוגמה הבאה נעשה שימוש בפונקציה ML.DECODE_IMAGE ישירות בפונקציה ML.PREDICT, ובפונקציה ML.CONVERT_COLOR_SPACE בפונקציה ML.PREDICT כדי להמיר את מרחב הצבעים של התמונה מ-RBG ל-YIQ. בנוסף, נסביר איך להשתמש בשדות של טבלת אובייקטים כדי לסנן את האובייקטים שנכללים בהסקת המסקנות.
הפונקציה מחזירה את תוצאות ההסקה של כל תמונות ה-JPG בטבלת האובייקטים, עבור מודל עם שדה להזנת קלט של input ושדה פלט של feature:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, ML.CONVERT_COLOR_SPACE(ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 280, TRUE), 'YIQ') AS input FROM `my_dataset.object_table` WHERE content_type = 'image/jpeg') );
דוגמה 3
בדוגמה הבאה נעשה שימוש בתוצאות מ-ML.DECODE_IMAGE שנכתבו בעמודה בטבלה אבל לא עברו עיבוד נוסף. הפונקציה ML.PREDICT משתמשת ב-ML.RESIZE_IMAGE וב-ML.CONVERT_IMAGE_TYPE כדי לעבד את נתוני התמונה. הפונקציה מחזירה את תוצאות ההסקה של כל התמונות בטבלה decoded images, עבור מודל עם שדה להזנת קלט של input ושדה פלט של feature.
יוצרים את טבלת התמונות המפוענחות:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM `my_dataset.object_table`);
מריצים הסקה על טבלת התמונות המפוענחות:
SELECT * FROM ML.PREDICT( MODEL`my_dataset.vision_model`, (SELECT uri, ML.CONVERT_IMAGE_TYPE(ML.RESIZE_IMAGE(decoded_image, 480, 480, FALSE)) AS input FROM `my_dataset.decoded_images`) );
דוגמה 4
בדוגמה הבאה נעשה שימוש בתוצאות מ-ML.DECODE_IMAGE שנכתבו בעמודה בטבלה ועברו עיבוד מראש באמצעות ML.RESIZE_IMAGE. הפונקציה מחזירה את תוצאות ההסקה של כל התמונות בטבלה decoded images, עבור מודל עם שדה להזנת קלט של input ושדה פלט של feature.
יוצרים את הטבלה:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data) 480, 480, FALSE) AS decoded_image FROM `my_dataset.object_table`);
מריצים הסקה על טבלת התמונות המפוענחות:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, decoded_image AS input FROM `my_dataset.decoded_images`) );
דוגמה 5
בדוגמה הבאה נעשה שימוש בפונקציה ML.DECODE_IMAGE ישירות בפונקציה ML.PREDICT. בדוגמה הזו, למודל יש שדה פלט embeddings ושני שדות קלט: אחד שמצפה לתמונה, f_img, ואחד שמצפה למחרוזת, f_txt. הקלט של התמונה מגיע מטבלת האובייקטים, והקלט של המחרוזת מגיע מטבלה רגילה ב-BigQuery שמצורפת לטבלת האובייקטים באמצעות העמודה uri.
SELECT * FROM ML.PREDICT( MODEL `my_dataset.mixed_model`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(my_dataset.my_object_table.data), 224, 224, FALSE) AS f_img, my_dataset.image_description.description AS f_txt FROM `my_dataset.object_table` JOIN `my_dataset.image_description` ON object_table.uri = image_description.uri) );
המאמרים הבאים
- איך מנתחים טבלאות של אובייקטים באמצעות פונקציות מרוחקות
- אפשר לנסות להריץ הסקה על טבלת אובייקטים באמצעות מודל של וקטור תכונות.
- אפשר לנסות להריץ הסקה על טבלת אובייקטים באמצעות מודל סיווג.
- אפשר לנסות לנתח טבלת אובייקטים באמצעות פונקציה מרוחקת.
- כדאי לנסות להוסיף הערות לתמונה באמצעות הפונקציה
ML.ANNOTATE_IMAGE.