網絡上大部分整理的博文都是關於YOLO以及YOLOv2的finetune過程,但由於實際的業務數據的要求,需要得到與之匹配的預訓練模型,本文將使用YOLO的網絡進行預訓練,得到適合自己的分類器。
文章參考鏈接地址:https://pjreddie.com/darknet/train-cifar/
1、 下載darknet,並進行編譯
git clone https://github.com/pjreddie/darknet
cd darknet
make
2、獲取數據
我使用的是Mnist數據集,由於Mnist數據集是二進制格式的,所以需要先將其轉化爲.jpg格式的圖片,同時將其中的標籤數據提取出來。具體提取後的適配於Darknet訓練的格式如下:
其中test存放測試圖片,train存放訓練圖片,labels存放類別種類。labels中的格式如下:
0
1
2
3
4
5
6
7
8
9
注意:train文件夾中的每張圖片的名字,需要包含label中的標籤,比如有張圖片屬於類別”0”,則這張圖片名字可以命名爲“0_XXXXX”,其中XXXXX 爲任意字符,但不能包含標籤中其他類別的字符,否則程序就會當作該圖片屬於多個類。
將lables.txt改爲lables.list,然後還需要train.list文件,這個文件裏列出了train文件夾裏所有的圖片,每一行爲一張圖片的絕對路徑。
/home/yrs/darknet/data/train/0_asdgaega.jpg
/home/yrs/darknet/data/train/1_asdgbyel.jpg
3、修改數據配置文件
進入darknet/cfg文件夾,修改imagenet1k.data文件,並保存爲mnist.data:
classes=10 //類別數
train = data/train.list //訓練集列表路徑
valid = data/valid.list //驗證集列表路徑
backup = /home/yrs/backup/ //用來保存訓練結果的路徑
labels = data/labels.list //標籤路徑
names = data/shortnames.list //訓練階段不使用
top=5 //top5準確率
4、修改網絡配置文件
還是上一步的文件夾,打開darknet19.cfg,這裏列出了主要需要修改的項,並保存爲mnist.cfg
[net]
batch=128
subdivisions=1
height=56
width=56
max_crop=512
channels=3
momentum=0.9
decay=0.0005
learning_rate=0.001
policy=poly
power=4
max_batches=10000
angle=7
hue = .1
saturation=.75
exposure=.75
aspect=.75
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
......
......
[convolutional]
filters=10 //一定要修改,否則會出錯
size=1
stride=1
pad=1
activation=linear
[avgpool]
[softmax]
groups=1
[cost]
type=sse
5、訓練模型
進入darknet根目錄
./darknet classifier train cfg/mnist.data cfg/mnist.cfg
接下來就看到訓練過程啦~