零基礎入門語義分割 Task2 資料擴增

2021-10-19 21:41:38 字數 4299 閱讀 7473

顏色變換

kernel filters

mixing

random erasing

opencv的資料擴增

albumentations資料擴增

pytorch 處理

顧名思義,資料擴增的原因是原始資料量不足,希望通過擴增達到

mnist 在-20°到20°之間沒問題 加大旋轉角可能會影響標籤

平移變換 (上下左右)可以避免資料中的位置偏差

當原始影象被平移後造成的空白區域,可以用乙個常數值填充,如 0 或 255 ,也可以用隨機或高斯雜訊填充。這種填充可以保留影象增強後的空間尺寸。

增加高斯雜訊是比較常用的操作,增加雜訊可以幫助 cnns 學習到更 robust feature。

對於訓練資料中存在的位置偏差,幾何變換是非常好的解決方案。有許多潛在的偏差**,可以將訓練資料與測試資料的分布分開。如果存在位置偏差,例如在人臉識別資料集中,每個人臉都是完全居中的,幾何變換是乙個很好的解決方案。除了克服位置偏差的強大能力之外,幾何變換也很有用,因為它們很容易實現。有很多成像處理庫,可以讓水平翻轉和旋轉等操作輕鬆上手。幾何變換的一些缺點包括額外的記憶體、變換計算成本和額外的訓練時間。一些幾何變換,如平移或隨機裁剪等幾何變換必須手動觀察,以確保它們沒有改變影象的標籤。最後,在所涉及的許多應用領域,如醫學影象分析,訓練資料與測試資料之間的偏差比位置偏差和平移偏差更複雜。因此,幾何變換也不一定總是能帶來明顯的效果。

類似於dropout,但random erasing 是在輸入資料空間進行,而非是在網路結構中。這種方法也可以看著是在模擬遮擋的情況,以保證網路關注整個影象,而不是只關注其中的乙個子集。

通常 earsing 的區域直接填充隨機值效果更好。使用的時候需要注意是否標籤安全,可能需要人為的加入一些限制,以保證標籤的正確性。

# 首先讀取原始

img = cv2.imread(train_mask[

'name'

].iloc[0]

)mask = rle_decode(train_mask[

'mask'

].iloc[0]

)plt.figure(figsize=(16

,8))

plt.subplot(1,

2,1)

plt.imshow(img)

plt.subplot(1,

2,2)

plt.imshow(mask)

# 垂直翻轉

plt.figure(figsize=(16

,8))

plt.subplot(1,

2,1)

plt.imshow(cv2.flip(img,0)

)plt.subplot(1,

2,2)

plt.imshow(cv2.flip(mask,0)

)

# 水平翻轉

plt.figure(figsize=(16

,8))

plt.subplot(1,

2,1)

plt.imshow(cv2.flip(img,0)

)plt.subplot(1,

2,2)

plt.imshow(cv2.flip(mask,0)

)

# 隨機裁剪

x, y = np.random.randint(0,

256)

, np.random.randint(0,

256)

plt.figure(figsize=(16

,8))

plt.subplot(1,

2,1)

plt.imshow(img[x:x+

256, y:y+

256]

)plt.subplot(1,

2,2)

plt.imshow(mask[x:x+

256, y:y+

256]

)

import albumentations as a

# 水平翻轉

augments = a.horizontalflip(p=1)

(image=img, mask=mask)

img_aug, mask_aug = augments[

'image'

], augments[

'mask'

]# 隨機裁剪

augments = a.randomcrop(p=

1, height=

256, width=

256)

(image=img, mask=mask)

img_aug, mask_aug = augments[

'image'

], augments[

'mask'

]# 旋轉

augments = a.shiftscalerotate(p=1)

(image=img, mask=mask)

img_aug, mask_aug = augments[

'image'

], augments[

'mask'

]

trfm = a.compose(

[ a.resize(

256,

256)

, a.horizontalflip(p=

0.5)

, a.verticalflip(p=

0.5)

, a.randomrotate90(),

])augments = trfm(image=img, mask=mask)

img_aug, mask_aug = augments[

'image'

], augments[

'mask'

]plt.figure(figsize=(16

,8))

plt.subplot(1,

2,1)

plt.imshow(augments[

'image'])

plt.subplot(1,

2,2)

plt.imshow(augments[

'mask'

])aug

首先要定義dataset和dataloder

import torch.utils.data as d

class

tianchidataset

(d.dataset)

:def

__init__

(self, paths, rles, transform)

: self.paths = paths

self.rles = rles

self.transform = transform

self.

len=

len(paths)

def__getitem__

(self, index)

: img = cv2.imread(self.paths[index]

) mask = rle_decode(self.rles[index]

) augments = self.transform(image=img, mask=mask)

return self.as_tensor(augments[

'image'])

, augments[

'mask'][

none

]def

__len__

(self)

:return self.

len

例項化dataset
trfm = a.compose(

[ a.resize(image_size, image_size)

, a.horizontalflip(p=

0.5)

, a.verticalflip(p=

0.5)

, a.randomrotate90(),

])dataset = tianchidataset(

train_mask[

'name'

].values,

train_mask[

'mask'

].fillna('')

.values,

trfm

)

零基礎入門語義分割 TASK02資料擴增

opencv資料擴增 albumentations資料擴增 pytorch讀取賽題資料 datawhale 本章對語義分割任務中常見的資料擴增方法進行介紹,並使用opencv和albumentations兩個庫完成具體的資料擴增操作。本章主要內容為資料擴增方法 opencv資料擴增 albument...

零基礎入門語義分割 Task6 模型整合

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

零基礎入門語義分割 Task1 賽題理解

零基礎入門語義分割 地表建築物識別,是datawhale與天池聯合發起的入門比賽,以計算機視覺為背景,希望通過過此次比賽了解語義分割的相關知識。遙感技術已成為獲取地表覆蓋資訊最為行之有效的手段,遙感技術已經成功應用於地表覆蓋檢測 植被面積檢測和建築物檢測任務。本賽題使用航拍資料,需要參賽選手完成地表...