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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前情提要:在网上找了一类验证码图片,对验证码进行处理后分割得到其上的汉字。在此基础上用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.io as scio

caffe_root='/home/data/caffe/'
import sys
sys.path.insert(0,caffe_root+'python')
import caffe


if len(sys.argv)!=3:
    print "Usage: python convert_mean.py mean.binaryproto mean.npy"
    sys.exit()
    
#python convert_mean.py mean.binaryproto mean.npy
blob = caf
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值