1. 程式人生 > >利用caffe訓練好的模型測試自己的手寫字型圖片

利用caffe訓練好的模型測試自己的手寫字型圖片

轉載地址: http://blog.csdn.net/xunan003/article/details/73126425

一、前沿

        寫這篇博文,是因為一開始在做《21天學習caffe》第6天6.4練習題1的時候看著自己搜尋的博文,在不理解其根本的情況下做的,結果顯然是錯的。在接下來閱讀完原始碼之後,在第10天學習完caffe model zoo之後,明白了其中原理,反過來再去做那個習題,一開始在網上搜索並沒有完完整整解釋整個過程的一篇博文,而是寫的不知所云,本著我們初學者互相共享的精神,也方便自己查閱,特詳細寫一下,將自己的一張手寫體圖片送入訓練好的caffemodels中測試這個過程,博主也是在仿照參考書目的命令來逐項百度每個檔案的製作方法,最終成功。結果還是比較美好的。接下來,就讓我們一起來看看ubuntu下手寫體數字的測試情況。

 

二、具體步驟    

1、首先我們要知道要利用模型lenet_iter_10000.caffemodel測試單張手寫體數字所需要的檔案:
      1>待測試圖片(自己畫的也行,網路上下的也行);需要注意的是,不管是什麼格式,都要轉換為28*28大小的黑白灰度影象,具體轉化方法請自行百度(我是就拿windows自帶的畫圖工具轉化的)。因為

         mnist資料集都是28*28的單通道黑白灰度影象。

2>deploy.prototxt(模型描述型檔案);具體生成方法下面我們解釋。

     3>network.caffemodel(模型權值檔案);在本例中就是lenet_iter_10000.caffemodel

     4>labels.txt(標籤檔案);生成方法一會兒描述

     5>mean.binaryproto(二進位制影象均值檔案);生成方法下面描述(類似的還有Python下的均值檔案mean.pny我們這裡不做考慮,想去嘗試的可以自己嘗試)

     6>classification.bin(二進位制程式名)。與二進位制均值檔案配合使用,只是均值檔案不同的模型有不同的均值檔案,而這個bin檔案為通用的,就是任何模型都

         可以做分類使用。但是如果採用python藉口模式的測試就要自己再做一個classification分類檔案,具體方法下面解釋的時候給連結。

2、步驟1:生成待測試圖片

     具體要求在1中已有說明,這裡不做過多闡述。如還有人不懂如何做圖請自行百度。

3、步驟2:生成deploy.prototxt檔案

     要了解deploy.prototxt檔案的作用請自行百度或google,這裡我們需要知道的是,他和lenet_train_test.prototxt檔案類似,或者說對後者改動可得到前者。在熟悉生成檔案的原理及方法之後我們可以之間在原訓練prototxt網路檔案中改動。在examples/mnist目錄下複製一份lenet_train_test.prototxt修改並儲存後得到deploy.prototxt如下:

name: "LeNet"
layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param{shape:{dim:1 dim:1 dim:28 dim:28}} 
}

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
  }
}
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "conv2"
  type: "Convolution"
  bottom: "pool1"
  top: "conv2"
  convolution_param {
    num_output: 50
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
  }
}
layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv2"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool2"
  top: "ip1"
  inner_product_param {
    num_output: 500
    weight_filler {
      type: "xavier"
    }
  }
}
layer {
  name: "relu1"
  type: "ReLU"
  bottom: "ip1"
  top: "ip1"
}
layer {
  name: "ip2"
  type: "InnerProduct"
  bottom: "ip1"
  top: "ip2"
  inner_product_param {
    num_output: 10
    weight_filler {
      type: "xavier"
    }
  }
}
layer {
  name: "prob"
  type: "Softmax"
  bottom: "ip2"
  top: "prob"
}

4、步驟3:生成labels.txt標籤檔案

     在當前目錄下新建一個txt檔案,命名為synset_words.txt,裡面內容為我們訓練mnist的圖片內容,共有0~9十個數,那麼我們就建立如下內容的標籤檔案:

5、步驟4:生成mean.binaryproto二進位制均值檔案

     均值檔案分為二進位制均值檔案和python類均值檔案。因為博主還未配置python介面,故未採用python方法,這也是之前一直出錯的原因。

     生成均值檔案的兩種方法請參看博文:點選博文連結

     caffe作者為我們提供了一個計算均值的檔案compute_image_mean.cpp,放在caffe根目錄下的tools資料夾裡面,執行下面命令生成mean.binaryproto二進位制均值檔案。

  1. sudo build/tools/compute_image_mean examples/mnist/mnist_train_lmdb examples/mnist/mean.binaryproto  

     生成的mean.binaryproto均值檔案儲存在了examples/mnist目錄下。

6、步驟5:分類器classification.bin(windows下caffe為classification.exe)

       在example資料夾中有一個cpp_classification的資料夾,開啟它,有一個名為classification的cpp檔案,這就是caffe提供給我們的呼叫分類網路進行前向計算,得到分類結果的介面。就是這個檔案在命令中會得到classification.bin,具體我們可以不用管它,在其他caffemodel下不用修改也可以用,不像均值檔案,不同的模型需要不同的均值檔案。

       需要詳細瞭解classification請參看博文(或其他資料):點選博文連結

       如果是按照python介面方法做此測試,均值檔案及分類classification以及測試過程請參看博文:點選博文連結

7、步驟6:準備測試

      萬事具備,只欠東風。下面我們就在caffe根目錄下命令:

  1. ./build/examples/cpp_classification/classification.bin examples/mnist/deploy.prototxt examples/mnist/lenet_iter_10000.caffemodel examples/mnist/mean.binaryproto examples/mnist/synset_words.txt examples/images/3.jpg   
      讀者也可以根據你們自己建立的檔案的具體位置更改路徑,這個相信我不用多說。
      下面看看我們的測試結果吧!

     

三、參考博文


相關推薦

利用caffe訓練模型測試自己字型圖片

轉載地址: http://blog.csdn.net/xunan003/article/details/73126425 一、前沿         寫這篇博文,是因為一開始在做《21天學習caffe》第6天6.4練習題1的時候看著自己搜尋的博文,在不理解其根本的情況下做的

caffe訓練模型測試

# coding:utf-8 import sys import numpy as np sys.path.append('/home/hadoop/caffe/python') import caffe WEIGHTS_FILE = '/home/hadoop/桌面/eye_data3/

【python keras實戰】利用VGG卷積神經網路進行字型識別

# encoding: utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import numpy as np from keras.datasets import mnist impor

PyTorch(三)——使用訓練模型測試自己圖片

PyTorch的學習和使用(三) 在上一篇文章中實現瞭如何增加一個自定義的Loss,以Siamese network為例。現在實現使用訓練好的該網路對自己手寫的數字圖片進行測試。 首先需要對訓練時的權

利用mnist訓練集生成的caffemodel對mnist測試集與自己的數字進行測試

從一到二:利用mnist訓練集生成的caffemodel對mnist測試集與自己手寫的數字進行測試 通過從零到一的教程,我們已經得到了通過mnist訓練集生成的caffemodel,主要包含下面四個檔案:         接下來就可以利用模型進行測試了。關於測試方

TensorFlow筆記(3)——利用TensorFlow和MNIST資料集訓練一個最簡單的數字識別模型

前言 當我們開始學習程式設計的時候,第一件事往往是學習列印"Hello World"。就好比程式設計入門有Hello World,機器學習入門有MNIST。 MNIST是一個入門級的計算機視覺資料集,它包含各種手寫數字圖片: 它也包含每一張圖片對應的標籤,告訴我們這個是數字幾。比如,上

opencv-python(十三):DNN模組載入caffe訓練的SSD模型

    opencv越來越強大了,可以直接對訓練好的caffe、tensorflow等框架訓練好的模型進行載入,進而完成識別、檢測等任務。     opencv載入caffe訓練好的模型,採用readNetFromCaffe(arg1,arg2),第一個引數對應定義模型結構

TensorFlow筆記(3)——利用TensorFlow和MNIST資料集訓練一個最簡單的數字識別模型...

前言 當我們開始學習程式設計的時候,第一件事往往是學習列印"Hello World"。就好比程式設計入門有Hello World,機器學習入門有MNIST。 MNIST是一個入門級的計算機視覺資料集,它包含各種手寫數字圖片:

Tensorflow訓練卷積神經網路並儲存模型,載入模型並匯入圖片測試

        剛學習tensorflow,折騰了這幾天,之前一直按照書上的教程訓練網路,看那些沒玩沒了的不斷接近於1的準確率,甚是無聊,我一直想將辛辛苦苦訓練出來的網路,那些識別率看上去很高的網路,是否能真正用來識別外面匯入的圖片呢,而不僅僅是那些訓練集或者測試集的圖片。

如何利用caffe訓練自己資料集

這篇博文主要參考了另一位博主https://blog.csdn.net/hellohaibo,在此向他表示感謝 首先,博主今天的caffe崩了,毫無徵兆的崩了,具體表現為博主想做一個更大的資料集,但是在生成lmbd檔案時永遠生成的是一個沒有名字的資料夾,可是博主已經在指定的example目錄裡寫了

caffe訓練的lenet_iter_10000.caffemodel測試單張mnist圖片

準備一張手寫數字圖片 注意在depoy.prototxt檔案中指定正確的該圖片的通道數。 準備一個均值檔案 因為classify.py中的測試介面caffe.Classifier需要訓練圖片的均值檔案作為輸入引數,而實際lenet-5訓練時

深度學習與人臉識別系列(3)__利用caffe訓練深度學習模型

name: "VGG_FACE_16_layers" layer {   top: "data_1"   top: "label_1"   name: "data_1"   type: "Data"   data_param {     source: "/media/gk/9ec75485-26b1-471

有關Caffe訓練模型在Python介面下使用分類不準確的問題解決

之前使用caffe訓練了1k個自己的資料,有3個分類,在consol下面訓練加驗證的結果是85%左右的準確率,還是可以的. 但是問題是,當使用了Python介面,匯入caffemodel檔案和npy均值檔案後,分類結果完全慘不忍睹,全部都偏向第一分類. 經過不懈的googl

caffe學習筆記——mnist】mnist資料集訓練測試

http://blog.csdn.NET/liumaolincycle/article/details/47336921 本文主要來自Caffe作者Yangqing Jia網站給出的examples。 @article{jia2014caffe, Author = {Jia, Yangqing an

深度學習框架Caffe學習筆記(6)-測試自己數字圖片

在之前的實驗中我們使用過 $ ./build/tools/caffe.bin test \ -model examples/mnist/lenet_train_test.prototxt \ -weights examples/mnist/lenet_it

深度學習與人臉識別系列(4)__利用caffe訓練深度學習模型

name: "VGG_FACE_16_layers" layer {   top: "data_1"   top: "label_1"   name: "data_1"   type: "Data"   data_param {     source: "/media/gk/9ec75485-26b1-471

【AI實戰】訓練第一個AI模型:MNIST數字識別模型

在上篇文章中,我們已經把AI的基礎環境搭建好了(見文章:Ubuntu + conda + tensorflow + GPU + pycharm搭建AI基礎環境),接下來將基於tensorflow訓練第一個AI模型:MNIST手寫數字識別模型。 MNIST是一個經典的手寫數字資料集,來自美國國家

利用keras載入訓練的.H5檔案,並預測圖片

import matplotlib matplotlib.use('Agg') import os from keras.models import load_model import numpy as np from PIL import Image import cv2

python下進行lda主題挖掘(二)——利用gensim訓練LDA模型

到2018年3月7日為止,本系列三篇文章已寫完,可能後續有新的內容的話會繼續更新。 本篇是我的LDA主題挖掘系列的第二篇,介紹如何利用gensim包提供的方法來訓練自己處理好的語料。 gensim提供了多種方法: 速度較慢的:

利用netty自己一個tomcat

基於javaee基礎上執行的一個web容器 http  伺服器 socktet上支援 TCP/IP HTTP FTP 接受客戶端的一個http url請求,對應後臺有一個servlet netty屬於協議層,底層框架。 request  response 4.0版本 pu