12월 7일 Women in ML 심포지엄 참석 지금 등록

이미지에 대한 공통 서명

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 페이지에서는 이미지 관련 작업을 위해 TF1 허브 형식 의 모듈에서 구현해야 하는 일반적인 서명을 설명합니다. ( TF2 SavedModel 형식 에 대해서는 유사한 SavedModel API 를 참조하십시오.)

일부 모듈은 둘 이상의 작업에 사용할 수 있습니다(예: 이미지 분류 모듈은 도중에 일부 기능 추출을 수행하는 경향이 있음). 따라서 각 모듈은 (1) 게시자가 예상하는 모든 작업에 대한 명명된 서명과 (2) 지정된 기본 작업에 대한 기본 서명 output = m(images) 를 제공합니다.

이미지 특징 벡터

사용법 요약

이미지 특징 벡터 는 일반적으로 소비자 모델에 의한 분류를 위해 전체 이미지를 나타내는 조밀한 1차원 텐서입니다. (CNN의 중간 활성화와 달리 공간 분석을 제공하지 않습니다. 이미지 분류 와 달리 게시자 모델에서 학습한 분류를 버립니다.)

이미지 특징 추출을 위한 모듈에는 이미지 배치를 특징 벡터 배치에 매핑하는 기본 서명이 있습니다. 다음과 같이 사용할 수 있습니다.

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  features = module(images)   # A batch with shape [batch_size, num_features].

또한 해당 명명된 서명을 정의합니다.

서명 사양

이미지 특징 벡터 추출을 위한 명명된 서명은 다음과 같이 호출됩니다.

  outputs = module(dict(images=images), signature="image_feature_vector",
                   as_dict=True)
  features = outputs["default"]

입력은 이미지 입력에 대한 일반적인 규칙을 따릅니다.

outputs 사전에는 dtype float32 및 모양 [batch_size, num_features]"default" 출력이 포함되어 있습니다. batch_size 는 입력과 동일하지만 그래프 생성 시 알 수 없습니다. num_features 는 입력 크기와 무관한 알려진 모듈별 상수입니다.

이러한 특징 벡터는 간단한 피드포워드 분류기로 분류하는 데 사용할 수 있습니다(예: 이미지 분류를 위한 일반적인 CNN의 최상위 컨볼루션 레이어에서 풀링된 특징).

출력 기능에 드롭아웃을 적용할지 여부는 모듈 소비자에게 맡겨야 합니다. 모듈 자체는 실제 출력에서 ​​드롭아웃을 수행하지 않아야 합니다(다른 위치에서 내부적으로 드롭아웃을 사용하더라도).

출력 사전은 예를 들어 모듈 내부의 숨겨진 레이어 활성화와 같은 추가 출력을 제공할 수 있습니다. 키와 값은 모듈에 따라 다릅니다. 아키텍처 종속 키에 아키텍처 이름을 접두사로 지정하는 것이 좋습니다(예: 중간 계층 "InceptionV3/Mixed_5c" 와 최상위 컨볼루션 계층 "InceptionV2/Mixed_5c" 의 혼동을 방지하기 위해).

이미지 분류

사용법 요약

이미지 분류 는 이미지의 픽셀을 모듈 게시자가 선택한 분류 클래스의 구성원에 대한 선형 점수(로짓)에 매핑합니다. 이를 통해 소비자는 기본 기능뿐만 아니라 게시자 모듈에서 학습한 특정 분류에서 결론을 도출할 수 있습니다( 이미지 기능 벡터 참조).

이미지 특징 추출을 위한 모듈에는 이미지 배치를 로짓 배치에 매핑하는 기본 서명이 있습니다. 다음과 같이 사용할 수 있습니다.

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  logits = module(images)   # A batch with shape [batch_size, num_classes].

또한 해당 명명된 서명을 정의합니다.

서명 사양

이미지 특징 벡터 추출을 위한 명명된 서명은 다음과 같이 호출됩니다.

  outputs = module(dict(images=images), signature="image_classification",
                   as_dict=True)
  logits = outputs["default"]

입력은 이미지 입력에 대한 일반적인 규칙을 따릅니다.

outputs 사전에는 dtype float32 및 모양 [batch_size, num_classes]"default" 출력이 포함되어 있습니다. batch_size 는 입력과 동일하지만 그래프 생성 시 알 수 없습니다. num_classes 는 입력 크기와 무관하게 알려진 상수인 분류의 클래스 수입니다.

outputs["default"][i, c] 를 평가하면 인덱스가 c 인 클래스에서 예제 i 의 구성원 자격을 예측하는 점수가 산출됩니다.

이러한 점수가 소프트맥스(상호 배타적인 클래스의 경우), 시그모이드(직교 클래스의 경우) 또는 다른 것과 함께 사용되는지 여부는 기본 분류에 따라 다릅니다. 모듈 문서는 이를 설명하고 클래스 인덱스의 정의를 참조해야 합니다.

출력 사전은 예를 들어 모듈 내부의 숨겨진 레이어 활성화와 같은 추가 출력을 제공할 수 있습니다. 키와 값은 모듈에 따라 다릅니다. 아키텍처 종속 키에 아키텍처 이름을 접두사로 지정하는 것이 좋습니다(예: 중간 계층 "InceptionV3/Mixed_5c" 와 최상위 컨볼루션 계층 "InceptionV2/Mixed_5c" 의 혼동을 방지하기 위해).

이미지 입력

이는 모든 유형의 이미지 모듈 및 이미지 서명에 공통입니다.

이미지 배치를 입력으로 사용하는 서명은 이미지를 dtype float32 및 모양 [batch_size, height, width, 3] 의 조밀한 4D 텐서로 받아들입니다. 해당 요소는 [0, 1] 범위로 정규화된 픽셀의 RGB 색상 값입니다. . 이것은 tf.image.decode_*() 다음에 tf.image.convert_image_dtype(..., tf.float32) 입니다.

정확히 하나(또는 하나의 주체) 이미지 입력이 있는 모듈은 이 입력에 "images" 라는 이름을 사용합니다.

이 모듈은 모든 batch_size 를 허용하고 이에 따라 TensorInfo.tensor_shape의 첫 번째 차원을 "unknown"으로 설정합니다. 마지막 차원은 RGB 채널의 숫자 3 으로 고정됩니다. heightwidth 치수는 입력 이미지의 예상 크기로 고정됩니다. (향후 작업에서는 완전 컨벌루션 모듈에 대한 제한을 제거할 수 있습니다.)

모듈의 소비자는 모양을 직접 검사하지 말고 모듈 또는 모듈 사양에서 hub.get_expected_image_size()를 호출하여 크기 정보를 가져와 그에 따라 입력 이미지의 크기를 조정해야 합니다(일반적으로 일괄 처리 전/중).

단순화를 위해 TF-Hub 모듈은 Tensor의 channels_last (또는 NHWC ) 레이아웃을 사용하고 필요에 따라 channels_first (또는 NCHW )에 다시 쓰도록 TensorFlow의 그래프 최적화 프로그램에 맡깁니다. TensorFlow 버전 1.7부터 기본적으로 그렇게 하고 있습니다.