Darknet模型与Tensorflow模型相互转换

2 篇文章 0 订阅
1 篇文章 0 订阅

       目前darknet框架下的模型训练都是在C环境下训练的,难免较为晦涩,如果能将模型转换到Tensorflow环境下完成模型的训练,在将训练好的权重转为Darknet可以识别的权重部署到实际应用中。这样就可以将算法的训练和实际部署分开!

1、将Darknet框架下的.cfg与.weights 转为Tensorflow框架下的.cpkt模型

先clone这个项目,用于darknet模型转tensorflow

https://github.com/Linzmin1927/DW2TF

cd 到DW2TF目录下,然后执行

python3 main.py \
    --cfg 'data/yolov3-tiny.cfg' \
    --weights 'data/yolov3-tiny.weights' \
    --output 'tf_file/' \
    --prefix 'yolov3-tiny/' \
    --gpu 0

可以在tf_file中查看相关生成的ckpt文件与pd文件

在python中执行以下脚本,可以查看网络结构和各个权重

import tensorflow as tf
from tensorflow.python import pywrap_tensorflow

tf.reset_default_graph()

model_dir = "tf_files"   # ckpt文件目录
ckpt = tf.train.get_checkpoint_state(model_dir)
ckpt_path = ckpt.model_checkpoint_path

# 加载图结构
reader = pywrap_tensorflow.NewCheckpointReader(ckpt_path)
param_dict = reader.get_variable_to_shape_map()
 
 # 打印图中变量
for key, val in param_dict.items():
    try:
        print(key, val)
    except:
        pass

# 加载权重数据
saver = tf.train.import_meta_graph(ckpt_path+'.meta',clear_devices=True)
graph = tf.get_default_graph()
with tf.Session( graph=graph) as sess:
    sess.run(tf.global_variables_initializer()) 
    saver.restore(sess,ckpt_path) 

#启动TensorBoard
summaryWriter = tf.summary.FileWriter('log/', tf.get_default_graph())

# 查看第一个卷积层的卷积权重
key = 'yolov3-tiny/convolutional1/kernel'
w = reader.get_tensor(key)
print(type(w))
print(w.shape)
print(w)

可以看到网络第一层卷积层卷积权重打印出来

然后在根目录下打开cmd 输入 tensorboard --logdir log/ 启动tensorboard服务,在浏览器中输入http://localhost:6006/ 可以查看当前网络结构

2、darknet 与 tensorflow 权重数据解析与转换

如果需要将Tensorflow的权重数据转为Darknet的权重,需要进一步解析两个框架下权重保存的数据格式。

分别打开 yolov3.weights文件和yolov3-tiny.ckpt.data-00000-of-00001文件。

yolov3.weights文件(Darknet)

yolov3-tiny.ckpt.data-00000-of-00001文件(Tensorflow)

可以看到权重值是一样的,yolov3.weights文件中还包含了权重版本信息和迭代训练次数!所以只要Tensorflow网络结构和Darknet一致,就能很方便手动将Tensorflow权重转存为Darknet。

具体如下:

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子都吃不起!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值