DL影象資料增廣
資料增廣
計算機視覺有七類分類問題:
不同的視角,不同的大小,物體的形變問題,物體的遮擋問題,光照條件,背景複雜的問題,每一類中有多種形態的問題。
而資料增廣的思路也就是解決這個問題。資料增廣如何增廣就要從實際的問題出發,比如醫學的圖片基本上拍攝的時候視角是固定的,所以就不需要不同視角的增廣。木紋檢測中視角是不固定的,就需要不同的視角,不同的大小的增廣,還需要應不同的光照條件對資料進行增廣。
在不改變影象類別的情況下,增加資料量,能提高模型的泛化能力
自然影象的資料增廣方式包括很多,如常用的水平翻轉(horizontally flipping),一定程度的位移或者裁剪和顏色抖動(color jittering)。此外還可以嘗試多種操作的組合, 例如同時做旋轉和隨機尺度變換,此外還可以把每個patch中所有畫素在HSV顏色空間中的飽和度和明度提升0.25-4次冪方,乘以0.7-1.4之間的一個因子,再加一個-0.1-0.1之間的值。同樣你可以在色調通道(H)對每張圖片或patch的所有畫素增加一個-0.1-0.1之間的值。
資料增廣很重要,好的資料增廣可以提高2-3個百分點,但是要注意方式,比如在我服裝檢測問題上沒有必要對影象上下反轉。深度學習框架一般能夠提供的影象增廣方法很有限,需要使用額外的庫進行,推薦imgaug,神器
增廣程式碼_來自部落格:
def customizedImgAug(input_img): rarely = lambda aug: iaa.Sometimes(0.1, aug) sometimes = lambda aug: iaa.Sometimes(0.25, aug) often = lambda aug: iaa.Sometimes(0.5, aug) seq = iaa.Sequential([ iaa.Fliplr(0.5), often(iaa.Affine( scale={"x": (0.9, 1.1), "y": (0.9, 1.1)}, translate_percent={"x": (-0.1, 0.1), "y": (-0.12, 0)}, rotate=(-10, 10), shear=(-8, 8), order=[0, 1], cval=(0, 255), )), iaa.SomeOf((0, 4), [ rarely( iaa.Superpixels( p_replace=(0, 0.3), n_segments=(20, 200) ) ), iaa.OneOf([ iaa.GaussianBlur((0, 2.0)), iaa.AverageBlur(k=(2, 4)), iaa.MedianBlur(k=(3, 5)), ]), iaa.Sharpen(alpha=(0, 0.3), lightness=(0.75, 1.5)), iaa.Emboss(alpha=(0, 1.0), strength=(0, 0.5)), rarely(iaa.OneOf([ iaa.EdgeDetect(alpha=(0, 0.3)), iaa.DirectedEdgeDetect( alpha=(0, 0.7), direction=(0.0, 1.0) ), ])), iaa.AdditiveGaussianNoise( loc=0, scale=(0.0, 0.05 * 255), per_channel=0.5 ), iaa.OneOf([ iaa.Dropout((0.0, 0.05), per_channel=0.5), iaa.CoarseDropout( (0.03, 0.05), size_percent=(0.01, 0.05), per_channel=0.2 ), ]), rarely(iaa.Invert(0.05, per_channel=True)), often(iaa.Add((-40, 40), per_channel=0.5)), iaa.Multiply((0.7, 1.3), per_channel=0.5), iaa.ContrastNormalization((0.5, 2.0), per_channel=0.5), iaa.Grayscale(alpha=(0.0, 1.0)), sometimes(iaa.PiecewiseAffine(scale=(0.01, 0.03))), sometimes( iaa.ElasticTransformation(alpha=(0.5, 1.5), sigma=0.25) ), ], random_order=True), iaa.Fliplr(0.5), iaa.AddToHueAndSaturation(value=(-10, 10), per_channel=True) ], random_order=True) # apply augmenters in random order output_img = seq.augment_image(input_img) return output_img
還可做一些其他處理:
2、shuffle,打亂資料進行訓練是必須的,防止相鄰樣本有較強相關性。
3、影象標準化,計算資料集的std與mean,而不是直接使用imagenet的std與mean
4、增大影象的輸入尺寸可獲得客觀的提升,本例最終使用了480*480的輸入尺寸
4、選擇合適的遷移學習方式,本例進行全域性finetune比只訓練最後1層或幾層好很多
5、可以先用Adam快速收斂,後面階段用SGD慢慢調
6、模型融合,舉辦方在複賽限制最多隻能用兩個模型是明智的,初賽都有隊伍用接近10個模型進行融合,如此刷分就沒意義了
7、對測試集圖片進行增強,比如映象,旋轉,再預測並取平均。可以得到更魯棒的結果。這裡沒有用到tencrop,因為樣本有些特徵在頂部或者底部,tencrop會將特徵截走,導致成績降低。
參考樣例:
addpath
(
'test'
);
addpath
(
'train'
);
fid =
fopen
(
'C:\Users\Byte\Desktop\data.txt'
,
'wt'
)
file_path = 'C:\Users\Byte\Desktop\test_label\';
%影象資料夾路徑
save_path = 'C:\Users\Byte\Desktop\cc_test\';
%影象資料夾路徑
% img_path_list = dir(strcat(file_path,'*.jpg')); %獲取資料夾中所有jpg格式影象
img_path_list =
dir
(
strcat
(file_path,
'*.png'
));
img_num =
length
(img_path_list);
%獲取總數
if
img_num > 0
for
j
= 1 : img_num
img_name = img_path_list(
j
).name;
image
=
imread
(
strcat
(file_path,img_name));
img_name_core = img_name(1:
end
-4);
%除去後綴名
fprintf
(
'%d %d %s\n'
,
i
,
j
,
strcat
(file_path,img_name));
fprintf
(
'%s\n'
,
strcat
(file_path,img_name(1:
end
-4)));
%影象增廣
%翻轉flipdim
img_u =
flipdim
(
image
,1);
img_r =
flipdim
(
image
,2);
img_ur =
flipdim
(img_r,1);
imwrite
(img_u,
strcat
(save_path,img_name_core,
'_u.png'
));
imwrite
(img_r,
strcat
(save_path,img_name_core,
'_r.png'
));
imwrite
(img_ur,
strcat
(save_path,img_name_core,
'_ur.png'
));
%亮度調節
%img_bright = imadjust(image,[0,1],[0,1],0.5);
img_dark = imadjust(
image
,[0,1],[0,1],1.5);
%imwrite(img_bright,strcat(save_path,img_name_core,'_b.jpg'));
imwrite
(img_dark,
strcat
(save_path,img_name_core,
'_d.png'
));
%img_ub = imadjust(img_u,[0,1],[0,1],0.5);
img_ud = imadjust(img_u,[0,1],[0,1],1.5);
%imwrite(img_ub,strcat(save_path,img_name_core,'_ub.jpg'));
imwrite
(img_ud,
strcat
(save_path,img_name_core,
'_ud.png'
));
%img_rb = imadjust(img_r,[0,1],[0,1],0.5);
img_rd = imadjust(img_r,[0,1],[0,1],1.5);
%imwrite(img_rb,strcat(save_path,img_name_core,'_rb.jpg'));
imwrite
(img_rd,
strcat
(save_path,img_name_core,
'_rd.png'
));
%img_urb = imadjust(img_ur,[0,1],[0,1],0.5);
img_urd = imadjust(img_ur,[0,1],[0,1],1.5);
%imwrite(img_urb,strcat(save_path,img_name_core,'_urb.jpg'));
imwrite
(img_urd,
strcat
(save_path,img_name_core,
'_urd.png'
));
%旋轉
相關推薦
DL影象資料增廣
資料增廣計算機視覺有七類分類問題: 不同的視角,不同的大小,物體的形變問題,物體的遮擋問題,光照條件,背景複雜的問題,每一類中有多種形態的問題。 而資料增廣的思路也就是解決這個問題。資料增廣如何增廣就要從實際的問題出發,比如醫學的圖片基本上拍攝的時候視角是固定的,所以就不需要
[Tensorflow] 如何對兩幅影象做同樣的資料增廣操作
在深度學習中,我們經常會對資料進行陣列增廣操作,比如說左右翻轉,增加noise等操作。 但是,現在我們的輸入是一組影象是一個sample,那我們需要對這一組影象進行同樣的資料增廣操作,也就是說同一個s
圖片資料增廣
將原始圖片旋轉一個小角度,新增隨機噪聲。一些有彈性的畸變(elastic distortions),論文《Best practices for convolutional neural networks applied to visual document analysis》對MNIST做了各種變種擴增。
訓練過程--正則化(regularization)技巧(包括L2正則化、dropout,資料增廣,早停)
正則化(regularization) 正則化是解決高方差問題的重要方案之一,也是Reducing Overfiltering(克服過擬合)的方法。 過擬合一直是DeepLearning的大敵,它會導致訓練集的error rate非常小,而測試集的error rate大部分時候很
深度學習中的資料增廣
問題一:為什麼需要大量的資料 當訓練機器學習模型的時候,實際上實在調整它的引數,使得可以跟一個特定的輸入符合。優化的目標是 chase that sweet spot where our model’s loss is low。當前最好的神經網路擁有的引數量是上百萬的量級。
深度學習訓練中關於資料處理方式--原始樣本採集以及資料增廣
好久沒有寫部落格,一直想重新調整自己的部落格,想盡可能寫的前後連貫一點,同時希望自己寫的更通熟易懂些,可是遲遲沒有動筆修改曾經的博文,哎,還是慢慢跟著自己的理解再修改之前的文章吧,今兒就寫寫關於深度學習訓練中最關鍵的一步,資料問題,也就是樣本庫的建立!來
深度學習資料增廣庫imgaug——Bounding Boxes變換
imgaug在影象變換的同時變換影象中的bound box。 bounding的支援包括: 將bounding box封裝成物件 對bounding box進行變換 將bounding box畫在影象上 移動bounding box的位置,將變換後的bounding
目標檢測訓練資料增廣--旋轉+尺度+顏色+裁剪
原文連結:https://blog.csdn.net/wei_guo_xd/article/details/74199729常用的影象擴充方式有:水平翻轉,裁剪,視角變換,jpeg壓縮,尺度變換,顏色變換,旋轉當用於分類資料集時,這些變換方法可以全部被使用,然而考慮到目標檢測
深度學習-MATLAB資料增廣
圖片資料增廣 對資料夾及其子資料夾下的圖片資料進行簡單的增廣,四個方面,翻轉,平移,增加高斯噪聲,對比度增強,儲存在當前資料夾中,命名為圖片原名+ -1、-2、-3、-4,代表四個類。 p=genp
caffe資料層相關學習以及訓練線上資料增廣
caffe資料層是將已經生成好的LMDB檔案中的label和資料讀入到Datum資料結構體中,然後將資料轉化到Blob中,進而進行資料傳遞,才能進行資料訓練。目前使用的data_layer是經過了別人
深度學習之正則化系列(2):資料集增強(資料增廣)
讓機器學習模型泛化得更好的最好辦法是使用更多的資料進行訓練。當然,在實踐中,我們擁有的資料量是很有限的。解決這個問題的一種方法是建立假資料並新增到訓練集中。對於一些機器學習任務,建立新的假資料相當簡單。對分類來說這種方法是最簡單的。分類器需要一個複雜的高維輸入
深度學習訓練資料python程式碼——資料增廣(二)
python影象資料增強庫 Augmentor使用比較簡單,只有一些簡單的操作。 imgaug實現的功能更多,可以對keypoint, bounding box同步處理,比如你現在由一些標記好的資料,只有同時對原始圖片和標記資訊同步處理,才能有更多的標記資料進行訓練。我
轉載+記錄資料增廣的八種常用方式
在影象的深度學習中,為了豐富影象訓練集,提高模型的泛化能力,一般會對影象進行資料增強。常用的方式有:旋轉、剪下、改變影象色差、扭曲影象特徵、改變影象尺寸、增加影象噪聲(高斯噪聲、鹽膠噪聲)。思考:對於人臉的資料增廣來說,其是對稱的,所以映象旋轉pass,然後剪下後的部分人臉應
資料增廣領域知識
PCA的資料增廣: 比如對資料進行PCA操作,比如取前5個主成分,對主成分進行加隨機係數,再進行PCA還原,產生了新的資料。 label smoothing: 採用了非one-hot的標籤集減輕了
caffe資料層資料增廣
本次希望實現的主要功能是希望在訓練過程中,能夠實時的隨機改變影象資料的飽和度、亮度和對比度,進而能夠達到資料增廣的目的,增加資料的多樣性,使得訓練得到的模型的泛化性更好。而如果要達到這樣的目的,就需要對data_transformer.cpp進行相應的程式碼更改。除此以外,因為希望在訓練過程中,只對負樣本進行
資料增廣 | 原圖 和mask 同時增加——適用語義分割等
博主想使用Unet網路完成一個分割任務,手邊只有40張圖和對應的mask,需要進行data augment. 做資料增強有很多工具,常用的是使用keras內建的ImageDataGenerator生成器生成圖片,但是這個工具只能對一張圖進行隨機變化,而im
AutoML資料增廣
DeepAugment是一個專注於資料擴充的自動化工具。 它利用貝葉斯優化來發現針對您的影象資料集定製的資料增強策略。 Dee
網絡流初步:<最大流>——核心(增廣路算法)
dfs space 10000+ can style 最大 strong names using 終於開始接觸網絡流了; 網絡流到底是個蝦米東東,用比較學術的話說,就是 一個有向圖 G=(V,E); 有兩個特別的點:源點s、匯點t; 圖中每條邊(u,v)
BZOJ.2668.[CQOI2012]交換棋子(費用流 多路增廣)
lin min 若是 return 模擬 can http 初始 ref 題目鏈接 首先黑白棋子的交換等價於黑棋子在白格子圖上移動,都到達指定位置。 在這假設我們知道這題用網絡流做。 那麽黑棋到指定位置就是一條路徑,考慮怎麽用流模擬出這條路徑。 我們發現除了路徑的起點和終點
騰訊AI Lab開源業內最大規模多標籤影象資料集(附下載地址)
參加 2018 AI開發者大會,請點選 ↑↑↑ 今日(10 月 18 日),騰訊AI Lab宣佈正式開源“Tencent ML-Images”專案。該專案由多標籤影象資料集 ML-Images,以及業內目前同類深度學習模型中精度最高的深度殘差網路 ResNet-101 構成。