튜토리얼: 특성 벡터 모델을 사용하여 객체 테이블에서 추론 실행

이 튜토리얼에서는 꽃 데이터 세트의 이미지를 기반으로 객체 테이블을 만들고 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.createstorage.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 문서에서 BigQuery ML 가격 책정을 참조하세요.

Cloud Storage 가격에 대한 자세한 내용은 Cloud Storage 가격 책정 페이지를 참조하세요.

시작하기 전에

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

데이터 세트 만들기

mobilenet_inference_test라는 데이터 세트를 만듭니다.

SQL

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 편집자 창에서 다음 SQL 문을 실행합니다.

    CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

bq

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

  2. bq mk 명령어를 실행하여 데이터 세트를 만듭니다.

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

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

연결 만들기

lake-connection이라는 연결을 만듭니다.

콘솔

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 데이터 추가를 클릭한 다음 외부 데이터 소스를 클릭합니다.

  3. 연결 유형 목록에서 BigLake 및 원격 함수(Cloud 리소스)를 선택합니다.

  4. 연결 ID 필드에 lake-connection을 입력합니다.

  5. 연결 만들기를 클릭합니다.

  6. 탐색기 창에서 프로젝트를 확장하고 외부 연결 노드를 펼친 다음 us.lake-connection 연결을 선택합니다.

  7. 연결 정보 창에서 서비스 계정 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 및 관리자 페이지로 이동합니다.

    IAM 및 관리자로 이동

  2. 액세스 권한 부여를 클릭합니다.

    주 구성원 추가 대화상자가 열립니다.

  3. 새 주 구성원 필드에 앞에서 복사한 서비스 계정 ID를 입력합니다.

  4. 역할 선택 필드에서 Cloud Storage를 선택한 후 스토리지 객체 뷰어를 선택합니다.

  5. 저장을 클릭합니다.

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에서 사용할 수 있도록 만듭니다.

  1. 꽃 데이터 세트를 로컬 머신에 다운로드합니다.
  2. flower_photos.tgz 파일의 압축을 풉니다.
  3. 이전에 만든 버킷의 flowers 폴더에 flower_photos 폴더를 업로드합니다.
  4. 업로드가 완료되면 flower_photos 폴더에서 LICENSE.txt 파일을 삭제합니다.

객체 테이블 만들기

업로드한 꽃 데이터 세트를 기반으로 sample_images라는 객체 테이블을 만듭니다.

SQL

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 편집자 창에서 다음 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. 편집자 창에서 다음 SQL 문을 실행합니다.

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

    BUCKET_NAME을 이전에 만든 버킷의 이름으로 바꿉니다.

모델 검사

업로드된 모델을 검사하여 입력 및 출력 필드를 확인합니다.

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트를 펼치고 mobilenet_inference_test 데이터 세트를 펼친 다음 모델 노드를 펼칩니다.

  3. mobilenet 모델을 클릭합니다.

  4. 모델 창이 열리면 스키마 탭을 클릭합니다.

  5. 라벨 섹션을 찾습니다. 이렇게 해서 모델에서 출력된 필드를 식별합니다. 이 경우 필드 이름 값은 feature_vector입니다.

  6. 기능 섹션을 찾습니다. 이렇게 해서 모델에 입력해야 하는 필드를 식별합니다. ML.DECODE_IMAGE 함수에 대한 SELECT 문에서 이를 참조합니다. 이 경우 필드 이름 값은 inputs입니다.

추론 실행

mobilenet 모델을 사용하여 sample_images 객체 테이블에서 추론을 실행합니다.

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 편집자 창에서 다음 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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.