街景字元識別 Task2 資料讀取與資料擴增(2)

2021-10-06 10:03:16 字數 3129 閱讀 7558

資料擴增再增加了訓練集樣本的同時,也可以有效地緩解過擬合的情況,使模型具有更強的泛化能力。

資料擴增的方法有很多,從顏色空間、尺度空間到樣本空間,根據不同任務,資料擴增都有區別。對於影象分類,資料擴增一般不會改變標籤;對於物體檢測,資料擴增會改變物體座標位置;對於影象分割,資料擴增會改變畫素標籤。

方法中文說明

transforms.centercrop

對中心進行裁剪

transforms.colorjitter

對影象顏色的對比度、飽和度和零度進行變換

transforms.fivecrop

對影象四個角和中心進行裁剪得到五分影象

transforms.grayscale

對影象進行灰度變換

transforms.pad

使用固定值進行畫素填充

transforms.randomaffine

隨機仿射變換

transforms.randomcrop

隨機區域裁剪

transforms.randomhorizontalflip

隨機水平翻轉

transforms.randomrotation

隨機旋轉

transforms.randomverticalflip

隨機垂直翻轉

torchvision:

imgaug:

albumentations:

因為本次賽題使用的是pytorch框架,所以第一步是使用pytorch來讀取資料。

在pytorch中,資料是通過dataset封裝的,並通過dataloader進行並行讀取。

首先要區分dataset與dataloader。

**如下:

import os, sys, glob, shutil, json

import cv2

from pil import image

import numpy as np

import torch

from torch.utils.data.dataset import dataset

import torchvision.transforms as transforms

class

svhndataset

(dataset)

:def

__init__

(self, img_path, img_label, transform=

none):

self.img_path = img_path

self.img_label = img_label

if transform is

notnone

: self.transform = transform

else

: self.transform =

none

def__getitem__

(self, index)

: img = image.

open

(self.img_path[index]

).convert(

'rgb'

)if self.transform is

notnone

: img = self.transform(img)

# 原始svhn中類別10為數字0

lbl = np.array(self.img_label[index]

, dtype=np.

int)

lbl =

list

(lbl)+(

5-len(lbl))*

[10]return img, torch.from_numpy(np.array(lbl[:5

]))def

__len__

(self)

:return

len(self.img_path)

train_path = glob.glob(

'd:/tianchi_char/mchar_train/*.png'

)train_path.sort(

)train_json = json.load(

open

('d:/tianchi_char/mchar_train.json'))

train_label =

[train_json[x]

['label'

]for x in train_json]

train_loader = torch.utils.data.dataloader(

svhndataset(train_path, train_label,

transforms.compose(

[ transforms.resize((64

,128))

, transforms.colorjitter(

0.3,

0.3,

0.2)

, transforms.randomrotation(5)

, transforms.totensor(),

transforms.normalize(

[0.485

,0.456

,0.406],

[0.229

,0.224

,0.225])

])),

batch_size=10,

# 每批樣本個數

shuffle=

false

,# 是否打亂順序

num_workers=0,

# 讀取的執行緒個數

)for data in train_loader:

break

這樣,資料按批次獲取並輸入到訓練模型中,此時data的格式應該為:

torch.size([10,3,64,128]),torch.size([10,6])

第乙個為影象檔案,分別為batchsizechanelheight*width;

第二個為字元的標籤。

街景字元編碼識別 task2 資料讀取與資料擴增

關於資料讀取部分介紹了兩個python庫,pillow和opencv。和之前的matlab,c 裡的資料讀取方法類似,簡單略過了。資料擴增是之前沒有接觸過的,其主要目的是增加訓練集樣本,可以使模型具有更強的泛化能力。資料擴增方法有很多 從顏色空間 尺度空間到樣本空間,同時根據不同任務資料擴增都有相應...

天池 街景字元識別 Task5 模型整合

結果後處理 小節在機器學習中的整合學習可以在一定程度上提高 精度,常見的整合學習方法有stacking bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。由於深度學習模型一般需要較長的訓練週期,如果硬體裝置不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。下...

街景字元識別 模型整合

3.後處理 整合學習方法可以提高 精度,常見的有stacking bagging和boosting。一般利用交叉驗證法提高精度,如下所示。使用10折交叉驗證法,得到10個cnn模型,可通過以下方法進行整合。平均 結果的概率值,然後解碼為具體字元。對 的字元進行投票,得到最終字元。dropout在訓練...