当前位置:   article > 正文

将Yolov3模型转化为tensorflow模型进行压缩,推理速度提高近6倍_yolo模型压缩加速

yolo模型压缩加速

发表时间:2020-04-18

1、使用 tensorflow-yolo-v3 中的convert_weights_pb.py转tensorflow模型

转换命令:

python convert_weights_pb.py --class_names /home/***/text.names --weights_file /home/***/yolov3.weights --data_format NHWC --output_graph /home/***/tensorflow-yolo-v3_convert/output_yolo.pb

2、下载最新的TensorFlow库

git clone https://github.com/tensorflow/tensorflow.git

 

3、编译压缩模块

cd tensorflow

bazel build tensorflow/tools/graph_transforms:transform_graph

 

压缩命令

bazel-bin/tensorflow/tools/graph_transforms/transform_graph --in_graph=/home/***/tensorflow-yolo-v3/output_yolo.pb --out_graph=/home/***/tensorflow-yolo-v3/yolov3_optimized_frozen_inference_graph.pb  --inputs="inputs"  --outputs="output_boxes" --transforms='fold_old_batch_norms quantize_weights strip_unused_nodes sort_by_execution_order merge_duplicate_nodes'

 

其中in_graph是使用tensorflow-yolo-v3中的convert_weights_pb.py转换之后的模型路径,out_graph是输出路径

注意:使用 tensorflow-yolo-v3 转换以后的pb模型,最终输出的xmin、ymin、xmax、ymax,可能由于网络结构的原因,可能最终的输出的框会有偏移和缩放,由于压缩以后的模型yolov3_optimized_frozen_inference_graph.pb是output_yolo.pb压缩来的,所以压缩模型的输出框也会有偏移,如果结果有偏移,可以使用乘以相应的系数来处理

对偏移做的处理时,分别乘以2.4605749、2.4651933、2.4610288、2.4612722

  1. xmin = pred[:, 0] * 2.4605749 # *2.47596
  2. xmax = pred[:, 2] * 2.4651933 # *2.43272
  3. ymin = pred[:, 1] * 2.4610288 # *2.45355
  4. ymax = pred[:, 3] * 2.4612722 # *2.45412
  5. scores = pred[:, 4]

压缩以后的yolo模型推理速度能提升6倍左右,推理精度和准确率下降1%左右

这个是导入压缩以后pb模型,以及相应推理的代码

  1. def load_detection_model(model):
  2. config = tf.ConfigProto()
  3. config.gpu_options.allow_growth = True
  4. detection_graph = tf.Graph()
  5. with detection_graph.as_default():
  6. od_graph_def = tf.GraphDef()
  7. with tf.gfile.GFile(model, 'rb') as fid:
  8. serialized_graph = fid.read()
  9. od_graph_def.ParseFromString(serialized_graph)
  10. tf.import_graph_def(od_graph_def, name='')
  11. image_tensor = tf.get_default_graph().get_tensor_by_name('inputs:0')
  12. boxes_tensor = tf.get_default_graph().get_tensor_by_name('output_boxes:0')
  13. sessd=tf.Session(config=config,graph=detection_graph)
  14. print('Loaded detection model from file "%s"' % model)
  15. return sessd,image_tensor,boxes_tensor
  16. def detection(image,sess,image_tensor,boxes_tensor):
  17. output_dict = sess.run(boxes_tensor,feed_dict={image_tensor: image})
  18. return output_dict
  19. inputimage = cv2.resize(img, (416, 416))
  20. input = np.expand_dims(inputimage, 0)
  21. outputdic = detection(input, sessd, image_tensor, boxes_tensor)
  22. pred = np.squeeze(outputdic)
  23. xmin = predict[:, 0] * 2.4605749 # *2.47596
  24. xmax = predict[:, 2] * 2.4651933 # *2.43272
  25. ymin = predict[:, 1] * 2.4610288 # *2.45355
  26. ymax = predict[:, 3] * 2.4612722 # *2.45412
  27. scores = predict[:, 4]
  28. indexs = np.where(predict[:, 5] > predict[:, 6])[0]
  29. scores = scores[indexs]
  30. xmin = xmin[indexs]
  31. xmax = xmax[indexs]
  32. ymin = ymin[indexs]
  33. ymax = ymax[indexs]
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/604810
推荐阅读
相关标签
  

闽ICP备14008679号