深度學習應用篇-計算機視覺-圖像增廣[1]:數(shù)據(jù)增廣、圖像混疊

深度學習應用篇-計算機視覺-圖像增廣[1]:數(shù)據(jù)增廣、圖像混疊、圖像剪裁類變化類等詳解
一、數(shù)據(jù)增廣
在圖像分類任務中,圖像數(shù)據(jù)的增廣是一種常用的正則化方法,主要用于增加訓練數(shù)據(jù)集,讓數(shù)據(jù)集盡可能的多樣化,使得訓練的模型具有更強的泛化能力,常用于數(shù)據(jù)量不足或者模型參數(shù)較多的場景。除了 ImageNet 分類任務標準數(shù)據(jù)增廣方法外,還有8種數(shù)據(jù)增廣方式非常常用,這里對其進行簡單的介紹和對比,大家也可以將這些增廣方法應用到自己的任務中,以獲得模型精度的提升。這8種數(shù)據(jù)增廣方式在ImageNet上的精度指標如?圖1?所示。

圖1 8種數(shù)據(jù)增廣方法
二、常用數(shù)據(jù)增廣方法
注:如果沒有特殊說明,本章節(jié)中所有示例為 ImageNet 分類,并且假設最終輸入網(wǎng)絡的數(shù)據(jù)維為:[batch-size, 3, 224, 224]
在ImageNet 分類任務中,訓練階段的標準數(shù)據(jù)增廣方法為以下幾步:
圖像解碼:簡寫為?
ImageDecode
隨機裁剪到長寬均為 224 的圖像:簡寫為?
RandCrop
水平方向隨機翻轉:簡寫為?
RandFlip
圖像數(shù)據(jù)的歸一化:簡寫為?
Normalize
圖像數(shù)據(jù)的重排,
[224, 224, 3]
?變?yōu)?[3, 224, 224]
:簡寫為?Transpose
多幅圖像數(shù)據(jù)組成 batch 數(shù)據(jù),如?
batch-size
?個?[3, 224, 224]
?的圖像數(shù)據(jù)拼組成?[batch-size, 3, 224, 224]
:簡寫為?Batch
相比于上述標準的圖像增廣方法,研究者也提出了很多改進的圖像增廣策略,這些策略均是在標準增廣方法的不同階段插入一定的操作,基于這些策略操作所處的不同階段,我們將其分為了三類:
對?
RandCrop
?(上述的階段2)后的 224 的圖像進行一些變換: AutoAugment,RandAugment對
Transpose
?(上述的階段5)后的 224 的圖像進行一些裁剪: CutOut,RandErasing,HideAndSeek,GridMask對?
Batch
(上述的階段6) 后的數(shù)據(jù)進行混合: Mixup,Cutmix
增廣后的可視化效果如?圖2?所示。

圖2 數(shù)據(jù)增廣后可視化
下文將介紹這些策略的原理與使用方法,其中,每種數(shù)據(jù)增廣策略的參考論文與參考開源代碼均在下面的介紹中列出。
以?圖3?為測試圖像,第三節(jié)將基于測試圖像進行變換,并將變換后的效果進行可視化。
由于
RandCrop
是隨機裁剪,變換前后的圖像內容可能會有一定的差別,無法直觀地對比變換前后的圖像。因此,本節(jié)將?RandCrop
?替換為?Resize
。

圖3 測試圖像
三、圖像變換類
圖像變換類指的是對?RandCrop
?后的224 的圖像進行一些變換,主要包括:
AutoAugment[1]
RandAugment[2]
3.1 AutoAugment
論文地址:https://arxiv.org/abs/1805.09501v1
開源代碼github地址:https://github.com/DeepVoltaire/AutoAugment
不同于常規(guī)的人工設計圖像增廣方式,AutoAugment 是在一系列圖像增廣子策略的搜索空間中通過搜索算法找到的適合特定數(shù)據(jù)集的圖像增廣方案。針對 ImageNet 數(shù)據(jù)集,最終搜索出來的數(shù)據(jù)增廣方案包含 25 個子策略組合,每個子策略中都包含兩種變換,針對每幅圖像都隨機的挑選一個子策略組合,然后以一定的概率來決定是否執(zhí)行子策略中的每種變換。
結果如?圖4?所示。

圖4 AutoAugment后圖像可視化
3.2 RandAugment
論文地址:https://arxiv.org/pdf/1909.13719.pdf
開源代碼github地址:https://github.com/heartInsert/randaugment
AutoAugment
?的搜索方法比較暴力,直接在數(shù)據(jù)集上搜索針對該數(shù)據(jù)集的最優(yōu)策略,其計算量很大。在?RandAugment
?文章中作者發(fā)現(xiàn),一方面,針對越大的模型,越大的數(shù)據(jù)集,使用?AutoAugment
?方式搜索到的增廣方式產(chǎn)生的收益也就越??;另一方面,這種搜索出的最優(yōu)策略是針對該數(shù)據(jù)集的,其遷移能力較差,并不太適合遷移到其他數(shù)據(jù)集上。
在?RandAugment
?中,作者提出了一種隨機增廣的方式,不再像?AutoAugment
?中那樣使用特定的概率確定是否使用某種子策略,而是所有的子策略都會以同樣的概率被選擇到,論文中的實驗也表明這種數(shù)據(jù)增廣方式即使在大模型的訓練中也具有很好的效果。
結果如?圖5?所示。

圖5 RandAugment后圖像可視化
四、圖像裁剪類
圖像裁剪類主要是對Transpose
?后的 224 的圖像進行一些裁剪,并將裁剪區(qū)域的像素值置為特定的常數(shù)(默認為0),主要包括:
CutOut[3]
RandErasing[4]
HideAndSeek[5]
GridMask[6]
圖像裁剪的這些增廣并非一定要放在歸一化之后,也有不少實現(xiàn)是放在歸一化之前的,也就是直接對 uint8 的圖像進行操作,兩種方式的差別是:如果直接對 uint8 的圖像進行操作,那么再經(jīng)過歸一化之后被裁剪的區(qū)域將不再是純黑或純白(減均值除方差之后像素值不為0)。而對歸一后之后的數(shù)據(jù)進行操作,裁剪的區(qū)域會是純黑或純白。
上述的裁剪變換思路是相同的,都是為了解決訓練出的模型在有遮擋數(shù)據(jù)上泛化能力較差的問題,不同的是他們的裁剪方式、區(qū)域不太一樣。
4.1 Cutout
論文地址:https://arxiv.org/abs/1708.04552
開源代碼github地址:https://github.com/uoguelph-mlrg/Cutout
Cutout 可以理解為 Dropout 的一種擴展操作,不同的是 Dropout 是對圖像經(jīng)過網(wǎng)絡后生成的特征進行遮擋,而 Cutout 是直接對輸入的圖像進行遮擋,相對于Dropout,Cutout 對噪聲的魯棒性更好。作者在論文中也進行了說明,這樣做法有以下兩點優(yōu)勢:(1) 通過 Cutout 可以模擬真實場景中主體被部分遮擋時的分類場景;(2) 可以促進模型充分利用圖像中更多的內容來進行分類,防止網(wǎng)絡只關注顯著性的圖像區(qū)域,從而發(fā)生過擬合。
結果如?圖6?所示。

圖6 Cutout后圖像可視化
4.2 RandomErasing
論文地址:https://arxiv.org/pdf/1708.04896.pdf
開源代碼github地址:https://github.com/zhunzhong07/Random-Erasing
RandomErasing
?與?Cutout
?方法類似,同樣是為了解決訓練出的模型在有遮擋數(shù)據(jù)上泛化能力較差的問題,作者在論文中也指出,隨機裁剪的方式與隨機水平翻轉具有一定的互補性。作者也在行人再識別(REID)上驗證了該方法的有效性。與Cutout
不同的是,在RandomErasing
中,圖片以一定的概率接受該種預處理方法,生成掩碼的尺寸大小與長寬比也是根據(jù)預設的超參數(shù)隨機生成。
結果如?圖7?所示。

圖7 RandomErasing后圖像可視化
4.3 HideAndSeek
論文地址:https://arxiv.org/pdf/1811.02545.pdf
開源代碼github地址:https://github.com/kkanshul/Hide-and-Seek
HideAndSeek
論文將圖像分為若干塊區(qū)域(patch),對于每塊區(qū)域,都以一定的概率生成掩碼,不同區(qū)域的掩碼含義如?圖8?所示。

圖8 HideAndSeek分塊掩碼圖
結果如?圖9?所示。

圖9 HideAndSeek后圖像可視化
4.4 GridMask
論文地址:https://arxiv.org/abs/2001.04086
開源代碼github地址:https://github.com/akuxcw/GridMask
作者在論文中指出,此前存在的基于對圖像 crop 的方法存在兩個問題,如?圖10?所示:
過度刪除區(qū)域可能造成目標主體大部分甚至全部被刪除,或者導致上下文信息的丟失,導致增廣后的數(shù)據(jù)成為噪聲數(shù)據(jù);
保留過多的區(qū)域,對目標主體及上下文基本產(chǎn)生不了什么影響,失去增廣的意義。

圖10 增廣后的噪聲數(shù)據(jù)
因此如果避免過度刪除或過度保留成為需要解決的核心問題。
GridMask
是通過生成一個與原圖分辨率相同的掩碼,并將掩碼進行隨機翻轉,與原圖相乘,從而得到增廣后的圖像,通過超參數(shù)控制生成的掩碼網(wǎng)格的大小。
在訓練過程中,有兩種以下使用方法:
設置一個概率p,從訓練開始就對圖片以概率p使用
GridMask
進行增廣。一開始設置增廣概率為0,隨著迭代輪數(shù)增加,對訓練圖片進行
GridMask
增廣的概率逐漸增大,最后變?yōu)閜。
論文中驗證上述第二種方法的訓練效果更好一些。
結果如?圖11?所示。

圖11 GridMask后圖像可視化
五、圖像混疊
圖像混疊主要對?Batch
?后的數(shù)據(jù)進行混合,包括:
Mixup[7]
Cutmix[8]
前文所述的圖像變換與圖像裁剪都是針對單幅圖像進行的操作,而圖像混疊是對兩幅圖像進行融合,生成一幅圖像,兩種方法的主要區(qū)別為混疊的方式不太一樣。
5.1 Mixup
論文地址:https://arxiv.org/pdf/1710.09412.pdf
開源代碼github地址:https://github.com/facebookresearch/mixup-cifar10
Mixup 是最先提出的圖像混疊增廣方案,其原理簡單、方便實現(xiàn),不僅在圖像分類上,在目標檢測上也取得了不錯的效果。為了便于實現(xiàn),通常只對一個 batch 內的數(shù)據(jù)進行混疊,在?Cutmix
?中也是如此。
如下是?imaug
?中的實現(xiàn),需要指出的是,下述實現(xiàn)會出現(xiàn)對同一幅進行相加的情況,也就是最終得到的圖和原圖一樣,隨著?batch-size
?的增加這種情況出現(xiàn)的概率也會逐漸減小。
結果如?圖12?所示。

圖12 Mixup后圖像可視化
5.2 Cutmix
論文地址:https://arxiv.org/pdf/1905.04899v2.pdf
開源代碼github地址:https://github.com/clovaai/CutMix-PyTorch
與?Mixup
?直接對兩幅圖進行相加不一樣,Cutmix
?是從一幅圖中隨機裁剪出一個?ROI
,然后覆蓋當前圖像中對應的區(qū)域。
結果如?圖13?所示。

圖13 Cutmix后圖像可視化
六、實驗
基于PaddleClas套件,使用上述幾種數(shù)據(jù)增廣方法在ImageNet1k數(shù)據(jù)集上進行了實驗測試,每個方法的分類精度如下。
注意:
在實驗中,為了便于對比,將l2 decay固定設置為1e-4,在實際使用中,推薦嘗試使用更小的l2 decay。結合數(shù)據(jù)增廣,發(fā)現(xiàn)將l2 decay由1e-4減小為7e-5均能帶來至少0.3~0.5%的精度提升。
在使用數(shù)據(jù)增廣后,由于訓練數(shù)據(jù)更難,所以訓練損失函數(shù)可能較大,訓練集的準確率相對較低,但其擁有更好的泛化能力,所以驗證集的準確率相對較高。
在使用數(shù)據(jù)增廣后,模型可能會趨于欠擬合狀態(tài),建議可以適當?shù)恼{小
l2_decay
的值來獲得更高的驗證集準確率。
七、測試增強
在網(wǎng)絡訓練過程中,數(shù)據(jù)增強是提升模型能力的有效方式,目前在圖像分割、分類和檢測場景中都取得了不錯的模型訓練效果。
數(shù)據(jù)增強同樣也可以應用于測試階段,將原始的圖像進行各種形式的變換得到多張圖片,比如圖像翻轉,圖像旋轉,圖像拉伸等操作,然后對這些圖片分別進行推理,再對這多個結果進行綜合分析以確定最終結果,這便是測試時增強( Test-Time-Augmentation,TTA)。
7.1. 測試時增強的原因
如果只對圖像做一種增強時,采用的變換有可能會使圖像的關鍵信息丟失,從而導致后續(xù)任務得不到正確的結果。
7.2. 測試時增強的作用
通過分析多項數(shù)據(jù)增強的圖像,然后綜合分析,有可能會平滑掉某一種變換導致的關鍵信息丟失現(xiàn)象帶來的損失,從而提升預測的準確率。
更多文章請關注公重號:汀丶人工智能