1、源碼下載與依賴安裝
(1)安裝git,git安裝過程可自行百度。
(2)下載一個由tensorflow搭建的訓練框架,該框架封裝了google-inceptionV4算法及其他一些圖像分類算法。下載命令如下:
git clone https://github.com/MachineLP/train_arch
2、安裝參數配置、算法安裝與demo驗證
(1)進入train_arch /train_cnn_v1目錄,命令如下:
cd train_arch/ train_cnn_v1
該目錄下除了test目錄是用於模型測試的以外,剩下的所有目錄和文件均用於模型訓練。
以下是對各個目錄及文件作用的簡要描述:
gender:存放訓練集圖片的目錄。這是一個示例訓練集,如果想訓練自己的模型,只需要新建一個自己的目錄,不同類別的圖片以不同的目錄存放。
lib:當前框架所依賴的各種核心庫目錄。
1)model: 各網絡模型模塊。
2)data_aug: 用於圖像增強,里邊包含兩種方法。
3)grad_cam: 可視化模塊。
4)data_load: 加載訓練數據模塊。
5)train: 模型訓練模塊。
6)utils: 工具模塊。
7)loss: 損失函數模塊。
8)optimizer: 優化方法模塊。
model: 訓練過程中保存模型的目錄。
pretrain: 存放遷移學習中預訓練模型的目錄。
config.py: 用於設置訓練過程中模型參數的腳本。
main.py: 啟動訓練腳本 (python main.py)
vis_cam.py:可視化腳本(python vis_cam.py)
ckpt_pb.py:用於將訓練生成的ckpt模型文件轉成tensorflow支持的pb格式的模型。
test:用於模型測試目錄,包括單張和批量圖片測試的腳本。
(2)執行訓練腳本,驗證是否能生成分類模型
在config.py中,已經配置了針對gender目錄中圖片分類的模型參數,可以直接進行模型訓練,執行:
python3 main.py
在迭代2000次之后,就可以在model目錄中看到生成的模型。
3、訓練數據制作與訓練參數配置
(1)數據集制作:
新建一個目錄,作為存放訓練集圖片的根目錄,在該目錄下,根據圖片類別數新建相同個數的目錄(至少要有兩個類別),有多少個類別,就新建多少個目錄,目錄名就是類別名。將相同類別的圖片放到對應的同一個目錄中。
(2)配置文件修改
config.py腳本中包含了google-inceptionV4在訓練時需要配置的參數。這些參數包括:
# 訓練集根目錄
sample_dir = "gender"
# 需要分類的類別數量
num_classes = 4
# 最小批訓練的大小
batch_size = 2
#
選擇使用的模型,還可以根據自己的喜好,選擇arch_multi_alexnet_v2或arch_multi_vgg16_conv
arch_model="arch_inception_v4"
# 選擇訓練的網絡層
checkpoint_exclude_scopes = "Logits_out"
# dropout的大小
dropout_prob = 0.8
# 選擇訓練樣本的比例
train_rate = 0.9
# 整個訓練集上進行多少次迭代
epoch = 2000
# 是否使用提前終止訓練
early_stop = True
EARLY_STOP_PATIENCE = 1000
# 是否使用learning_rate
learning_r_decay = True
learning_rate_base = 0.0001
decay_rate = 0.95
height, width = 299, 299
# 模型保存的路徑
train_dir = 'model'
# 是否進行fine-tune。 選擇fine-tune的的參數
fine_tune = False
# 是否訓練所有層的參數
train_all_layers = True
# 遷移學習的網絡模型參數
checkpoint_path = 'pretrain/inception_v4/inception_v4_2016_09_09.ckpt'
注意,checkpoint_path參數設置的值要跟arch_model對應,比如arch_model設置的是arch_inception_v4,那么checkpoint_path就要設置inception_v4相關的預訓練模型參數,而不能使用inception_resnet_v2相關的預訓練模型參數。
模型訓練中途停止后,如果想繼續訓練,需要修改上述的checkpoint_path,步驟是:
將model中的最新生成的模型文件移動至新建的目錄中,比如,最新生成的模型文件是model.ckpt-808.index
model.ckpt-808.data-00000-of-00001
注意,每次迭代生成的模型文件都是成對出現的,類似上面這兩個文件的命名格式。那么就將這兩個文件移動到新建的model_continue中,然后修改checkpoint_path
= 'model_continue/model.ckpt-808'
4、模型訓練與測試
(1)模型訓練:
這里使用遷移學習的方式進行訓練,所以要先下載inception_v4相關的預訓練模型參數inception_v4_2016_09_09.ckpt(即在別人預先訓練好的模型基礎上,接着訓練自己的數據集,用別人已訓練好的網絡參數作為自己網絡的初始化參數,並對其進行訓練),下載地址為:
http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz
下載完成后,將預訓練模型移動到pretrain目錄中,即進行如下操作:
tar -zxvf inception_v4_2016_09_09.tar.gz
cd pretrain
mkdir inception_v4
mv ../inception_v4_2016_09_09.ckpt inception_v4
開始訓練,命令如下:
python3 main.py
訓練過程中,會在model目錄中生成各迭代階段的模型。最終會保存最近幾次迭代生成的模型。
(2)模型格式轉換
模型訓練完成后並不能直接使用,而要將其轉成tensorflow支持的pb格式。利用ckpt_pb.py進行轉換,命令如下:
python3 ckpt_pb.py
腳本執行完成后,會在model目錄中生成frozen_model.pb,這就是轉換格式后的模型文件,文件名可在ckpt_pb.py中修改:
如果修改了模型文件名,該腳本中的以下位置的文件名也要做相應修改:
(3)模型測試
選擇一張測試圖片test.png(屬於訓練集類別中的某一種類別的圖片)進行模型測試,命令如下:
python3 predict.py -m model/frozen_model.pb test.png
其中,-m model/frozen_model.pb 是指定模型路徑,最后面是待測試的圖片路徑。
此時就可以在命令行看到模型對當前圖片的預測結果。