我想使用Python的time.time()函数对Google的USB Accelerator Coral Beta进行基准测试。
我通过安装Edge TPU运行时库开始。我在Google上找到了过程。
然后,我遵循then方法对分类神经元网络进行推理。 我执行以下命令行:
cd /usr/local/lib/python3.5/dist-packages/edgetpu/demo
python3 classify_image.py \
--model ~/Downloads /mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--label ~/Downloads/inat_bird_labels.txt \
--image ~/Downloads/parrot.jpg
现在我要对这个示例进行基准测试,因此我去了classify_image.py并实现了Python库的time.time()函数来测量神经元执行时间。
这是我所做的更改:
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(
'--image', help='File path of the image to be recognized.', required=True)
args = parser.parse_args()
print ("[ INFO ] Loading network files:")
print(args.model)
print ("[ INFO ] Loading image file:")
print(args.image)
print ("[ INFO ] Starting inference (5 iterations)")
print ("[ INFO ] Loading label file:")
print (args.label)
# Prepare labels.
labels = ReadLabelFile(args.label)
temps=0.0
print("[ INFO ] stard profiling")
print(".................................................")
for i in range(4):
# Initialize engine.
engine = ClassificationEngine(args.model)
# Run inference.
print("[ INFO ] Loading image in the model")
t1=time.time()
img = Image.open(args.image)
result=engine.ClassifyWithImage(img, threshold=0.1, top_k=5, resample=0)
t2=time.time()
temps=temps+(t2-t1)
print("[ INFO ] end profiling")
print(".................................................")
print("total inference time {} s:".format(temps))
print("Average running time of one iteration {} s:".format(temps/5.0))
print("Throughput: {} FPS".format(5.0/temps*1.0))
结果为“一次迭代的平均运行时间0.41750078201293944 s”。
[ INFO ] Loading network files:
inception_v1_224_quant.tflite
[ INFO ] Loading image file:
/cat_W_3000_H_2000.jpg
[ INFO ] Starting inference (5 iterations)
[ INFO ] Loading label file:
/imagenet_labels.txt
[ INFO ] stard profiling
.................................................
[ INFO ] end profiling
.................................................
total inference time 2.0875039100646973 s:
Average running time of one iteration 0.41750078201293944 s:
Throughput: 2.3952050944158647 FPS
当我想验证我的结果是否正确时,我转到了此链接Google(Google的USB Accelerator coarl beta官方网站),发现神经元网络inception_v1(224 * 224)的大小为3.6毫秒,而我测量了417毫秒。
所以,我的问题是:我怎样才能正确地对Google的USB Accelerator coarl beta进行基准测试?
答案 0 :(得分:0)
有两个问题。首先,要获得“正确的”基准数字,您必须运行几次(而不是一次)。为什么?通常,准备运行环境会花费一些额外的时间,并且运行之间可能会有差异。其次,engine.ClassifyWithImage
包含图像处理时间(缩放和裁剪输入图像)。因此,这样做的“正确方法”是(1)添加一些预热运行并多次运行,并且(2)使用ClassificationEngine
而不是ClassifyWithImage
。实际上,我大约在两个月前完成了此操作,并将代码放在github上,请参阅我的scripts here。
答案 1 :(得分:0)
Google网站上提供的延迟时间是推断时间,不包括图像准备时间。 Python API返回推理延迟,作为here中所述结果的一部分。要测量墙时间,您可以设置推理的开始和结束时间。在进行基准测试之前,您还应该关闭CPU缩放比例。 get_inference_time()返回推断时间,以毫秒为单位。