零基础入门CV赛事—Task 1 街景字符编码识别

一、赛题背景

  • 赛题名称:本次新人赛是Datawhale与天池联合发起的零基础入门系列赛事第二场 —— 零基础入门CV赛事之街景字符识别。
  • 赛题目标:赛题以计算机视觉中字符识别为背景,要求选手预测真实场景下的字符识别,这是一个典型的字符识别问题。通过这道赛题可以引导大家走入计算机视觉的世界,主要针对竞赛选手上手视觉赛题,提高对数据建模能力。
  • 赛题任务:赛题以计算机视觉中字符识别为背景,要求选手预测街道字符编码,这是一个典型的字符识别问题。
    为了简化赛题难度,赛题数据采用公开数据集SVHN,因此大家可以选择很多相应的paper作为思路参考。

二、赛题理解

2.1.测评标准

评价标准为准确率,选手提交结果与实际图片的编码进行对比,以编码整体识别准确率为评价指标,结果越大越好,具体计算公式如下:
score= 编码识别正确的数量/测试集图片数量

​2.2 赛题数据

赛题以街道字符为为赛题数据,数据集报名后可见并可下载,该数据来自收集的SVHN街道字符,并进行了匿名采样处理。
注意:按照比赛规则,只能使用比赛给定的数据集完成训练,不能使用SVHN原始数据集。
训练集包括3W张照片,验证集包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置;为了保证比赛的公平性,测试集A包括4W张照片,测试集B包括4W张照片。

2.3 数据标签

对于训练数据每张图片将给出对于的编码标签,和具体的字符框的位置(训练集、验证集都给出字符位置),可用于模型训练:

Field Description
top 左上角坐标X
height 字符高度
left 左上角坐标Y
width 字符宽度
label 字符编码

字符段的示意如下:
零基础入门CV赛事—Task 1 街景字符编码识别_第1张图片

2.4 解题思路

  • 简单入门思路:定长字符识别
    选择一个定长,将所有的字符段补齐填充再分类,但这个方法需要提前知道字符段的长度,非常有局限性。

  • 专业字符识别思路:不定长字符识别
    在字符识别研究中,有特定的方法来解决此种不定长的字符识别问题,比较典型的有CRNN字符识别模型。
    大话文本识别经典模型:CRNN

  • 在赛题数据中已经给出了训练集、验证集中所有图片中字符的位置,因此可以首先将字符的位置进行识别,利用物体检测的思路完成。
    此种思路需要参赛选手构建字符检测模型,对测试集中的字符进行识别。选手可以参考物体检测模型SSD或者YOLO来完成。

2.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([])**

2.6 数据预处理

pytorch数据预处理

写在后面

我是纯小白入门,编程语言的基础也很薄弱,这个赛事虽然可以从零基础开始学但是学起来也很费力,只能不求甚解的大致了解。配置环境这个过程对小白来说的确太不友好了,代码的理解也是半懂不懂。希望有针对小白一些环境配置上的讲解。

你可能感兴趣的:(零基础入门CV赛事—Task 1 街景字符编码识别)