上一篇使用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

效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFza2ExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

2.2 測试单张图片

以下用训练出的模型,測试单个图片的准确率。

(參考model的使用)

改Debug\classfication.bat例如以下(測试单张图F:\caffe-master170309\data\TrafficJamBigData03281545\test\du\190416357.png)

通过手动执行可知须要3:67秒。故MFC程序的延时可减少为4秒。

这样比caffenet的11秒快得多了。

只是效果不准:10张图(5张堵、5张不堵)所有识别为不堵,效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFza2ExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

上述我觉得是训练的模型不好,故又一次训练。

3. 又一次训练  (參考

以下又一次训练googlenet模型。主要添加迭代次数和batch_size。

3.1 训练数据转lmdb格式和mean文件

因为之前用caffenet时。是以227*227的图片训练的(将crop_size设为227)。用227*227的图片測试的(直接将图由480*480转为了227*227)

此须要用480*480大小的又一次训练。

3.1.1 读取图片的标签,并将图片名+标签写入train_label.txt与test_label.txt里

在F:\caffe-master170309\data\TrafficJamBigData03301009目录里有2个目录、2个*.m,两个空的txt。
得到标签train_label.txt与test_label.txt

3.1.2 转换为lmdb格式

F:\caffe-master170309\Build\x64\Debug下新建convert-TrafficJamBigData03301009-train.bat,内容例如以下:
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-TrafficJamBigData03281545-test.bat,内容例如以下:
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\data\TrafficJamBigData03301009 目录内生成了TrafficJamBigData03301009-train_lmdb和TrafficJamBigData03301009-test_lmdb目录:例如以下:(8个文件)



3.1.3 生成均值文件

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由原来的32改为2,由原来的50改为2.

(整个网络结构有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: 2 #原来是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: 2 #原来是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”改为“2和2”

训练记录例如以下:

11:54開始。

iter40次,14秒。

推算的话

iter50000次,5小时。

Caffe-5.2-(GPU完整流程)训练(依据googlenet微调)的更多相关文章

  1. Grunt搭建自动化web前端开发环境--完整流程

    Grunt搭建自动化web前端开发环境-完整流程 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前 ...

  2. Windows 10下安装配置Caffe并支持GPU加速(修改版)

    基本环境 建议严格按照版本来 - Windows 10 - Visual Studio 2013 - Matlab R2016b - Anaconda - CUDA 8.0.44 - cuDNN v4 ...

  3. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程

    我们在之前的文章中中已经讲到了正确部署运行cas server 和 在cas client中配置. 在此基础上 我们去掉了https的验证,启用了http访问的模式. 单点登录(七)-----实战-- ...

  4. jquery ajax thinkphp异步局部刷新完整流程

    环境:ThinkPHP3.2.3,jQuery3.2   前言: 在一般的网站中,都需要用到jquery或者其他框架(比如angular)来处理前后端数据交互,thinkphp在后台也内置了一些函数用 ...

  5. onvif获取摄像头的流媒体地址完整流程

    linux设备上的Onvif 实现6:获取摄像头的流媒体地址完整流程 整体流程: Probe: 发现网络摄像头,获取webserver地址 http://192.168.15.240/onvif/de ...

  6. m_Orchestrate learning system---三、session使用完整流程是什么

    m_Orchestrate learning system---三.session使用完整流程是什么 一.总结 一句话总结: 1.在登录成功之后设置session和cookie 2.在公共控制器里面使 ...

  7. TensorFlow指定GPU/CPU进行训练和输出devices信息

    TensorFlow指定GPU/CPU进行训练和输出devices信息 1.在tensorflow代码中指定GPU/CPU进行训练 with tf.device('/gpu:0'): .... wit ...

  8. 深入理解java:4.3.1. 框架编程之MyBatis---SQL语句执行的完整流程

    Mybatis的整个的执行流程.如下图所示: 原理详解: MyBatis应用程序根据XML配置文件创建SqlSessionFactory, SqlSessionFactory在根据配置,配置来源于两个 ...

  9. fidder抓包工具使用方法,完整流程

    fidder抓包工具使用方法,完整流程 https://blog.csdn.net/lw545034502/article/details/82150779 版权声明:本文为博主原创文章,遵循 CC ...

随机推荐

  1. mouseover事件mouseenter事件

    1. mouseover:会在鼠标进入该元素或者该元素的子元素时触发 mouseenter:只在鼠标进入该元素时触发 mouseout:在鼠标移出该元素或则该元素的子元素时触发 mouseleave: ...

  2. 使用原生JavaScript的Canvas实现拖拽式图形绘制,支持画笔、线条、箭头、三角形、矩形、平行四边形、梯形以及多边形和圆形,不依赖任何库和插件,有演示demo

    前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包 ...

  3. 使用CXF 2.7.5出现的java.lang.RuntimeException: Cannot create a secure XMLInputFactory错误解决

    昨天启动工程测试webservice服务,结果发现服务一调用就报java.lang.RuntimeException: Cannot create a secure XMLInputFactory j ...

  4. nova创建虚拟机源码分析系列之七 传入参数转换成内部id

    上一篇博文将nova创建虚机的流程推进到了/compute/api.py中的create()函数,接下来就继续分析. 在分析之前简单介绍nova组件源码的架构.以conductor组件为例: 每个组件 ...

  5. 基于python3.x,使用Tornado中的torndb模块操作数据库

    目前Tornado中的torndb模块是不支持python3.x,所以需要修改部分torndb源码即可正常使用 1.开发环境介绍 操作系统:win8(64位),python版本:python3.6(3 ...

  6. NoSQL:linux操作memcached

    缓存数据库 一 NoSQL简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系 ...

  7. selenium-iframe操作

    iframe,又叫浮动帧标记,是内嵌的网页元素,可以将一个html文件嵌入到另一个html文件中显示. 最典型的案例就是163邮箱登录:http://mail.163.com/,被绿色覆盖的部分即为i ...

  8. C# Ioc容器Unity,简单实用

    开头先吐槽一下博客园超级不好用,添加图片后就写不动字了,难道是bug 好进入正题,先来说下依赖注入,简单来说就是定义好接口,上层代码调用接口,具体实现通过配置文件方式去指定具体实现类. 首先我们需要通 ...

  9. [转载] Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  10. 【S】SQL SERVER检查临时表占用空间情况

    --检查已标记为需要删除的临时表select * from T_BAS_TEMPORARYTABLENAME; --所有系统创建的临时表及视图SELECT * FROM sys.tables WHER ...