이미지 분할기 통합

이미지 분할기는 이미지의 각 픽셀이 특정 클래스와 연관되어 있는지 여부를 예측합니다. 이는 대조적이다 물체 검출 직사각형 영역에서 객체를 검출하고, 화상 분류 전체 이미지를 분류한다. 이미지 분할기에 대한 자세한 내용은 이미지 분할 소개를 참조하세요.

Task Library ImageSegmenter API를 사용하여 사용자 지정 이미지 세그 먼터 또는 사전 학습 된 세그먼트를 모바일 앱에 배포합니다.

ImageSegmenter API의 주요 기능

  • 회전, 크기 조정 및 색 공간 변환을 포함한 입력 이미지 처리.

  • 라벨 맵 로케일.

  • 두 가지 출력 유형, 카테고리 마스크 및 신뢰 마스크.

  • 디스플레이 용 컬러 ​​라벨.

지원되는 이미지 분할기 모델

다음 모델은 ImageSegmenter API와의 호환성이 보장됩니다.

자바에서 추론 실행

Android 앱에서 ImageSegmenter 를 사용하는 방법의 예는 Image Segmentation 참조 앱참조 하세요.

1 단계 : Gradle 종속성 및 기타 설정 가져 오기

.tflite 모델 파일을 모델이 실행될 Android 모듈의 assets 디렉터리에 복사하십시오. 파일이 압축되지 않도록 지정하고 TensorFlow Lite 라이브러리를 모듈의 build.gradle 파일에 build.gradle 합니다.

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.2.0'
}

2 단계 : 모델 사용

// Initialization
ImageSegmenterOptions options = ImageSegmenterOptions.builder().setOutputType(OutputType.CONFIDENCE_MASK).build();
ImageSegmenter imageSegmenter = ImageSegmenter.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Segmentation> results = imageSegmenter.segment(image);

ImageSegmenter 구성에 대한 추가 옵션은 소스 코드와 javadoc 을 참조하십시오.

C ++에서 추론 실행

// Initialization
ImageSegmenterOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ImageSegmenter> image_segmenter = ImageSegmenter::CreateFromOptions(options).value();

// Run inference
const SegmentationResult result = image_segmenter->Segment(*frame_buffer).value();

ImageSegmenter 구성에 대한 추가 옵션은 소스 코드 를 참조하십시오.

예제 결과

다음은 TensorFlow Hub에서 사용할 수있는 일반적인 세분화 모델 인 deeplab_v3 의 세분화 결과의 예입니다.

비행기

Color Legend:
 (r: 000, g: 000, b: 000):
  index       : 0
  class name  : background
 (r: 128, g: 000, b: 000):
  index       : 1
  class name  : aeroplane

# (omitting multiple lines for conciseness) ...

 (r: 128, g: 192, b: 000):
  index       : 19
  class name  : train
 (r: 000, g: 064, b: 128):
  index       : 20
  class name  : tv
Tip: use a color picker on the output PNG file to inspect the output mask with
this legend.

세분화 범주 마스크는 다음과 같아야합니다.

분할 출력

자체 모델 및 테스트 데이터 로 ImageSegmenter 용 간단한 CLI 데모 도구를 사용해보십시오.

모델 호환성 요구 사항

ImageSegmenter API에는 필수 TFLite 모델 메타 데이터가 있는 TFLite 모델이 필요합니다. TensorFlow Lite Metadata Writer API를 사용하여 이미지 분할 기용 메타 데이터를 만드는 예를 참조하세요.

  • 입력 이미지 텐서 (kTfLiteUInt8 / kTfLiteFloat32)

    • 크기의 이미지 입력 [batch x height x width x channels] .
    • 배치 추론은 지원되지 않습니다 ( batch 가 1이어야 함).
    • RGB 입력 만 지원됩니다 ( channels 은 3이어야 함).
    • 유형이 kTfLiteFloat32 인 경우 입력 정규화를 위해 NormalizationOptions를 메타 데이터에 연결해야합니다.
  • 출력 마스크 텐서 : (kTfLiteUInt8 / kTfLiteFloat32)

    • 텐서 크기 [batch x mask_height x mask_width x num_classes] . 여기서 batch 는 1 mask_width 하고 mask_heightmask_height 는 모델이 생성 한 분할 마스크의 차원이고 num_classes 는 모델이 지원하는 클래스 수입니다.

    • 선택적 (권장) 레이블 맵은 TENSOR_AXIS_LABELS 유형의 AssociatedFile-s로 첨부 될 수 있으며 한 줄에 하나의 레이블이 포함됩니다. 첫 번째 AssociatedFile (있는 경우)은 결과의 label 필드 (C ++에서는 class_name 으로 명명 됨)를 채우는 데 사용됩니다. display_name 필드는 로케일이 생성시 사용 된 ImageSegmenterOptionsdisplay_names_locale 필드 (기본적으로 "en", 즉 영어)와 일치하는 AssociatedFile (있는 경우)에서 채워집니다. 사용할 수있는 항목이 없으면 결과의 index 필드 만 채워집니다.