Yolov3模型转tensorflow模型并压缩

Yolov3模型转tensorflow模型并压缩
使用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

下载最新的TensorFlow库
git clone https://github.com/tensorflow/tensorflow.git

编译压缩模块
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  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压缩来的,所以压缩模型的输出框也会有偏移,如果结果有偏移,可以使用乘以相应的系数来处理
quantize_weights strip_unused_nodes这个是项目中b_ocr/location_detector_opencv_dnn_detect.py文件对偏移做的处理,分别乘以2.4605749、2.4651933、2.4610288、2.4612722
xmin = pred[:, 0] * 2.4605749  # *2.47596
xmax = pred[:, 2] * 2.4651933  # *2.43272
ymin = pred[:, 1] * 2.4610288  # *2.45355
ymax = pred[:, 3] * 2.4612722  # *2.45412
scores = pred[:, 4]

 

你可能感兴趣的:(深度学习)