SqueezeNet猫狗识别

caffe训练数据准备

新建data存放训练数据,test_data存放测试数据,

data,test_data目录下新建每个类别对应的文件夹,用于存放每个类别的图片,例如,分为cat,dog两类,则分别新建目录cat,dog,

/home/data/cat
/home/data/dog

/home//test_data/cat
/home//test_data/dog

数据转换为caffe训练数据格式

训练数据,

/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

residual squeezeNet

https://github.com/songhan/SqueezeNet-Residual

imagenet精度提高2.9%,模型大小不变

squeezeNet模型压缩

https://github.com/songhan/SqueezeNet-Deep-Compression

你可能感兴趣的:(深度学习,图像处理)