1. 程式人生 > >深度學習tensorflow實戰筆記(5)用預訓練好的VGG-16模型提取影象特徵

深度學習tensorflow實戰筆記(5)用預訓練好的VGG-16模型提取影象特徵

     上一篇部落格介紹瞭如果使用自己訓練好的模型用於影象分類和特徵提取,但是有時候自己的資料集大小有限,所以更多的時候我們需要用VGG-16預訓練好的模型提取特徵,相關學者預訓練好的模型使用的都是公開的標準資料集,所以我們直接用預訓練的模型提取我們自己影象的特徵,可以用於對影象進行描述。

 1、首先就要下載模型結構

      首先要做的就是下載訓練好的模型結構和預訓練好的模型,結構地址是:點選開啟連結

     預訓練好的模型是VGG16.npy,這個檔案需要單獨下載,上面那個連線上有下載連線,不過一般打不開,我把網盤地址分享  出來,希望可以幫助需要的人。

  連結:https://pan.baidu.com/s/1rymDeCXiIGP-Uu7Qm3tWIQ 密碼:sp1j

     模型結構如下:


  檔案test_vgg16.py可以用於提取特徵。其中vgg16.npy是需要單獨下載的檔案。

2、使用預訓練的模型提取特徵

    開啟test_vgg16.py,做如下修改:

import numpy as np
import tensorflow as tf

import vgg16
import utils

img1 = utils.load_image("./test_data/tiger.jpeg")
img2 = utils.load_image("./test_data/puzzle.jpeg")

batch1 = img1.reshape((1, 224, 224, 3))
batch2 = img2.reshape((1, 224, 224, 3))

batch = np.concatenate((batch1, batch2), 0)

# with tf.Session(config=tf.ConfigProto(gpu_options=(tf.GPUOptions(per_process_gpu_memory_fraction=0.7)))) as sess:
with tf.device('/cpu:0'):
    with tf.Session() as sess:
        images = tf.placeholder("float", [2, 224, 224, 3])
        feed_dict = {images: batch}

        vgg = vgg16.Vgg16()
        with tf.name_scope("content_vgg"):
            vgg.build(images)

        prob = sess.run(vgg.fc7, feed_dict=feed_dict)   #需要提取哪一層特徵,就在這裡做修改,比如fc6,只需要把vgg.fc7修改為vgg.fc6
        print(prob)
       # utils.print_prob(prob[0], './synset.txt')
       # utils.print_prob(prob[1], './synset.txt')

  提取哪一層的特徵,需要把名字修改一下即可,而名字可以查vgg16.py,裡面定義了每一層的名字。

 自此,所有操作已經完畢,相對還是挺簡單的。