CV實戰-街景字符編碼識別-task1賽題理解

賽題理解

  • 賽題是計算機視覺典型的字符識別問題,通過Pytorch下實現預測街道字符編碼。

本輪目標

  • 理解賽題背景和賽題數據
  • 完成賽題報名和數據下載,理解賽題的解題思路

賽題數據

訓練集包括3W張照片,驗證集數據包括1W張照片,每張照片包括顏色圖像和對應的編碼類別和具體位置;測試集A包括4W張照片,測試集B包括4W張照片。

 

數據標籤

爲了降低比賽難度,提供了訓練集、驗證集中所有字符的位置框,可用於模型訓練:

Field Description
top 左上角座標X
height 字符高度
left 左上角最表Y
width 字符寬度
label 字符編碼

字符的座標具體如下所示:

文章首發:公衆號『知秋小一』

評測指標

以編碼整體識別準確率爲評價指標,具體計算公式如下:Score=編碼識別正確的數量/測試集圖片數量

讀取數據

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

解題思路

賽題思路分析:賽題本質是分類問題,需要對圖片的字符進行識別。但賽題給定的數據圖片中不同圖片中包含的字符數量不等。

難點是需要對不定長的字符進行識別,與傳統的圖像分類任務有所不同。提供了一些思路:

  • 簡單入門思路:定長字符識別

可以將賽題抽象爲一個定長字符識別問題,最多的字符 個數爲6個。
因此可以對於所有的圖像都抽象爲6個字符的識別問題,字符23填充爲23XXXX,字符231填充爲231XXX。

經過填充之後,原始的賽題可以簡化了6個字符的分類問題。在每個字符的分類中會進行11個類別的分類,假如分類爲填充字符,則表明該字符爲空。

  • 專業字符識別思路:不定長字符識別

 

在字符識別研究中,比較典型的有CRNN字符識別模型。在本次賽題中給定的圖像數據都比較規整,可以視爲一個單詞或者一個句子。

  • 專業分類思路:檢測再識別

在賽題數據中已經給出了訓練集、驗證集中所有圖片中字符的位置,因此可以首先將字符的位置進行識別,利用物體檢測的思路完成。

 

此種思路需要參賽選手構建字符檢測模型,對測試集中的字符進行識別。選手可以參考物體檢測模型SSD或者YOLO來完成。

本章小節

綜上所示,本次賽題雖然是一個簡單的字符識別問題,但有多種解法可以使用到計算機視覺領域中的各個模型,非常適合入門學習的。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章