caffe 训练手写字体HWDB1.1trn_gnt.zip HWDB1.1tst_gnt.zip并测试完整超详尽攻略
工作中你老子要用到物体识别,也有用到OCR识别,因为深度摄像头对玻璃和透明物体拿不到深度距离。所以用这种办法来配合获取识别物体坐标。
首先,我需要强调的是,印刷体的汉字OCR识别你直接调用接口AT两家都可以,自己去搜API。
第二,我做的这个是手写体,因为手写比印刷体复杂至少一万倍,所以增加了训练难度。它比caffe2训练mask训练难多了。
第三,老子开始跟你说怎么搞了:
1、准备数据集,去这个网站下载这两个zip文件:
http://www.nlpr.ia.ac.cn/databases/handwriting/Download.html
HWDB1.1trn_gnt.zip
HWDB1.1tst_gnt.zip
其中一个训练集,一个测试集,前者应该是训练,后者测试。
解压完成后,你会发现文件夹乱码,于是,要用convmv这个工具,在两个目录下分别执行
convmv -f GBK -t UTF-8 --notest -r ./
不要把数据集和测试集放在一个文件夹,否则执行完你就傻逼了。
搞好了往下走。
2、把所有图片生成标签txt和lmdb文件。
用两个文件搞定。
biaoqian.py
-------------------------------------------------
#-*-coding:utf-8-*-
import os
def IsSubString(SubStrList,Str):
flag=True
for substr in SubStrList:
if not(substr in Str):
flag=False
return flag
def GetFileList(FindPath,FlagStr=[]):
FileList=[]
FileNames=os.listdir(FindPath)
if len(FileNames)>0:
for fn in FileNames:
if len(FlagStr)>0:
if IsSubString(FlagStr,fn):
fullfilename=os.path.join(FindPath,fn)
FileList.append(fullfilename)
else:
fullfilename=os.path.join(FindPath,fn)
FileList.append(fullfilename)
if len(FileList)>0:
FileList.sort()
return FileList
train_txt=open('train.txt','w')
classfile=GetFileList('train/')
for count in range(0,len(classfile)):
str_class=classfile[count]
imgfile=GetFileList(str_class)
for count_img in range(0,len(imgfile)):
str_img=imgfile[count_img]+' '+str(count)+'\n'
train_txt.writelines(str_img)
train_txt.close()
val_txt=open('val.txt','w')
classfile2=GetFileList('val/')
for count2 in range(0,len(classfile2)):
str_class2=classfile2[count2]
imgfile=GetFileList(str_class2)
for count_img in range(0,len(imgfile)):
str_img2=imgfile[count_img]+' '+str(count2)+'\n'
val_txt.writelines(str_img2)
val_txt.close()
print("成功生成文件列表")
---------------------------------------
里面细节得自己改。要保证标签和文件夹一一对应。
lmdb文件转化
create_imagenet.sh
-----------------------------------
#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e
EXAMPLE=/home/victor/caffe/My_Files/Build_lmdb/ #生成模型训练数据文件夹,即create_imagenet.sh所在文件夹
DATA=/home/victor/dataset/ #python脚本处理数据路径,即生成的文件列表.txt文件所在文件夹
TOOLS=/home/victor/caffe/build/tools/ #caffe的工具库,不用更改
TRAIN_DATA_ROOT=/home/victor/dataset/ #待处理的训练数据
VAL_DATA_ROOT=/home/victor/dataset/ #待处理的验证数据
# Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool.
RESIZE=true #是否需要对图片进行resize
if $RESIZE; then
RESIZE_HEIGHT=256
RESIZE_WIDTH=256
else
RESIZE_HEIGHT=0
RESIZE_WIDTH=0
fi
if [ ! -d "$TRAIN_DATA_ROOT" ]; then
echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \
"where the ImageNet training data is stored."
exit 1
fi
if [ ! -d "$VAL_DATA_ROOT" ]; then
echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \
"where the ImageNet validation data is stored."
exit 1
fi
echo "Creating train lmdb..."
rm -rf $EXAMPLE/train_lmdb
rm -rf $EXAMPLE/val_lmdb #删除已存在的lmdb格式文件,若在已存在lmdb格式的文件夹下再添加lmdb文件,会出现错误
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$TRAIN_DATA_ROOT \
$DATA/train.txt \
$EXAMPLE/train_lmdb
echo "Creating val lmdb..."
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$VAL_DATA_ROOT \
$DATA/val.txt \
$EXAMPLE/val_lmdb
echo "Done."
---------------------------------------------------------------
以上数据集已经搞定完,请注意convert_imageset是build生成的exe文件。自己搜下看在哪里。
最终你注意了在你的datasets文件夹下面会生成两个txt文件,train.txt,val.txt,分别是图片的路径,再加上了标签的阿拉伯数字。
然后在你的caffe目录下有myfiles/buildlmdb/文件夹里面有两个文件夹,每个文件夹理由两个lmdb文件,其中一个lock比较小。
3、训练开始
接下来要去models/bvlc_googlenet文件下面把3个txt文件都cp到你的My_Files/Build_lmdb/里,然后非常有用。mb,
我告诉你3个文件分别是干哈的:
solver.prototxt这个鸟文件你至少需要调整4个参数:
我也是经过一番尝试才知道的:
第一,改基础学习率,基本要加1个0.
第二,改maxinter,就是至少10000,如果你牛B,改到10万,我也没意见。
第三,改test_iter: ,这个时候你要稍微动点脑子,你去train_val.protxt里面找test下面的batch_size是多少,基本这个算法是你test下面有多少张图片,除以这个batch_size=50,比方说是3667.你就把这个test_iter改成3700.
第四,test_interval: 就是test里面的batch_size
train_val.protxt这个鸟文件你基本改2个地方:
分别是路径
source: "examples/imagenet/ilsvrc12_train_lmdb"换成你自己的????
source: "examples/imagenet/ilsvrc12_val_lmdb"换成你自己的???????????
如果你上环节你都做完了,你执行下面命令
build/tools/caffe train -solver My_Files/Build_lmdb/solver.prototxt。
你看看训练过程的几个参数有没有变化
acuuracy有没有趋向1;
loss有没有下降趋向0;
如果没变化,可能参数要调整。
以上最终训练结果会生成一个文件,
solver_iter_10000.caffemodel,这个文件是你要用它测试图片的模型。
然后你写一个脚本来执行。
建一个preditct文件夹,放几张你要识别的图片,写一个predict.py脚本文件
-----------------------
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import cv2
import numpy as np
import sys
import os
import caffe
def GetFileList(dir, fileList):
newDir = dir
if os.path.isfile(dir):
fileList.append(dir.decode('gbk'))
elif os.path.isdir(dir):
for s in os.listdir(dir):
newDir=os.path.join(dir,s)
GetFileList(newDir, fileList)
return fileList
if __name__=='__main__':
caffe_root='/home/victor/caffe/'
sys.path.insert(0,caffe_root+'python')
os.chdir(caffe_root)
net_file='/home/victor/caffe/My_Files/Build_lmdb/deploy.prototxt'
caffe_model='/home/victor/caffe/My_Files/Build_lmdb/solver_iter_10000.caffemodel'
mean_file='/home/victor/caffe/My_Files/Build_lmdb/mean.npy'
net=caffe.Net(net_file,caffe_model,caffe.TEST)
transformer=caffe.io.Transformer({'data':net.blobs['data'].data.shape})
transformer.set_transpose('data',(2,0,1))
transformer.set_mean('data',np.load(mean_file).mean(1).mean(1))
transformer.set_raw_scale('data',225)
transformer.set_channel_swap('data',(2,1,0))
imagenet_labels_filename='/home/victor/dataset/train.txt'
labels=np.loadtxt(imagenet_labels_filename,str,delimiter='\t')
MyPicList=GetFileList('/home/victor/caffe/My_Files/Build_lmdb/2',[])
for imgPath in MyPicList:
img=caffe.io.load_image(imgPath)
img=img[...,::-1]
net.blobs['data'].data[...]=transformer.preprocess('data',img)
out=net.forward()
top_k=net.blobs['prob'].data[0].flatten().argsort()[-1:-5:-1]
print('------------------------')
print(labels[top_k[0]]+'\n')
如果结果预测得正确,说明你的训练模型没问题。我的不正确。不知道哪里出问题了。重新搞文件数据。
caffe 训练手写字体HWDB1.1trn_gnt.zip HWDB1.1tst_gnt.zip并测试完整超详尽攻略相关推荐
- Dataset之Handwritten Digits:Handwritten Digits(手写数字图片识别)数据集简介、安装、使用方法之详细攻略
Dataset之Handwritten Digits:Handwritten Digits(手写数字图片识别)数据集简介.安装.使用方法之详细攻略 目录 Handwritten Digits数据集的简 ...
- linux手写数字识别,OpenCV 3.0中的SVM训练 mnist 手写字体识别
前言: SVM(支持向量机)一种训练分类器的学习方法 mnist 是一个手写字体图像数据库,训练样本有60000个,测试样本有10000个 LibSVM 一个常用的SVM框架 OpenCV3.0 中的 ...
- AI基础:KNN与K近邻距离度量说明、利用KNN手写字体识别分类实践
KNN k近邻 文章目录 KNN算法 K近邻中近邻的距离度量 欧式距离 标准化欧式距离 曼哈顿距离 汉明距离 夹角余弦 杰卡德相似系数 皮尔逊系数 切比雪夫距离 闵可夫斯基距离 马氏距离 巴氏距离 各 ...
- 用tensorflow框架和Mnist手写字体,训练cnn模型以及测试一张手写字体
感想 首先我是首先看了一下莫凡pyhton教程中tensorflow python搭建自己的神经网络教程以及查看了官方的教程TensorFlow中文社区-MNIST进阶教程,这里面只是有简单的测试出来 ...
- 【转载】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 ...
- 用c语言实现knn算法要有训练集和测试集,KNN算法实战:手写字体识别
我们已经知道手写字体数据集是一个8×8的矩阵,共有64个特征.让我们看一下K最近邻算法对手写字体数据集处理的效果. 1) 导入相关包 这里我们将用到 datasets 中的手写字体数据,使用 trai ...
- Caffe MNIST 手写数字识别(全面流程)
目录 1.下载MNIST数据集 2.生成MNIST图片训练.验证.测试数据集 3.制作LMDB数据库文件 4.准备LeNet-5网络结构定义模型.prototxt文件 5.准备模型求解配置文件_sol ...
- java识别手写文字_神经网络入门 第6章 识别手写字体
前言 神经网络是一种很特别的解决问题的方法.本书将用最简单易懂的方式与读者一起从最简单开始,一步一步深入了解神经网络的基础算法.本书将尽量避开让人望而生畏的名词和数学概念,通过构造可以运行的Java程 ...
最新文章
- 在 vSphere Client(Vcenter 管理中心) 中迁移虚拟机(从一台物理主机迁移到另一台物理主机)
- 『设计模式』我就要一个对象,你别给我这么多好不好!---单例模式
- linux和GNU之间的关系
- SubRenamer – 字幕批量重命名,自动匹配视频文件与字幕文件[Windows]
- ubuntu-kylin16.04搭建lamp环境。
- 中国双色向滤光镜行业市场供需与战略研究报告
- Delphi 与 DirectX 之 DelphiX(93): TDIB.DrawDarken();
- BZOJ3531-[Sdoi2014]旅行(树剖+线段树动态开点)
- 中级通信工程师证书有什么用
- 了解KVM切换器的四种类形
- c语言解三色旗问题加注释,三色旗问题(Three
- 通信专业考研就业专栏
- 中台渐入佳境,云徙科技的有所为与有所不为
- 线上引流方法有哪些?怎么做线上引流推广?
- 安卓访客模式_如何设置Android访客模式以及为什么要这么做 | MOS86
- Pytorch训练速度更快的十七种方法
- 华为无线设备配置动态负载均衡
- extreme Table 使用
- 精品基于Uniapp+SSM实现的安卓的掌上校园系统
- 2023 弹幕播放器解析源码
热门文章
- 读书清单(2011/01 - 2011/12)
- 自动售货机发展优势你了解多少?
- pip 下载速度慢,导致报错:pip._vendor.urllib3.exceptions.ReadTimeoutError……
- 云可以省钱吗? 这些公司说是
- 学习3dmax游戏建模一定要美术基础很高吗?入门游戏模型怎么做
- 灯串UL588认证是什么?亚马逊季节性电子装饰产品UL588
- 计算机考研复试常问问题 计算机网络篇
- 如何用Java实现网络中国象棋室(一)
- npm run serve 报“npm ERR! enoent ENOENT: no such file or directory, open ‘C:\Users\XXX\web_page“ 错误
- 焊接中的计算机应用,计算机技术在焊接课程中的应用