使用ResNet的caffe实现进行图片分类

使用ResNet的caffe实现进行图片分类

 

Gemfield

A CivilNet Maintainer

背景

图片分类是深度学习在图像领域的初级应用,更高阶的应用如目标检测、图像分割等。那就从最初级的应用-图像分类做起吧。

准备数据

准备数据包括训练集和测试集。

比方说gemfield要做个224分类的应用,那么先准备好224个子目录,每个目录里放的是同一分类的照片:

gemfield@ai:/bigdata/video_annotation_web/annotation_output$ find . -type f
./0/wzry223.mp4_7670_1051_385_126_140.jpg
./0/wzry110.mp4_2740_562_293_160_148.jpg
......
./65/wzry223.mp4_7670_1021_385_126_140.jpg
./65/wzry110.mp4_2740_572_293_160_148.jpg
......
./153/wzry61.mp4_1240_561_298_182_150.jpg
./153/wzry73.mp4_3660_792_424_280_238.jpg
......
./223/wzry73.mp4_3510_830_426_252_232.jpg
./223/wzry73.mp4_1450_820_434_274_240.jpg

那么如果我已有的照片目录并不是从0开始按照数字顺序排列的,而是一些用中文命名的目录,那怎么办呢?使用下面的shell命令可以做到:

#先保存个映射表
num=0;for f in $(ls);do echo "$num,$f" >> /tmp/gemfield.dict;num=$((num + 1));done

#改文件夹的名字
num=0;for f in $(ls);do mv $f $num ;num=$((num + 1));done

 

224分类的label是0到223,一定要从0开始,caffe框架决定的。那现在有了224个目录的照片,怎么生成对应的label文件呢?可以使用下面的python代码:

gemfield@ai:/bigdata/video_annotation_web/annotation_output$ find . -type f > ../gemfield.txt
gemfield@ai:/bigdata/video_annotation_web/annotation_output$ cd ..
gemfield@ai:/bigdata/video_annotation_web$ python
Python 2.7.13 (default, Nov 23 2017, 15:37:09) 
[GCC 6.3.0 20170406] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> l = open('gemfield.txt').readlines()
>>> ll = [x.strip() + ' ' + x.split('/')[1] + '\n' for x in l]
>>> import random
>>> random.shuffle(ll)

>>> with open('gemfield.lst', 'w') as f:
...     f.writelines(ll)
... 
>>>

 

现在label文件也生成了,我们需要将其分为训练集和测试集,针对本次实验,gemfield按照6:1的比例划分了训练集和测试集;这个划分过程不用动那224个图片目录,而只需要将上面的那个gemfield.txt按照6:1的比例划分为2个label文件:train.lst和val.lst 文件:

gemfield@ai:/bigdata/video_annotation_web$ tail -24319 gemfield.lst > val.lst
gemfield@ai:/bigdata/video_annotation_web$ head -120000 gemfield.lst > train.lst

 

准备Caffe环境

下载官方的caffe仓库,修改makefile.config的参数,编译就ok了。参考本专栏的前述文章。

 

准备ResNet的网络

Gemfield使用的是ResNet50版本:

KaimingHe/deep-residual-networks

这个下载下来的prototxt文件,拷贝2份出来,一份命名为ResNet-50-deploy-by-gemfield.prototxt,这个不作修改;另一份命名为ResNet-50-train-val-by-gemfield.prototxt,然后这个网络结构文件要进行修改,修改部分如下所示:

第一部分:修改input部分:

ResNet-50-deploy-by-gemfield.prototxt中的

input: "data"
input_dim: 1
input_dim: 3
input_dim: 224
input_dim: 224

改为ResNet-50-train-val-by-gemfield.prototxt中的

layer {
    name: "data"
    type: "Data"
    top: "data"
    top: "label"
    include {
        phase: TRAIN
    }
    transform_param {
        mirror: false
        # crop_size: 224
        mean_value: 0
        mean_value: 0
        mean_value: 0
    }
    data_param {
        source: "wzry_224_train_lmdb"
        batch_size: 16
        backend: LMDB
    }
}

layer {
    name: "data"
    type: "Data"
    top: "data"
    top: "label"
    include {
        phase: TEST
    }
    transform_param {
        mirror: false
        # crop_size: 224
        mean_value: 0
        mean_value: 0
        mean_value: 0
    }
    data_param {
        source: "wzry_224_val_lmdb"
        batch_size: 1
        backend: LMDB
    }
}

第二部分:

1,将全连接层的fc1000改为fc224,因为我们的分类是224种;

2,将softmax改为softmax with loss,因为训练的时候必须有loss作为反馈;

将ResNet-50-deploy-by-gemfield.prototxt中的

layer {
	bottom: "pool5"
	top: "fc1000"
	name: "fc1000"
	type: "InnerProduct"
	inner_product_param {
		num_output: 1000
	}
}

layer {
	bottom: "fc1000"
	top: "prob"
	name: "prob"
	type: "Softmax"
}

改为ResNet-50-train-val-by-gemfield.prototxt中的

layer {
    bottom: "pool5"
    top: "fc224"
    name: "fc224"
    type: "InnerProduct"
    inner_product_param {
        num_output: 224
    }
}
layer {
    bottom: "fc224"
    bottom: "label"
    name: "loss"
    type: "SoftmaxWithLoss"
    top: "loss"
}

layer {
    bottom: "fc224"
    bottom: "label"
    top: "acc/top-1"
    name: "acc/top-1"
    type: "Accuracy"
    include {
        phase: TEST
    }
}

第三部分:

ResNet的输入参数是224x224,因此,在下面生成lmdb的时候,要将图像resize成224x224,除非你的图片本来就是224x224。

准备solver.prototxt

net: "ResNet-50-train-val-by-gemfield.prototxt"
#每次测试跑多少次迭代,照片数量/test的batch_size
test_iter: 24000
#每多少次迭代进行一次测试
test_interval: 2000
test_initialization: false

#初始的学习率
base_lr: 0.001
#学习率的下降策略
lr_policy: "step"
gamma: 0.1
stepsize: 5000

#每迭代多少次打印一次loss信息
display: 100
#最多迭代多少次
max_iter: 75000
#梯度下降策略,90%依赖这次,10%依赖上次
momentum: 0.9
#正则项的比重
weight_decay: 0.0001
#迭代多少次生成一次中间的caffemodel
snapshot: 5000
#caffemodel的前缀
snapshot_prefix: "models/resnet_gemfield_cls224"
solver_mode: GPU

生成lmdb

使用Caffe自带的工具convert_imageset来生成lmdb文件(在caffe仓库目录里),注意,resnet的输入都是224x224,所以在制作数据集的时候需要进行resize;其次,convert_imageset会简单的将下列命令中的root目录"./"和train.lst中的文件路径进行直接的字符串拼接;再次,生成的lmdb目录不能已经存在。

先生成训练集:

gemfield@ai:~$ convert_imageset -resize_height 224 -resize_width 224 ./ train.lst wzry_224_train_lmdb
I0113 12:13:44.050431    27 convert_imageset.cpp:89] A total of 120000 images.
E0113 12:13:44.051177    27 common.cpp:114] Cannot create Cublas handle. Cublas won't be available.
E0113 12:13:44.051475    27 common.cpp:121] Cannot create Curand generator. Curand won't be available.
I0113 12:13:44.051504    27 db_lmdb.cpp:35] Opened lmdb wzry_224_train_lmdb
I0113 12:13:45.643923    27 convert_imageset.cpp:147] Processed 1000 files.
I0113 12:13:47.270226    27 convert_imageset.cpp:147] Processed 2000 files.
I0113 12:13:48.633996    27 convert_imageset.cpp:147] Processed 3000 files.
I0113 12:13:50.994860    27 convert_imageset.cpp:147] Processed 4000 files.
I0113 12:13:52.172212    27 convert_imageset.cpp:147] Processed 5000 files.
I0113 12:13:53.344650    27 convert_imageset.cpp:147] Processed 6000 files.
I0113 12:13:55.925756    27 convert_imageset.cpp:147] Processed 7000 files.
I0113 12:13:57.467402    27 convert_imageset.cpp:147] Processed 8000 files.
I0113 12:13:59.090173    27 convert_imageset.cpp:147] Processed 9000 files.
I0113 12:14:00.676419    27 convert_imageset.cpp:147] Processed 10000 files.
I0113 12:14:02.851028    27 convert_imageset.cpp:147] Processed 11000 files.
I0113 12:14:04.404832    27 convert_imageset.cpp:147] Processed 12000 files.
I0113 12:14:05.979625    27 convert_imageset.cpp:147] Processed 13000 files.
I0113 12:14:07.152940    27 convert_imageset.cpp:147] Processed 14000 files.
I0113 12:14:09.217108    27 convert_imageset.cpp:147] Processed 15000 files.
I0113 12:14:10.806496    27 convert_imageset.cpp:147] Processed 16000 files.
I0113 12:14:12.268177    27 convert_imageset.cpp:147] Processed 17000 files.
I0113 12:14:13.508546    27 convert_imageset.cpp:147] Processed 18000 files.
I0113 12:14:15.016147    27 convert_imageset.cpp:147] Processed 19000 files.
I0113 12:14:17.189391    27 convert_imageset.cpp:147] Processed 20000 files.
I0113 12:14:19.469425    27 convert_imageset.cpp:147] Processed 21000 files.
I0113 12:14:20.869881    27 convert_imageset.cpp:147] Processed 22000 files.
I0113 12:14:22.358198    27 convert_imageset.cpp:147] Processed 23000 files.
I0113 12:14:23.811714    27 convert_imageset.cpp:147] Processed 24000 files.
I0113 12:14:25.611598    27 convert_imageset.cpp:147] Processed 25000 files.
I0113 12:14:27.188184    27 convert_imageset.cpp:147] Processed 26000 files.
I0113 12:14:28.578914    27 convert_imageset.cpp:147] Processed 27000 files.
I0113 12:14:30.235432    27 convert_imageset.cpp:147] Processed 28000 files.
I0113 12:14:31.867501    27 convert_imageset.cpp:147] Processed 29000 files.
I0113 12:14:33.497715    27 convert_imageset.cpp:147] Processed 30000 files.
I0113 12:14:34.925644    27 convert_imageset.cpp:147] Processed 31000 files.
I0113 12:14:36.906508    27 convert_imageset.cpp:147] Processed 32000 files.
I0113 12:14:38.464900    27 convert_imageset.cpp:147] Processed 33000 files.
I0113 12:14:40.249969    27 convert_imageset.cpp:147] Processed 34000 files.
I0113 12:14:42.774039    27 convert_imageset.cpp:147] Processed 35000 files.
I0113 12:14:44.158181    27 convert_imageset.cpp:147] Processed 36000 files.
I0113 12:14:45.778302    27 convert_imageset.cpp:147] Processed 37000 files.
I0113 12:14:47.252451    27 convert_imageset.cpp:147] Processed 38000 files.
I0113 12:14:49.799836    27 convert_imageset.cpp:147] Processed 39000 files.
I0113 12:14:51.288296    27 convert_imageset.cpp:147] Processed 40000 files.
I0113 12:14:52.484359    27 convert_imageset.cpp:147] Processed 41000 files.
I0113 12:14:54.095209    27 convert_imageset.cpp:147] Processed 42000 files.
I0113 12:14:56.525655    27 convert_imageset.cpp:147] Processed 43000 files.
I0113 12:14:58.033469    27 convert_imageset.cpp:147] Processed 44000 files.
I0113 12:14:59.409360    27 convert_imageset.cpp:147] Processed 45000 files.
I0113 12:15:00.880760    27 convert_imageset.cpp:147] Processed 46000 files.
I0113 12:15:02.602565    27 convert_imageset.cpp:147] Processed 47000 files.
I0113 12:15:04.345715    27 convert_imageset.cpp:147] Processed 48000 files.
I0113 12:15:05.799033    27 convert_imageset.cpp:147] Processed 49000 files.
I0113 12:15:06.995527    27 convert_imageset.cpp:147] Processed 50000 files.
I0113 12:15:08.686816    27 convert_imageset.cpp:147] Processed 51000 files.
I0113 12:15:11.079591    27 convert_imageset.cpp:147] Processed 52000 files.
I0113 12:15:12.673241    27 convert_imageset.cpp:147] Processed 53000 files.
I0113 12:15:14.083250    27 convert_imageset.cpp:147] Processed 54000 files.
I0113 12:15:15.629169    27 convert_imageset.cpp:147] Processed 55000 files.
I0113 12:15:17.027292    27 convert_imageset.cpp:147] Processed 56000 files.
I0113 12:15:18.703470    27 convert_imageset.cpp:147] Processed 57000 files.
I0113 12:15:20.178828    27 convert_imageset.cpp:147] Processed 58000 files.
I0113 12:15:21.541697    27 convert_imageset.cpp:147] Processed 59000 files.
I0113 12:15:23.018353    27 convert_imageset.cpp:147] Processed 60000 files.
I0113 12:15:24.517725    27 convert_imageset.cpp:147] Processed 61000 files.
I0113 12:15:26.077165    27 convert_imageset.cpp:147] Processed 62000 files.
I0113 12:15:27.476835    27 convert_imageset.cpp:147] Processed 63000 files.
I0113 12:15:28.695413    27 convert_imageset.cpp:147] Processed 64000 files.
I0113 12:15:30.552235    27 convert_imageset.cpp:147] Processed 65000 files.
I0113 12:15:32.182060    27 convert_imageset.cpp:147] Processed 66000 files.
I0113 12:15:33.655457    27 convert_imageset.cpp:147] Processed 67000 files.
I0113 12:15:34.957446    27 convert_imageset.cpp:147] Processed 68000 files.
I0113 12:15:36.233927    27 convert_imageset.cpp:147] Processed 69000 files.
I0113 12:15:37.818439    27 convert_imageset.cpp:147] Processed 70000 files.
I0113 12:15:39.956657    27 convert_imageset.cpp:147] Processed 71000 files.
I0113 12:15:41.336088    27 convert_imageset.cpp:147] Processed 72000 files.
I0113 12:15:42.587082    27 convert_imageset.cpp:147] Processed 73000 files.
I0113 12:15:44.044525    27 convert_imageset.cpp:147] Processed 74000 files.
I0113 12:15:45.632407    27 convert_imageset.cpp:147] Processed 75000 files.
I0113 12:15:47.075654    27 convert_imageset.cpp:147] Processed 76000 files.
I0113 12:15:48.567188    27 convert_imageset.cpp:147] Processed 77000 files.
I0113 12:15:49.854224    27 convert_imageset.cpp:147] Processed 78000 files.
I0113 12:15:51.043192    27 convert_imageset.cpp:147] Processed 79000 files.
I0113 12:15:52.586591    27 convert_imageset.cpp:147] Processed 80000 files.
I0113 12:15:54.092438    27 convert_imageset.cpp:147] Processed 81000 files.
I0113 12:15:55.546066    27 convert_imageset.cpp:147] Processed 82000 files.
I0113 12:15:56.811760    27 convert_imageset.cpp:147] Processed 83000 files.
I0113 12:15:57.987690    27 convert_imageset.cpp:147] Processed 84000 files.
I0113 12:15:59.671317    27 convert_imageset.cpp:147] Processed 85000 files.
I0113 12:16:01.283619    27 convert_imageset.cpp:147] Processed 86000 files.
I0113 12:16:02.826110    27 convert_imageset.cpp:147] Processed 87000 files.
I0113 12:16:04.015786    27 convert_imageset.cpp:147] Processed 88000 files.
I0113 12:16:05.246563    27 convert_imageset.cpp:147] Processed 89000 files.
I0113 12:16:07.631480    27 convert_imageset.cpp:147] Processed 90000 files.
I0113 12:16:09.503032    27 convert_imageset.cpp:147] Processed 91000 files.
I0113 12:16:10.790294    27 convert_imageset.cpp:147] Processed 92000 files.
I0113 12:16:12.273556    27 convert_imageset.cpp:147] Processed 93000 files.
I0113 12:16:14.271823    27 convert_imageset.cpp:147] Processed 94000 files.
I0113 12:16:15.744318    27 convert_imageset.cpp:147] Processed 95000 files.
I0113 12:16:17.090734    27 convert_imageset.cpp:147] Processed 96000 files.
I0113 12:16:18.353124    27 convert_imageset.cpp:147] Processed 97000 files.
I0113 12:16:19.863163    27 convert_imageset.cpp:147] Processed 98000 files.
I0113 12:16:21.596539    27 convert_imageset.cpp:147] Processed 99000 files.
I0113 12:16:23.036448    27 convert_imageset.cpp:147] Processed 100000 files.
I0113 12:16:24.533990    27 convert_imageset.cpp:147] Processed 101000 files.
I0113 12:16:25.711519    27 convert_imageset.cpp:147] Processed 102000 files.
I0113 12:16:27.407729    27 convert_imageset.cpp:147] Processed 103000 files.
I0113 12:16:29.793790    27 convert_imageset.cpp:147] Processed 104000 files.
I0113 12:16:31.340585    27 convert_imageset.cpp:147] Processed 105000 files.
I0113 12:16:32.955618    27 convert_imageset.cpp:147] Processed 106000 files.
I0113 12:16:34.523054    27 convert_imageset.cpp:147] Processed 107000 files.
I0113 12:16:36.220069    27 convert_imageset.cpp:147] Processed 108000 files.
I0113 12:16:37.792441    27 convert_imageset.cpp:147] Processed 109000 files.
I0113 12:16:39.185384    27 convert_imageset.cpp:147] Processed 110000 files.
I0113 12:16:40.366708    27 convert_imageset.cpp:147] Processed 111000 files.
I0113 12:16:41.930851    27 convert_imageset.cpp:147] Processed 112000 files.
I0113 12:16:43.605252    27 convert_imageset.cpp:147] Processed 113000 files.
I0113 12:16:45.682309    27 convert_imageset.cpp:147] Processed 114000 files.
I0113 12:16:47.001965    27 convert_imageset.cpp:147] Processed 115000 files.
I0113 12:16:48.201941    27 convert_imageset.cpp:147] Processed 116000 files.
I0113 12:16:50.482267    27 convert_imageset.cpp:147] Processed 117000 files.
I0113 12:16:53.129992    27 convert_imageset.cpp:147] Processed 118000 files.
I0113 12:16:55.065909    27 convert_imageset.cpp:147] Processed 119000 files.
I0113 12:16:56.272369    27 convert_imageset.cpp:147] Processed 120000 files.

再生成测试集:

gemfield@ai:~$ convert_imageset -resize_height 224 -resize_width 224 ./ val.lst wzry_224_val_lmdb
I0113 12:35:57.135522    28 convert_imageset.cpp:89] A total of 24319 images.
E0113 12:35:57.136313    28 common.cpp:114] Cannot create Cublas handle. Cublas won't be available.
E0113 12:35:57.136673    28 common.cpp:121] Cannot create Curand generator. Curand won't be available.
I0113 12:35:57.136708    28 db_lmdb.cpp:35] Opened lmdb wzry_224_val_lmdb
I0113 12:35:58.789322    28 convert_imageset.cpp:147] Processed 1000 files.
I0113 12:36:00.379387    28 convert_imageset.cpp:147] Processed 2000 files.
I0113 12:36:01.759858    28 convert_imageset.cpp:147] Processed 3000 files.
I0113 12:36:02.987604    28 convert_imageset.cpp:147] Processed 4000 files.
I0113 12:36:04.426345    28 convert_imageset.cpp:147] Processed 5000 files.
I0113 12:36:05.960880    28 convert_imageset.cpp:147] Processed 6000 files.
I0113 12:36:07.313741    28 convert_imageset.cpp:147] Processed 7000 files.
I0113 12:36:08.496649    28 convert_imageset.cpp:147] Processed 8000 files.
I0113 12:36:10.013240    28 convert_imageset.cpp:147] Processed 9000 files.
I0113 12:36:11.585314    28 convert_imageset.cpp:147] Processed 10000 files.
I0113 12:36:12.984436    28 convert_imageset.cpp:147] Processed 11000 files.
I0113 12:36:14.225903    28 convert_imageset.cpp:147] Processed 12000 files.
I0113 12:36:15.468725    28 convert_imageset.cpp:147] Processed 13000 files.
I0113 12:36:17.084775    28 convert_imageset.cpp:147] Processed 14000 files.
I0113 12:36:18.566448    28 convert_imageset.cpp:147] Processed 15000 files.
I0113 12:36:19.855185    28 convert_imageset.cpp:147] Processed 16000 files.
I0113 12:36:21.040355    28 convert_imageset.cpp:147] Processed 17000 files.
I0113 12:36:22.528937    28 convert_imageset.cpp:147] Processed 18000 files.
I0113 12:36:23.917870    28 convert_imageset.cpp:147] Processed 19000 files.
I0113 12:36:25.164480    28 convert_imageset.cpp:147] Processed 20000 files.
I0113 12:36:27.153021    28 convert_imageset.cpp:147] Processed 21000 files.
I0113 12:37:18.769785    28 convert_imageset.cpp:147] Processed 22000 files.
I0113 12:37:19.995821    28 convert_imageset.cpp:147] Processed 23000 files.
I0113 12:37:21.388216    28 convert_imageset.cpp:147] Processed 24000 files.
I0113 12:37:21.853869    28 convert_imageset.cpp:153] Processed 24319 files.

值得注意的是,1.5G的图片生成的lmdb大小为20.5GB!

 

获取pretrained的model

pre trained model主要是用来初始化当前网络结构的参数。

gemfield@ai:~$ ls -l ResNet-50-model.caffemodel 
-rw-r--r-- 1 gemfield gemfield 102462397 1月  13 21:16 ResNet-50-model.caffemodel

开始训练

gemfield@ai:~$ build/tools/caffe train -solver solver.prototxt -weights ResNet-50-model.caffemodel

 

一些训练日志

I0114 03:52:23.357553 21226 solver.cpp:218] Iteration 73900 (6.61567 iter/s, 15.1156s/100 iters), loss = 0.0242063
I0114 03:52:23.357609 21226 solver.cpp:237]     Train net output #0: loss = 0.0242095 (* 1 = 0.0242095 loss)
I0114 03:52:23.357619 21226 sgd_solver.cpp:105] Iteration 73900, lr = 1e-17
I0114 03:52:38.312636 21226 solver.cpp:330] Iteration 74000, Testing net (#0)
I0114 03:54:58.760177 21231 data_layer.cpp:73] Restarting data prefetching from start.
I0114 03:57:33.356952 21226 solver.cpp:397]     Test net output #0: acc/top-1 = 0.969708
I0114 03:57:33.357126 21226 solver.cpp:397]     Test net output #1: loss = 0.115373 (* 1 = 0.115373 loss)
I0114 03:57:33.503705 21226 solver.cpp:218] Iteration 74000 (0.322433 iter/s, 310.142s/100 iters), loss = 0.0952036
I0114 03:57:33.503748 21226 solver.cpp:237]     Train net output #0: loss = 0.0952069 (* 1 = 0.0952069 loss)
I0114 03:57:33.503764 21226 sgd_solver.cpp:105] Iteration 74000, lr = 1e-17
I0114 03:57:48.466397 21226 solver.cpp:218] Iteration 74100 (6.68344 iter/s, 14.9624s/100 iters), loss = 0.00265225
I0114 03:57:48.466521 21226 solver.cpp:237]     Train net output #0: loss = 0.00265556 (* 1 = 0.00265556 loss)
I0114 03:57:48.466542 21226 sgd_solver.cpp:105] Iteration 74100, lr = 1e-17
I0114 03:58:03.440867 21226 solver.cpp:218] Iteration 74200 (6.67818 iter/s, 14.9741s/100 iters), loss = 0.011983
I0114 03:58:03.441133 21226 solver.cpp:237]     Train net output #0: loss = 0.0119865 (* 1 = 0.0119865 loss)
I0114 03:58:03.441164 21226 sgd_solver.cpp:105] Iteration 74200, lr = 1e-17
I0114 03:58:18.470480 21226 solver.cpp:218] Iteration 74300 (6.65372 iter/s, 15.0292s/100 iters), loss = 0.234399
I0114 03:58:18.470551 21226 solver.cpp:237]     Train net output #0: loss = 0.234403 (* 1 = 0.234403 loss)
I0114 03:58:18.470561 21226 sgd_solver.cpp:105] Iteration 74300, lr = 1e-17
I0114 03:58:33.493978 21226 solver.cpp:218] Iteration 74400 (6.65636 iter/s, 15.0232s/100 iters), loss = 0.00225647
I0114 03:58:33.494228 21226 solver.cpp:237]     Train net output #0: loss = 0.0022598 (* 1 = 0.0022598 loss)
I0114 03:58:33.494269 21226 sgd_solver.cpp:105] Iteration 74400, lr = 1e-17
I0114 03:58:48.538324 21226 solver.cpp:218] Iteration 74500 (6.6472 iter/s, 15.0439s/100 iters), loss = 2.68966e-05
I0114 03:58:48.538383 21226 solver.cpp:237]     Train net output #0: loss = 3.02486e-05 (* 1 = 3.02486e-05 loss)
I0114 03:58:48.538391 21226 sgd_solver.cpp:105] Iteration 74500, lr = 1e-17
I0114 03:59:03.605232 21226 solver.cpp:218] Iteration 74600 (6.63717 iter/s, 15.0667s/100 iters), loss = 0.00452782
I0114 03:59:03.605480 21226 solver.cpp:237]     Train net output #0: loss = 0.00453112 (* 1 = 0.00453112 loss)
I0114 03:59:03.605512 21226 sgd_solver.cpp:105] Iteration 74600, lr = 1e-17
I0114 03:59:18.693054 21226 solver.cpp:218] Iteration 74700 (6.62804 iter/s, 15.0874s/100 iters), loss = 0.173986
I0114 03:59:18.693130 21226 solver.cpp:237]     Train net output #0: loss = 0.173989 (* 1 = 0.173989 loss)
I0114 03:59:18.693142 21226 sgd_solver.cpp:105] Iteration 74700, lr = 1e-17
I0114 03:59:33.762369 21226 solver.cpp:218] Iteration 74800 (6.63611 iter/s, 15.0691s/100 iters), loss = 0.237659
I0114 03:59:33.762547 21226 solver.cpp:237]     Train net output #0: loss = 0.237662 (* 1 = 0.237662 loss)
I0114 03:59:33.762562 21226 sgd_solver.cpp:105] Iteration 74800, lr = 1e-17
I0114 03:59:48.851802 21226 solver.cpp:218] Iteration 74900 (6.62731 iter/s, 15.0891s/100 iters), loss = 0.0473921
I0114 03:59:48.851860 21226 solver.cpp:237]     Train net output #0: loss = 0.0473955 (* 1 = 0.0473955 loss)
I0114 03:59:48.851868 21226 sgd_solver.cpp:105] Iteration 74900, lr = 1e-17
I0114 04:00:03.242220 21230 data_layer.cpp:73] Restarting data prefetching from start.
I0114 04:00:03.808995 21226 solver.cpp:447] Snapshotting to binary proto file models/resnet_gemfield_cls224_iter_75000.caffemodel
I0114 04:00:04.100811 21226 sgd_solver.cpp:273] Snapshotting solver state to binary proto file models/resnet_gemfield_cls224_iter_75000.solverstate
I0114 04:00:04.314110 21226 solver.cpp:310] Iteration 75000, loss = 0.225416
I0114 04:00:04.314160 21226 solver.cpp:315] Optimization Done.
I0114 04:00:04.314165 21226 caffe.cpp:259] Optimization Done.

 

清洗了一次训练集,把一些模糊的照片去掉后,再次用同样的参数去训练,得到的训练日志如下:

I0116 01:29:12.525300    61 sgd_solver.cpp:105] Iteration 73800, lr = 1e-17
I0116 01:29:45.552590    61 solver.cpp:218] Iteration 73900 (3.02776 iter/s, 33.0277s/100 iters), loss = 0.121681
I0116 01:29:45.554165    61 solver.cpp:237]     Train net output #0: loss = 0.121683 (* 1 = 0.121683 loss)
I0116 01:29:45.554219    61 sgd_solver.cpp:105] Iteration 73900, lr = 1e-17
I0116 01:30:18.147012    61 solver.cpp:330] Iteration 74000, Testing net (#0)
I0116 01:33:34.854918    67 data_layer.cpp:73] Restarting data prefetching from start.
I0116 01:44:08.726112    61 solver.cpp:397]     Test net output #0: acc/top-1 = 0.976
I0116 01:44:08.726408    61 solver.cpp:397]     Test net output #1: loss = 0.0893586 (* 1 = 0.0893586 loss)
I0116 01:44:09.004158    61 solver.cpp:218] Iteration 74000 (0.115814 iter/s, 863.456s/100 iters), loss = 0.272815
I0116 01:44:09.004226    61 solver.cpp:237]     Train net output #0: loss = 0.272817 (* 1 = 0.272817 loss)
I0116 01:44:09.004240    61 sgd_solver.cpp:105] Iteration 74000, lr = 1e-17
I0116 01:44:41.944175    61 solver.cpp:218] Iteration 74100 (3.03601 iter/s, 32.938s/100 iters), loss = 0.00181933
I0116 01:44:41.944440    61 solver.cpp:237]     Train net output #0: loss = 0.00182139 (* 1 = 0.00182139 loss)
I0116 01:44:41.944473    61 sgd_solver.cpp:105] Iteration 74100, lr = 1e-17
I0116 01:45:15.054388    61 solver.cpp:218] Iteration 74200 (3.0204 iter/s, 33.1082s/100 iters), loss = 0.0241835
I0116 01:45:15.054733    61 solver.cpp:237]     Train net output #0: loss = 0.0241856 (* 1 = 0.0241856 loss)
I0116 01:45:15.054776    61 sgd_solver.cpp:105] Iteration 74200, lr = 1e-17
I0116 01:45:48.085701    61 solver.cpp:218] Iteration 74300 (3.02762 iter/s, 33.0293s/100 iters), loss = 0.0254915
I0116 01:45:48.085886    61 solver.cpp:237]     Train net output #0: loss = 0.0254935 (* 1 = 0.0254935 loss)
I0116 01:45:48.085896    61 sgd_solver.cpp:105] Iteration 74300, lr = 1e-17
I0116 01:46:21.485394    61 solver.cpp:218] Iteration 74400 (2.99422 iter/s, 33.3977s/100 iters), loss = 0.000650348
I0116 01:46:21.485787    61 solver.cpp:237]     Train net output #0: loss = 0.000652366 (* 1 = 0.000652366 loss)
I0116 01:46:21.485879    61 sgd_solver.cpp:105] Iteration 74400, lr = 1e-17
I0116 01:46:54.568955    61 solver.cpp:218] Iteration 74500 (3.02283 iter/s, 33.0815s/100 iters), loss = 0.209352
I0116 01:46:54.569267    61 solver.cpp:237]     Train net output #0: loss = 0.209354 (* 1 = 0.209354 loss)
I0116 01:46:54.569316    61 sgd_solver.cpp:105] Iteration 74500, lr = 1e-17
I0116 01:47:27.618690    61 solver.cpp:218] Iteration 74600 (3.02593 iter/s, 33.0477s/100 iters), loss = 0.0229688
I0116 01:47:27.618928    61 solver.cpp:237]     Train net output #0: loss = 0.0229709 (* 1 = 0.0229709 loss)
I0116 01:47:27.618969    61 sgd_solver.cpp:105] Iteration 74600, lr = 1e-17
I0116 01:48:00.857776    61 solver.cpp:218] Iteration 74700 (3.0085 iter/s, 33.2391s/100 iters), loss = 0.00383524
I0116 01:48:00.857947    61 solver.cpp:237]     Train net output #0: loss = 0.00383731 (* 1 = 0.00383731 loss)
I0116 01:48:00.857959    61 sgd_solver.cpp:105] Iteration 74700, lr = 1e-17
I0116 01:48:34.184334    61 solver.cpp:218] Iteration 74800 (3.00065 iter/s, 33.3261s/100 iters), loss = 0.126383
I0116 01:48:34.184636    61 solver.cpp:237]     Train net output #0: loss = 0.126385 (* 1 = 0.126385 loss)
I0116 01:48:34.184814    61 sgd_solver.cpp:105] Iteration 74800, lr = 1e-17
I0116 01:49:07.174204    61 solver.cpp:218] Iteration 74900 (3.03142 iter/s, 32.9879s/100 iters), loss = 0.327584
I0116 01:49:07.174506    61 solver.cpp:237]     Train net output #0: loss = 0.327586 (* 1 = 0.327586 loss)
I0116 01:49:07.174561    61 sgd_solver.cpp:105] Iteration 74900, lr = 1e-17
I0116 01:49:38.800302    66 data_layer.cpp:73] Restarting data prefetching from start.
I0116 01:49:40.076367    61 solver.cpp:447] Snapshotting to binary proto file models/resnet_gemfield_cls224_iter_75000.caffemodel
I0116 01:49:40.382776    61 sgd_solver.cpp:273] Snapshotting solver state to binary proto file models/resnet_gemfield_cls224_iter_75000.solverstate
I0116 01:49:40.630769    61 solver.cpp:310] Iteration 75000, loss = 0.0174639
I0116 01:49:40.630820    61 solver.cpp:315] Optimization Done.
I0116 01:49:40.630826    61 caffe.cpp:259] Optimization Done.

嗯,效果还是好了些。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值