新建data存放训练数据,test_data存放测试数据,
data,test_data目录下新建每个类别对应的文件夹,用于存放每个类别的图片,例如,分为cat,dog两类,则分别新建目录cat,dog,
/home/data/cat
/home/data/dog
/home//test_data/cat
/home//test_data/dog
训练数据,
/home//caffe/build/tools/convert_imageset –resize_height=227 –resize_width=227 –shuffle experiments/animal1/train_val/trainval/
/home/train_val/trainval/train.txt
/home/train_val/lmdb/train_lmdb45
验证数据,
/home/caffe/build/tools/convert_imageset –resize_height=227 –resize_width=227 –shuffle experiments/animal1/train_val/trainval/
/home/train_val/trainval/val.txt
/home/train_val/lmdb/val_lmdb45
下载SqueezeNet模型文件,
git clone https://github.com/DeepScale/SqueezeNet
训练,模型文件包括SqueezeNet_v1.0, SqueezeNet_v1.1,本文使用模型为 SqueezeNet_v1.1,SqueezeNet_v1.1目录下包括,
模型训练文件:
train_val.prototxt
模型测试文件:
deploy.prototxt
训练参数如学习率,梯度更新算法等:
solver.prototxt
修改train_val.prototxt文件的训练,验证数据路径,
data_param {
source: "/home/train_val/lmdb/train_lmdb"
batch_size: 32
backend: LMDB
}
data_param {
source: "/home//train_val/lmdb/val_lmdb"
batch_size: 25 #not *iter_size
backend: LMDB
}
将squeezeNetV1.1的最后一层的1000个类别改为2,由于我们采用imagenet的模型初始化当前模型,因此将最后一层的名称改为conv11,这样模型会初始化与imagenet模型相同的层,也就是修改文件train_val.prototxt,deploy.prototxt的1000为2,conv10为conv11.
将训练文件的学习率改为,
base_lr: 0.004
训练命令为,
/home/caffe/build/tools/caffe train -solver SqueezeNet/SqueezeNet_v1.1/solver.prototxt -weights SqueezeNet/SqueezeNet_v1.1/squeezenet_v1.1.caffemodel -gpu 0
加载模型,由于输入为227,将输入参数修改为227.
model_name='/home/SqueezeNet/SqueezeNet_v1.1/model/train_iter_1000.caffemodel'
deploy_prototxt='/home/SqueezeNet/SqueezeNet_v1.1/deploy.prototxt'
#load the caffe model
model = loadmodel(model_name, deploy_prototxt, 227)
def loadmodel(pretrained_model='train.caffemodel', network='deploy.prototxt', size=256):
gender_net = caffe.Classifier(network, pretrained_model,
channel_swap=(2, 1, 0),
raw_scale=255,
image_dims=(size, size))
return gender_net
这样便可以对测试图片分类.
a.训练自己的animal数据,训练数据为,猫狗分别1k图片,测试cat,dog各100张,精度为0.978723404255.一张图片处理时间为642.88ms.
b.训练imagenet图片,并测试自己的猫狗数据,cat 1117,dog 1103,精度为0.97027027027
https://github.com/songhan/SqueezeNet-Residual
imagenet精度提高2.9%,模型大小不变
https://github.com/songhan/SqueezeNet-Deep-Compression