视频下载及ppt下载:https://share.weiyun.com/26f28387d2cea9461d0f5e2fd8ff87ab
大纲总览
深度学习下的验证码识别教程 点我查看
1.实际操作训练验证码
由于这次发布,训练默认使用的网络是LeNet,而LeNet虽然识别时间很短,但是效果有限只能对付简单的验证码。所以建议大家采用NIN来训练,NIN基本可以应付绝大部分验证码,NIN的训练一定要记住,需要用nin的imagenet数据集模型来微调
NIN微调网络下载:http://www,zifuture,com/fs/6,models/nin_imagenet,caffemodel 训练好的网络:http://www,zifuture,com/fs/6,models/lenet_iter_5000,caffemodel 训练中的log日志:http://www,zifuture,com/fs/6,models/train,log log中可以看到网络构建的详细信息 网络可视化工具:http://www,zifuture,com/caffenet/Netscope,html#/editor
超参数的意义 net:"train_val.prototxt" 指定网络文件路径 test_iter:4 指定测试时需要迭代多少次 test_interval:300 指定训练迭代多少次执行一次测试 test_initialization:false 指定初始化完毕后不要测试 display:40 指定每40次迭代输出一次信息 average_loss:40 指定40次loss求平均 base_lr:0.001 指定基础学习率为0.001 lr_policy:"step" 指定学习率策略是step stepsize:320000 指定学习率的步距是320000 gamma:0.96 指定学习率γ系数0.96 max_iter:10000000 指定最大迭代次数1000万次 momentum:0.9 指定阻力系数0.96 weight_decay:0.0002 指定权重衰减项 snapshot:40000 指定多少次保存一次快照 snapshot_prefix:"models/googlenet" 指定快照保存的路径前缀 solver_mode:GPU 指定训练的方式
batch_size分为train的和val的batch_size,即指train_lmdb数据集上,和val_lmdb数据集上对于迭代次数的设置,记得要让迭代次数跑完全部的训练图片,即至少一个epochs(一个完整的训练图片迭代)。1epochs = 在数据集上迭代完全部样本需要的次数,如果数据集有100个图,batch_size是5,则1epochs = 100 / 5 = 20,意味着1个epochs是20次迭代。
所以: max_iter:一般设置为30个epochs(指train_lmdb),可以大致估算就行,不一定要准确计算 test_iter:设置为1epochs,即test的batch_size*test_iter= val_lmdb的样本总数 test_interval:设置为1个epochs(这里是train_lmdb)
2.一些比较关心的事情 做到这一步,大家会比较关心以下问题: 1.动态位数验证码可以识别吗? 可以 2.怎么做到更多位的识别? 只需要简单的修改即可 3.怎么调用他完成识别任务? cc提供有案例,我们可以实际操作一下 4.汉字或者复杂的验证码怎么做好? 可以用resnet系列,比如resnet50能做到很好效果 5.比如坐标类的复杂验证码如何识别 这个后续课程会讲到
3.一些异常的处理 caffe的异常常常是以程序崩溃来表现出来,因此很多操作容易导致程序直接崩溃,这不是bug,而是发生比如参数或者哪里错误,他这里的崩溃其实是断言错误而提示出来的,这时候你得看黑色屏幕里面提示的信息来debug
部署时正确的错误检查方法,是使用CC3.0-alpha.4目录下的debug.e(如果是其他语言,也一样在控制台界面中执行)的形式,在控制台程序中,运行模型和识别程序,此时,如果有异常会在黑窗口提示出来。确定没问题再集成到软件中.
|