赛题入口
学习目标
- 理解赛题背景和赛题数据
- 完成赛题报名和数据下载,理解赛题的解题思路
了解赛题
1.赛题数据
- 赛题以街道字符为为赛题数据,该数据来自收集的SVHN街道字符,并进行了匿名采样处理。
- 训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置
- 测试集A包括4W张照片,测试集B包括4W张照片。
2.数据标签
- 对于训练数据每张图片将给出对于的编码标签,和具体的字符框的位置(训练集、验证集都给出字符位置),用于模型训练
- 样例
训练集图片
对应json标签
"000000.png": {"height": [219, 219], "label": [1, 9], "left": [246, 323], "top": [77, 81], "width": [81, 96]}
- 解读
Field | Description |
---|---|
top | 内部具体字符框的左上角y坐标 |
left | 内部具体字符框的左上角x坐标 |
height | 内部具体字符框高度 |
width | 内部具体字符框宽度 |
label | 内部具体字符框编码(类别) |
对位位置
3.评测指标
-
选手提交结果与实际图片的编码进行对比,以编码整体识别准确率为评价指标。任何一个字符错误都为错误,最终评测指标结果越大越好,具体计算公式如下:
Score=编码识别正确的数量/测试集图片数量
4.数据读取
- json标签的读取及图片的显示
例图
python处理代码
import cv2
import json
import numpy as np
train_json = json.load(open('./train_json.json'))
img = cv2.imread('./imgs/000000.png')
# 数据标注处理
def parse_json(d):
arr = np.array([
d['top'], d['height'], d['left'], d['width'], d['label']
])
arr = arr.astype(int)
return arr
arr = parse_json(train_json['000000.png'])
print(arr)
colors = (0, 0, 255)
for num in range(0, len(arr[0])):
img_copy = img.copy()
cv2.rectangle(img_copy, (arr[2][num], arr[0][num]), (arr[2][num]+arr[3][num], arr[0][num]+arr[1][num]), colors, 5)
cv2.putText(img_copy, str(arr[4][num]), (20, 150), cv2.FONT_HERSHEY_COMPLEX, 5.0, (0, 0, 255), 2)
cv2.imwrite('./0_{}.jpg'.format(num), img_copy)
num+=1
5.解题思路
初步想法:训练图片检测与图片分类两个模型分别用于字符位置的识别与字符类别的判断
图片检测模型
- 采用常用目标检测算法,如Faster-RCNN,YOLO,Pelee等搭建字符识别网络
- 框架可采用个人是熟悉的框架,如Tensorflow, Pytorch,Keras等
- 输入图片,以字符位置坐标作为label
图片预处理
- 将检测模型输出的图片进行切割,分割框选出的字符图片
- 将分割后的图片进行二值化处理,便于后续模型的训练
- 可将二值化的图片进行数据增强,提高模型的泛化能力
图片分类模型
- 可采用熟悉框架搭建图片分类网络
- 输入为二值化后的字符图片,label为字符类别,此项目采用10个类别的分类