Inception-V3模型學(xué)習(xí)筆記

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)是一類包含卷積或相關(guān)計算且具有深度結(jié)構(gòu)的前饋網(wǎng)絡(luò)神經(jīng)(Feedforward Neural Networks),是深度學(xué)習(xí)(deep learning)的代表算法之一。

卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用的核心領(lǐng)域之一為計算機視覺,Inception模型的提出促進了CNN的發(fā)展,目前Inception模型共有4個版本,本文選用V3作為對象進行學(xué)習(xí)。


圖像識別

現(xiàn)代的圖像識別模型具有數(shù)以百萬計的參數(shù),從頭開始訓(xùn)練(Train from scratch)需要大量的樣本數(shù)據(jù)以及消耗巨大的計算資源(幾百個GPU),因此采用遷移學(xué)習(xí)的方式重訓(xùn)一個模型(Retrain a model)對于學(xué)習(xí)模型的成本較低。

ImageNet是一個巨大的可供視覺訓(xùn)練的圖片庫,利用Inception-V3作為已經(jīng)訓(xùn)練好的模型,移出網(wǎng)絡(luò)的最終分類層(Softmax),只訓(xùn)練CNN的倒數(shù)第二層——瓶頸層(Bottlenecks),這樣只需要幾千張圖片和普通CPU就能完成,而且重訓(xùn)的模型準確性也不差。

一、數(shù)據(jù)下載

網(wǎng)絡(luò)上公開下載的dataset主要是來自國外大學(xué)的一些網(wǎng)站:

牛津大學(xué)VGG - pets dataset

史坦福大學(xué)vision lab - dogs dataset

加州理工學(xué)院computational vision - birds dataset

除了下載圖片文件還需要對應(yīng)的標簽文件,如果沒有要自行整理。

二、環(huán)境準備

  1. 安裝Anaconda

打開Anaconda官網(wǎng)的下載頁,點擊下載windows版本,選擇左邊的Python3版本安裝包,如下圖所示:

選擇安裝包

下載完成后按步驟完成安裝即可,安裝完成后點擊Anaconda Navigator,成功打開下圖的界面說明安裝成功。由于總所周知的原因,建議將包管理鏡像設(shè)置為國內(nèi)源,點擊界面上方的channel,將defaults刪除,新增清華大學(xué)的源。

切換鏡像源

  1. 安裝TensorFlow

打開Anaconda Navigator主界面,點擊 Environments,按照下圖所示安裝TensorFlow。

查找安裝包

三、重訓(xùn)模型

重訓(xùn)模型需要安裝PIP包TensorFlow-Hub,在CMD執(zhí)行以下命令:
pip install tensorflow-hub

在github上打開重訓(xùn)的源碼,如何重訓(xùn)可以查看谷歌的官方教程,下面對源碼處理的過程做解讀:

1.create_module_graph

def create_module_graph(module_spec):
  height, width = hub.get_expected_image_size(module_spec)
  with tf.Graph().as_default() as graph:
    resized_input_tensor = tf.placeholder(tf.float32, [None, height, width, 3])
    m = hub.Module(module_spec)
    bottleneck_tensor = m(resized_input_tensor)
wants_quantization = any(node.op in FAKE_QUANT_OPS
                             for node in graph.as_graph_def().node)
  return graph, bottleneck_tensor, resized_input_tensor, wants_quantization

創(chuàng)建一個圖并載入hub module,參數(shù)中的module_spec為在用的圖像模型(本例中為Inception-V3)。

2.run_bottleneck_on_image

def run_bottleneck_on_image(sess, image_data, image_data_tensor,
                            decoded_image_tensor, resized_input_tensor,
                            bottleneck_tensor):
  resized_input_values = sess.run(decoded_image_tensor,
                                  {image_data_tensor: image_data})
  bottleneck_values = sess.run(bottleneck_tensor,
                               {resized_input_tensor: resized_input_values})
  bottleneck_values = np.squeeze(bottleneck_values)
  return bottleneck_values

提取圖片的特征向量到瓶頸層,返回值中的bottleneck_values為提取的瓶頸層。

3.add_final_retrain_ops

在瓶頸層后增加一個最終分類層,用于識別重訓(xùn)的新圖片。返回值中包含了建立最終分類層所需的信息。

執(zhí)行retrain.py
打開Anaconda Navigator中的Spyder運行環(huán)境,將重訓(xùn)的源碼復(fù)制到本機,修改源碼中超參數(shù)的default值:

  parser.add_argument(
      '--saved_model_dir',
      type=str,
      default='F:/models/inception_v3',
      help='Where to save the exported graph.')

--saved_model_dir:生成模型存儲的本地路徑。

  parser.add_argument(
      '--image_dir',
      type=str,
      default='F:/dogs_images',
      help='Path to folders of labeled images.'

'--image_dir:下載dataset的本地路徑。

修改完成后執(zhí)行代碼生成模型在本地,執(zhí)行所花的時間根據(jù)機器配置而定,生成的文件如下:


重訓(xùn)后的模型

四、可視化過程

訓(xùn)練完成后,在CMD中輸入以下命令:

tensorboard --logdir /tmp/retrain_logs

在瀏覽器中輸入localhost:6006以查看TensorBoard,打開界面如下:

TensorBoard

可視化過程直觀地顯示錄入重訓(xùn)過程,可以通過查看標量、圖以及直方圖理解、調(diào)試和優(yōu)化訓(xùn)練過程。

五、測試

最后搖使用得到的模型測試一下效果,在網(wǎng)上隨便下載一張重訓(xùn)對象的圖片,加上測試圖片的絕對路徑參數(shù)--image后執(zhí)行該測試源碼,所得結(jié)果如下:

測試結(jié)果

從測試結(jié)果來看,本次識別的準確率還算不錯,還可以再多測試幾次。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容