标签:margin 文件夹 prot cuda 1.2 snap weight nsf size
上一篇使用caffenet的模型微调,但因为caffenet有220M太大,测试速度太慢,因此换为googlenet.
1. 训练
迭代了2800次时死机,大概20分钟。使用的是2000次的模型。
2. 测试
2.1 测试批处理
在F:\caffe-master170309新建如下图文件test-TrafficJamBigData03292057.bat。
.\Build\x64\Debug\caffe.exe test --model=models/bvlc_googlenet0329_1/train_val.prototxt -weights=models/bvlc_googlenet0329_1/bvlc_googlenet_iter_2000.caffemodel -gpu=0 pause
2.2 测试单张图片
下面用训练出的模型,测试单个图片的准确率。(参考model的使用)
改Debug\classfication.bat如下(测试单张图F:\caffe-master170309\data\TrafficJamBigData03281545\test\du\190416357.png)
通过手动运行可知需要3:67秒,故MFC程序的延时可降低为4秒。这样比caffenet的11秒快得多了。
不过效果不准:10张图(5张堵、5张不堵)全部识别为不堵,效果如下:
上述我认为是训练的模型不好,故重新训练。
3. 重新训练 (参考)
下面重新训练googlenet模型,主要增加迭代次数和batch_size。
3.1 训练数据转lmdb格式和mean文件
由于之前用caffenet时,是以227*227的图片训练的(将crop_size设为227)。用227*227的图片测试的(直接将图由480*480转为了227*227)
此需要用480*480大小的重新训练。
F:/caffe-master170309/Build/x64/Debug/convert_imageset.exe --shuffle --resize_width=480 --resize_height=480 F:/caffe-master170309/data/TrafficJamBigData03301009/ F:/caffe-master170309/data/TrafficJamBigData03301009/train_label.txt F:/caffe-master170309/data/TrafficJamBigData03301009/TrafficJamBigData03301009-train_lmdb -backend=lmdb pause
F:/caffe-master170309/Build/x64/Debug/convert_imageset.exe --shuffle --resize_width=480 --resize_height=480 F:/caffe-master170309/data/TrafficJamBigData03301009/ F:/caffe-master170309/data/TrafficJamBigData03301009/test_label.txt F:/caffe-master170309/data/TrafficJamBigData03301009/TrafficJamBigData03301009-test_lmdb -backend=lmdb pause
F:\caffe-master170309\Build\x64\Debug下新建mean-TrafficJamBigData03301009.bat,内容如下:
compute_image_mean.exe F:/caffe-master170309/data/TrafficJamBigData03301009/TrafficJamBigData03301009-train_lmdb mean.binaryproto --backend=lmdb pause
3.1.4 拷贝文件
在caffe-master170309/examples下新建TrafficJamBigData03301009文件夹。
把刚才生成的Debug/mean.binaryproto和F:\caffe-master170309\data\TrafficJamBigData03301009\TrafficJamBigData03301009-train_lmdb和F:\caffe-master170309\data\TrafficJamBigData03301009\TrafficJamBigData03301009-test_lmdb拷贝到caffe-master170309/examples/TrafficJamBigData03301009里。
修改F:\caffe-master170309\examples\TrafficJamBigData03301009\synset_words.txt为堵与不堵两类(注意budu在第一行,du在第二行,因为要和前面的label.txt对应)
3.1.5 新建文件
在caffe-master170309/examples/TrafficJamBigData03301009里新建
空的RecognizeResultRecordFromCmdTxt.txt
和 空的AnalysisOfRecognitionfromCmdTxt.txt
和 synset_words.txt(里面第一行是budu,第二行是du)
效果如下:
3.2 修改训练的“参数文件” & “模型结构”
3.2.1 编写训练bat(别急着运行) 参考1,参考2,参考我的微调笔记
在F:\caffe-master170309文件夹下新建一个train-TrafficJamBigData03301009.bat文件,用于训练模型内容如下:
.\Build\x64\Debug\caffe.exe train --solver=models/bvlc_googlenet0329_1/solver.prototxt --weights=models/bvlc_googlenet0329_1/bvlc_googlenet.caffemodel --gpu 0 pause
3.2.2 参数文件solver.prototxt 参考我的微调笔记
test_iter: 100 #原来1000,改为100 test_interval: 1000 #test_interval: 4000->1000 test_initialization: false display: 40 average_loss: 40 base_lr: 0.01 #原来base_lr: 0.01 #来自quick_solver的是 lr_policy: "poly" #来自quick_solver的是 power: 0.5 lr_policy: "step" stepsize: 320000 gamma: 0.96 max_iter: 50000 #max_iter: 10000000->10000 momentum: 0.9 weight_decay: 0.0002 snapshot: 1000 #snapshot: 40000->1000 snapshot_prefix: "models/bvlc_googlenet0329_1/bvlc_googlenet" solver_mode: GPU
3.2.3 网络模型文件train_val.prototxt 参考我的微调笔记
其中finetune出现error=cudaSuccess(2 vs. 0) out of memory?网上意思是:batch_size改小,将batch_size由原来的256改为50,由原来的50改为10.
(整个网络结构有2000行,只改了前面2层和最后1层),改的部分截取如下:
前2层是:
name: "GoogleNet" layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TRAIN } transform_param { mirror: true #原来也是true crop_size: 480 #原来是224 mean_value: 104 mean_value: 117 mean_value: 123 } data_param { source: "data/TrafficJamBigData03281545/TrafficJamBigData03281545-train_lmdb" batch_size: 10 #原来是32 backend: LMDB } } layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TEST } transform_param { mirror: false crop_size: 480 #原来是224 mean_value: 104 mean_value: 117 mean_value: 123 } data_param { source: "data/TrafficJamBigData03281545/TrafficJamBigData03281545-test_lmdb" batch_size: 8 #原来是50 backend: LMDB } }
最后1层是:
layer { name: "loss3/top-5" type: "Accuracy" bottom: "loss3/classifier123" #原来是(3个):loss3/classifier loss2/classifier loss1/classifier bottom: "label" top: "loss3/top-5" include { phase: TEST } accuracy_param { top_k: 2 #原来是5 } }
3.2.4 测试模型文件deploy.prototxt
参考我的微调笔记
改的第1层和倒数第2层,如下:
第1层如下:
name: "GoogleNet" layer { name: "data" type: "Input" top: "data" input_param { shape: { dim: 10 dim: 3 dim: 480 dim: 480 } } # input_param { shape: { dim: 10 dim: 3 dim: 224 dim: 224 } } }
倒数第二层如下:
layer { name: "loss3/classifier123" type: "InnerProduct" bottom: "pool5/7x7_s1" top: "loss3/classifier123" param { lr_mult: 1 decay_mult: 1 } param { lr_mult: 2 decay_mult: 0 } inner_product_param { num_output: 2 #原来是1000 weight_filler { type: "xavier" } bias_filler { type: "constant" value: 0 } } } layer { name: "prob" type: "Softmax" bottom: "loss3/classifier123" top: "prob" }
3.2.5 运行F:\caffe-master170309\train-TrafficJamBigData03301009.bat文件,开始训练
1200张图(1200张训练+200张测试),迭代50000次,batch_size由“32和50”改为“10和8”
训练记录如下:
Caffe-5.2-(GPU完整流程)训练(根据googlenet、alexnet微调)
标签:margin 文件夹 prot cuda 1.2 snap weight nsf size
原文地址:http://blog.csdn.net/daska110/article/details/68090214