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