微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

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

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

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

运行时错误:遇到未解析的自定义操作:edgetpu-custom-op.Node 编号 0 (edgetpu-custom-op) 未能准备。

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?