[超详细]在caffe上用alexnet做汉字分类识别

本文详述了如何利用Caffe框架,基于AlexNet模型对汉字进行分类识别的步骤,包括数据准备、制作lmdb数据集、计算均值、编写网络结构与solver文件、训练、部署测试及解决可能遇到的问题。通过生成验证码数据增加训练样本,并展示了训练与识别的结果。

前情提要:在网上找了一类验证码图片,对验证码进行处理后分割得到其上的汉字。在此基础上用alexnet对分割得到的汉字训练识别,测试识别的准确率。由于找的验证码数量不够,所以仿照原验证码类型生成了一波验证码数据。

(先把整个流程纲要和代码部分贴出来,后续的所有截图等我这两天整理好再补充上来。)   ----2018.3.19

 

本文结构:

1.数据准备、制作lmdb数据集         2.计算均值

3.编写网络结构文件                 4.编写solver求解文件

5.训练                             6.编写deploy文件进行测试

7.可能出现的问题

 

1. 数据准备、制作lmdb数据集

保留一部分原图作为测试集,剩下的图按照训练集:验证集=5:1的数量分在两个文件夹内。生成两个标签文件train.txt和val.txt。标签文件内容编写格式为:图片名称.jpg 类别

训练集和验证集可以用原图掺杂自己生成的图,测试集要用原图。

复制并修改caffe中自带的文件(.../caffe-master/examples/imagenet/create_imagenet.sh)将图片数据转换为lmdb格式的数据:

#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e

EXAMPLE=examples/imagenet  #EXAMPLE改成生成的lmdb文件要存放的路径
DATA=data/ilsvrc12         #DATA改成标签文件存放的路径
TOOLS=build/tools        #工具目录最好写绝对路径,我的是/home/hp/software/caffe-master/build/tools
TRAIN_DATA_ROOT=/path/to/imagenet/train/ #改成训练集路径
VAL_DATA_ROOT=/path/to/imagenet/val/ #改成测试集路径

#一定要将图片归一化,否则计算均值时会报错
# 如果图片已经被归一化成相同大小,则RESIZE写false。如果没有,则把RESIZE写true。
RESIZE=false
if $RESIZE; then
  RESIZE_HEIGHT=256 #resize的高度和宽度可自己修改
  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..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $TRAIN_DATA_ROOT \
    $DATA/train.txt \
    $EXAMPLE/ilsvrc12_train_lmdb    #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/ilsvrc12_val_lmdb

echo "Done."

进入改好的create文件目录,在ubuntu终端总敲入sh create_imagenet.sh,然后就可以静等格式转换完成啦。

 

 

2.生成均值文件

复制并修改caffe中自带的文件(.../caffe-master/examples/imagenet/make_imagenet_mean.sh),主要是更改路径

#!/usr/bin/env sh
# Compute the mean image from the imagenet training lmdb
# N.B. this is available in data/ilsvrc12

EXAMPLE=examples/imagenet #改为训练集lmdb所在路径
DATA=data/ilsvrc12  #改为均值文件生成路径
TOOLS=build/tools   #最好改为绝对路径,我的是/home/hp/software/caffe-master/build/tools
$TOOLS/compute_image_mean $EXAMPLE/ilsvrc12_train_lmdb \
$DATA/imagenet_mean.binaryproto

echo "Done."

进入改好的文件所在目录,在终端敲入sh make_imagenet_mean.sh,显示“Done”就发现均值文件已经生成啦吐舌头

生成的均值文件是二进制格式,如果要转换为python格式:复制如下代码,新建convert_mean.py文件,按标亮的Usage方法进行使用就好啦~

#!/usr/bin/env python
import numpy as np
import os
import sys
import glob
import time,datetime
import scipy
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值