前言:这是为验证码识别竞赛而开发的一个基于pytorch实现的端到端的验证码识别系统。前后开发大概有2个月,其中大部分时间都在调参,后期参考kaggle大神经验,加入了一些trick,但是由于第一个榜截止了,所以没有得到测试集结果,只有验证集的参考结果。该库比较简单,适合入门竞赛,不过调参难度比较大,需要尝试合适的超参数,如果超参数不合适,可能会导致无法收敛,具体问题还需具体分析。

作者:pprp

编辑:BBuf

1. 竞赛背景

本次比赛是全国高校计算机能力挑战赛中的人工智能赛道里的验证码识别,该比赛需要识别26(大写)+26(小写)+数字(10)= 62个字符,随机组成的四位验证码图片。

2. 赛题分析

训练集仅有5000张,而所有的数字组合有

个组合。

验证码识别的难度系数较大,人眼也很容易识别出错。

噪声比较严重,存在遮挡字符的情况。

3. 数据集

1575527368225

比赛提供的数据集如上图所示,120

40的像素的图片,然后标签是由图片名称提供的。

训练集测试集划分:80%的数据用于训练集,20%的数据用于测试集。

训练图片个数为:3988

测试图片个数为:1000

训练的数据还是明显不够的,考虑使用数据增强,最终选择了Augmentor库作为图像增强的库。Augmentor库很适合做图像分类的数据增强。由于验证码与普通的分类图片有一定区别,所以选择的增强方式有一定局限,比如不能翻转,不能左右颠倒,不能crop等, 但是也有一些比较好用的方法,比如说distortion(弹性变形), perspective skewing (透视偏斜),图片缩放等方法也适用于验证码识别。

经过几轮实验,最终选取了distortion类的方法作为具体增强方法,输入为训练所用的图片,输出设置为原来图片个数的2倍,具体代码见dataAug.py, 核心代码如下:

def get_distortion_pipline(path, num):p = Augmentor.Pipeline(path)p.zoom(probability=0.5,min_factor=1.05,max_factor=1.05)p.random_distortion(probability=1,grid_width=6,grid_height=2,magnitude=3)p.sample(num)if __name__ == "__main__":# 生成训练集两倍的数据量get_distortion_pipline("path to image folder", 2 * len(train_folder))

将得到的图片重命名为auged_train文件夹,最终数据集组成如下:

root|---data|--- train:3988张|--- test:1000张|--- auged_train:7976张

训练流程是每隔epoch先遍历train文件夹,然后遍历auged_train文件夹,最后对test文件夹进行一次测试,完成一次遍历。PS:数据集下载链接在文末。

4. Trick总结

上图就是整个验证码识别的流程图,也是baseline, 在此基础上可以使用很多分类网络中用到的trick。

比赛从以下几个角度进行调参优化:

调整超参数:

CosineAnnealingLR

ReduceLROnPlateau

StepLR

MultiStepLR

GradualWarmupScheduler(warm up)

Learning Rate 调整

decay参数调整

learning rate scheduler尝试:

更改优化器:

Adam优化器

RAdam优化器

AdamW优化器

AdaBound优化器(尝试过后效果很差,网络不收敛,可能是由于超参数设置问题)

数据增强

augmentor库中的distortion方法

attention机制

尝试se模块

修改backbone:

添加dual pooling 模块

添加bnneck模块

添加ibn模块

senet

densenet

resnet18

更换loss:

使用center loss+CrossEntropyLoss,收敛比较慢,对参数敏感

5. 调参过程记录

调参过程记录:null代表未记录

Name

item1

item2

item3

item4

item5

测试:线上

baseline0

Ret18

lr=1e-3

4:1划分

Adam

88%:84%

baseline1

Res34

lr=1e-3

4:1划分

Adam

90%:84%

baseline2

Res18

lr=1e-3

4:1划分

RAdam

null:90%

baseline3

Res18

lr=3e-4

4:1划分

RAdam

未收敛

baseline4

Res18

lr=1e-1

4:1划分

RAdam

96.4%:87%

baseline5

Res18

lr=1e-1

4:1划分

RAdam

aug0

98%:93%

baseline6

Res18

lr=1e-1

9:1划分

RAdam

aug1

60%:null

baseline7

Res18

lr=1e-3

4:1划分

RAdam

aug2

null:94%

baseline8

Res18

lr=1e-3

4:1划分

AdamW

aug2

98.4%:92.56%

baseline9

Res18

lr=1e-3

4:1划分

RAdam

aug3

null:93.52%

baseline10

Res18

lr=1e-3

4:1划分

RAdam

aug4

null:94.16%

baseline11

Res18

lr=1e-3

9:1划分

RAdam

aug5

60%:null

baseline12

Res18

lr=3.5e-4

4:1划分

RAdam

aug2

null:94.72%

baseline13

Res18

lr=3.5e-4 decay:6e-4

4:1划分

RAdam

aug2

null:95.16%

baseline14

Res18

lr=3.5e-4 decay:7e-4

4:1划分

RAdam

aug2

bad

baseline15

Res18

lr=3.5e-5 decay:6.5e-4

4:1划分

RAdam

aug2

null:95%

baseline16

Res18

lr=3.5e-5 decay:6.5e-4

4:1划分

RAdam

drop(0.5)

null:97%

以上的aug代表数据增强:

aug0: +distrotion

aug1: 9:1划分+扩增3倍

aug2: +distortion+zoom

aug3: +tilt+扩增两倍

aug4: aug2+aug3混合

aug5: 9:1划分 +tilt倾斜

数据增强示意图:

example1

example2

example3

后期尝试的主要方案有以下:

learning rate scheduler尝试:CosineAnnealingLR, ReduceLROnPlateau,StepLR,MultiStepLR

更改backbone: senet, densenet

在res18基础上添加:attention机制,dual pooling, ibn模块,bnneck等

尝试center loss,收敛很慢,但是效果应该不错

还未尝试的方案:

label smooth

多模型ensemble

6. 相关链接

augmentor API:https://augmentor.readthedocs.io/en/master/index.html

链接:https://pan.baidu.com/s/13BmN7Na4ESTPAgyfBAHMxA 提取码:v4nk

增强后的数据集,建议使用dataset2

后记:整个比赛下来得到了一等奖,整个过程可谓过山车一般,比赛还没有放榜的时候,觉得问题不会很难,因为提前查看了网上的验证码库,研究了一下发现,大部分验证码都很简单,比较清晰,但是这次验证码下来以后就发现难度比较大。之后就选择了一个能达到80%准确率的baseline开始调整。其中比较有感触的是比赛结束前突发奇想,加入了dropout,效果一下提升了很多,榜一排名到了30左右。

计算机能力挑战赛是线上的吗,全国高校计算机能力挑战赛验证码识别竞赛一等奖调参经验分享...相关推荐

  1. 计算机二级vb考试大纲与样卷,全国高校计算机等级考试广西二级VB考试大纲和模拟试卷.doc...

    全国高校计算机等级考试广西二级VB考试大纲和模拟试卷 PAGE PAGE 13 全国高校计算机等级考试 (广西考区)二级考试大纲 考试科目: <Visual Basic.NET程序设计> ...

  2. 2013 全国高校计算机等级考试(广西考区)一级笔试试题,全国高校计算机等级考试(广西考区)一级笔试试题卷.PDF...

    全国高校计算机等级考试(广西考区)一级笔试试题卷 全国高校计算机等级考试(广西考区)一级笔试试题卷 2009 年 6 月 27 日 闭卷考试 考试时间:60 分钟 考试类别:[7] 试卷种类:[A] ...

  3. 2013年6月22日全国高校计算机联合考试广西考区一级笔试试题,全国高校计算机联合考试(广西考区)一级笔试试题卷6月25日b...

    全国高校计算机联合考试(广西考区)一级笔试试题卷 2011年6月25日闭卷考试考试时间:60分钟 试卷种类:[B] 考生注意:①本次考试试卷种类为[B],请考生务必将答题卡上的试卷种类栏中的[B]方格 ...

  4. 2013年6月22日全国高校计算机联合考试广西考区一级笔试试题,全国高校计算机联合考试(广西考区)一级笔试试题卷2010年6月26日A.doc...

    全国高校计算机联合考试(广西考区)一级笔试试题卷2010年6月26日A 全国高校计算机联合考试 广西考区 一级笔试试题卷 2010年6月26日闭卷考试考试时间:60分钟 试卷种类:[A] 考生注意:① ...

  5. 2013 全国高校计算机等级考试(广西考区)一级笔试试题,全国高校计算机等级考试广西考区一级笔试试题卷...

    全国高校计算机等级考试广西考区一级笔试试题卷 全国高校计算机等级考试广西考区一级笔试试题卷 2004后6月 试卷种类:A考试时间:60分钟 考生注意:①本次考试全部选择题,每题下都有四个备选答案,但只 ...

  6. 第26届中学生计算机大赛,南京中学生自编APP获全国高校计算机大赛一等奖

    英文打字速度和正确率是国际高中的学生需要经常练习的一项能力,在各种标化考试中非常重要.目前,练习.测试这项能力比较普遍的软件乱码频现."作弊"诀窍,让其功能性大打折扣.近日,南外仙 ...

  7. 非科班Java尝试全国高校计算机能力挑战赛第三届计挑赛

    写在前面:①大佬勿在意,小打小闹!②若不决参加与否,希望下文可以给你帮助(仅限程序设计赛项). 文章目录 一.个人真实情况 二.比赛最细简介 三.最全参赛准备 四.比赛时候遇到不会做怎么办? 一.个人 ...

  8. 全国高校计算机能力挑战赛

    CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:大学生竞赛指南 话题描述: ...

  9. 全国高校计算机能力挑战赛真题(二)

    全国高校计算机能力挑战赛Java模拟练习题(二) 竞赛官网:http://www.ncccu.org.cn/ 全国高校计算机能力挑战赛真题(一) 1.模拟时间:90分钟 2.单选题15题(每题3分), ...

最新文章

  1. 数据仓库数据模型之:极限存储--历史拉链表
  2. 将AI落地到福州、贵阳的「幕后推手」,到底在想些什么?
  3. Django目录结构说明
  4. java注销对话框_【java小程序实战】小程序注销功能实现
  5. 隐马尔科夫模型C#类库调用示例
  6. jdbc mysql 源码_【JDBC系列】从源码角度理解JDBC和Mysql的预编译特性
  7. MySQL 基础知识(基本架构、存储引擎差异)
  8. Oracle命令--如何查看oracle中创建的所有目录
  9. Spring Boot(17)配置文件解析
  10. Spring : 静态代理模式和JDK、CGLIB动态代理
  11. 源文件和头文件的区别
  12. 利用空闲服务器搭建frps服务端-实现穿透代理
  13. Socket实战——Teardrop代码编程
  14. 辅导班师资力量介绍!
  15. 宜家订单JSON_在宜家网上商城购物是一种什么体验?
  16. 大白话Vue之publicPath
  17. 逆风撑船,文旅地产的前方是什么?
  18. 高考决定命运吗?高中毕业,我用十年从深圳流水线厂妹做到谷歌高薪程序员
  19. 修订版开源项目成功的十条准则
  20. C/C++趣味程序设计百例(11~20)

热门文章

  1. IntelliJ 平台 2020 年路线图
  2. 硬核推荐:博主神器OpenWrite,免费的一文多发平台,无需部署,注册即用,安全可靠!...
  3. IntelliJ IDEA 2019 快捷键终极大全,速度收藏!
  4. docs邮箱服务器,邮件服务器更换域名
  5. html网页共用头部和脚部,如何在HTML不同的页面中,共用头部与尾部?_html/css_WEB-ITnose...
  6. IJCV2021 人脸关键点检测器PIPNet
  7. 透明物体分割学习笔记
  8. EfficientNetV2 笔记
  9. torch.mean
  10. 表格检测开源网络推荐