1. 程式人生 > >依照ILSVRC2012在matconvnet-1.0-beta23 中用imagenet訓練的情況,訓練自己的資料

依照ILSVRC2012在matconvnet-1.0-beta23 中用imagenet訓練的情況,訓練自己的資料

   在此,先要說一下,我只弄懂了怎麼用自己的資料訓練。但如何在訓練好的模型上再繼續用自己的資料訓練,我還沒弄懂所以,今天主要記錄一下怎麼來將自己的資料弄成imagenet接受的形式。
    下圖是我的matconvnet-1.0-beta23,裡面有個data資料夾,沒有就自己建立一個data.

這裡寫圖片描述
依照下圖,在data資料夾中建立兩個資料夾:ILSVRC2012和imagenet12-alexnet-bnorm-simplenn 。
這裡寫圖片描述

我們先來看第一個ILSVRC2012資料夾,在此資料夾下載建立如下圖所示的ILSVRC2012_devkit_t12和images兩個資料夾。

這裡寫圖片描述

這回,我們先來看看images資料夾,先看下圖,在images 資料夾下再建立兩個檔案:train和val(可以看成就是測試資料test),可以看出,這裡就是我們要放自己的圖片資料的地方啦 。
這裡寫圖片描述
我的訓練資料分為3類,所以在train中,我建立了三個資料夾,n01, n02,n03,每個資料夾中分別放置類1,類2,類3的訓練圖片。其中,圖片大小四256*256*3,格式為.JPEG。關於圖片的命名,我的是如下圖。前面是n0*_ ,代表類別,後面是0000…N是該圖片在第* 類訓練資料中的編號。關於為什麼這麼多0,要不要非得按照我的命明方式來,我建議還是按著來吧,畢竟我也是按照原有的ILSVRC2012資料套用的,沒嘗試其它命名方式行不行,反正我弄得這個可以跑通。我的訓練資料有1134張,分為3類,每類378張圖片。對於n01中,包含378張圖片,所以我的圖片名是從n01_00000001.JPEG 到 n01_00000378.JPEG;對於n02資料夾,也包含378張圖片,所以我的圖片名是從n02_00000001.JPEG 到 n02_00000378.JPEG;同理,n03資料夾中也包含378張圖片,所以我的圖片名是從n03_00000001.JPEG 到 n03_00000378.JPEG。
這裡寫圖片描述


這裡寫圖片描述
這裡寫圖片描述
接下來是val資料夾中的測試資料。測試圖片直接儲存在val資料夾下,如下圖,圖片大小和格式與訓練資料相同,命名為ILSVRC2012_val_000…N.JPEG,其中N是該圖片在測試資料集中的編號。比如我自己的資料有756張測試圖片,所以我的val中的圖片命名是從ILSVRC2012_val_00000001.JPEG到ILSVRC2012_val_00000756.JPEG,按順序儲存著252張類1,252張類2,252張類3測試圖片。
這裡寫圖片描述

現在images資料夾下資料弄好了,我們來看ILSVRC2012下另一個資料夾:ILSVRC2012_devkit_t12。首先在ILSVRC2012_devkit_t12資料夾下建立一個名為data的資料夾,然後將images/val中測試圖片按順序對應的類標寫在名為ILSVRC2012_validation_ground_truth的.txt檔案中如下圖。比如我前面說到我有756張測試圖片,且分為3類,每類就有252張圖,並且在val中圖片ILSVRC2012_val_00000001.JPEG到ILSVRC2012_val_0000000252.JPEG都是類1的圖片,圖片ILSVRC2012_val_00000253.JPEG到ILSVRC2012_val_00000504.JPEG都是類2的圖片,圖片ILSVRC2012_val_00000505.JPEG到ILSVRC2012_val_00000756.JPEG都是類3的圖片,那麼在我的.txt檔案中,會有252個1,252個2和252個3。

這裡寫圖片描述
省略號
這裡寫圖片描述
省略號
這裡寫圖片描述

到此,我們的ILSVRC2012資料夾就準備好了,還差imagenet12-alexnet-bnorm-simplenn資料夾中的內容。下圖可看到imagenet12-alexnet-bnorm-simplenn資料夾中包含兩個.mat檔案。先說第一個imdb.mat 。imdb.mat 下包含一個名為images的 struct,一個名為classes的struct,和一個名為imageDir的char。
這裡寫圖片描述

這裡寫圖片描述

(1)名為images的 struct下包含images.id (double),images.name(cell),images.set(double)和images.label(double)。
這裡寫圖片描述

在此,為了說清楚,我來拿我自己的資料舉例子。我的訓練資料1134張,分為3類,每類也就是378張圖片。我的測試資料756張,同樣分為3類,每類252張。訓練加測試一共是1890張圖片。
(1.1)images.id 是一個1*1890的double,其中按順序儲存著1到1890數字。(幹嘛用的我也不知道)

(1.2)images.name 是一個1*1890的cell。每一列儲存的是圖片的地址名,是從train和val檔案開始的。比如:前1134個為 train/n01/n01_00000001.JPEG …train/n01/n01_00000378.JPEG…train/n02/n02_00000001.JPEG…train/n01/n01_00000378.JPEG…train/n03/n03_00000001.JPEG…train/n03/n03_00000378.JPEG; 同理,接在後面的是測試的,就是val/ILSVRC2012_val_00000001.JPEG到 val/ILSVRC2012_val_00000756.JPEG 。
這裡寫圖片描述

這裡寫圖片描述
(1.3)images.set是1*1890的double,其由數字1和2組成,訓練資料集中有多少個圖片,就有多少個1,測試集中有多少個圖片,就有多少個2。在我的資料中,有1134個1和756個2。

(1.4)image.label是1*1890的double,儲存的是資料夾n01,n02,n03和val中圖片對應的類標。比如,我訓練資料分為3類,每類圖片數都是378;測試資料有756個,也分為3類,1—252是類1,253—504是類2,505—756是類3。那麼在我的image.label中先是378個1,再是378個2,接著378個3,接著252個1,252個2,252個3。

(2)imdb.mat中classes(cell)包含兩個cell,classes.name(cell)和classes.description(cell):
這裡寫圖片描述
(2.1)classes.name是1*M的,其中M是你訓練資料的類數。比如我有3個資料夾在train資料夾下,那我的classes.name如下圖。
這裡寫圖片描述

(2.2)classes.description也是1*M的,M是類數。裡面就是描述你每個類的特徵的。比如我的圖片是表現心情的圖片,分為happy ,sad ,neural 三類。
這裡寫圖片描述

(3)imdb.mat下最後一個包含的是imageDir,裡面是你存圖片的地址。比如我們把我們的train和val圖片存在了ILSVRC2012/images中, 我們的imageDir為 :home/your_name/data/ILSVRC2012/images .

接下來說imagenet12-alexnet-bnorm-simplenn資料夾中的另一個.mat檔案:imageStats.mat,如下圖:它包含內容如下:
這裡寫圖片描述

這三個引數是根據你自己的資料生成的,這裡我將生成自己的imageStats.mat的程式碼貼出來,讀者自己改一下:建立個名為makeImageStats的函式,放在matcovnet下的examples/imagenet下,執行一下makeImageStats.m,生成自己的imagsStats.mat:
這裡寫圖片描述

function [ output_args ] = makeImageStats( input_args )
%用來處理EEG資料,生成imagsStats.mat
load E:\matlabCode\EEG_上交\data_augmentation\35頻帶不加噪音\imdb.mat     %你自己的資料的imdb.mat的地址
train = find(images.set == 1) ;
  images = fullfile(imageDir, images.name(train(1:100:end))) ;
%   [averageImage, rgbMean, rgbCovariance] = getImageStats(images, ...
%                                                     'imageSize', [256 256], ...
%                                                     'numThreads', opts.numFetchThreads, ...
%                                                     'gpus', opts.train.gpus) ;
     [averageImage, rgbMean, rgbCovariance] = getImageStats(images, ...
                                                    'imageSize', [256 256], ...  %[256 256]
                                                    'numThreads', 12) ;
  save('E:\matlabCode\imageStats', 'averageImage', 'rgbMean', 'rgbCovariance') ; %生成的imageStats的存放地址



end

按照上面說的,將自己資料對應如下圖的幾樣東東弄好,放入matcovnet的data資料夾下。
這裡寫圖片描述

最後,執行examples/imagenet下的cnn_imagenet.m
這裡寫圖片描述
訓練模型開始,最終生成的模型存在imagenet12-alexnet-bnorm-simplenn中。
這裡寫圖片描述

記錄:
模型訓練epoch在cnn_imagnet_init.m中設定
這裡寫圖片描述

相關推薦

依照ILSVRC2012在matconvnet-1.0-beta23 中用imagenet訓練情況訓練自己資料

在此,先要說一下,我只弄懂了怎麼用自己的資料訓練。但如何在訓練好的模型上再繼續用自己的資料訓練,我還沒弄懂所以,今天主要記錄一下怎麼來將自己的資料弄成imagenet接受的形式。 下圖是我的matconvnet-1.0-beta23,裡面有個dat

PDMan-2.1.0 正式釋出:用心開源免費的國產資料庫建模工具

   Hi,久違了,冬至數九寒冬,安靜了近三個月的PDMan,在這個寒冷的聖誕冬日裡,終於熱氣騰騰的冒起來了,可以拿出來給大家見面了。 希望可以溫暖到大家,就像 @紅薯 照亮大家一樣。 在工作任務那麼緊急的情況下,我們依然堅持抽出一些時間,犧牲業餘時間,不斷

0.1+0.2=?在前端裏告訴你:≠0.3 !

1.2 ges 一道 插件 小學 需求 教材 編寫 問題 今天,我來算一道"小學"數學題:0.1+0.2=? 按正常的數學邏輯來計算的話,0.1+0.2當然=0.3啦!但是,咱們也都不是什麽小孩子了,都走上了各行各業,那麽前端程序員要告訴你一個事!0.

tensorflow 1.0 學習:用別人訓練好的模型來進行圖像分類

ima ppi gin 什麽 dir targe spl flow blog 谷歌在大型圖像數據庫ImageNet上訓練好了一個Inception-v3模型,這個模型我們可以直接用來進來圖像分類。 下載地址:https://storage.googleapis.com/d

vue.js 1.0中用v-for遍歷出的li中的@click事件在移動端無效

play 需要 data class import child exp ons rec 在vue.js使用v-for遍歷出的li中的@click事件在移動端無效,在網頁端可以執行,代碼如下 <template> <div class="rating-

tensorflow 1.0 學習:用Google訓練好的模型來進行影象分類

谷歌在大型影象資料庫ImageNet上訓練好了一個Inception-v3模型,這個模型我們可以直接用來進來影象分類。下載地址:github:https://github.com/taey16/tf/tree/master/imagenet下載完解壓後,得到幾個檔案:其中的c

tensorflow 1.0 學習:用別人訓練好的模型來進行影象分類

谷歌在大型影象資料庫ImageNet上訓練好了一個Inception-v3模型,這個模型我們可以直接用來進來影象分類。 下載完解壓後,得到幾個檔案: 其中的classify_image_graph_def.pb 檔案就是訓練好的Inception-v3模型。 imagenet_synset_to_h

Bean Query 第一個版本號(1.0.0)已公布

tid artifact con blog sdn tail ont tails map BeanQuery 是一個把對象轉換為Map的Java工具庫。支持選擇Bean中的一些屬性。對結果進行排序和依照條件查詢。不只能夠作用於頂層對象,也能夠作用於子對象。很多其它具體

購物系統1.0

enc break 存在 efault close def art default while #!/usr/bin/python #-*- coding:utf-8 -*- import sys #讀取商品列表 goods_list = open(‘商品列表.txt‘

Oracle 12.1.0.2 對JSON的支持

使用 lin 1.5 text lob mysq 索引 acl var Oracle 12.1.0.2版本有一個新功能就是可以存儲、查詢、索引JSON數據格式,而且也實現了使用SQL語句來解析JSON,非常方便。JSON數據在數據庫中以VARCHAR2, CLOB或者BLO

HTTP/1.0+ "keep-alive" 連接

通過 保持 就會 無法 首部 報文 response line -a 一、keep-alive 連接 (1) 我們在使用串行連接的時候,比如加載四張圖片,當加載第一張圖片時,會建立連接,加載完後會關閉連接,加載第二張圖片時同樣會先建立連接再關閉連接,以此類推,這樣就會消耗

1+1=0.5的姿勢困局!誰讓美麗蘑菇的合並泛起泡沫

人民網 互聯網 淘寶 觀察者 探路者 自從2016年1月,美麗說、蘑菇街正式合並以來,裁員風聲就沒斷過。但這並不重要。重要的是,較之其他如滴滴快的、新美大之類的同領域執牛耳者的合並,不再火並。合並後的美麗說、蘑菇街只能用慘淡來形容。從合並前2015年兩家交易額合計近200億元,到2016年

ubuntu14.04 + GTX980ti + cuda 8.0 ---Opencv3.1.0配置

install release err idt rim cut fix module b- 狂踩坑,腦袋疼。 流程: 1.逛網下載opencv source Opencv3.1.0 zip 2.unzip解壓 3.安裝一堆先決必要的環境: sudo apt-get i

debian下 Hadoop 1.0.4 集群配置及運行WordCount

速度 虛擬 裏的 否則 ado 修改 安裝包 name 節點 說明:我用的是壓縮包安裝,不是安裝包 官網安裝說明:http://hadoop.apache.org/docs/r1.1.2/cluster_setup.html,繁冗,看的眼花...大部分人應該都不是按照這個來

基於 Web 的 Go 語言 IDE - Wide 1.1.0 公布!

tab targe wide 我們 編輯 gist rtc 編譯 all 公布 1.1.0這個版本號改進了非常多細節,已經全然能夠用於正式項目的開發同一時候我們上線了 Wide 在線服務到眼下,我們提供了 Wide 和 Solo 兩個在線服務,詳情請看這裏。Wide 是什

fsockopen與HTTP 1.1/HTTP 1.0

fwrite 詳細 odi com 詳細介紹 區別 connect func 阻塞 在前面的例子中,HTTP請求信息頭有些指定了 HTTP 1.1,有些指定了 HTTP/1.0,有些又沒有指定,那麽他們之間有什麽區別呢? 關於HTTP 1.1與HTTP 1.0的一些基本情況

tensorflow 1.0 學習:參數初始化(initializer)

正交矩陣 算子 smi esc one tor pytho ops ride CNN中最重要的就是參數了,包括W,b。 我們訓練CNN的最終目的就是得到最好的參數,使得目標函數取得最小值。參數的初始化也同樣重要,因此微調受到很多人的重視,那麽tf提供了哪些初始化參數的方法呢

tensorflow 1.0 學習:模型的保存與恢復(Saver)

clas truncated 中間變量 lac tdd mini b- oat utf-8 將訓練好的模型參數保存起來,以便以後進行驗證或測試,這是我們經常要做的事情。tf裏面提供模型保存的是tf.train.Saver()模塊。 模型保存,先要創建一個Saver對象:如

速Geometric.Stackup.2.1.0.15228公差分析

速Geometric.Stackup.2.1.0.15228公差分析 使用 Geometric.Stackup.2.1.0.15228 的好處有:集成的CAD平臺;多格式CAD文件支持;自動尺寸標註捕捉;交互式尺寸環;連續選擇功能。 Geometric.Stackup.2.1.0.15228可

關於PHP浮點數之 intval((0.1+0.7)*10) 為什麽是7

不能 col 判斷 不同 運行 sym 舉例 數位 右移 PHP是一種弱類型語言, 這樣的特性, 必然要求有無縫透明的隱式類型轉換, PHP內部使用zval來保存任意類型的數值, zval的結構如下(5.2為例): struct _zval_struct { /*