(轉)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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM