Python 使用带有Google Coral USB加速器的Pycaral库进行二值图像分类

Python 使用带有Google Coral USB加速器的Pycaral库进行二值图像分类,python,tensorflow,machine-learning,tensorflow-lite,google-coral,Python,Tensorflow,Machine Learning,Tensorflow Lite,Google Coral,我有一个Keras模型,它使用sigmoid函数进行二元分类。我将模型编译为Coral USB运行推理所需的.tflite格式。但是,我注意到脚本classify\u image.py执行多类分类。因此,当我尝试对图像进行分类时,我得到了对任何图像的100%预测。例如,我的模型将红外图像分类为发热状态。即使我通过一个球的图像,发烧等级也100%呈阳性 所以,我再次测试了一个使用layer softmax的多类模型,该模型用于使用完全自定义模型的植物,这次它成功了。它为工厂a、工厂B和工厂C提供了

我有一个Keras模型,它使用sigmoid函数进行二元分类。我将模型编译为Coral USB运行推理所需的
.tflite
格式。但是,我注意到脚本
classify\u image.py
执行多类分类。因此,当我尝试对图像进行分类时,我得到了对任何图像的100%预测。例如,我的模型将红外图像分类为发热状态。即使我通过一个球的图像,发烧等级也100%呈阳性

所以,我再次测试了一个使用layer softmax的多类模型,该模型用于使用完全自定义模型的植物,这次它成功了。它为工厂a、工厂B和工厂C提供了合理的85%精度

因此,我想知道我需要做什么更改,才能使用二进制分类自定义模型处理Pycaral

这是我用于分类的代码:

import argparse
import time

from PIL import Image
from pycoral.adapters import classify
from pycoral.adapters import common
from pycoral.utils.dataset import read_label_file
from pycoral.utils.edgetpu import make_interpreter
import cv2 as cv
import numpy as np


def main():
  parser = argparse.ArgumentParser(
      formatter_class=argparse.ArgumentDefaultsHelpFormatter)
  parser.add_argument('-m', '--model', required=True,
                      help='File path of .tflite file.')
  parser.add_argument('-i', '--input', required=True,
                      help='Image to be classified.')
  parser.add_argument('-l', '--labels',
                      help='File path of labels file.')
  parser.add_argument('-k', '--top_k', type=int, default=2,
                      help='Max number of classification results')
  parser.add_argument('-t', '--threshold', type=float, default=0.0,
                      help='Classification score threshold')
  parser.add_argument('-c', '--count', type=int, default=5,
                      help='Number of times to run inference')
  args = parser.parse_args()

  labels = read_label_file(args.labels) if args.labels else {}

  interpreter = make_interpreter(*args.model.split('@'))
  interpreter.allocate_tensors()
  print(interpreter)

  size = common.input_size(interpreter)
  image = cv.imread(args.input)
  image = cv.normalize(image, image, 0, 255, cv.NORM_MINMAX)
  common.set_input(interpreter, image)

  print('----INFERENCE TIME----')
  print('Note: The first inference on Edge TPU is slow because it includes',
        'loading the model into Edge TPU memory.')
  for _ in range(args.count):
    start = time.perf_counter()
    interpreter.invoke()
    inference_time = time.perf_counter() - start
    classes = classify.get_classes(interpreter, args.top_k, args.threshold)
    print('%.1fms' % (inference_time * 1000))

  print('-------RESULTS--------')
  for c in classes:
    print('%s: %.5f' % (labels.get(c.id, c.id), c.score))


if __name__ == '__main__':
  main()

My
labels.txt
有两个标签,分别是发烧(阳性)和健康(阴性)。用于二进制模型分类的阈值为0.50,据我所知,模型层与Coral USB加速器设备完全兼容。

您是在谈论classify_image.py吗?这是tensorflow库版本。然而,我指的是pycoral版本。