AutoML Vision Edge로 객체 감지 모델 학습

객체 감지 모델은 이미지 라벨 지정 모델과 비슷하지만 전체 이미지에 라벨을 할당하지 않고 이미지 영역에 라벨을 할당합니다. 객체 감지 모델을 사용하여 이미지에서 객체를 인식하고 찾거나 일련의 이미지에서 객체의 움직임을 추적할 수 있습니다.

객체 감지 모델을 학습시키려면 AutoML Vision Edge에 해당 객체 라벨 및 객체 경계가 있는 이미지 세트를 제공하세요. AutoML Vision Edge는 이 데이터 세트를 사용하여 클라우드의 새 모델을 학습시키며 이 모델은 기기별 객체 감지에 사용할 수 있습니다.

시작하기 전에

  • Firebase 프로젝트가 없으면 Firebase Console에서 프로젝트를 만듭니다.

  • 포괄적인 ML 가이드 - AutoML에 있는 가이드라인을 숙지하세요.

  • AutoML Vision Edge를 사용해 보고 싶지만 자체 학습 데이터가 없다면 다음과 같은 샘플 데이터 세트를 다운로드하세요.

1. 학습 데이터 취합

먼저 라벨이 지정된 이미지의 학습 데이터 세트를 준비해야 합니다. 다음 가이드라인을 참고하세요.

  • 이미지 형식은 JPEG, PNG, GIF, BMP, ICO 중 하나여야 합니다.

  • 각 이미지는 30MB 이하여야 합니다. AutoML Vision Edge는 사전 처리 중에 대부분의 이미지를 축소하므로 매우 높은 해상도 이미지를 제공해도 일반적으로 정확도 향상에 도움이 되지 않습니다.

  • 각 라벨의 예시를 최소 10개, 가급적 100개 이상 포함합니다.

  • 각 라벨에 다양한 각도, 해상도, 배경을 포함합니다.

  • 학습 데이터는 예측을 수행할 데이터와 최대한 유사해야 합니다. 예를 들어 사용 사례에 보안 카메라 영상처럼 흐릿한 저해상도 이미지가 포함되는 경우 흐릿한 저해상도 이미지로 학습 데이터를 구성해야 합니다.

  • AutoML Vision Edge가 생성하는 모델은 실제 물체를 찍은 사진에 맞게 최적화되어 있습니다. X레이, 회화, 스캔한 문서, 영수증 등에는 잘 작동하지 않을 수 있습니다.

    또한 모델의 라벨 예측 능력은 일반적으로 사람의 한계를 넘지 못합니다. 따라서 사람이 특정 이미지를 1~2초 동안 보고 라벨을 지정할 수 없다면 모델도 그렇게 하도록 학습시키기 어렵습니다.

학습 이미지가 준비되었으면 Google Cloud로 가져올 준비를 합니다. 다음과 같은 옵션을 선택할 수 있습니다.

옵션 1: CSV 색인이 포함된 Cloud Storage

학습 이미지를 Google Cloud Storage에 업로드하고 각 이미지의 URL을 나열하는 CSV 파일을 준비합니다. 원하는 경우 각 이미지의 올바른 객체 라벨 및 경계 영역도 포함할 수 있습니다. 이 옵션은 대규모 데이터 세트를 사용할 때 유용합니다.

예를 들어 이미지를 Cloud Storage에 업로드하고 다음과 같은 CSV 파일을 준비합니다.

gs://your-training-data-bucket/001.jpg,accordion,0.2,0.4,,,0.3,0.5,,
gs://your-training-data-bucket/001.jpg,tuba,0.2,0.5,,,0.4,0.8,,
gs://your-training-data-bucket/002.jpg,accordion,0.2,0.2,,,0.9,0.8,,

객체 경계 상자는 이미지에서 상대 좌표로 지정됩니다. 학습 데이터 CSV 형식 지정을 참조하세요.

이미지는 us-central1 리전에 있는 버킷 및 Firebase 프로젝트의 해당 Google Cloud 프로젝트에 속하는 버킷에 저장해야 합니다.

옵션 2: 라벨이 지정되지 않은 이미지

학습 이미지를 업로드한 후 Google Cloud Console에서 학습 이미지에 라벨을 지정하고 객체 경계를 그립니다. 이 옵션은 소규모 데이터 세트에만 권장됩니다. 다음 단계를 참조하세요.

2. 모델 학습

이제 이미지를 사용하여 모델을 학습시킵니다.

  1. Google Cloud Console에서 Vision 데이터 세트 페이지를 엽니다. 메시지가 표시되면 프로젝트를 선택합니다.

  2. 새 데이터 세트를 클릭하고 데이터 세트 이름을 입력하고 학습시킬 모델 유형을 선택한 다음 데이터 세트 만들기를 클릭합니다.

  3. 데이터 세트의 가져오기 탭에서 학습 이미지, 학습 이미지의 zip 파일, 이미지를 업로드한 Cloud Storage 위치가 포함된 CSV 파일을 업로드합니다. 학습 데이터 취합을 참조하세요.

  4. 가져오기 작업이 완료되면 이미지 탭을 사용하여 학습 데이터를 확인합니다.

  5. CSV를 업로드하지 않은 경우 각 이미지에 대해 인식하려는 객체 주위에 경계 상자를 그리고 각 객체에 라벨을 지정합니다.

  6. 학습 탭에서 학습 시작을 클릭합니다.

    1. 모델 이름을 지정하고 Edge 모델 유형을 선택합니다.

    2. 생성된 모델의 성능을 제어하는 다음과 같은 학습 설정을 구성합니다.

      모델 최적화 옵션 사용할 모델 구성입니다. 짧은 지연 시간 또는 작은 패키지 크기가 중요한 경우 작은 모델을 빠르게 학습시킬 수 있고, 정확성이 가장 중요한 경우에는 더 큰 모델을 느리게 학습시킬 수 있습니다.
      노드 시간 예산

      모델 학습에 소비할 최대 시간(컴퓨팅 시간)입니다. 일반적으로 학습 시간이 길수록 모델이 정확해집니다.

      시스템에서 모델이 최적화되었으며 추가 학습이 정확성 향상에 기여하지 못한다고 판단할 경우 학습이 지정된 시간보다 일찍 완료될 수 있습니다. 요금은 실제로 사용한 시간에 대해서만 청구됩니다.

      일반적인 학습 소요 시간
      아주 작은 세트1시간
      이미지 500개2시간
      이미지 1,000개3시간
      이미지 5,000개6시간
      이미지 10,000개7시간
      이미지 50,000개11시간
      이미지 100,000개13시간
      이미지 1,000,000개18시간

3. 모델 평가

학습이 완료되면 평가 탭을 클릭하여 모델의 성능 측정항목을 확인할 수 있습니다.

이 페이지의 중요한 용도 중 하나는 모델에 가장 적합한 신뢰도 임곗값을 결정하는 것입니다. 신뢰도 임곗값은 모델이 이미지에 라벨을 할당하기 위해 가져야 하는 최소 신뢰도입니다. 신뢰도 임곗값 슬라이드를 움직여서 여러 임곗값이 모델의 성능에 미치는 영향을 확인할 수 있습니다. 모델 성능은 정밀도재현율이라는 두 가지 측정항목을 사용하여 측정됩니다.

이미지 분류의 측면에서 정밀도는 선택한 임곗값에서 모델이 라벨을 지정한 이미지 수에서 올바르게 라벨이 지정된 이미지 수의 비율입니다. 모델의 정밀도가 높으면 라벨을 잘못 할당하는 빈도가 낮습니다(거짓양성이 더 적게 발생).

재현율은 모델이 라벨을 지정해야 하는 콘텐츠가 있는 이미지 수에서 올바르게 라벨이 지정된 이미지 수의 비율입니다. 모델의 재현율이 높으면 라벨을 할당하지 못하는 빈도가 낮습니다(거짓음성이 더 적게 발생).

정밀도나 재현율 중에서 무엇을 기준으로 최적화할지는 사용 사례에 따라 달라집니다. 자세한 내용은 AutoML Vision 초보자 가이드포괄적인 ML 가이드 - AutoML을 참조하세요.

원하는 측정항목을 생성하는 신뢰도 임곗값을 발견하면 기록해 두고 이 신뢰도 임곗값을 사용하여 앱의 모델을 구성합니다(이 도구를 사용하여 언제든지 적절한 임곗값을 구할 수 있음).

4. 모델 게시 또는 다운로드

모델의 성능에 만족하여 앱에서 모델을 사용하려는 경우 온라인 예측을 위한 모델 배포, Firebase에 모델 게시, 모델을 다운로드하여 앱과 함께 번들로 묶기 등 세 가지 옵션 중에서 선택할 수 있습니다.

모델 배포

데이터 세트의 테스트 및 사용 탭에서, 클라우드에서 모델을 실행하는 온라인 예측을 위해 모델을 배포할 수 있습니다. 이 옵션은 Cloud AutoML 문서에서 다룹니다. 이 사이트의 문서에서는 나머지 두 가지 옵션을 다룹니다.

모델 게시

모델을 Firebase에 게시하면 앱 버전을 새롭게 출시하지 않고 모델을 업데이트할 수 있고, 원격 구성과 A/B 테스팅을 사용하여 다양한 사용자 집합에 다른 모델을 동적으로 제공할 수 있습니다.

모델을 앱과 번들로 묶지 않고 Firebase에서 모델을 호스팅하여 제공하는 방법만 선택한 경우 앱의 초기 다운로드 크기를 줄일 수 있습니다. 다만 모델을 앱과 번들로 묶지 않을 경우 앱이 처음으로 모델을 다운로드하기 전까지 모든 모델 관련 기능을 사용할 수 없다는 점에 유의하세요.

다음 두 가지 방법 중 하나를 사용하여 모델을 게시할 수 있습니다.

  • Google Cloud Console에 있는 데이터 세트의 테스트 및 사용 페이지에서 TF Lite 모델을 다운로드한 다음 Firebase Console의 커스텀 모델 페이지에서 모델을 업로드합니다. 일반적으로 단일 모델을 게시하는 가장 쉬운 방법입니다.
  • Admin SDK를 사용하여 Google Cloud 프로젝트에서 Firebase로 직접 모델을 게시합니다. 이 방법을 사용하여 여러 모델을 일괄 게시하거나 자동 게시 파이프라인을 만들 수 있습니다.

Admin SDK Model Management API로 모델을 게시하려면 다음 단계를 따르세요.

  1. SDK를 설치하고 초기화합니다.

  2. 모델을 게시합니다.

    다음 예시와 유사한 문자열로 모델의 리소스 식별자를 지정해야 합니다.

    projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID
    PROJECT_NUMBER 모델이 포함된 Cloud Storage 버킷의 프로젝트 번호입니다. Firebase 프로젝트 또는 다른 Google Cloud 프로젝트일 수 있습니다. Firebase Console 또는 Google Cloud Console 대시보드의 설정 페이지에서 이 값을 찾을 수 있습니다.
    MODEL_ID AutoML Cloud API에서 가져온 모델의 ID입니다.

    Python

    # First, import and initialize the SDK.
    
    # Get a reference to the AutoML model
    source = ml.TFLiteAutoMlSource('projects/{}/locations/us-central1/models/{}'.format(
        # See above for information on these values.
        project_number,
        model_id
    ))
    
    # Create the model object
    tflite_format = ml.TFLiteFormat(model_source=source)
    model = ml.Model(
        display_name="example_model",  # This is the name you will use from your app to load the model.
        tags=["examples"],             # Optional tags for easier management.
        model_format=tflite_format)
    
    # Add the model to your Firebase project and publish it
    new_model = ml.create_model(model)
    new_model.wait_for_unlocked()
    ml.publish_model(new_model.model_id)
    

    Node.js

    // First, import and initialize the SDK.
    
    (async () => {
      // Get a reference to the AutoML model. See above for information on these
      // values.
      const automlModel = `projects/${projectNumber}/locations/us-central1/models/${modelId}`;
    
      // Create the model object and add the model to your Firebase project.
      const model = await ml.createModel({
        displayName: 'example_model',  // This is the name you use from your app to load the model.
        tags: ['examples'],  // Optional tags for easier management.
        tfliteModel: { automlModel: automlModel },
      });
    
      // Wait for the model to be ready.
      await model.waitForUnlocked();
    
      // Publish the model.
      await ml.publishModel(model.modelId);
    
      process.exit();
    })().catch(console.error);
    

모델 다운로드 및 앱과 함께 번들로 묶기

모델을 앱과 번들로 묶으면 Firebase 호스팅 모델을 사용할 수 없는 경우에도 앱의 ML 기능이 계속 작동하도록 할 수 있습니다.

모델을 게시하고 앱과 번들로 묶으면 앱은 사용 가능한 최신 버전을 사용합니다.

모델을 다운로드하려면 데이터 세트의 테스트 및 사용 페이지에서 TF Lite를 클릭합니다.

다음 단계

모델을 게시하거나 다운로드했으므로 iOS+Android 앱에서 모델을 사용하는 방법을 알아보세요.