튜토리얼: 특성 벡터 모델을 사용하여 객체 테이블에서 추론 실행
이 튜토리얼에서는 꽃 데이터 세트의 이미지를 기반으로 객체 테이블을 만들고 MobileNet V3 모델을 사용하여 이 객체 테이블에서 추론을 실행하는 방법을 보여줍니다.
MobileNet V3 모델
MobileNet V3 모델은 이미지 파일을 분석하고 특성 벡터 배열을 반환합니다. 특성 벡터 배열은 분석된 이미지의 특성을 설명하는 숫자 요소 목록입니다. 각 특성 벡터는 다차원 특성 공간을 설명하고 이 공간의 이미지 좌표를 제공합니다. 예를 들어 코사인 유사성을 사용하여 유사한 이미지를 그룹화하는 등 이미지의 특성 벡터 정보를 사용하여 이미지를 추가로 분류할 수 있습니다.
MobileNet V3 모델 입력은 [-1, 224, 224, 3]
형태의 DType
tf.float32
텐서를 취합니다. 출력은 [-1, 1024]
형태의 tf.float32
텐서 배열입니다.
필수 권한
- 데이터 세트를 만들려면
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.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
BigQuery 스토리지 가격 책정에 대한 자세한 내용은 BigQuery 문서에서 스토리지 가격 책정을 참조하세요.
BigQuery ML 가격 책정에 대한 자세한 내용은 BigQuery 문서에서 BigQuery ML 가격 책정을 참조하세요.
Cloud Storage 가격에 대한 자세한 내용은 Cloud Storage 가격 책정 페이지를 참조하세요.
시작하기 전에
- 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.
데이터 세트 만들기
mobilenet_inference_test
라는 데이터 세트를 만듭니다.
SQL
BigQuery 페이지로 이동합니다.
편집자 창에서 다음 SQL 문을 실행합니다.
CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;
PROJECT_ID
를 프로젝트 ID로 바꿉니다.
bq
Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.
bq mk
명령어를 실행하여 데이터 세트를 만듭니다.bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
PROJECT_ID
를 프로젝트 ID로 바꿉니다.
연결 만들기
lake-connection
이라는 연결을 만듭니다.
콘솔
BigQuery 페이지로 이동합니다.
데이터 추가를 클릭한 다음 외부 데이터 소스를 클릭합니다.
연결 유형 목록에서 BigLake 및 원격 함수(Cloud 리소스)를 선택합니다.
연결 ID 필드에
lake-connection
을 입력합니다.연결 만들기를 클릭합니다.
탐색기 창에서 프로젝트를 확장하고 외부 연결 노드를 펼친 다음
us.lake-connection
연결을 선택합니다.연결 정보 창에서 서비스 계정 ID 필드의 값을 복사합니다. 다음 단계에서 만들 Cloud Storage 버킷의 연결 서비스 계정에 권한을 부여하려면 이 정보가 필요합니다.
bq
Cloud Shell에서
bq mk
명령어를 실행하여 연결을 만듭니다.bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connection
bq show
명령어를 실행하여 연결에 대한 정보를 검색합니다.bq show --connection us.lake-connection
properties
열에서serviceAccountId
속성 값을 복사하여 다른 위치에 저장합니다. 연결의 서비스 계정에 권한을 부여하려면 이 정보가 필요합니다.
Cloud Storage 버킷 만들기
- Cloud Storage 버킷을 만듭니다.
- 버킷에 두 개의 폴더를 만듭니다. 하나는 모델 파일용
mobilenet
이고 다른 하나는 데이터 세트용flowers
입니다.
연결의 서비스 계정에 권한 부여
콘솔
IAM 및 관리자 페이지로 이동합니다.
액세스 권한 부여를 클릭합니다.
주 구성원 추가 대화상자가 열립니다.
새 주 구성원 필드에 앞에서 복사한 서비스 계정 ID를 입력합니다.
역할 선택 필드에서 Cloud Storage를 선택한 후 스토리지 객체 뷰어를 선택합니다.
저장을 클릭합니다.
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
를 앞에서 복사한 서비스 계정 ID로 바꿉니다. BUCKET_NAME
을 이전에 만든 버킷의 이름으로 바꿉니다.
자세한 내용은 버킷 수준 정책에 주 구성원 추가를 참조하세요.
Cloud Storage에 데이터 세트 업로드
데이터 세트 파일을 가져와 Cloud Storage에서 사용할 수 있도록 만듭니다.
- 꽃 데이터 세트를 로컬 머신에 다운로드합니다.
flower_photos.tgz
파일의 압축을 풉니다.- 이전에 만든 버킷의
flowers
폴더에flower_photos
폴더를 업로드합니다. - 업로드가 완료되면
flower_photos
폴더에서LICENSE.txt
파일을 삭제합니다.
객체 테이블 만들기
업로드한 꽃 데이터 세트를 기반으로 sample_images
라는 객체 테이블을 만듭니다.
SQL
BigQuery 페이지로 이동합니다.
편집자 창에서 다음 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에서 사용할 수 있도록 만듭니다.
- MobileNet V3 모델을 로컬 머신에 다운로드합니다. 그러면 모델에 대한
saved_model.pb
파일과variables
폴더가 제공됩니다. saved_model.pb
파일과variables
폴더를 이전에 만든 버킷의mobilenet
폴더에 업로드합니다.
BigQuery ML에 모델 로드
BigQuery 페이지로 이동합니다.
편집자 창에서 다음 SQL 문을 실행합니다.
CREATE MODEL `mobilenet_inference_test.mobilenet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/mobilenet/*');
BUCKET_NAME
을 이전에 만든 버킷의 이름으로 바꿉니다.
모델 검사
업로드된 모델을 검사하여 입력 및 출력 필드를 확인합니다.
BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트를 펼치고
mobilenet_inference_test
데이터 세트를 펼친 다음 모델 노드를 펼칩니다.mobilenet
모델을 클릭합니다.모델 창이 열리면 스키마 탭을 클릭합니다.
라벨 섹션을 찾습니다. 이렇게 해서 모델에서 출력된 필드를 식별합니다. 이 경우 필드 이름 값은
feature_vector
입니다.기능 섹션을 찾습니다. 이렇게 해서 모델에 입력해야 하는 필드를 식별합니다.
ML.DECODE_IMAGE
함수에 대한SELECT
문에서 이를 참조합니다. 이 경우 필드 이름 값은inputs
입니다.
추론 실행
mobilenet
모델을 사용하여 sample_images
객체 테이블에서 추론을 실행합니다.
BigQuery 페이지로 이동합니다.
편집자 창에서 다음 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 | —-------------------------------------------------------------------------------------------------------------
삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.