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

객체 감지 모델은 이미지 레이블 지정 모델과 유사하지만 전체 이미지에 레이블을 지정하는 대신 이미지 영역에 레이블을 지정합니다. 객체 감지 모델을 사용하여 이미지에서 객체를 인식하고 찾거나 일련의 이미지에서 객체의 움직임을 추적할 수 있습니다.

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

시작하기 전에

  • Firebase 프로젝트가 아직 없으면 Firebase 콘솔 에서 만듭니다.

  • Inclusive ML 가이드 - AutoML 에 제공된 지침을 숙지하십시오.

  • AutoML Vision Edge를 사용해 보고 싶지만 자체 학습 데이터가 없는 경우 다음 중 하나와 같은 샘플 데이터 세트를 다운로드하십시오.

1. 훈련 데이터 수집

먼저 레이블이 지정된 이미지의 훈련 데이터 세트를 함께 구성해야 합니다. 다음 지침을 염두에 두십시오.

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

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

  • 각 라벨의 예를 10개 이상, 바람직하게는 100개 이상 포함하십시오.

  • 각 레이블에 대해 여러 각도, 해상도 및 배경을 포함합니다.

  • 훈련 데이터는 예측할 데이터와 최대한 가까워야 합니다. 예를 들어 사용 사례에 흐릿한 저해상도 이미지(예: 보안 카메라의 이미지)가 포함된 경우 훈련 데이터는 흐릿한 저해상도 이미지로 구성되어야 합니다.

  • AutoML Vision Edge에서 생성된 모델은 실제 사물의 사진에 최적화되어 있습니다. 엑스레이, 손그림, 스캔한 문서, 영수증 등에 대해서는 잘 작동하지 않을 수 있습니다.

    또한 모델은 일반적으로 인간이 할당할 수 없는 레이블을 예측할 수 없습니다. 따라서 사람이 1-2초 동안 이미지를 보고 레이블을 할당할 수 없다면 모델도 그렇게 하도록 훈련할 수 없습니다.

학습 이미지가 준비되면 GCP로 가져올 준비를 합니다. 두 가지 옵션이 있습니다.

옵션 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 콘솔의 커스텀 모델 페이지에서 모델을 업로드합니다. 이것은 일반적으로 단일 모델을 게시하는 가장 쉬운 방법입니다.
  • Admin SDK를 사용하여 Google Cloud 프로젝트에서 Firebase로 직접 모델을 게시합니다. 이 방법을 사용하여 여러 모델을 일괄 게시하거나 자동화된 게시 파이프라인을 생성할 수 있습니다.

Admin SDK 모델 관리 API 를 사용하여 모델을 게시하려면 다음 단계를 따르세요.

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

  2. 모델을 게시합니다.

    다음 예와 같은 문자열인 모델의 리소스 식별자를 지정해야 합니다.

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

    파이썬

    # 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)
    

    노드.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 앱에서 모델을 사용하는 방법을 배우십시오.