caffe for windows 下使用caffemodel 實現cifar10的影象分類
在上一篇的部落格中,已經訓練出來了迭代了4000次的caffemodel模型,那麼怎樣使用這個模型來應用於實際的影象分類中呢?其實也是很簡單的,因為前輩已經寫好了.cpp檔案,我們只需要生成.cpp檔案對應的.exe然後呼叫即可。還有,如果已經配置好了matcaffe,也可以使用matlab來實現影象分類。
一、c++實現影象分類
在tools資料夾下面,有classification檔案,該程式碼即實現影象分類。 可以在Solution下新建一個cuda project,匯入tools資料夾中的classification.cpp檔案,配置環境。編譯,通過之後會看到bin\資料夾下面有一個classification.exe。我們看看原始碼中,介紹怎樣使用這個可執行檔案classification的。
上面是classification.cpp檔案中main函式的前幾行程式碼,我們可以看到我們需要網路結構的deploy.prototxt檔案,需要caffemodel模型檔案,均值檔案,標籤檔案和待分類的圖片。獲取它們的路徑。將路徑作為引數即可。(本示例中全部使用的絕對路徑,當然相對路徑也是可以的,而且更簡潔方便) 新建一個.bat,輸入以下內容儲存。if (argc != 6) { std::cerr << "Usage: " << argv[0] << " deploy.prototxt network.caffemodel" << " mean.binaryproto labels.txt img.jpg" << std::endl; return 1; } caffe::GlobalInit(&argc, &argv); string model_file = argv[1]; string trained_file = argv[2]; string mean_file = argv[3]; string label_file = argv[4]; Classifier classifier(model_file, trained_file, mean_file, label_file); string file = argv[5];
從上面的.bat的內容中也可以看到,我所要進行分類的是一幅dog圖片,這裡一定要注意,因為我一次只預測一幅影象,所以batchsize應當設定為1.(應當在網路結構中修改過來)。待分類影象dog的原始大小為32*32,它的原始影象為:classification.exe H:\happynearcaffe\caffe-windows-master\caffe-windows-master\examples\cifar10\cifar10_quick.prototxt H:\happynearcaffe\caffe-windows-master\caffe-windows-master\examples\cifar10\cifar10_quick_iter_4000.caffemodel H:\happynearcaffe\caffe-windows-master\caffe-windows-master\examples\cifar10\mean.binaryproto H:\happynearcaffe\caffe-windows-master\caffe-windows-master\examples\cifar10\synset_words.txt H:\happynearcaffe\caffe-windows-master\caffe-windows-master\examples\cifar10\dog2.jpg pause
synset_words.txt是標籤檔案,告訴我們分類的cifar10的10類中每一類的具體名字是什麼。截圖如下:
然後執行classification.bat檔案,看看輸出的top5結果吧。
從上面可以看到,預測出來的結果為:75%的概率是dog,10%的概率是truck......還算精確地了。
二、matlab實現影象分類
首先將當前目錄設定在caffe-windows-master\matlab\demo下,然後新建一個classification_cifar.m檔案,加入以下程式碼:% Add caffe/matlab to you Matlab search PATH to use matcaffe
if exist('../+caffe', 'dir')
addpath('..');
else
error('Please run this demo from caffe/matlab/demo');
end
% Set caffe mode
if exist('use_gpu', 'var') && use_gpu
caffe.set_mode_gpu();
gpu_id = 0; % we will use the first gpu in this demo
caffe.set_device(gpu_id);
else
caffe.set_mode_cpu();
end
model_dir = '../../examples/cifar10/';
net_model = [model_dir 'cifar10_quick.prototxt'];
net_weights = [model_dir 'cifar10_quick_iter_4000.caffemodel'];
phase = 'test'; % run with phase test (so that dropout isn't applied)
if ~exist(net_weights, 'file')
error('Please download CaffeNet from Model Zoo before you run this demo');
end
% Initialize a network
net = caffe.Net(net_model, net_weights, phase);
if nargin < 1
% For demo purposes we will use the cat image
fprintf('using caffe/examples/images/dogs.jpg as input image\n');
im = imread('../../examples/images/dog2.jpg');
end
input_data = {prepare_image(im)};
scores = net.forward(input_data);
scores = scores{1};
scores = mean(scores, 2); % take average scores over 10 crops
[~, maxlabel] = max(scores);
% call caffe.reset_all() to reset caffe
caffe.reset_all();
其中用到了對影象預處理的prepare_image函式,所以加入以下程式碼預處理圖片:
function im_data = prepare_image(im)
d = load('./cifar10_mean.mat');
mean_data = d.image_mean;
IMAGE_DIM = 32;
im_data = im(:, :, [3, 2, 1]); % permute channels from RGB to BGR
im_data = permute(im_data, [2, 1, 3]); % flip width and height
im_data = single(im_data); % convert from uint8 to single
im_data = imresize(im_data, [IMAGE_DIM IMAGE_DIM], 'bilinear'); % resize im_data
im_data = im_data - mean_data; % subtract mean_data (already in W x H x C, BGR)
end
這裡有一個cifar10_mean.mat的均值檔案,我們在使用C++進行圖片分類的時候均值檔案從leveldb中生成的.binaryproto檔案,所以要想得到cifar10_mean.mat的均值檔案,我們需要將而知檔案轉成.mat。在caffe-windows-master\matlab\+caffe資料夾下新建一個read_mean.m檔案(本來就有的,就直接將裡面的內容註釋掉也可以),然後新新增matlab程式碼:
% Read binary proto file to mat
clear
clc
mean_file = 'H:\Gastric_DB\train_mean.binaryproto';
CHECK(ischar(mean_file), 'mean_file must be a string');
CHECK_FILE_EXIST(mean_file);
image_mean = caffe_('read_mean', mean_file);
將獲得的.mat均值檔案儲存即可。執行,classification_cifar.m檔案,得到了結果,command window下結果顯示為: 我們看到最大的概率值為0.8661,對應的標籤為6,從synset_words.txt中查詢到,第六個標籤確實為dog,分類結果是合理的。 但是有一點我們發現,c++分類的概率值與matlab分類的概率值是不一樣的,matlab稍微好於C++,在使用的網路結構prototxt,網路模型引數caffemodel和均值、預測圖片一致的情況下,出現這個問題也是正常的,不必大驚小怪,我的猜測是預測影象在預處理環節上可能是不一樣的,所以導致結果的差異。要想知道原因需要自己審讀原始碼,理解影象處理的過程。
三、PS:本篇部落格結束語
本人也是剛剛接觸深度學習,對caffe程式碼的理解程度還不夠,所以部落格基本只介紹執行示例的步驟過程,要想加深對caffe,對深度學習的認識,肯定需要理解caffe的原始碼的。 caffe在windows上執行會出現各種各樣的BUG,有時候挺折磨人的,建議在linux下使用caffe吧,苦海無涯,回頭是岸,可是我回頭也看不到岸了,所以就一直把基於windows下的caffe用下去了。以後估計還是得要轉到linux下。 caffe中國社群也已經成立了喲,大家可以到裡面查資料,說不定你遇到的問題上面已經有了答案了,附帶一下網址: 然後貌似opencv也支援讀取caffemodel檔案了,但是在正式釋出的opencv3.1中沒有這個模組,需要自己新增。把這個環境配置好,肯定是用C++童鞋的福音,深度學習在C++中的視覺化也會更方便。以後有時間會加一下這方面的內容。相關推薦
caffe for windows 下使用caffemodel 實現cifar10的影象分類
在上一篇的部落格中,已經訓練出來了迭代了4000次的caffemodel模型,那麼怎樣使用這個模型來應用於實際的影象分類中呢?其實也是很簡單的,因為前輩已經寫好了.cpp檔案,我們只需要生成.cpp檔案對應的.exe然後呼叫即可。還有,如果已經配置好了matcaffe,也可
實戰keras——用CNN實現cifar10影象分類
原文:https://blog.csdn.net/zzulp/article/details/76358694 import keras from keras.datasets import cifar10 from keras.models import Sequenti
Windows下caffe用fine-tuning訓練好的caffemodel來進行影象分類
小菜準備了幾張驗證的圖片存放路徑為caffe根目錄下的 examples/images/, 如果我們想用一個微調訓練好的caffemodel來對這張圖片進行分類,那該怎麼辦呢?下面小菜來詳細介紹一下這一任務的步驟。一般可以同兩種方式進行測試,分別是基於c++介
Nmap for windows 下命令行使用
端口掃描 nmap 從事IT方面的工作,無論是開發或運維,當測試某些系統服務端口時,總會遇到TCP或 UDP 兩種協議。眾所周知,TCP 服務端口,可以通過telnet 進行遠程測試,而UDP 端口,一般來說都會使用Nmap,無論是在linux 還是 windows環境下。在windows 下的Nma
windows下如何實現ssh免密碼登錄
-c nbsp 免密 win 實現 刪除 left ssh免密碼登錄 生成 windows下如何實現ssh免密碼登錄呢? 步驟如下: 1、設置Git的user name和email: $ git config --global user.name "XXXX" $ git
Windows下簡單使用BPG影象壓縮工具進行影象壓縮和解壓縮(附官方編解碼工具程式碼下載地址)
BPG是一種新型的圖片格式。其設計初衷在於當圖片質量或檔案size成為瓶頸時,取代JPEG。其主要特點如下: 高壓縮比。BPG在quality類似的情形下,比JPEG要小得多。相同大小的圖片,使用BMP儲存質量遠高於JPEG 瀏覽器支援:使用一個很小js解碼庫(54KB)
caffe for windows的matlab介面(三):權重和特徵圖的視覺化
模型讀取 讀取bvlc_reference_caffenet 的模型結構以及訓練好的引數,注意此處的模型結構為deploy,而非train時候的。 caffe.set_mode_cpu();%設定CPU模式 model = '../../models/b
caffe for windows的matlab介面(四):權重和特徵圖視覺化的一個例子
模型讀取 參照三,想實現一個自己影象的視覺化過程: 首先我發現自己訓練出的model沒有deploy檔案。查閱了下:“如果要把訓練好的模型拿來測試新的圖片,那必須得要一個deploy.prototxt檔案,這個檔案實際上和test.prototxt檔案差不多
Libcurl ftp Windows下使用實現下載刪除
1.下載最新版的libcurl,純淨版的,不要下載簡化版的,簡化版的,可能沒有winbuild檔案所以可能就會沒有Makefile.vc.我的是curl-7.44.0.zip,解壓,進入目錄winbuild,仔細閱讀BUILD.WINDOWS.txt這篇文件 開啟VS2
多執行緒程式設計之建立執行緒(Windows下C++實現)
執行緒概述 理解Windows核心物件 執行緒是系統核心物件之一。在學習執行緒之前,應先了解一下核心物件。核心物件是系統核心分配的一個記憶體塊,該記憶體塊描述的是一個數據結構,其成員負責維護物件的各種資訊。核心物件的資料只能由系統核心來訪問,應用程式無法在記
Windows下git實現免密登入伺服器
windows本機上: 1. ssh-keygen -t rsa -b 4096 -C “[email protected]” (上面的這個命令我也不是太理解,但是這麼是可以的,記得敲3個回車) 執行完之後(預設情況下)就會在C:\Users\T
Windows下Python+OpenCV+zbar影象識別二維碼識別編譯環境安裝
一、準備檔案 二、安裝 1、python庫的安裝 點選下載下的python-2.7.14.amd64.msi,一路next下去,安裝完成後,配置環境變數,在path裡面加入安裝的python的根目錄,例如本人安裝目錄d:\Python27。
Snmp在Windows下的實現----WinSNMP程式設計原理
3.3.2 WinSNMP接受響應訊息 還記得前面的SnmpCreateSession函式嗎?它可以說是WinSNMP非同步訊息驅動模式的一個關鍵,讓我們先來看看它的函式原型: HSNMP_SESSION SnmpCreateSession( HWND hWnd, //
caffe在Windows下配置 vs2013+cuda7.5+python2.7/python3.5/matlab
本文預設環境都是x64,本來編譯器應該選最新的vs2015(vc140),但是網上沒找到任何相關資訊,只有人說caffe和vs2015相容性不好,所以只好用vs2013(vc120). 試了一下微軟官方的caffe-windows(https://github.com/Mi
TensorFlow CNN對CIFAR10影象分類2
下載python version import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' import tensorflow as tf import numpy as np def unpickle(file):
keras CNN對CIFAR10影象分類
from keras.datasets import cifar10 from keras.utils import np_utils from keras.models import Sequential from keras.layers import Conv2D, D
pytorch + visdom 處理cifar10影象分類
執行環境 系統:win10 cpu:i7-6700HQ gpu:gtx965m python : 3.6 pytorch :0.3 資料集使用 Cifar-10 由60000張32*32的 RGB 彩色圖片構成,
TensorFlow實現用於影象分類的卷積神經網路(程式碼詳細註釋)
這裡我們採用cifar10作為我們的實驗資料庫。 首先下載TensorFlow Models庫,以便使用其中提供的CIFAR-10資料的類。 git clone https://github.com/tensorflow/models.git cd mo
詳解tensorflow訓練自己的資料集實現CNN影象分類
利用卷積神經網路訓練影象資料分為以下幾個步驟1.讀取圖片檔案2.產生用於訓練的批次3.定義訓練的模型(包括初始化引數,卷積、池化層等引數、網路)4.訓練1 讀取圖片檔案def get_files(filename): class_train = [] label_trai
基於OpenCV、隨機森林演算法實現的影象分類識別系統
開發環境jupyter notebook import cv2 import os import pickle #持久化 imp