本文旨在记录如何将YOLO系列模型转换IR数据格式,所有的YOLO模型最初实现框架是Darkent,而Darknet包含有两个文件:
Intel OpenVINO中并没有直接封装从darknet转换IR的脚本,需要先将Darknet转换Tensorflow,然后再有TensorFlow转换至IR。
这里我们基于https://github.com/mystic123/tensorflow-yolo-v3 (commit ed60b90)将Darknet转换至TensorFlow,步骤如下:
git clone https://github.com/mystic123/tensorflow-yolo-v3
cd tensorflow-yolo-v3
git checkout ed60b90
准备coco.names和yolov3.weights(yolov3 模型) or yolov3-tiny.weights(yolov3-tiny 模型)
运行转换脚本:
# yolov3
python3 convert_weights_pb.py --class_names coco.names --data_format NHWC --weights_file yolov3.weights
# yolov3-tiny
python3 convert_weights_pb.py --class_names coco.names --data_format NHWC --weights_file yolov3-tiny.weights --tiny
需要注意,这里默认输入图像的大小为416*416, 若需要更换需指定输入图像大小(假设指定为448)
# yolov3
python3 convert_weights_pb.py --class_names coco.names --data_format NHWC --weights_file yolov3.weights --size 448
转换过程中使用的配置文件yolo_v3.json或yolo_v3_tiny.json(取决于模型),配置文件位于/opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf
以yolo_v3.json为例,包含属性如下:
[
{
"id": "TFYOLOV3",
"match_kind": "general",
"custom_attributes": {
"classes": 80,
"anchors": [10, 13, 16, 30, 33, 23, 30, 61, 62, 45, 59, 119, 116, 90, 156, 198, 373, 326],
"coords": 4,
"num": 9,
"masks":[[6, 7, 8], [3, 4, 5], [0, 1, 2]],
"entry_points": ["detector/yolo-v3/Reshape", "detector/yolo-v3/Reshape_4", "detector/yolo-v3/Reshape_8"]
}
}
]
id 和 match_kind 是参数,此处不需要进行修改;
custom_attributes 主要存储了YOLOv3某些特殊的属性:
classses, coords, num, masks, 这些按照Darknet的.cfg配置过来就好;
anchors: 是一个非必要参数,在模型推理时不使用,主要在解析Region 层的输出;
entry_points 是一个节点名list,此处不需要修改;
生成YOLOv3 Tensorflow 模型的IR:
cd /opt/intel/openvino/deployment_tools/model_optimizer
python3 mo_tf.py
--input_model /opt/MODEL/frozen_darknet_yolov3_model.pb
--tensorflow_use_custom_operations_config extensions/front/tf/yolo_v3.json
--batch 1
生成YOLOv3-tiny Tensorflow 模型的IR:
cd /opt/intel/openvino/deployment_tools/model_optimizer
python3 mo_tf.py
--input_model /opt/MODEL/frozen_darknet_yolov3_model.pb
--tensorflow_use_custom_operations_config extensions/front/tf/yolo_v3_tiny.json
--batch 1
完,