中文手写数据集训练识别
一、介绍
1、摘要:中文手写数据集是由 模式识别国家实验室(NLPR)和中国自动化研究所科学院(CASIA)共同整理的
这个数据集是由171个字母数字字符和符号以及 3,866 中文汉字 (DB1.0) 或者3,755 中文汉字(DB1.1)组成/
2、工具:网络参数可视化在线工具 http://ethereon.github.io/netscope/#/editor
二、使用vs2013 编译pycaffe(windows使用python是由caffe)并安装
1、python必须是python2.7 x64
2、编译release版本成功后把生成的caffe整个目录copy到python安装目录下的Lib\site-packages
3、安装caffe所需的库,具体需要什么库可以使用python自带的命令行 import caffe来检查,不报错表明安装成功(看图)
缺少的库可以到网站https://www.lfd.uci.edu/~gohlke/pythonlibs/来查找
备注:安装python扩展包使用命令 pip install xxxx
三、caffe工具
1、图片转换数据工具
格式:convert_imageset.exe [flags] [图片目录] [图片标签文件.txt] [输出数据文件]
[flags]:--gray=false 是否是灰度图片
--shuffle=false 是否打乱顺序
--backend=lmdb 输出数据类型
--resize_width=0 修改图片的宽度 默认原宽度
--resize_height=0 修改图片的高度 默认原高度
--check_size=false 是否检查图片尺寸
--encoded=false 是否转换图片格式
--encode_type= 设置图片格式
[图片目录]:txt文件中每行的格式是 “图片名 + 空格 + 标签”标签从0开始
命令行例子:--gray=1 --shuffle=1 --backend=lmdb --resize_width=40 --resize_height=40 --check_size=0 -- encoded=0 \seg\ \imageLable.txt \xxxx_train_lmdb
2、生成均值文件
格式:compute_image_mean.exe [flags] [数据文件] [输出均值文件(.proto)]
[flags]: --backend=lmdb 数据类型
3、训练工具 (具体解释引用 https://www.cnblogs.com/denny402/p/5076285.html)
格式:caffe.exe [flags] [train] [test] [device_query] [time]
[flags]: -gpu: 可选参数。该参数用来指定用哪一块gpu运行,根据gpu的id进行选择,如果设置为'-gpu all'则使用所有的gpu运行。如使用第二块gpu运行
# ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt -gpu 2
--solver 必选参数。一个protocol buffer类型的文件,即模型的配置文件
# ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt
-snapshot:可选参数。该参数用来从快照(snapshot)中恢复训练。可以在solver配置文件设置快照,保存solverstate
./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt -snapshot examples/mnist/lenet_iter_5000.solverstate
-weights:可选参数。用预先训练好的权重来fine-tuning模型,需要一个caffemodel,不能和-snapshot同时使用
# ./build/tools/caffe train -solver examples/finetuning_on_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
-iterations: 可选参数,迭代次数,默认为50。 如果在配置文件文件中没有设定迭代次数,则默认迭代50次
-model:可选参数,定义在protocol buffer文件中的模型。也可以在solver配置文件中指定
-sighup_effect:可选参数。用来设定当程序发生挂起事件时,执行的操作,可以设置为snapshot, stop或none, 默认为snapshot
-sigint_effect: 可选参数。用来设定当程序发生键盘中止事件时(ctrl+c), 执行的操作,可以设置为snapshot, stop或none, 默认为stop
刚才举例了一些train参数的例子,现在我们来看看其它三个<command>:
test参数用在测试阶段,用于最终结果的输出,要模型配置文件中我们可以设定需要输入accuracy还是loss. 假设我们要在验证集中验证已经训练好的模型,就可以这样写
# ./build/tools/caffe test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -gpu 0 -iterations 100
这个例子比较长,不仅用到了test参数,还用到了-model, -weights, -gpu和-iteration四个参数。意思是利用训练好了的权重(-weight),输入到测试模型中(-model),用编号为0的gpu(-gpu)测试100次(-iteration)。
time参数用来在屏幕上显示程序运行时间。如:
# ./build/tools/caffe time -model examples/mnist/lenet_train_test.prototxt -iterations 10
这个例子用来在屏幕上显示lenet模型迭代10次所使用的时间。包括每次迭代的forward和backward所用的时间,也包括每层forward和backward所用的平均时间。
# ./build/tools/caffe time -model examples/mnist/lenet_train_test.prototxt -gpu 0
这个例子用来在屏幕上显示lenet模型用gpu迭代50次所使用的时间。
# ./build/tools/caffe time -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -gpu 0 -iterations 10
利用给定的权重,利用第一块gpu,迭代10次lenet模型所用的时间。
device_query参数用来诊断gpu信息。
# ./build/tools/caffe device_query -gpu 0
最后,我们来看两个关于gpu的例子
# ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt -gpu 0,1
# ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt -gpu all
这两个例子表示: 用两块或多块GPU来平行运算,这样速度会快很多。但是如果你只有一块或没有gpu, 就不要加-gpu参数了,加了反而慢。
最后,在linux下,本身就有一个time命令,因此可以结合进来使用,因此我们运行mnist例子的最终命令是(一块gpu):
4、识别工具
格式:classification.exe [deploy.prototxt文件] [训练好的.caffemodel文件] [均值.proto 文件] [标签.txt文件] [图片文件]
五、微调
(具体参见 http://blog.csdn.net/nongfu_spring/article/details/51514040和官方网址 http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html)
1. ImageNet原来是1k个类别,finetune时需要根据自己数据集的类别数重新设置fc8层的output数,且新的fc8层的blob_lr会设的大一些(比如10和20),是为了加快收敛。
2. 如果你的网络中某一层的的参数个数变了,例如AlexNet全连接层输出为1000个,而你的网络只需要做2分类也就是输出两个值,那一定要把该层的 name 换一下,不然caffe 在 finetune 源网络的weight 的时候发现维度不匹配会报错的。
3. 自己数据集的类别号从0开始,中间要连续(我师弟有次finetune数据集一直报错,后来发现他是二类分类,但是类别号设成了0和12)
4. 数据集记得打乱,不然很可能不收敛
5. 如果出现不收敛的问题,可以把solver里的lr设的小一点,一般从0.01开始,如果出现loss=nan了就不断往小调整
6. 可以把accuracy和loss的曲线画出来,方便设定stepsize,一般在accuracy和loss都趋于平缓的时候就可以减小lr了
六、结果分析
1、train loss 不断下降,test loss不断下降,说明网络仍在学习;(最好的)
2、train loss 不断下降,test loss趋于不变,说明网络过拟合;(max pool或者正则化)
3、train loss 趋于不变,test loss不断下降,说明数据集100%有问题;(检查dataset)
4、train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;(减少学习率)
5、train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。(最不好的情况)
七、caffe 代码解析
具体见 http://blog.csdn.net/jiongnima/article/details/55800959
八、mask-R-CNN 图像分割实现
具体见 http://blog.csdn.net/scutjy2015/article/details/78715737
九、windows_caffe 增加 rnn网络的方法
具体见:https://blog.csdn.net/zb1165048017/article/details/59112034
引用:论文来自 《Online and Offline Handwritten Chinese Character Recognition:Benchmarking on New Databases》
中文手写数据集训练识别相关推荐
- Caffe手写数字训练识别 (4)
Caffe手写数字训练识别 在配置caffe后,验证编译是否成功和caffe入门,那我们就从训练手写数字识别开始吧. 用手写数据库MInist数据库: THE MNIST DATABASEof han ...
- 【转载】Windows下Tesseract4.0识别与中文手写字体训练
一 . tesseract 4.0 安装及使用 1. tesseract 4.0 安装 安装包下载地址: http://digi.bib.uni-mannheim.de/tesseract/tesse ...
- Windows下Tesseract4.0识别与中文手写字体训练
一 . tesseract 4.0 安装及使用 1. tesseract 4.0 安装 安装包下载地址: http://digi.bib.uni-mannheim.de/tesseract/tesse ...
- linux手写数字识别opencv,opencv实现KNN手写数字的识别
人工智能是当下很热门的话题,手写识别是一个典型的应用.为了进一步了解这个领域,我阅读了大量的论文,并借助opencv完成了对28x28的数字图片(预处理后的二值图像)的识别任务. 预处理一张图片: 首 ...
- DL之DNN:利用DNN算法对mnist手写数字图片识别数据集(sklearn自带,1797*64)训练、预测(95%)
DL之DNN:利用DNN算法对mnist手写数字图片识别数据集(sklearn自带,1797*64)训练.预测(95%) 目录 数据集展示 输出结果 设计代码 数据集展示 先查看sklearn自带di ...
- DL之NN/CNN:NN算法进阶优化(本地数据集50000张训练集图片),六种不同优化算法实现手写数字图片识别逐步提高99.6%准确率
DL之NN/CNN:NN算法进阶优化(本地数据集50000张训练集图片),六种不同优化算法实现手写数字图片识别逐步提高99.6%准确率 目录 设计思路 设计代码 设计思路 设计代码 import mn ...
- DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率
DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率 导读 上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非 ...
- DL之NN/Average_Darkness/SVM:手写数字图片识别(本地数据集50000训练集+数据集加4倍)比较3种算法Average_Darkness、SVM、NN各自的准确率
DL之NN/Average_Darkness/SVM:手写数字图片识别(本地数据集50000训练集+数据集加4倍)比较3种算法Average_Darkness.SVM.NN各自的准确率 目录 数据集下 ...
- Dataset之Handwritten Digits:Handwritten Digits(手写数字图片识别)数据集简介、安装、使用方法之详细攻略
Dataset之Handwritten Digits:Handwritten Digits(手写数字图片识别)数据集简介.安装.使用方法之详细攻略 目录 Handwritten Digits数据集的简 ...
- Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集)
Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集) 目录 数据集下载的所有代码 1.主文件 mni ...
最新文章
- linux shell 脚本 svn自动更新项目并且打包 、发布、备份
- Delphi动态事件
- 锁相放大器sr830_各位谁会用Stanford SR830啊,我都快被这个锁相放大器折腾死了!!!!-北京搜狐焦点...
- python win+r时不成功_Win与R(不使用Anaconda的情况下)
- JAVA面试题(1~95)《上》
- scrapy commandline
- mysql 授权类型_MySQL-02-授权及数据类型
- PLC控制电机正反转原理图
- 电脑网络问题——IPv4无Internet访问权限
- uniapp遮罩_uni-app 遮罩模板
- 位置式PID与增量式PID区别浅析(百度百科增量式PID讲解思路概念更明确清晰)
- Ubuntu子系统折腾记
- 通过id查用户名php,通过用户名称获取微博id
- 《机器学习实战》——kNN
- 导入shp数据到postgis库
- 派森小镇(三)被抛弃的·小列表
- java物流配货流程的了解_物流案例:配送中心的作业流程及其管理
- iOS开发-写给初学者:OC面向对象的三大特征
- 海浪相关术语波高、浪高等
- VUE+axios渲染数据
热门文章
- 视频捕获增加color space converter + Transform Filter
- Win7系统怎么开启远程桌面?Win7远程桌面怎么用
- 名词后面用过去分词的具体用法是怎么样的?
- 【模拟电子技术Analog Electronics Technology 20】—— 反馈放大电路分析2:各种类型反馈电路的计算分析
- 关于KDIFF3的使用
- linux进程sl是什么,Linux ps state sl+是什么意思
- java中最大最小值
- 服务器基线扫描修复,怎么对服务器进行基线和漏洞扫描
- 联想thinkpad如何关闭触摸板
- 【群晖】VMM安装ubuntu虚拟机+Jenkins