이미지 객체 테이블에서 추론 실행
이 문서에서는 BigQuery ML을 사용하여 이미지 객체 테이블에서 추론을 실행하는 방법을 설명합니다.
ML.PREDICT
함수에 대한 입력으로 테이블 객체를 사용해서 이미지 데이터로 추론을 실행할 수 있습니다.
이를 위해서는 먼저 적절한 모델을 먼저 선택하고, 이를 Cloud Storage에 업로드한 후 CREATE MODEL
문을 실행하여 BigQuery로 가져옵니다.
자체 모델을 만들거나 TensorFlow Hub에서 다운로드할 수 있습니다.
제한사항
- 객체 테이블과 함께 BigQuery ML의 가져온 모델을 사용하는 것은 예약을 통해 용량 기반 가격 책정을 사용하는 경우에만 지원됩니다. 주문형 가격 책정은 지원되지 않습니다.
- 객체 테이블과 연관된 이미지 파일은 다음 요구사항을 충족해야 합니다.
- 크기가 20MB 미만이어야 합니다.
- JPEG, PNG, BMP 형식이어야 합니다.
- 객체 테이블과 연관된 이미지 파일의 조합 크기가 1TB보다 작아야 합니다.
모델은 다음 중 하나여야 합니다.
- SavedModel 형식의 TensorFlow 또는 TensorFlow Lite 모델입니다.
- ONNX 형식의 PyTorch 모델
모델이 지원되는 입력에 설명된 입력 요구사항 및 제한사항을 충족해야 합니다.
모델의 직렬화된 크기는 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.
Cloud Storage에 모델 업로드
모델을 업로드하려면 다음 단계를 수행합니다.
- 자체 모델을 만든 경우 로컬에 저장합니다. TensorFlow 허브의 모델을 사용하는 경우 이를 로컬 머신에 다운로드합니다. 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
: 프로젝트 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
함수로 이미지에 주석 추가 시도