DataWhale-天池街景数字识别竞赛-task1-赛题理解
背景
2020年5月的DW组队学习选择了天池的街景字符编码识别,在这个入门竞赛中,数据集来自Google街景图像中的门牌号数据集(The Street View House Numbers Dataset, SVHN),并根据一定方式采样得到比赛数据集。而数据集共分为训练集(3W)、验证集(1W)和测试集(4W)。
为了降低难度,比赛提供了数据集中字符的位置框(左上角坐标X,字符高度,左上角坐标Y,字符宽度),并结合字符的编码(label)一起放入到一个json文件中。
评测标准为测试集预测结果的准确率,即编码识别正确的数量占测试集图片数量的比率。
环境搭建
这次比赛的教程是基于pytorch框架的深度学习模型,所以学习前需要配置一下pytorch。
由于几个月前曾经配过1.2版本的pytorch,但后来因为各种原因被我删除了,需要重新配一下。为了方便以后再配置,这里简单写一下这次配置1.5版本pytorch的小感想。
- 流程:利用Anaconda,首先新建虚拟环境,然后conda安装pytorch,然后可以补充安装各种库。
- 以前配环境配多了:上一次配置时,跟着某个教程另外配置了CUDA,CuDnn,感觉有点麻烦,这次完全略过了这一步,经过查找资料,才发现原来一直不用配,除非你直接下了pytorch源码。具体详情。
If you install PyTorch via the binaries (e.g., pip wheels or conda), it already comes with CUDA and cuDNN pre-packaged. The only case where you need to install CUDA & cuDNN yourself is when you are compiling it from source.
----------by rasbt Sebastian Raschka
3.PyTorch下得有点慢:即使配置了清华镜像源,torch包还是下得很慢,下了5、6次才成功了。
4.PyTorch直接可以搭载tensorboard:之前一直不太了解PyTorch中怎么用tensorboard,以及tensorboard与tensorboardX的区别。经过查阅资料,我发现X版本是为了适配tensorflow以外的框架,但由于1.1(大概)以后PyTorch已经可以支持原生tensorboard,所以直接安装tensorboard即可。具体详情。
TensorboardX was an third-party adaptation of the Tensorboard lib for pytorch. However, due to its popularity, it was recently included in the official pytorch repo. So, just use the one on the repo.
------------by tuts_boy
思路简述
本章教程内容由阿水编写。对于这次的字符识别,考虑到每个样本的数字个数虽然不同,但普遍较少,最多也就6个,所以可以统一转化为定长(6个数字)的数字字符识别。
例如,45转化为45XXXX(其中X为填充字符),加上填充字符,就相对于一个11分类的问题,类别为填充字符意味着该位为空。可以搭建一个简单的卷积神经网络对字符进行识别与分类。
除了定长字符识别,还有不定长字符识别,这需要如CRNN这类的模型;对于赛题数据,已经给出了字符所在的位置,但实际上若不给出,还需要进行目标检测,引入物体检测模型SSD或YOLO。
JSON处理代码
以下jupyter代码的链接:在这里
由于赛题需要结合json文件对图片进行预处理,那么就要先熟悉一下利用json库对图片进行处理。
当然,最开始肯定要先看看数据集,由于文件统一以六位数命名,如000000.png、000123.png等,那么我们可以用下面的语句将整型转化为以0补足6位的格式化字符串从而形成路径。(默认在同级的data文件夹下)
num = 123
num_str = '{:0>6d}'.format(num)
path = 'data/mchar_train/'+num_str+'.png'
有了这几条语句,可以获取到训练集、验证集、测试集的图片文件路径,进一步封装成3个函数:
def get_train_path(num: 'int >= 0 && int <= 29999'):if num > 29999 or num < 0:print('index out of bound!')return 'data/mchar_train/'+'000000'+'.png'num_str = '{:0>6d}'.format(num) # 格式化字符串,左边补0 直至6位return 'data/mchar_train/'+num_str+'.png'def get_test_path(num: 'int >= 0 && int <= 9999'):if num > 9999 or num < 0:print('index out of bound!')return 'data/mchar_test_a/'+'000000'+'.png'num_str = '{:0>6d}'.format(num) # 格式化字符串,左边补0 直至6位return 'data/mchar_test_a/'+num_str+'.png'def get_val_path(num: 'int >= 0 && int <= 39999'):if num > 39999 or num < 0:print('index out of bound!')return 'data/mchar_val/'+'000000'+'.png'num_str = '{:0>6d}'.format(num) # 格式化字符串,左边补0 直至6位return 'data/mchar_val/'+num_str+'.png'
如果要读取图片,可以用cv2的imread函数,传入路径即可,展示可以用plt的imshow:
path = get_val_path(12)
img = cv2.imread(path)
plt.imshow(img)
这里展示的是验证集中的000012.png:
下面可以利用json库读取json文件:
train_json = json.load(open('data\mchar_train.json'))
val_json = json.load(open('data\mchar_val.json'))
list(val_json.values())[12]
输出为(居然是13,看起来像19):
{'height': [23, 23],'label': [1, 3],'left': [157, 164],'top': [106, 106],'width': [9, 12]}
下面可以对json文件提供的信息进行提取,返回一个numpy数组,方便后续处理:
# 训练集,验证集的json位置提取,默认0为训练集
def parse_json(num: int, mode=0):num_str = '{:0>6d}'.format(num) + '.png'if mode==0:d = train_json[num_str]elif mode==1:d = val_json[num_str]else:print('Mode error!')return train_json[num_str]arr = np.array([d['top'], d['height'], d['left'], d['width'], d['label']])arr = arr.astype(int)return arr
然后可以定义一个函数进行提取,并结合plt的函数进行展示:
# 训练集,验证集的数字位置提取,默认为训练集
def show_loc(num: int, mode=0):if mode==0:path = get_train_path(num)arr = parse_json(num)elif mode==1:path = get_val_path(num)arr = parse_json(num, 1)else:print('Mode error!')return 'error!'img = cv2.imread(path)shape = arr.shape[1]plt.figure(figsize=(10, 10))plt.subplot(1, shape+1, 1)plt.imshow(img)plt.xticks([])plt.yticks([])for idx in range(shape):plt.subplot(1, shape+1, idx+2)plt.imshow(img[arr[0, idx]:arr[0, idx]+arr[1, idx], arr[2, idx]:arr[2, idx]+arr[3, idx]])plt.title(arr[4, idx])plt.xticks([])plt.yticks([])
若输入:
show_loc(12, 1)
则输出为:
至此,利用json文件对图片数字进行提取的部分就完成了。
最后
此次学习的教程由Datawhale提供,学习手册的链接为:点这里。
DataWhale-天池街景数字识别竞赛-task1-赛题理解相关推荐
- 【算法竞赛学习】二手车交易价格预测-Task1赛题理解
二手车交易价格预测-Task1 赛题理解 一. 赛题理解 Tip:此部分为零基础入门数据挖掘的 Task1 赛题理解 部分,为大家入门数据挖掘比赛提供一个基本的赛题入门讲解,欢迎后续大家多多交流. 赛 ...
- Task1:赛题理解,熟悉blog打卡方式,组队和修改群名片
Task1:赛题理解,熟悉blog打卡方式,组队和修改群名片 相关要求 (3月21日)(打卡截止时间3月21日晚22:00) 1.熟悉活动相关材料内容,熟悉打卡方式 2.确认队伍名.队员昵称3.按照[ ...
- task1 赛题理解
TASK1 赛题理解 本次组队学习的任务是典型的贷款违约问题,即通过所给的关与贷款者的各项字段特征去判断该客户是否是潜在的违约客户,这类题在各类风控问题中常常出现,因为不同银行或机构所掌握的客户信息不 ...
- Task1 赛题理解---zpz
Task1 赛题理解学习记录 项目名称:零基础入门数据挖掘 - 二手车交易价格预测 1 赛题背景 本次的赛题名称为:零基础入门数据挖掘之二手车交易价格预测大赛.赛题以二手车市场为背景,要求选手预测二手 ...
- 零基础入门语义分割——Task1 赛题理解
文章目录 一.赛题数据 二.数据标签 三.评价指标 四.读取数据 比赛地址:零基础入门语义分割-地表建筑物识别 一.赛题数据 遥感技术已成为获取地表覆盖信息最为行之有效的手段,遥感技术已经成功应用于地 ...
- 天池大赛-心跳信号分类预测:赛题理解与baseline解析
比赛地址:零基础入门数据挖掘-心跳信号分类预测 参考资料:由DataWhale开源的学习资料 1. 赛题简介 本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事 -- 心跳信号分类预测. ...
- 零基础入门CV赛事-Task1 赛题理解
文章目录 赛题介绍 解题思路 1. 定长字符识别 2.不定长字符识别 3. 检测再识别 赛题介绍 赛题以街道字符为为赛题数据(比赛地址),该数据来自收集的SVHN街道字符,训练集数据包括3W张照片,验 ...
- 零基础入门CV之街道字符识别 Task1 赛题理解
赛题任务 以计算机视觉中字符识别为背景,要求选手预测街道字符编码,这是一个典型的字符识别问题. 赛题数据 数据来源于公开数据集SVHN街道字符. 提供训练集数据3W张照片,验证集数据1W张照片: 每张 ...
- 零基础入门CV之街道字符识别----Task1赛题的理解
Datawhale 零基础入门CV赛事-Task1 赛题理解 本章内容将会对街景字符识别赛题进行赛题背景讲解,对赛题数据的读取进行说明,并给出集中解题思路. 1 赛题理解 赛题名称:零基础入门CV之街 ...
最新文章
- Open3d 学习计划—13(Azure Kinect)
- jsPlumb之流程图项目总结及实例
- VC6.0使用中遇到的一些问题
- 参考文献顺序不对_Endnote插入参考文献的保姆级教程
- 长春理工大学计算机学院分数线,2021长春理工大学录取分数线-长春理工大学分数线-2021长春理工大学录取查询网址...
- 分别统计出其中英文字母、空格、数字和其它字符的个数 matlab 程序,编写一段程序,要求先输入一行字符,然后分别统计出其中英文...
- Windows Phone 内容滑动切换实现
- jquery.pin 修改浮动的top元素
- 仿京东账户设置APP模板
- C++项目开发注意事项--持续更新
- 今天有个销售员在问我:“自己每天都有在学习,但是为什么感觉没什么用,进步不大。”
- 有向有权图的电阻------给你出道题
- 51单片机mysql_[学习笔记]15个QA让你快速入门51单片机开发
- Java 并发编程的艺术
- Excel中实现隔行删除
- argmin函数解析
- 如何给 Windows 和 npm 加上 socks 代理
- 爬王者荣耀图片源码,战国
- 单火开关研发经验总结
- 使用拼音搜索中文(转载)