如何解决在没有 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 举报,一经查实,本站将立刻删除。