在没有 Google Coral USB 的情况下使用 tensorflow lite 进行图像分类

Image classification using tensorflow lite without Google Coral USB

我正在尝试评估 Raspberry Pi 使用 Google Goral Edge TPU USB 设备和不使用它对视频文件进行图像分类任务的性能。我已经设法使用 Edge TPU USB 设备评估了性能。然而,当我尝试 运行ning 一个 tensorflow lite 代码来 运行 推断时,它给我一个错误,告诉我我需要插入设备:

ValueError: Failed to load delegate from libedgetpu.so.1

我具体做的是运行使用 coral 设备对视频进行推理并保存视频中的每一帧以对硬件进行基准测试。

import argparse
import time
import cv2
import numpy as np
from pycoral.adapters import classify, common
from pycoral.utils.dataset import read_label_file
from pycoral.utils.edgetpu import make_interpreter
from utils import visualization as visual

WINDOW_NAME = "Edge TPU Image classification"


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--model", help="File path of Tflite model.", required=True)
    parser.add_argument("--label", help="File path of label file.", required=True)
    parser.add_argument("--top_k", help="keep top k candidates.", default=2, type=int)
    parser.add_argument("--threshold", help="Score threshold.", default=0.0, type=float)
    parser.add_argument("--width", help="Resolution width.", default=640, type=int)
    parser.add_argument("--height", help="Resolution height.", default=480, type=int)
    parser.add_argument("--videopath", help="File path of Videofile.", default="")
    args = parser.parse_args()

    # Initialize window.
    cv2.namedWindow(WINDOW_NAME)
    cv2.moveWindow(WINDOW_NAME, 100, 200)

    # Initialize engine and load labels.
    count = 0
    interpreter = make_interpreter(args.model)
    interpreter.allocate_tensors()
    labels = read_label_file(args.label) if args.label else None
    elapsed_list = []
    cap = cv2.VideoCapture('/home/pi/coral-usb/pycoral/test_data/video.mkv)
    while cap.isOpened():
        _, frame = cap.read()
        im = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        cv2.imwrite("/home/pi/Desktop/frames/frame_%d.jpeg" % count, frame)
        print('gravou o frame_%d'% count, frame)      
        cv2.imshow('Frame', frame)
        cap_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        cap_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        # Run inference.
        start = time.perf_counter()

        _, scale = common.set_resized_input(
            interpreter, (cap_width, cap_height), lambda size: cv2.resize(im, size)
        )
        interpreter.invoke()

        # Check result.
        results = classify.get_classes(interpreter, args.top_k, args.threshold)
        elapsed_ms = (time.perf_counter() - start) * 1000
        if results:
            for i in range(len(results)):
                label = "{0} ({1:.2f})".format(labels[results[i][0]], results[i][1])
                pos = 60 + (i * 30)
                visual.draw_caption(frame, (10, pos), label)


        # display
        cv2.imshow(WINDOW_NAME, frame)
        if cv2.waitKey(10) & 0xFF == ord("q"):
            break

此代码用于运行 珊瑚设备推理。我想知道如何在没有珊瑚的情况下做同样的事情?我想测试使用我的模型和不使用 edge tpu usb 设备的区别。

最后,我尝试使用 tensorflow lite 从这个 link 进行图像分类。但是,我收到以下错误:

RuntimeError: Encountered unresolved custom op: edgetpu-custom-op.Node number 0 (edgetpu-custom-op) failed to prepare.

我最近为了论文监督而加入了这个。我们在 raspberry pi 4 中使用 Coral USB 测试了人脸检测,而没有使用(对 rpi CPU 的推断)。您是否为两者使用相同的模型文件?如果是这种情况,那么这就是问题所在。 您需要使用裸 tflite 模型进行 CPU 推理,使用 TPU 编译模型进行 TPU 推理。 您可以查看此 repo,您可以在其中找到我之前提到的代码(它没有很好的文档记录,但它正在运行,请查看推理 CPU 和推理 CORAL 文件)。