深度學習之資料增強庫imgaug使用方法
阿新 • • 發佈:2018-10-31
在上一篇文章中,介紹了常用的資料增強的方法,並提到了實現這些方法的一個庫imgaug,這篇文章就對該庫的使用方法進行一個總結。
1 介紹
imgaug是一個用於機器學習實驗中影象增強的python庫,支援python2.7和3.4以上的版本。 它支援多種增強技術,允許輕鬆組合這些技術,具有簡單但功能強大的隨機介面,可以在這些介面上增加影象和關鍵點/界標,並在後臺程序中提供增強功能以提高效能。
2 安裝方法
首先安裝依賴
pip install six numpy scipy matplotlib scikit-image opencv-python imageio pip install imgaug
如果想安裝最新版本的imgaug,可直接在github上下載原始碼進行安裝,方法如下
pip install git+https://github.com/aleju/imgaug
或者
git clone https://github.com/aleju/imgaug
cd imgaug
python setup.py install
3 效果預覽
4 測試程式
整體流程為:定義變換序列(Sequential)→讀入圖片(imread)→執行變換(augment_images)→儲存圖片(imwrite)
#!usr/bin/python # -*- coding: utf-8 -*- import cv2 from imgaug import augmenters as iaa #imgaug test seq = iaa.Sequential([ iaa.Crop(px=(0, 16)), # 從每側裁剪影象0到16px(隨機選擇) iaa.Fliplr(0.5), # 水平翻轉影象 iaa.GaussianBlur(sigma=(0, 3.0)) # 使用0到3.0的sigma模糊影象 ]) imglist=[] img = cv2.imread('kobe.jpg') imglist.append(img) images_aug = seq.augment_images(imglist) cv2.imwrite("imgaug.jpg",images_aug[0])
原圖kobe.jpg
結果imgaug.jpg
5 函式介紹
在API裡邊,我們可以看到有很多函式可以實現資料增強,接下來對這些函式的功能進行介紹,引數的具體含義請參考另一篇博文或者函式說明
函式 | 描述 |
---|---|
Sequential(C, R) | 選取一系列子增強器C作用於每張圖片,第二個引數表示是否對每個batch的圖片應用不同順序的Augmenter list。當設定為True時,不同batch之間圖片的處理順序都會不一樣,但是同一個batch內順序相同 |
SomeOf(N, C, R) | 將Augmenter中的部分變換應用在圖片處理上,而不是應用所有的Augmenter。例如:可以定義20種變換,但每次只選擇其中的5個。但是不支援固定選擇某一個Augmenter。 |
OneOf(C) | 每次從一系列Augmenters中選擇一個來變換。. |
Sometimes(P, C, D) | 對batch中的一部分圖片應用一部分Augmenters,剩下的圖片應用另外的Augmenters。 |
WithColorspace(T, F, C) | 在某個特定的顏色空間對影象進行變換。即:先將圖片從一個顏色空間變換到另一個顏色空間,然後在另一個顏色空間中對影象進行變換,最後再變換回原來的顏色空間。 |
WithChannels(H, C) | 從圖片中挑選出一個Channel來進行變換,變換完了之後再將該channel merge回去 |
Noop() | 不進行任何變換。某些情況下只想使用一個Augmenter作為佔位符,這樣可以繼續呼叫augment_image()函式,但實際不作變換。 |
Lambda(I, K) | 自定義一些變換函式 |
AssertLambda(I, K) | assert要變換的圖片和keypoint的shape。如果不滿足就丟擲異常。 |
AssertShape(S) | 如果輸入的影象大小不是S,則丟擲異常 |
Scale(S, I) | 將影象縮放到固定大小。 |
CropAndPad(PX, PC, PM, PCV, KS) | 擷取(crop)或者填充(pad),填充時,被填充區域為黑色。 |
Pad(PX, PC, PM, PCV, KS) | 與CropAndPad()相同,只接受positive values。 |
Crop(PX, PC, KS) | 與CropAndPad()相同,只接受negative values。 |
Fliplr(P) | 水平鏡面翻轉。 |
Flipud(P) | 上下鏡面翻轉。 |
Superpixels(P, N, M) | 以(最大)解析度M生成影象的N個超畫素,並調整回原始大小。 然後原始影象中所有超畫素區域的P百分比被超畫素替換,(1-P)百分比保持不變。 |
ChangeColorspace(T, F, A) | 改變影象空間 |
Grayscale(A, F) | 變成灰度圖。 |
GaussianBlur(S) | 高斯擾動。 |
AverageBlur(K) | 從最鄰近畫素中取均值來擾動。 |
MedianBlur(K) | 通過最近鄰中位數來擾動 |
BilateralBlur(D, SC, SS) | 使用距離為D的雙邊濾波器(如核心大小)模糊影象。 SC是顏色空間中(影響)距離的西格瑪,SS是空間距離的西格瑪。 |
Convolve(M) | 對影象使用卷積。 |
Sharpen(A, L) | 銳化 |
Emboss(A, S) | 浮雕效果 |
EdgeDetect(A) | 邊緣檢測 |
DirectedEdgeDetect(A, D) | 特定方向的邊緣檢測 |
Add(V, PCH) | 隨機加上一個值 |
AddElementwise(V, PCH) | 按畫素加 |
AddToHueAndSaturation(V, PCH, F, C) | 將值V新增到HSV空間中的每個畫素(即修改色調和飽和度)。 |
AdditiveGaussianNoise(L, S, PCH) | 以畫素為單位向影象新增高斯白噪聲。 |
Multiply(V, PCH) | 給影象中的每個畫素點乘一個值使得圖片更亮或者更暗。 |
MultiplyElementwise(V, PCH) | 按畫素值乘。 |
Dropout(P, PCH) | 隨機去掉一些畫素點, 即把這些畫素點變成0。 |
CoarseDropout(P, SPX, SPC, PCH) | 將矩形框的值設定為0。 |
Invert(P, PCH) | 翻轉,將每個畫素值p變成255-p。 |
ContrastNormalization(S, PCH) | 改變影象的對比度。 |
Affine(S, TPX, TPC, R, SH, O, M, CVAL) | 仿射變換。包含:平移(Translation)、旋轉(Rotation)、放縮(zoom)、錯切(shear)。仿設變換通常會產生一些新的畫素點,我們需要指定這些新的畫素點的生成方法,這種指定通過設定cval 和mode 兩個引數來實現。引數order 用來設定插值方法。 |
PiecewiseAffine(S, R, C, O, M, CVAL) | 隨機放置一些規則的網格點然後移動這些點的周圍的畫素。這回導致區域性的扭曲。 |
PerspectiveTransform(S, KS) | 對影象應用隨機四點透視變換(有點像高階裁剪形式)。 |
ElasticTransformation(S, SM) | 通過移動區域性畫素來變換。 |
Alpha(F, A, B, PCH) | 使用增強器A和B獨立增強影象,然後使用Alpha F覆蓋結果。如果未提供,A和B預設不執行任何操作。 例如, 使用Alpha(0.9,A)通過A增強影象,然後混合結果,保留原始影象的10%(在A之前)。 如果PCH設定為真,則該過程在通道方面發生,可能具有不同的F(每個影象計算一次A和B)。 |
AlphaElementwise(F, A, B, PCH) | 與Alpha相同,但使用從F取樣的連續掩碼(值0.0到1.0)逐畫素地執行混合。如果PCH設定為true,則過程以畫素和通道兩種方式發生。 |
SimplexNoiseAlpha(A, B, PCH, SM, UP, I, AGG, SIG, SIGT) | 與Alpha類似,但使用遮罩來混合來自增強器A和B的結果。遮罩是從單純形噪聲中取樣的,單層噪聲往往是blobby。 掩模在Iiterations中收集(預設為1-3),每次迭代使用聚合方法AGG(預設最大值,即每個畫素的所有迭代的最大值)進行組合。 每個掩模在低解析度空間中取樣,最大解析度為SM(預設為2到16px),並使用方法UP(預設:線性或立方或最近鄰居上取樣)放大到影象大小。 如果SIG為真,則將sigmoid應用於具有閾值SIGT的掩碼,這使得blob具有接近0.0或1.0的值。 |
FrequencyNoiseAlpha(E, A, B, PCH, SM, UP, I, AGG, SIG, SIGT) | 與SimplexNoiseAlpha類似,但會從頻域生成噪聲掩碼。 指數E用於增加/減少頻率分量。 高值導致更明顯的高頻分量。 使用-4到4範圍內的值,-2大致生成類似雲的模式。 |