1. 程式人生 > >DL影象資料增廣

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 > 0for j = 1 : img_numimg_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)));%影象增廣%翻轉flipdimimg_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 構成。