目前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
版权声明:本文为博主原创文章,转载请附上博文链接!

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

  1. (原)linux下caffe模型转tensorflow模型

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7419352.html 参考网址: https://github.com/ethereon/caffe- ...

  2. 一份快速完整的Tensorflow模型保存和恢复教程(译)(转载)

    该文章转自https://blog.csdn.net/sinat_34474705/article/details/78995196 我在进行图像识别使用ckpt文件预测的时候,这个文章给我提供了极大 ...

  3. 重新想象 Windows 8 Store Apps (44) - 多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换

    [源码下载] 重新想象 Windows 8 Store Apps (44) - 多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换 作者:webabcd 介绍 ...

  4. [翻译] Tensorflow模型的保存与恢复

    翻译自:http://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/ ...

  5. Tensorflow模型的格式

    转载:https://cloud.tencent.com/developer/article/1009979 tensorflow模型的格式通常支持多种,主要有CheckPoint(*.ckpt).G ...

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

    承接移动端目标识别(2) 使用TensorFlow Lite在移动设备上运行         在本节中,我们将向您展示如何使用TensorFlow Lite获得更小的模型,并允许您利用针对移动设备优化 ...

  7. 移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介

    平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有 caffe2,腾讯ncnn,tensorflow,因为工作用tensorflow比较多 ...

  8. 移动端目标识别(2)——使用TENSORFLOW LITE将TENSORFLOW模型部署到移动端(SSD)之TF Lite Developer Guide

    TF Lite开发人员指南 目录: 1 选择一个模型 使用一个预训练模型 使用自己的数据集重新训练inception-V3,MovileNet 训练自己的模型 2 转换模型格式 转换tf.GraphD ...

  9. 搭建 MobileNet-SSD 开发环境并使用 VOC 数据集训练 TensorFlow 模型

    原文地址:搭建 MobileNet-SSD 开发环境并使用 VOC 数据集训练 TensorFlow 模型 0x00 环境 OS: Ubuntu 1810 x64 Anaconda: 4.6.12 P ...

随机推荐

  1. ASP.NET Core 2.2 项目升级至 3.0 备忘录

    将 ASP.NET Core 2.2 迁移至 ASP.NET Core 3.0 需要注意的地方记录在这篇随笔中. TargetFramework 改为 netcoreapp3.0 <Target ...

  2. Linux系统运维相关的面试题 (问答题)

    这里给大家整理了一些Linux系统运维相关的面试题,有些问题没有标准答案,希望要去参加Linux运维面试的朋友,可以先思考下这些问题.   一.Linux操作系统知识 1.常见的Linux发行版本都有 ...

  3. Locust 教程

    写在 Locust 教程开始的前面 本文参考了: Locust 教程 : https://www.axihe.com/tools/locust/home.html : locust 的官方 Githu ...

  4. IDEA实用教程(九)—— 创建Servlet

    4. 创建Servlet 1) 第一步 2) 第二步 3) 第三步 4) 第四步 由于新创建的Web项目, 没有Tomcat环境, 所以创建的Servlet会发生导包错误,如下图所示 : 因此我们需要 ...

  5. vetur 和 npm run lint 格式化不一致

    vetur 的 template(html) 默认使用的格式化插件是 prettyhtml,虽然可以选 prettier,和 npm run lint 的格式化保持一致,但是有时候会影响到 scrip ...

  6. 「NOI2012」迷失游乐园

    「NOI2012」迷失游乐园 题目描述 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩. 进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该 ...

  7. *.Net框架 - IGrouping类 & Lookup类

    Dictionary<TKey, TValue>只为每个键支持一个值.新类Lookup<TKey, TElement>是.NET 3.5中新增的,它类似于Dictionary& ...

  8. 区别和认识.net四个判等方法

    概要 本方介绍.net如何判断两个对象是否相等 .Net有四个判等函数 1)Object.ReferenceEquals 2)Object.Equals 3)对象实例的Equals 4)==操作符 这 ...

  9. navcat导入mysql.sql出现:2006, 'MySQL server has gone away'

    navcat导入mysql.sql出现:2006, 'MySQL server has gone away' OperationalError (2006, ‘MySQL server has gon ...

  10. 学习Spring-Data-Jpa(一)---JPA、Spring-Data-Jpa简介

    写在前面:在国内使用比较多的ORM框架应该就是Mybatis了,但是现在SpringBoot和SpringCloud这么火爆,而Spring-Data-Jpa同样作为Spring家族的成员,它们无缝的 ...