張 澎,崔夢(mèng)天,謝 琪,姜 玥
(西南民族大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 四川 成都 610041)
近年來(lái),越來(lái)越多的人工智能技術(shù)被應(yīng)用于農(nóng)業(yè)生產(chǎn)活動(dòng)中,如通過(guò)深度學(xué)習(xí)方法實(shí)現(xiàn)植物病蟲(chóng)害[1]與植物種類(lèi)[2]的識(shí)別.深度學(xué)習(xí)需要大量的帶有標(biāo)簽的數(shù)據(jù)樣本,在此前提下訓(xùn)練模型能夠取得更高的識(shí)別率或者更好的分類(lèi)效果,但若數(shù)據(jù)樣本數(shù)量較小的話,則會(huì)導(dǎo)致模型出現(xiàn)過(guò)擬合現(xiàn)象. 為了更好地解決數(shù)據(jù)樣本數(shù)量小的問(wèn)題,專(zhuān)家們提出了生成對(duì)抗網(wǎng)絡(luò)來(lái)解決此類(lèi)問(wèn)題.
生成對(duì)抗網(wǎng)絡(luò)(Generative adversarial network,GAN) 是Goodfellow 等[3]在2014 年提出的一種生成模型,也是一種無(wú)監(jiān)督學(xué)習(xí)模型. 相較于傳統(tǒng)的生成模型, 其在網(wǎng)絡(luò)結(jié)構(gòu)上除了生成網(wǎng)絡(luò)外,還包含一個(gè)判別網(wǎng)絡(luò).GAN 的主要靈感源于博弈論中零和博弈的思想,即生成網(wǎng)絡(luò)G(Generator)與判別網(wǎng)絡(luò)D(Discriminator)之間不斷博弈,從而達(dá)到生成網(wǎng)絡(luò)G(Generator)不斷學(xué)習(xí)到數(shù)據(jù)分布的目的. 目前,GAN 取得了的廣泛的研究與應(yīng)用,在圖像與視覺(jué)領(lǐng)域已經(jīng)用于人臉檢測(cè)[4]、風(fēng)格遷移[5]以及生產(chǎn)高分辨率圖像[6]等,另外GAN 還被應(yīng)用于語(yǔ)音處理[7]、隱私保護(hù)[8]和病毒檢測(cè)[9]等問(wèn)題.然而生成對(duì)抗網(wǎng)絡(luò)在植物圖像樣本的應(yīng)用卻不多,本文使用深度卷積生成對(duì)抗網(wǎng)絡(luò)[10]生成新的植物圖像,并使用深度卷積神經(jīng)網(wǎng)絡(luò)來(lái)驗(yàn)證新生成圖像用于植物圖像識(shí)別的可行性,實(shí)驗(yàn)結(jié)果表明,該方法生成的植物圖像能夠有效的提高模型識(shí)別結(jié)果.
生成對(duì)抗網(wǎng)絡(luò)(GAN)[3]由兩個(gè)網(wǎng)絡(luò)構(gòu)成,生成網(wǎng)絡(luò)G(Generator)和判別網(wǎng)絡(luò)D(Discriminator).G 通過(guò)隨機(jī)噪聲z 生成圖像,記為G(z).D 負(fù)責(zé)對(duì)輸入的樣本進(jìn)行判別,判斷樣本是真實(shí)的數(shù)據(jù)還是生成的數(shù)據(jù)G(z).而訓(xùn)練過(guò)程中,生成網(wǎng)絡(luò)G 的任務(wù)是盡量生成真實(shí)的圖片以達(dá)到欺騙判別網(wǎng)絡(luò)D 的目的,而判別網(wǎng)絡(luò)D 則需要盡量將生成網(wǎng)絡(luò)G 生成的圖片與真實(shí)圖片區(qū)分開(kāi),二者構(gòu)成了一個(gè)動(dòng)態(tài)的博弈,直至達(dá)到納什均衡[11].GAN 的流程如圖1 所示:
圖1 GAN 流程圖Fig.1 GAN flow chart
與其他生成模型對(duì)比來(lái)看,例如玻爾茲曼機(jī)[12]和GSNs[13]只用到了反向傳播,而不需要馬爾科夫鏈[14-15].從實(shí)際結(jié)果看,GAN 產(chǎn)生的樣本更加清晰、真實(shí).
但目前GAN 還一些缺點(diǎn)需要彌補(bǔ),如離散形式數(shù)據(jù)的處理,包括文本等.而且由于GAN 模型的訓(xùn)練需要達(dá)到納什均衡,導(dǎo)致GAN 模型的訓(xùn)練是不穩(wěn)定的.
深度卷積生成對(duì)抗網(wǎng)絡(luò)(DCGAN) 是Dundar等[10]人在2015 年改進(jìn)的新型GANs.在GAN 的基礎(chǔ)上增加了深度卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),用于生成圖像樣本.
在DCGAN 中,一張圖像經(jīng)判別器D 處理后,其輸出結(jié)果表示此圖像是真實(shí)圖像的概率.而判別器D的結(jié)構(gòu)是一個(gè)卷積神經(jīng)網(wǎng)絡(luò),判別器D 通過(guò)若干層對(duì)輸入的圖像的卷積后,提取卷積特征,并將得到的特征輸入Logistic 函數(shù)中,輸出可看做是概率.
生成器G 的輸入是1 個(gè)100 維的噪聲向量z.生成器G 網(wǎng)絡(luò)的第一層為全連接層,其任務(wù)是將100 維的噪聲向量變成4 ×4 × 1024 維的向量,并從第二層開(kāi)始使用轉(zhuǎn)置卷積做上采樣操作,逐步減少通道數(shù),最終的輸出為64 ×64 ×3 的圖像.生產(chǎn)器G 的網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示:
圖2 DCGAN 中生成器G 的網(wǎng)絡(luò)結(jié)構(gòu)[16]Fig.2 Network structure of generator G in DCGAN
DCGAN 與傳統(tǒng)的GAN 相比有以下特點(diǎn)[17]:
①在判別器D 中,使用帶有步長(zhǎng)(Stride)的卷積來(lái)代替池化層.
②在網(wǎng)絡(luò)結(jié)構(gòu)中,生成器G 和判別器D 采用了批量歸一化[18](Batch Normalization)以此來(lái)幫助模型收斂.
③在生成器G 中使用ReLU[19](Rectified linear unit)激活函數(shù).
④在判別器D 中使用Leaky ReLU(Leaky rectify linear unit)激活函數(shù).
利用深度卷積生成對(duì)抗網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)增強(qiáng)需要三個(gè)步驟,第一步是收集原始數(shù)據(jù)樣本,第二步是搭建訓(xùn)練環(huán)境,第三步是基于原始數(shù)據(jù),通過(guò)DCGAN 模型進(jìn)行訓(xùn)練并生成數(shù)據(jù).
本文數(shù)據(jù)來(lái)源于奧爾胡斯大學(xué)信號(hào)處理小組與南丹麥大學(xué)合作發(fā)布的數(shù)據(jù)集,數(shù)據(jù)集中含有數(shù)量分布不均勻的12 類(lèi)植物圖像,通過(guò)DCGAN 模型實(shí)現(xiàn)數(shù)據(jù)均衡與數(shù)據(jù)增強(qiáng)操作.
本文中模型的搭建環(huán)境如下表1 所示:
表1 環(huán)境配置信息Table 1 Environmental configuration information
本組訓(xùn)練學(xué)習(xí)率設(shè)定為0.0002,單次循環(huán)隨機(jī)加載64 張圖像.圖像原始尺寸為224 × 224 ,在程序運(yùn)行中,將這些圖像中心截取96 × 96 的小塊并縮放到48 ×48 像素,然后添加噪聲開(kāi)始訓(xùn)練.循環(huán)過(guò)程可以描述為,首先生成器G 生成輸出,然后經(jīng)判別器D 進(jìn)行判別,通過(guò)生成器G 和判別器D 的輸出來(lái)計(jì)算生成損失和判別損失. 最終,通過(guò)反向傳播算法進(jìn)行優(yōu)化權(quán)重參數(shù),然后開(kāi)始下一次循環(huán).每20 次循環(huán)輸出測(cè)試圖像.
本文選用TensorFlow 作為學(xué)習(xí)框架,基于Tensor-Flow 學(xué)習(xí)框架搭建DCGAN 模型. 在model. py 中,進(jìn)行參數(shù)初始化代碼及參數(shù)說(shuō)明見(jiàn)表2:
表2 參數(shù)說(shuō)明Table 2 Description of parameters
最后在系統(tǒng)終端輸入以下運(yùn)行命令進(jìn)行訓(xùn)練:python main.py - -input_height 96 - -input_width 96 - - output_height 48 - - output_width 48 - -dataset 7 - -crop - -train - -epoch 300 - -input_fname_pattern "*.jpg"
參數(shù)解釋:input_height 96,input_width 96,表示將圖像中心截取96 ×96 的小塊.output_height 48,output_width 48 表示將截取到的圖像縮放到48 × 48 像素.dataset 7 用來(lái)指定圖像數(shù)據(jù),epoch 300 表示進(jìn)行300個(gè)epoch,1 個(gè)epoch 為使用訓(xùn)練集中的全部樣本訓(xùn)練一次.input_fname_pattern "*. jpg"用來(lái)指定圖片格式.
原始圖像和利用DCGAN 生成的圖像對(duì)比展示如下,其中圖3 是原始數(shù)據(jù)圖像,圖4 是利用DCGAN 進(jìn)行10 次循環(huán)輸出的結(jié)果,圖5 是300 次循環(huán)輸出的結(jié)果,圖6 是7200 次循環(huán)輸出的結(jié)果.
圖3 原始圖像Fig.3 Original image
圖4 20 次循環(huán)結(jié)果Fig.4 10 cycle results
圖5 300 次循環(huán)結(jié)果Fig.5 300 cycle results
圖6 7200 次循環(huán)結(jié)果Fig.6 7200 cycle results
為了驗(yàn)證DCGAN 生成的樣本的可行性,本文基于TensorFlow 深度學(xué)習(xí)框架搭建LeNet -5 卷積神經(jīng)網(wǎng)絡(luò)模型用于數(shù)據(jù)驗(yàn)證.由于原始數(shù)據(jù)各類(lèi)別圖像數(shù)量相差較大,圖像數(shù)量很少會(huì)導(dǎo)致模型無(wú)法判別少數(shù)類(lèi),影響模型識(shí)別結(jié)果.使用由DCGAN 生成的圖像對(duì)圖像數(shù)量較少的類(lèi)別進(jìn)行填充,使各類(lèi)別圖像數(shù)量大致相同.構(gòu)建卷積層代碼如下:
model.add(Conv2D(filters =20,kernel_size =(5,5),padding ="same",input_shape =inputShape,activation ='relu'))
卷層過(guò)濾器大小為5*5,會(huì)產(chǎn)生20 個(gè)圖像,使用全0 填充,設(shè)置ReLU 激活函數(shù).
加入Dropout 層避免過(guò)擬合,代碼如下:
model.add(Dropout(0.5))
設(shè)置隨機(jī)剔除神經(jīng)元概率為0.5.
構(gòu)建池化層代碼如下:model. add(MaxPooling2D(pool_size =(2,2), strides =(2,2)))
最大池化層過(guò)濾器大小為2*2,長(zhǎng)和寬的步長(zhǎng)均為2,不會(huì)改變圖像的數(shù)量(仍舊是20),會(huì)改變大小(32*32 變成16*16).
構(gòu)建全連接層代碼如下:
model.add(Dense(500))
Dense 表示全連接層,并設(shè)置500 個(gè)神經(jīng)元.
建立輸出層代碼如下:
model.add(Dense(classes,activation ='softmax'))
Softmax 分類(lèi)器可以將輸出預(yù)測(cè)為每一個(gè)圖像的概率,從而達(dá)到多分類(lèi)的目的.
卷積神經(jīng)網(wǎng)絡(luò)模型搭建完成后,分別使用原始數(shù)據(jù)和經(jīng)DCGAN 生成的樣本填充后的數(shù)據(jù)進(jìn)行訓(xùn)練,對(duì)比結(jié)果. 在迭代1000 次時(shí),使用原始數(shù)據(jù)進(jìn)行訓(xùn)練,模型準(zhǔn)確率為89.82%,如圖7 所示. 使用經(jīng)DCGAN 生成的樣本填充后的數(shù)據(jù)進(jìn)行訓(xùn)練,模型準(zhǔn)確率為94.02%,如圖8 所示.準(zhǔn)確率有明顯上升.
圖7 使用原始數(shù)據(jù)訓(xùn)練結(jié)果Fig.7 Use raw data training results
圖8 使用經(jīng)DCGAN 生成的額樣本填充后的數(shù)據(jù)訓(xùn)練結(jié)果Fig.8 Data training results using the amount sample generated by DCGAN
本文介紹了生成對(duì)抗網(wǎng)絡(luò)及其衍生模型深度卷積生成對(duì)抗網(wǎng)絡(luò)的原理,然后使用原始樣本對(duì)深度卷積生成對(duì)抗網(wǎng)絡(luò)進(jìn)行訓(xùn)練實(shí)現(xiàn)了圖像的生產(chǎn),并通過(guò)構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)對(duì)生產(chǎn)樣本的質(zhì)量進(jìn)行測(cè)試.結(jié)果表明,利用深度卷積生成對(duì)抗網(wǎng)絡(luò)能夠?yàn)槟壳稗r(nóng)業(yè)領(lǐng)域圖像數(shù)據(jù)積累不足的現(xiàn)狀提供解決方法.未來(lái)工作將研究如何優(yōu)化訓(xùn)練過(guò)程并產(chǎn)生更清晰的圖像樣本.