前言
    随着大数据时代,人工智能时代的到来,深度学习的应用越来越广,场景识别、目标检测、人脸识别、图像识别等等广泛应用。而我们的业务场景需要进行验证码识别,接入第三方打码平台产生费用较大,故此我引入了深度学习框架来降低成本。

    一、CC框架的简介
    CC框架,是一个由Caffe包装的一个深度学习应用框架。一个简单易用的DLL接口库,一套训练的解决方案和部署的解决方案,也是一个完全开源免费的公开项目。GitHub地址:https://github.com/dlunion/CC4.0

    CC的特性有:

    支持最新的人脸识别训练,Center Loss。

    支持目标检测训练,SSD。

    支持CPU、GPU、Win32、x64。

    支持快速深度学习项目部署,只有极少的依赖项。

    支持GPU高性能服务,也支持易语言实现GPU高性能服务。

    支持模型压缩功能。

    支持LSTM+CTC、多标签,便于OCR、验证码识别。

    有C++、C#、易语言调用案例。

    非常容易使用而且稳定。

    二、步骤
    1、样本采集
    采集样本后需命名正确的验证码作为名称,不想手动修改的可采用第三方打码平台打码时记录下来,我这里采集了1500张图片作为样本。

    2、生成标签文件

    3、生成数据库
    使用make-lmdb.bat生成数据库

    4、生成网络
    分类数量看 label-map.txt 的行数

    image.png

    5、开始训练
    使用train-gpu.bat开始训练。

    耐心等待,机器显卡性能不好的话时间会比较长,直到出现accuracy = 1,我们就可以停止了。

    训练好的文件,选取最后一个库就可以了。

    6、调用识别
    使用训练好的文件识别 100%通过 没有错误的。

    三、超参数的意义
    在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。

    下面介绍超参数的意义及参数

    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)