이미지 객체 테이블에서 추론 실행
이 문서에서는 BigQuery ML을 사용하여 이미지 객체 테이블에서 추론을 실행하는 방법을 설명합니다.
ML.PREDICT
함수에 대한 입력으로 테이블 객체를 사용해서 이미지 데이터로 추론을 실행할 수 있습니다.
이를 위해서는 먼저 적절한 모델을 먼저 선택하고, 이를 Cloud Storage에 업로드한 후 CREATE MODEL
문을 실행하여 BigQuery로 가져옵니다.
자체 모델을 만들거나 TensorFlow Hub에서 다운로드할 수 있습니다.
제한사항
- 객체 테이블과 함께 BigQuery ML의 가져온 모델을 사용하는 것은 예약을 통해 용량 기반 가격 책정을 사용하는 경우에만 지원됩니다. 주문형 가격 책정은 지원되지 않습니다.
- 객체 테이블과 연관된 이미지 파일은 다음 요구사항을 충족해야 합니다.
- 크기가 20MB 미만이어야 합니다.
- JPEG, PNG, BMP 형식이어야 합니다.
- 객체 테이블과 연관된 이미지 파일의 조합 크기가 1TB보다 작아야 합니다.
모델은 다음 중 하나여야 합니다.
- SavedModel 형식의 TensorFlow 또는 TensorFlow Lite 모델입니다.
- ONNX 형식의 PyTorch 모델
모델이 TensorFlow 모델을 가져오기 위한
CREATE MODEL
문에 설명된 입력 요구사항 및 제한사항을 충족해야 합니다.모델의 직렬화된 크기는 450MB보다 작아야 합니다.
모델의 직렬화 해제된(인메모리) 크기는 1,000MB보다 작아야 합니다.
모델 입력 텐서는 다음 기준을 충족해야 합니다.
- 데이터 유형이
[0, 1)
값의tf.float32
이거나[0, 255)
값의tf.uint8
인 데이터 유형이 있어야 합니다. [batch_size, weight, height, 3]
모양이며, 다음이 적용됩니다.batch_size
는-1
,None
,1
이어야 합니다.width
및height
는 0보다 커야 합니다.
- 데이터 유형이
모델은 다음 색 공간 중 하나의 이미지로 학습되어야 합니다.
RGB
HSV
YIQ
YUV
GRAYSCALE
ML.CONVERT_COLOR_SPACE
함수를 사용하여 입력 이미지를 모델이 학습된 색상 공간으로 변환할 수 있습니다.
예시 모델
TensorFlow 허브의 다음 모델은 BigQuery ML 및 이미지 객체 테이블과 함께 작동합니다.
- ResNet 50. 이 모델을 사용하려면 튜토리얼: 분류 모델을 사용하여 객체 테이블에서 추론 실행을 참조하세요.
- MobileNet V3. 이 모델을 사용하려면 튜토리얼: 특징 벡터 모델을 사용하여 객체 테이블에서 추론 실행을 참조하세요.
필수 권한
- 모델을 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
- 객체 테이블에 대한
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
- 자체 모델을 만든 경우 로컬에 저장합니다. TensorFlow 허브의 모델을 사용하는 경우 이를 로컬 머신에 다운로드합니다. TensorFlow를 사용하는 경우 모델의
saved_model.pb
파일과variables
폴더가 제공됩니다. - 필요한 경우 Cloud Storage 버킷을 만듭니다.
- 모델 아티팩트를 버킷에 업로드합니다.
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
: 프로젝트 IDDATASET_ID
: 모델을 포함할 데이터 세트의 IDMODEL_NAME
: 모델의 이름입니다.MODEL_TYPE
: 다음 값 중 하나를 사용합니다.- TensorFlow 모델의 경우
TENSORFLOW
- ONNX 형식의 PyTorch 모델의 경우
ONNX
- TensorFlow 모델의 경우
BUCKET_PATH
: 모델이 포함된 Cloud Storage 버킷의 경로이며[gs://bucket_name/[folder_name/]*]
형식입니다.
다음 예시에서는 기본 프로젝트를 사용하고 gs://my_bucket/my_model_folder
의 saved_model.pb
파일 및 variables
폴더를 사용해서 TensorFlow 모델을 BigQuery ML에 my_vision_model
로 로드합니다.
CREATE MODEL `my_dataset.my_vision_model` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://my_bucket/my_model_folder/*');
모델 검사
업로드된 모델을 검사하여 입력 및 출력 필드를 확인할 수 있습니다. 객체 테이블에서 유추를 실행할 때는 이러한 필드를 참조해야 합니다.
다음 단계에 따라 모델을 검사합니다.
BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트를 확장하고 모델이 포함된 데이터 세트를 확장한 후 모델 노드를 확장합니다.
모델을 클릭합니다.
모델 창이 열리면 스키마 탭을 클릭합니다.
라벨 섹션을 찾습니다. 이렇게 해서 모델에서 출력된 필드를 식별합니다.
기능 섹션을 찾습니다. 이렇게 해서 모델에 입력해야 하는 필드를 식별합니다.
ML.DECODE_IMAGE
함수에 대한SELECT
문에서 이를 참조합니다.
모델 입력의 형태 확인과 같이 TensorFlow 모델을 자세히 검사하려면 TensorFlow를 설치하고 saved_model_cli show
명령어를 사용합니다.
이미지 전처리
ML.DECODE_IMAGE
함수를 사용하여 이미지 바이트를 다차원 ARRAY
표현으로 변환해야 합니다. ML.PREDICT
함수에 직접 ML.DECODE_IMAGE
출력을 사용하거나 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
: 모델 및 객체 테이블이 포함된 프로젝트의 프로젝트 ID입니다.DATASET_ID
: 모델 및 객체 테이블이 포함된 데이터 세트의 ID입니다.MODEL_NAME
: 모델의 이름입니다.IMAGE_DATA
:ML.DECODE_IMAGE
함수의 출력이나ML.DECODE_IMAGE
또는 다른 이미지 처리 함수의 이미지 데이터 출력이 포함된 테이블 열로 표현되는 이미지 데이터입니다.MODEL_INPUT
: 모델의 입력 필드 이름입니다. 이 정보는 모델을 검사하고 특성 필드에서 해당 필드의 이름을 찾아 확인할 수 있습니다.TABLE_NAME
: 객체 테이블의 이름입니다.
예
예시 1
다음 예시에서는 ML.PREDICT
함수에서 ML.DECODE_IMAGE
함수를 직접 사용합니다. 입력 필드가 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.PREDICT
함수에서 ML.DECODE_IMAGE
함수를 직접 사용하고 ML.PREDICT
함수에서 ML.CONVERT_COLOR_SPACE
함수를 사용하여 이미지 색상 공간을 RBG
에서 YIQ
로 변환합니다. 또한 객체 테이블 필드를 사용하여 추론에 포함된 객체를 필터링하는 방법도 보여줍니다.
입력 필드가 input
이고 출력 필드가 feature
인 모델의 객체 테이블에 있는 모든 JPG 이미지의 추론 결과가 반환됩니다.
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
를 사용하여 이미지 데이터를 처리합니다. 입력 필드가 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.RESIZE_IMAGE
을 사용하여 사전 처리된 ML.DECODE_IMAGE
의 결과를 사용합니다. 입력 필드가 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.PREDICT
함수에서 ML.DECODE_IMAGE
함수를 직접 사용합니다. 이 예시의 모델에는 embeddings
출력 필드와 2개의 입력 필드가 포함됩니다. 하나는 이미지가 사용되는 f_img
이고 다른 하나는 문자열이 사용되는 f_txt
입니다. 이미지 입력은 객체 테이블에서 가져오고 문자열 입력은 uri
열을 사용하여 객체 테이블과 결합된 표준 BigQuery 테이블에서 가져옵니다.
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
함수로 이미지에 주석 추가 시도