(转)Darknet模型与Tensorflow模型相互转换
目前darknet框架下的模型训练都是在C环境下训练的,难免较为晦涩,如果能将模型转换到Tensorflow环境下完成模型的训练,在将训练好的权重转为Darknet可以识别的权重部署到实际应用中。这样就可以将算法的训练和实际部署分开!
1、将Darknet框架下的.cfg与.weights 转为Tensorflow框架下的.cpkt模型
先clone这个项目,用于darknet模型转tensorflow
https://github.com/Linzmin1927/DW2TF
cd 到DW2TF目录下,然后执行
1 2 3 4 5 6 | 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中执行以下脚本,可以查看网络结构和各个权重
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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
版权声明:本文为博主原创文章,转载请附上博文链接!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构