如何通过Google对USB Accelerator Coral Beta进行基准测试?

时间:2019-06-17 12:01:27

标签: tensorflow-lite google-coral

我想使用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进行基准测试?

2 个答案:

答案 0 :(得分:0)

有两个问题。首先,要获得“正确的”基准数字,您必须运行几次(而不是一次)。为什么?通常,准备运行环境会花费一些额外的时间,并且运行之间可能会有差异。其次,engine.ClassifyWithImage包含图像处理时间(缩放和裁剪输入图像)。因此,这样做的“正确方法”是(1)添加一些预热运行并多次运行,并且(2)使用ClassificationEngine而不是ClassifyWithImage。实际上,我大约在两个月前完成了此操作,并将代码放在github上,请参阅我的scripts here

答案 1 :(得分:0)

Google网站上提供的延迟时间是推断时间,不包括图像准备时间。 Python API返回推理延迟,作为here中所述结果的一部分。要测量墙时间,您可以设置推理的开始和结束时间。在进行基准测试之前,您还应该关闭CPU缩放比例。 get_inference_time()返回推断时间,以毫秒为单位。