計(jì)算機(jī)視覺(jué)的數(shù)據(jù)增廣技術(shù)大盤(pán)點(diǎn)!附漲點(diǎn)神器,已開(kāi)源!
點(diǎn)擊上方“CVer”,選擇加"星標(biāo)"置頂
重磅干貨,第一時(shí)間送達(dá)

下文所有的代碼都來(lái)自PaddleClas:
GitHub 鏈接:?
https://github.com/PaddlePaddle/PaddleClas?
Gitee 鏈接:?
https://gitee.com/paddlepaddle/PaddleClas
8大數(shù)據(jù)增廣方法
首先咱們先來(lái)看看以ImageNet圖像分類(lèi)任務(wù)為代表的標(biāo)準(zhǔn)數(shù)據(jù)增廣方法,該方法的操作過(guò)程可以分為以下幾個(gè)步驟:
圖像解碼,也就是將圖像轉(zhuǎn)為Numpy格式的數(shù)據(jù),簡(jiǎn)寫(xiě)為 ImageDecode。 圖像隨機(jī)裁剪,隨機(jī)將圖像的長(zhǎng)寬均裁剪為 224 大小,簡(jiǎn)寫(xiě)為 RandCrop。 水平方向隨機(jī)翻轉(zhuǎn),簡(jiǎn)寫(xiě)為 RandFlip。 圖像數(shù)據(jù)的歸一化,簡(jiǎn)寫(xiě)為 Normalize。 圖像數(shù)據(jù)的重排。圖像的數(shù)據(jù)格式為[H, W, C](即高度、寬度和通道數(shù)),而神經(jīng)網(wǎng)絡(luò)使用的訓(xùn)練數(shù)據(jù)的格式為[C, H, W],因此需要對(duì)圖像數(shù)據(jù)重新排列,例如[224, 224, 3]?變?yōu)?[3, 224, 224],簡(jiǎn)寫(xiě)為 Transpose。 多幅圖像數(shù)據(jù)組成 batch 數(shù)據(jù),如 BatchSize 個(gè)?[3, 224, 224]?的圖像數(shù)據(jù)拼組成?[batch-size, 3, 224, 224],簡(jiǎn)寫(xiě)為 Batch。
圖像變換類(lèi):對(duì) RandCrop 后的 224 的圖像進(jìn)行一些變換,包括AutoAugment和RandAugment。 圖像裁剪類(lèi):對(duì)Transpose 后的 224 的圖像進(jìn)行一些裁剪,包括CutOut、RandErasing、HideAndSeek和GridMask。 圖像混疊:對(duì) Batch 后的數(shù)據(jù)進(jìn)行混合或疊加,包括Mixup和Cutmix。

圖像變換類(lèi)
01
AutoAugment
論文地址:
https://arxiv.org/abs/1805.09501v1
from?ppcls.data.imaug?import?DecodeImage
from?ppcls.data.imaug?import?ResizeImage
from?ppcls.data.imaug?import?ImageNetPolicy
from?ppcls.data.imaug?import?transform
size?=?224
#?圖像解碼
decode_op?=?DecodeImage()
#?圖像隨機(jī)裁剪
resize_op?=?ResizeImage(size=(size,?size))
#?使用AutoAugment圖像增廣方法
autoaugment_op?=?ImageNetPolicy()
ops?=?[decode_op,?resize_op,?autoaugment_op]
#?圖像路徑
imgs_dir?=?“/imgdir/xxx.jpg”??
fnames?=?os.listdir(imgs_dir)
for?f?in?fnames:
????data?=?open(os.path.join(imgs_dir,?f)).read()
????img?=?transform(data,?ops)

02
RandAugment
from?ppcls.data.imaug?import?DecodeImage
from?ppcls.data.imaug?import?ResizeImage
from?ppcls.data.imaug?import?RandAugment
from?ppcls.data.imaug?import?transform
size?=?224
#?圖像解碼
decode_op?=?DecodeImage()
#?圖像隨機(jī)裁剪
resize_op?=?ResizeImage(size=(size,?size))
#?使用RandAugment圖像增廣方法
randaugment_op?=?RandAugment()
ops?=?[decode_op,?resize_op,?randaugment_op]
#?圖像路徑
imgs_dir?=?“/imgdir/xxx.jpg”??
fnames?=?os.listdir(imgs_dir)
for?f?in?fnames:
????data?=?open(os.path.join(imgs_dir,?f)).read()
????img?=?transform(data,?ops)

圖像裁剪類(lèi)
圖像裁剪類(lèi)主要是對(duì)Transpose 后的 224 的圖像進(jìn)行一些裁剪,即裁剪掉部分圖像,或者也可以理解為對(duì)部分圖像做遮蓋,共有CutOut、RandErasing、HideAndSeek和GridMask四種方法。
03
Cutout
論文地址:
https://arxiv.org/abs/1708.04552
通過(guò) Cutout 可以模擬真實(shí)場(chǎng)景中主體被部分遮擋時(shí)的分類(lèi)場(chǎng)景。 可以促進(jìn)模型充分利用圖像中更多的內(nèi)容來(lái)進(jìn)行分類(lèi),防止網(wǎng)絡(luò)只關(guān)注顯著性的圖像區(qū)域,從而發(fā)生過(guò)擬合。
from?ppcls.data.imaug?import?DecodeImage
from?ppcls.data.imaug?import?ResizeImage
from?ppcls.data.imaug?import?Cutout
from?ppcls.data.imaug?import?transform
size?=?224
#?圖像解碼
decode_op?=?DecodeImage()
#?圖像隨機(jī)裁剪
resize_op?=?ResizeImage(size=(size,?size))
#?使用Cutout圖像增廣方法
cutout_op?=?Cutout(n_holes=1,?length=112)
ops?=?[decode_op,?resize_op,?cutout_op]
#?圖像路徑
imgs_dir?=?“/imgdir/xxx.jpg”??
fnames?=?os.listdir(imgs_dir)
for?f?in?fnames:
????data?=?open(os.path.join(imgs_dir,?f)).read()
????img?=?transform(data,?ops)

04
RandomErasing
論文地址:
https://arxiv.org/pdf/1708.04896.pdf
from?ppcls.data.imaug?import?DecodeImage
from?ppcls.data.imaug?import?ResizeImage
from?ppcls.data.imaug?import?ToCHWImage
from?ppcls.data.imaug?import?RandomErasing
from?ppcls.data.imaug?import?transform
size?=?224
#?圖像解碼
decode_op?=?DecodeImage()
#?圖像隨機(jī)裁剪
resize_op?=?ResizeImage(size=(size,?size))
#?使用RandomErasing圖像增廣方法
randomerasing_op?=?RandomErasing()
ops?=?[decode_op,?resize_op,?tochw_op,?randomerasing_op]
#?圖像路徑
imgs_dir?=?“/imgdir/xxx.jpg”??
fnames?=?os.listdir(imgs_dir)
for?f?in?fnames:
????data?=?open(os.path.join(imgs_dir,?f)).read()
????img?=?transform(data,?ops)
????img?=?img.transpose((1,?2,?0))

05
HideAndSeek
論文地址:
https://arxiv.org/pdf/1811.02545.pdf

from?ppcls.data.imaug?import?DecodeImage
from?ppcls.data.imaug?import?ResizeImage
from?ppcls.data.imaug?import?ToCHWImage
from?ppcls.data.imaug?import?HideAndSeek
from?ppcls.data.imaug?import?transform
size?=?224
#?圖像解碼
decode_op?=?DecodeImage()
#?圖像隨機(jī)裁剪
resize_op?=?ResizeImage(size=(size,?size))
#?使用HideAndSeek圖像增廣方法
hide_and_seek_op?=?HideAndSeek()
ops?=?[decode_op,?resize_op,?tochw_op,?hide_and_seek_op]
#?圖像路徑
imgs_dir?=?“/imgdir/xxx.jpg”??
fnames?=?os.listdir(imgs_dir)
for?f?in?fnames:
????data?=?open(os.path.join(imgs_dir,?f)).read()
????img?=?transform(data,?ops)
????img?=?img.transpose((1,?2,?0))

06
GridMask
論文地址:
https://arxiv.org/abs/2001.04086
過(guò)度刪除區(qū)域可能造成目標(biāo)主體大部分甚至全部被刪除,或者導(dǎo)致上下文信息的丟失,導(dǎo)致增廣后的數(shù)據(jù)成為噪聲數(shù)據(jù); 保留過(guò)多的區(qū)域,對(duì)目標(biāo)主體及上下文基本產(chǎn)生不了什么影響,失去增廣的意義。

設(shè)置一個(gè)概率p,從訓(xùn)練開(kāi)始就對(duì)圖片以概率p使用GridMask進(jìn)行增廣。 一開(kāi)始設(shè)置增廣概率為0,隨著迭代輪數(shù)增加,對(duì)訓(xùn)練圖片進(jìn)行GridMask增廣的概率逐漸增大,最后變?yōu)閜。
from?data.imaug?import?DecodeImage
from?data.imaug?import?ResizeImage
from?data.imaug?import?ToCHWImage
from?data.imaug?import?GridMask
from?data.imaug?import?transform
size?=?224
#?圖像解碼
decode_op?=?DecodeImage()
#?圖像隨機(jī)裁剪
resize_op?=?ResizeImage(size=(size,?size))
#?圖像數(shù)據(jù)的重排
tochw_op?=?ToCHWImage()
#?使用GridMask圖像增廣方法
gridmask_op?=?GridMask(d1=96,?d2=224,?rotate=1,?ratio=0.6,?mode=1,?prob=0.8)
ops?=?[decode_op,?resize_op,?tochw_op,?gridmask_op]
#?圖像路徑
imgs_dir?=?“/imgdir/xxx.jpg”?
fnames?=?os.listdir(imgs_dir)
for?f?in?fnames:
????data?=?open(os.path.join(imgs_dir,?f)).read()
????img?=?transform(data,?ops)
????img?=?img.transpose((1,?2,?0))

圖像混疊
前文所述的圖像變換與圖像裁剪都是針對(duì)單幅圖像進(jìn)行的操作,而圖像混疊是對(duì)兩幅圖像進(jìn)行融合,生成一幅圖像,Mixup和Cutmix兩種方法的主要區(qū)別為混疊的方式不太一樣。
07
Mixup
from?ppcls.data.imaug?import?DecodeImage
from?ppcls.data.imaug?import?ResizeImage
from?ppcls.data.imaug?import?ToCHWImage
from?ppcls.data.imaug?import?transform
from?ppcls.data.imaug?import?MixupOperator
size?=?224
#?圖像解碼
decode_op?=?DecodeImage()
#?圖像隨機(jī)裁剪
resize_op?=?ResizeImage(size=(size,?size))
#?圖像數(shù)據(jù)的重排
tochw_op?=?ToCHWImage()
#?使用HideAndSeek圖像增廣方法
hide_and_seek_op?=?HideAndSeek()
#?使用Mixup圖像增廣方法
mixup_op?=?MixupOperator()
ops?=?[decode_op,?resize_op,?tochw_op]
imgs_dir?=?“/imgdir/xxx.jpg”??#圖像路徑
batch?=?[]
fnames?=?os.listdir(imgs_dir)
for?idx,?f?in?enumerate(fnames):
????data?=?open(os.path.join(imgs_dir,?f)).read()
????img?=?transform(data,?ops)
????batch.append(?(img,?idx)?)?#?fake?label
new_batch?=?mixup_op(batch)

08
Cutmix
論文地址:
https://arxiv.org/pdf/1905.04899v2.pdf
from?ppcls.data.imaug?import?DecodeImage
from?ppcls.data.imaug?import?ResizeImage
from?ppcls.data.imaug?import?ToCHWImage
from?ppcls.data.imaug?import?transform
from?ppcls.data.imaug?import?CutmixOperator
size?=?224
#?圖像解碼
decode_op?=?DecodeImage()
#?圖像隨機(jī)裁剪
resize_op?=?ResizeImage(size=(size,?size))
#?圖像數(shù)據(jù)的重排
tochw_op?=?ToCHWImage()
#?使用HideAndSeek圖像增廣方法
hide_and_seek_op?=?HideAndSeek()
#?使用Cutmix圖像增廣方法
cutmix_op?=?CutmixOperator()
ops?=?[decode_op,?resize_op,?tochw_op]
imgs_dir?=?“/imgdir/xxx.jpg”??#圖像路徑
batch?=?[]
fnames?=?os.listdir(imgs_dir)
for?idx,?f?in?enumerate(fnames):
????data?=?open(os.path.join(imgs_dir,?f)).read()
????img?=?transform(data,?ops)
????batch.append(?(img,?idx)?)?#?fake?label
new_batch?=?cutmix_op(batch)

實(shí)驗(yàn)
經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,在ImageNet1k數(shù)據(jù)集上基于PaddleClas使用不同數(shù)據(jù)增廣方式的分類(lèi)精度如下所示,可見(jiàn)通過(guò)數(shù)據(jù)增廣方式可以有效提升模型的準(zhǔn)確率。

PaddleClas數(shù)據(jù)增廣避坑
指南以及部分注意事項(xiàng)
最后再為大家介紹幾個(gè)PaddleClas數(shù)據(jù)增廣使用方面的小Trick:
在使用圖像混疊類(lèi)的數(shù)據(jù)處理時(shí),需要將配置文件中的use_mix設(shè)置為T(mén)rue,另外由于圖像混疊時(shí)需對(duì)label進(jìn)行混疊,無(wú)法計(jì)算訓(xùn)練數(shù)據(jù)的準(zhǔn)確率,所以在訓(xùn)練過(guò)程中沒(méi)有打印訓(xùn)練準(zhǔn)確率。 在使用數(shù)據(jù)增廣后,由于訓(xùn)練數(shù)據(jù)更難,所以訓(xùn)練損失函數(shù)可能較大,訓(xùn)練集的準(zhǔn)確率相對(duì)較低,但其擁有更好的泛化能力,所以驗(yàn)證集的準(zhǔn)確率相對(duì)較高。 在使用數(shù)據(jù)增廣后,模型可能會(huì)趨于欠擬合狀態(tài),建議可以適當(dāng)?shù)恼{(diào)小l2_decay的值來(lái)獲得更高的驗(yàn)證集準(zhǔn)確率。 幾乎每一類(lèi)圖像增廣均含有超參數(shù),PaddleClas在這里只提供了基于ImageNet-1k的超參數(shù),其他數(shù)據(jù)集需要用戶(hù)自己調(diào)試超參數(shù),當(dāng)然如果對(duì)于超參數(shù)的含義不太清楚的話,可以閱讀相關(guān)的論文,調(diào)試方法也可以參考訓(xùn)練技巧的章節(jié)( https://github.com/PaddlePaddle/PaddleClas/blob/master/docs/zh_CN/models/Tricks.md)。



END
精彩賽事推薦
評(píng)論
圖片
表情

