Chữ ký chung cho hình ảnh

Trang này mô tả các chữ ký chung cần được triển khai bởi các mô-đun ở định dạng Hub TF1 cho các tác vụ liên quan đến hình ảnh. (Đối với định dạng TF2 SavingModel , hãy xem API SavingModel tương tự .)

Một số mô-đun có thể được sử dụng cho nhiều nhiệm vụ (ví dụ: các mô-đun phân loại hình ảnh có xu hướng thực hiện một số trích xuất tính năng trong quá trình thực hiện). Do đó, mỗi mô-đun cung cấp (1) chữ ký được đặt tên cho tất cả các tác vụ được nhà xuất bản dự đoán và (2) output = m(images) cho tác vụ chính được chỉ định của nó.

Vector đặc điểm hình ảnh

Tóm tắt cách sử dụng

Vectơ đặc trưng hình ảnh là một tensor 1-D dày đặc đại diện cho toàn bộ hình ảnh, thường được phân loại theo mô hình người tiêu dùng. (Không giống như các kích hoạt trung gian của CNN, nó không cung cấp thông tin chi tiết về không gian. Không giống như phân loại hình ảnh , nó loại bỏ phân loại mà mô hình nhà xuất bản đã học.)

Một mô-đun để trích xuất đặc trưng hình ảnh có chữ ký mặc định ánh xạ một loạt hình ảnh thành một loạt vectơ đặc trưng. Nó có thể được sử dụng như vậy:

  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].

Nó cũng xác định chữ ký được đặt tên tương ứng.

Đặc điểm kỹ thuật chữ ký

Chữ ký được đặt tên để trích xuất vectơ đặc trưng của hình ảnh được gọi là

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

Đầu vào tuân theo quy ước chung cho đầu vào hình ảnh .

Từ điển đầu ra chứa đầu ra "default" của dtype float32 và hình dạng [batch_size, num_features] . batch_size giống như trong dữ liệu đầu vào nhưng không xác định được tại thời điểm xây dựng biểu đồ. num_features là hằng số đã biết, dành riêng cho từng mô-đun, không phụ thuộc vào kích thước đầu vào.

Các vectơ đặc trưng này có thể sử dụng được để phân loại bằng bộ phân loại chuyển tiếp nguồn cấp dữ liệu đơn giản (giống như các đặc điểm được gộp từ lớp chập trên cùng trong CNN điển hình để phân loại hình ảnh).

Việc áp dụng loại bỏ đối với các tính năng đầu ra (hoặc không) nên được giao cho người tiêu dùng mô-đun. Bản thân mô-đun không được thực hiện loại bỏ trên các đầu ra thực tế (ngay cả khi nó sử dụng loại bỏ nội bộ ở những nơi khác).

Từ điển đầu ra có thể cung cấp thêm đầu ra, ví dụ: kích hoạt các lớp ẩn bên trong mô-đun. Khóa và giá trị của chúng phụ thuộc vào mô-đun. Bạn nên thêm tiền tố vào các khóa phụ thuộc vào kiến ​​trúc một tên kiến ​​trúc (ví dụ: để tránh nhầm lẫn giữa lớp trung gian "InceptionV3/Mixed_5c" với lớp chập trên cùng "InceptionV2/Mixed_5c" ).

Phân loại hình ảnh

Tóm tắt cách sử dụng

Phân loại hình ảnh ánh xạ các pixel của hình ảnh thành điểm tuyến tính (log) để trở thành thành viên trong các lớp phân loại do nhà xuất bản mô-đun chọn . Điều này cho phép người tiêu dùng rút ra kết luận từ phân loại cụ thể mà mô-đun nhà xuất bản đã học chứ không chỉ các tính năng cơ bản của nó (xem Vectơ đặc điểm hình ảnh ).

Mô-đun trích xuất đặc điểm hình ảnh có chữ ký mặc định ánh xạ một loạt hình ảnh thành một loạt nhật ký. Nó có thể được sử dụng như vậy:

  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].

Nó cũng xác định chữ ký được đặt tên tương ứng.

Đặc điểm kỹ thuật chữ ký

Chữ ký được đặt tên để trích xuất vectơ đặc trưng của hình ảnh được gọi là

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

Đầu vào tuân theo quy ước chung cho đầu vào hình ảnh .

Từ điển đầu ra chứa đầu ra "default" của dtype float32 và hình dạng [batch_size, num_classes] . batch_size giống như trong dữ liệu đầu vào nhưng không xác định được tại thời điểm xây dựng biểu đồ. num_classes là số lượng lớp trong phân loại, là hằng số đã biết không phụ thuộc vào kích thước đầu vào.

Việc đánh giá outputs["default"][i, c] mang lại điểm dự đoán tư cách thành viên của ví dụ i trong lớp có chỉ số c .

Nó phụ thuộc vào phân loại cơ bản xem những điểm số này có được sử dụng với softmax (đối với các lớp loại trừ lẫn nhau), sigmoid (đối với các lớp trực giao) hay thứ gì khác hay không. Tài liệu mô-đun nên mô tả điều này và tham khảo định nghĩa về các chỉ mục lớp.

Từ điển đầu ra có thể cung cấp thêm đầu ra, ví dụ: kích hoạt các lớp ẩn bên trong mô-đun. Khóa và giá trị của chúng phụ thuộc vào mô-đun. Bạn nên thêm tiền tố vào các khóa phụ thuộc vào kiến ​​trúc một tên kiến ​​trúc (ví dụ: để tránh nhầm lẫn giữa lớp trung gian "InceptionV3/Mixed_5c" với lớp chập trên cùng "InceptionV2/Mixed_5c" ).

Đầu vào hình ảnh

Điều này phổ biến đối với tất cả các loại mô-đun hình ảnh và chữ ký hình ảnh.

Chữ ký lấy một loạt hình ảnh làm đầu vào chấp nhận chúng dưới dạng tenxơ 4-D dày đặc của dtype float32 và hình dạng [batch_size, height, width, 3] có các phần tử là giá trị màu RGB của các pixel được chuẩn hóa theo phạm vi [0, 1] . Đây là những gì bạn nhận được từ tf.image.decode_*() theo sau là tf.image.convert_image_dtype(..., tf.float32) .

Một mô-đun có chính xác một (hoặc một đầu vào chính) hình ảnh sẽ sử dụng tên "images" cho đầu vào này.

Mô-đun chấp nhận bất kỳ batch_size nào và tương ứng đặt thứ nguyên đầu tiên của TensorInfo.tensor_shape thành "không xác định". Kích thước cuối cùng được cố định ở số 3 của kênh RGB. Kích thước heightwidth được cố định theo kích thước dự kiến ​​của hình ảnh đầu vào. (Công việc trong tương lai có thể loại bỏ hạn chế đó đối với các mô-đun tích chập hoàn toàn.)

Người tiêu dùng mô-đun không nên kiểm tra hình dạng trực tiếp mà phải lấy thông tin kích thước bằng cách gọi hub.get_expected_image_size() trên mô-đun hoặc thông số kỹ thuật của mô-đun và phải thay đổi kích thước hình ảnh đầu vào cho phù hợp (thường là trước/trong khi tạo khối).

Để đơn giản, các mô-đun TF-Hub sử dụng bố channels_last (hoặc NHWC ) của Tensors và để trình tối ưu hóa biểu đồ của TensorFlow ghi lại channels_first (hoặc NCHW ) nếu cần. Nó đã làm điều đó theo mặc định kể từ phiên bản TensorFlow 1.7.