本文內容將對街景字元識別賽題的理解做相應記錄,同時作為乙個cv初學者,我也想藉此練習一下撰寫部落格的能力,感謝批評指正。
本題以計算機視覺中字元識別為背景,要**街道字元編碼,採用svhn資料集做乙個簡單的字元識別問題。
賽題用的是比賽給定的svhn街道字元資料集,已進行匿名取樣。訓練集資料報括3w張**,驗證集資料報括1w張**,每張**包括顏色影象和對應的編碼類別和具體位置。測試集包括4w張。
field
description
top左上角座標x
height
字元高度
left
左上角座標y
width
字元寬度
label
字元編碼
字元的具體座標如下所示:
在比賽資料(訓練集、測試機和驗證集)中,同一張中可能包括乙個或多個字元,因此在比賽資料的json標註中,會有乙個或多個字元的邊框資訊。例如:
的json標註:
可以看到,原始中有兩個數字,因此在json標註中體現了兩個字元的邊框資訊。
score=編碼識別正確的數量/測試集數量
json中標籤的讀取方式如下:
import json
import cv2
import matplotlib.pyplot as plt
train_json = json.load(
open
('./input/train.json'))
# 資料標註處理
defparse_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(
)## 資料標註區域影象
賽題的本質是分類問題,0-9十個字元為十個類別,但是問題在於資料集中的上不只是乙個字元,有的字元個數為2,有的字元個數為3,有的字元個數為4,因此我們應該考慮的是對這種不定長的字元進行識別。
對於剛要入門的初學者,可以考慮入門版本的定長字元識別:
可以將賽題抽象為乙個定長字元識別問題;本賽題資料集中大部分影象中字元個數為2-4個,最多字元 個數為6個。因此可以將問題都抽象為6個字元的識別問題,字元23填充為23***x,字元231填充為231***。
經過填充之後,原始的賽題可以簡化了6個字元的分類問題。在每個字元的分類中會進行11個類別的分類,假如分類為填充字元,則表明該字元為空。
此外還有專業字元識別思路:不定長字元識別
字元識別研究中,有特定的方法來解決此種不定長的字元識別問題,典型的有crnn字元識別模型。
在本次賽題中給定的影象資料都比較規整,可以視為乙個單詞或者乙個句子。
3.專業分類思路:檢測再識別
這就屬於相對更高階一些的思路了,首先將字元的位置進行識別,利用物體檢測的思路完成。可以參考物體檢測模型ssd或者yolo來完成。
天池實戰 街景字元編碼識別 task1賽題理解
寫在前面的話 在寫這篇文章的時候,我其實已經把整個專案的流程都過完了,包括pytorch對於模型的訓練等等,所以這篇題目為賽題理解但實際也會說到後面的內容,不光是題目所說的賽題理解這麼簡單 總之,請你按整個專案的流程去走,去了解整個專案的背景 資料和目的,以及要求的環境等等,然後再針對目標去一步步的...
天池 街景字元識別 Task5 模型整合
結果後處理 小節在機器學習中的整合學習可以在一定程度上提高 精度,常見的整合學習方法有stacking bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。由於深度學習模型一般需要較長的訓練週期,如果硬體裝置不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。下...
街景字元識別 模型整合
3.後處理 整合學習方法可以提高 精度,常見的有stacking bagging和boosting。一般利用交叉驗證法提高精度,如下所示。使用10折交叉驗證法,得到10個cnn模型,可通過以下方法進行整合。平均 結果的概率值,然後解碼為具體字元。對 的字元進行投票,得到最終字元。dropout在訓練...