darknet框架下基於cifar數據集的圖像分類模型訓練

 

目錄

安裝darknet

數據集下載

生成訓練樣本list

製作數據配置文件

製作網絡配置文件

訓練模型

從checkpoint開始訓練

模型驗證

遇到的問題


本教程教你在darknet框架下訓練一個分類器,使用cifar-10數據集。

安裝darknet

如果還沒安裝darknet,請先安裝,使用以下命令:

git clone https://github.com/pjreddie/darknet
cd darknet
make

數據集下載

 

使用以下命令下載數據集:

wget http://pjreddie.com/media/files/cifar.tgz
tar xzf cifar.tgz

數據集解壓後如下圖所示,將數據放到data文件夾下。

Labels.txt爲標籤名,一行一類;

train和test文件夾下都是類別標籤名爲文件名的樣本數據。

生成訓練樣本list

進入到path->cifar根目錄下,使用以下命令生成train和test的訓練所需的list文件。

cd cifar
find `pwd`/train -name \*.png > train.list
find `pwd`/test -name \*.png > test.list

如果你是jpg格式的則使用以下命令:

find `pwd`/train -name \*.png > train.list
find `pwd`/test -name \*.png > test.list

在使用以下命令進入到darknet框架的根目錄;

cd ../..

製作數據配置文件

在cfg/目錄下創建一個名爲cifar.data的文件,文件內容如下:

classes=10//類別數目
train  = data/cifar/train.list///訓練數據路徑
valid  = data/cifar/test.list///測試數據路徑
labels = data/cifar/labels.txt///訓練標籤文件路徑
backup = backup/   ///模型保存路徑
top=2 //輸出排名前2類的準確率

製作網絡配置文件

我們需要一個網絡來訓練,在cfg/文件夾下創建一個名爲cifar_small.cfg的文件夾,cifar_small.cfg文件如下:

[net]
batch=128
subdivisions=1
height=28
width=28
channels=3
max_crop=32
min_crop=32

hue=.1
saturation=.75
exposure=.75

learning_rate=0.1
policy=poly
power=4
max_batches = 5000
momentum=0.9
decay=0.0005

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=16
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=32
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=1
stride=1
pad=1
activation=leaky

[convolutional]
filters=10
size=1
stride=1
pad=1
activation=leaky

[avgpool]

[softmax]

這是一個很小的網絡,因此他的性能不一定很好,但這是一個很好的例子。網絡僅僅只有4個卷積層和兩個池化層。

最後的卷積層有10個filter,因爲我們要分10類,輸出的大小爲7*7*10,我們總共需要十個預測,因此我們使用一個平均池化層來平均圖像的每一個通道,最後會給出10個預測,我們使用softmax激活函數使預測結果轉化爲一個概率分佈。

訓練模型

使用以下命令進行訓練(基於cifar網絡):

./darknet classifier train cfg/cifar.data cfg/cifar_small.cfg

使用cifar.data文件的數據配置以及cifar_small.cfg文件的網絡配置來訓練一個分類器。即使這是一個很小的網絡,在CPU上訓練也將花很長的時間,因此我們推薦使用GPU訓練。

基於darknet19網絡訓練命令:

./darknet classifier train cfg/cifar.data cfg/darknet19.cfg

從checkpoint開始訓練

如果你停止訓練,你仍然可以通過模型訓練的其中一個checkpoint重新開始。

./darknet classifier train cfg/cifar.data cfg/cifar_small.cfg backup/cifar_N.weights

模型驗證

我們可以使用保存的模型文件來驗證其可靠性,使用final weight file或者任何一個保存的迭代文件。

./darknet classifier valid cfg/cifar.data cfg/cifar_small.cfg backup/cifar_small.backup

遇到的問題

在基於分類模型的訓練中,使用預訓練模型的命令不知道是什麼,試了幾次都失敗,還沒開始訓練就直接結束了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章