Datawhale 零基础入门CV赛事-Task1 赛题理解
1 赛题理解
- 赛题名称:零基础入门CV之街道字符识别
- 赛题目标:通过这道赛题可以引导大家走入计算机视觉的世界,主要针对竞赛选手上手视觉赛题,提高对数据建模能力。
- 赛题任务:赛题以计算机视觉中字符识别为背景,要求选手预测街道字符编码,这是一个典型的字符识别问题。
为了简化赛题难度,赛题数据采用公开数据集SVHN,因此大家可以选择很多相应的paper作为思路参考。
1.2 赛题数据
赛题以街道字符为为赛题数据,数据集报名后可见并可下载,该数据来自收集的SVHN街道字符,并进行了匿名采样处理。

注意: 按照比赛规则,所有的参赛选手只能使用比赛给定的数据集完成训练,不能使用SVHN原始数据集进行训练。比赛结束后将会对Top选手进行代码审核,违规的选手将清除排行榜成绩。
训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置;为了保证比赛的公平性,测试集A包括4W张照片,测试集B包括4W张照片。
需要注意的是本赛题需要选手识别图片中所有的字符,为了降低比赛难度,我们提供了训练集、验证集中所有字符的位置框。
1.3 数据标签
对于训练数据每张图片将给出对于的编码标签,和具体的字符框的位置(训练集、验证集都给出字符位置),可用于模型训练:
top 左上角坐标X
height 字符高度
left 左上角最表Y
width 字符宽度
label 字符编码
字符的坐标具体如下所示:

在比赛数据(训练集和验证集)中,同一张图片中可能包括一个或者多个字符,因此在比赛数据的JSON标注中,会有两个字符的边框信息:


1.4 评测指标
选手提交结果与实际图片的编码进行对比,以编码整体识别准确率为评价指标。任何一个字符错误都为错误,最终评测指标结果越大越好,具体计算公式如下:
Score=编码识别正确的数量/测试集图片数量
1.5 读取数据
为了方便大家进行数据读取,在此我们给出JSON中标签的读取方式:
import json
train_json = json.load(open('../input/train.json'))
数据标注处理
def parse_json(d):
arr = np.array([
d['top'], d['height'], d['left'], d['width'], d['label']
])
arr = arr.astype(int)
return arr
img = cv2.imread('../input/train/000000.png')
arr = parse_json(train_json['000000.png'])
plt.figure(figsize=(10, 10))
plt.subplot(1, arr.shape[1]+1, 1)
plt.imshow(img)
plt.xticks([]); plt.yticks([])
for idx in range(arr.shape[1]):
plt.subplot(1, arr.shape[1]+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([])

1.6 思路和总结
对于这个街景门牌号码的识别,可以类比成验证码的识别过程。其主要方法思路有:
1、采用官方推荐和使用的解法,把不定长字符看成定长,利用cnn+全连接网络进行识别。
2、采用cnn+gru(lstm)+ctc(loss)的方式进行验证码的类似的训练识别,这个准确率之前有做过还是很不错的泛化性的。
3、采用目标检测的方法进行检测识别,可以采用yolo网络去检测识别字符,不过可能要更改yolo的架构才会有一个好的识别率吧。
4、可以直接采用去全卷积网络进行识别cnn+ctc。
总结:对于1.6节之前的部分是主要看的Datawhale官方的解说,对于这个小比赛对于入门的学员还是很不错的,会有一个很好的锻炼,特别给力的是这次数据集有标注,而且有Baseline,大家可以傻瓜式的跑起来。希望我的队友小伙伴,还有参加这次学习的小伙伴都有一个比较大的进步。
网友评论