(转)Darknet模型与Tensorflow模型相互转换

目前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。
---------------------
作者:橘子都吃不起!
来源:CSDN
原文:https://blog.csdn.net/weixin_42754237/article/details/87534092
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/zhangmingcheng/p/10874059.html

时间: 2024-08-30 15:41:02

(转)Darknet模型与Tensorflow模型相互转换的相关文章

TensorFlow模型保存和提取方法

TensorFlow模型保存和提取方法 原创 2017年06月01日 11:25:25 标签: TensorFlow / 模型保存 / 模型提取 / tf.train.Saver 7004 一.TensorFlow模型保存和提取方法 1. TensorFlow通过tf.train.Saver类实现神经网络模型的保存和提取.tf.train.Saver对象saver的save方法将TensorFlow模型保存到指定路径中,saver.save(sess,"Model/model.ckpt"

转 tensorflow模型保存 与 加载

使用tensorflow过程中,训练结束后我们需要用到模型文件.有时候,我们可能也需要用到别人训练好的模型,并在这个基础上再次训练.这时候我们需要掌握如何操作这些模型数据.看完本文,相信你一定会有收获! 1 Tensorflow模型文件 我们在checkpoint_dir目录下保存的文件结构如下: |--checkpoint_dir | |--checkpoint | |--MyModel.meta | |--MyModel.data-00000-of-00001 | |--MyModel.in

快速上手深度学习 掌握TensorFlow模型构建与开发

第1章 课程介绍介绍机器学习的背景,介绍tensorflow的背景,介绍课程python,numpy,virtualenv等前置学习内容,安装tensorflow1-1 导学1-2 课程安排1-3 深度学习背景1-4 tensorflow优势1-5 开发环境1-6 virtualenv简介1-7 python常用操作1-8 numpy常用操作011-9 numpy常用操作021-10 Mac下TensorFlow安装1-11 Windows下TensorFlow安装1-12 ubuntu下Ten

移动端目标识别(3)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之Running on mobile with TensorFlow Lite (写的很乱,回头更新一个简洁的版本)

承接移动端目标识别(2) 使用TensorFlow Lite在移动设备上运行         在本节中,我们将向您展示如何使用TensorFlow Lite获得更小的模型,并允许您利用针对移动设备优化的操作. TensorFlow Lite是TensorFlow针对移动和嵌入式设备的轻量级解决方案.它支持端上的机器学习推理,具有低延迟和小二进制模型大小. TensorFlow Lite使用了许多技术,例如允许更小和更快(定点数学)模型的量化内核. 对于本节,您需要从源代码构建TensorFlow

Tensorflow模型的 暂存 恢复 微调 保存 加载

暂存模型(*.index为参数名称,*.meta为模型图,*.data*为参数) tf.reset_default_graph() weights = tf.Variable(tf.random_normal([10, 10], stddev=0.1), name="weights") biases = tf.Variable(0, name="biases") saver = tf.train.Saver() sess = tf.Session() sess.ru

布局模型 之 层模型(position的relative、absolute与fixed区别?)

css的布局模型分为流动模型(Flow).浮动模型(Float).层模型(Layer). 浮动模型(Float)和层模型(Layer)有什么显著区别?     浮动模型(Float):浮动是让某元素脱离文档流的限制,在浮动框之前和之后的非定位元素会当它不存在一样,可能沿着它的另一侧垂直流动:浮动的元素仍然会占据文档流的物理空间.关于浮动模型的详细说明请看另一篇文章的介绍.http://ycgit.blog.51cto.com/8590215/1958452 层模型(Layer):设置为层模型的元

机器学习之判别式模型和生成式模型

判别式模型(Discriminative Model)是直接对条件概率p(y|x;θ)建模.常见的判别式模型有 线性回归模型.线性判别分析.支持向量机SVM.神经网络等. 生成式模型(Generative Model)则会对x和y的联合分布p(x,y)建模,然后通过贝叶斯公式来求得p(yi|x),然后选取使得p(yi|x)最大的yi,即: 常见的生成式模型有 隐马尔可夫模型HMM.朴素贝叶斯模型.高斯混合模型GMM.LDA.高斯.混合多项式.专家的混合物.马尔可夫的随机场 更多更详细的内容参见 

生成模型和判别模型(转)

引入 监督学习的任务就是学习一个模型(或者得到一个目标函数),应用这一模型,对给定的输入预测相应的输出.这一模型的一般形式为一个决策函数Y=f(X),或者条件概率分布P(Y|X).监督学习方法又可以分为生成方法(generative approach)和判别方法(discriminative approach).所学到的模型分别为生成模型(generative model)和判别模型(discriminative model). 决策函数和条件概率分布 决策函数Y=f(X) 决策函数Y=f(X)

生成模型和判别模型

对于输入x,类别标签Y: 判别模型:由数据直接学习决策面Y=f(x)或条件概率P(Y|x)作为预测模型 生成模型:由数据学习联合概率分布P(x,Y),然后求出条件概率P(Y|x)作为预测模型 模型区别: 判别模型寻找不同类别之间的分离面,反映不同类别之间的差异. 生成模型通过统计反映同类数据的相似度. 模型的优点和缺点: 判别模型主要缺点: 1,不能反映数据本身的特征 判别模型主要优点: 1,模型简单,容易学习. 2,分类性能好,分类边界灵活. 生成模型的主要缺点: 1,模型复杂 生成模型主要优