資料擴增再增加了訓練集樣本的同時,也可以有效地緩解過擬合的情況,使模型具有更強的泛化能力。
資料擴增的方法有很多,從顏色空間、尺度空間到樣本空間,根據不同任務,資料擴增都有區別。對於影象分類,資料擴增一般不會改變標籤;對於物體檢測,資料擴增會改變物體座標位置;對於影象分割,資料擴增會改變畫素標籤。
方法中文說明
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在訓練...