王冠群
(上海市軟件評(píng)測(cè)中心有限公司 上海市 200000)
當(dāng)前,計(jì)算機(jī)視覺(jué)是一個(gè)非常熱門(mén)的人工智能研究領(lǐng)域,可以分為圖像處理、圖像識(shí)別、圖像理解、景物分析、動(dòng)作識(shí)別等多個(gè)研究方向。從研究到產(chǎn)品,對(duì)任何一個(gè)計(jì)算機(jī)視覺(jué)系統(tǒng)而言,嚴(yán)格且完備的大規(guī)模系統(tǒng)測(cè)試尤為重要, 影響到用戶(hù)體驗(yàn)甚至是用戶(hù)安全。只有完成嚴(yán)格的系統(tǒng)測(cè)試之后,才能正式上線(xiàn)交付用戶(hù)使用。在計(jì)算機(jī)視覺(jué)系統(tǒng)測(cè)試過(guò)程中,大規(guī)模、高覆蓋率、有測(cè)試針對(duì)性的圖像數(shù)據(jù)集,對(duì)于測(cè)試覆蓋率和完備性至關(guān)重要。計(jì)算機(jī)視覺(jué)系統(tǒng)的輸入對(duì)象一般都是以圖像為主,測(cè)試用例也是圖像。無(wú)論是購(gòu)買(mǎi)商用數(shù)據(jù)集或是自行采集和制作圖像的時(shí)間成本和經(jīng)濟(jì)成本均比較高昂。因此,探索一種高效率、低成本以及可控的圖像生成方式,對(duì)于計(jì)算機(jī)視覺(jué)系統(tǒng)的大規(guī)模系統(tǒng)測(cè)試顯得更為重要。本文研究了如何利用生成對(duì)抗網(wǎng)絡(luò)(GAN)模型,根據(jù)真實(shí)圖像樣本來(lái)生成可用的類(lèi)似的圖像樣本。該方法可以靈活地生成各種類(lèi)型的圖像樣本,且可以同時(shí)生成不同相似程度圖像樣本。
當(dāng)前,計(jì)算機(jī)視覺(jué)系統(tǒng)主要的測(cè)試用例獲取,大多是購(gòu)買(mǎi)常用的商用測(cè)試數(shù)據(jù)集,結(jié)合人工采集典型場(chǎng)景的圖像的方式。對(duì)于較新或是專(zhuān)業(yè)領(lǐng)域的計(jì)算機(jī)視覺(jué)系統(tǒng),購(gòu)買(mǎi)常用的商用測(cè)試數(shù)據(jù)集的方式,缺點(diǎn)是與系統(tǒng)目標(biāo)的匹配度相對(duì)比較差,尤其是新型應(yīng)用的吻合度更是不盡如人意。人工采集和制作圖像的方式,對(duì)于數(shù)據(jù)集規(guī)模和經(jīng)濟(jì)成本均是極大的考驗(yàn)和挑戰(zhàn),無(wú)法滿(mǎn)足系統(tǒng)測(cè)試的覆蓋率和完備性要求。與此同時(shí),真實(shí)世界圖像集是組合的,任何數(shù)據(jù)集都很難完整體現(xiàn)現(xiàn)實(shí)世界的復(fù)雜性。在某些視覺(jué)任務(wù)中,這種組合爆炸基本不會(huì)發(fā)生。例如,醫(yī)院數(shù)字化X 光片等專(zhuān)業(yè)領(lǐng)域的標(biāo)準(zhǔn)化圖像等。但是,對(duì)于許多日常使用的應(yīng)用程序來(lái)說(shuō),如果沒(méi)有指數(shù)級(jí)別的圖像數(shù)據(jù)集,我們就無(wú)法捕捉到現(xiàn)實(shí)世界的復(fù)雜性。如果只能在有限的子集上測(cè)試計(jì)算機(jī)視覺(jué)系統(tǒng)和算法,那么如何有效地測(cè)試并確保它們?cè)邶嫶蟮臄?shù)據(jù)集中表現(xiàn)優(yōu)秀,并且測(cè)試過(guò)程中發(fā)現(xiàn)系統(tǒng)的缺陷和問(wèn)題,就成為擺在計(jì)算機(jī)視覺(jué)系統(tǒng)設(shè)計(jì)與測(cè)試人員面前的一個(gè)重要課題。
本文針對(duì)計(jì)算機(jī)視覺(jué)系統(tǒng)測(cè)試所遇到的問(wèn)題,考慮到所生成的測(cè)試用例圖像,必須滿(mǎn)足如下兩個(gè)具體要求:
(1)與真實(shí)參考樣本是類(lèi)型相同。
(2)有不同程度的差異和模糊度。
針對(duì)上述兩個(gè)要求,研究和篩選各種圖像生成方法之后,最終決定選擇深度卷積生成對(duì)抗網(wǎng)絡(luò)(DCGAN)模型,進(jìn)行測(cè)試用例生成方案的實(shí)施。
如圖1 所示,生成對(duì)抗網(wǎng)絡(luò)(GAN)模型受到博弈論中的二人零和博弈的啟發(fā)。生成對(duì)抗網(wǎng)絡(luò)模型中,有兩位博弈者,分別是生成模型(Generative Model)和判別模型(Discriminative Model)。生成模型通過(guò)學(xué)習(xí)之后,模擬和捕捉真實(shí)樣本集的高維數(shù)據(jù)分布,使用服從某一分布(均勻分布,高斯分布等)的隨機(jī)噪聲 z 生成一個(gè)類(lèi)似真實(shí)訓(xùn)練數(shù)據(jù)的偽造樣本,通過(guò)學(xué)習(xí)使得偽造樣本與真實(shí)樣本之間無(wú)法分辨,以至于判別模型無(wú)法判斷偽造樣本的真?zhèn)?。判別模型 D 本質(zhì)上是一個(gè)基于神經(jīng)網(wǎng)絡(luò)的二分類(lèi)器,評(píng)估一個(gè)樣本來(lái)自于真實(shí)數(shù)據(jù)集的可能性,輸出概率值。如果輸入樣本來(lái)自于真實(shí)數(shù)據(jù)集,則 D 輸出大概率,反之,D 輸出小概率。
圖1:生成對(duì)抗網(wǎng)絡(luò)示意圖
當(dāng)一個(gè)圖像生成模型和一個(gè)圖像判別模型,通過(guò)如下模式:生成模型生成圖片,判別模型學(xué)習(xí)區(qū)分真實(shí)圖像和生成圖像,生成模型再次根據(jù)判別模型進(jìn)行改進(jìn),生成模型生成新的圖像。以此類(lèi)推,經(jīng)過(guò)多次學(xué)習(xí)和博弈之后,直至兩個(gè)模型都無(wú)法再次提高自己,也就是當(dāng)判別模型對(duì)生成圖像的輸出結(jié)果判定概率等于或接近0.5,達(dá)到納什平衡。生成網(wǎng)絡(luò)與判別網(wǎng)絡(luò)的目的正好是相反的,判別網(wǎng)絡(luò)持續(xù)調(diào)整參數(shù)判別樣本真假,生成網(wǎng)絡(luò)持續(xù)調(diào)整參數(shù)生成判別網(wǎng)絡(luò)判別不好的樣本。
采用神經(jīng)網(wǎng)絡(luò)作為模型類(lèi)型,那么就稱(chēng)為生成對(duì)抗網(wǎng)絡(luò)(GAN)。使用數(shù)學(xué)語(yǔ)言描述整個(gè)博弈過(guò)程,假設(shè)我們的生成模型是G(z),其中 z 是一個(gè)隨機(jī)噪聲,而 z 將這個(gè)隨機(jī)噪聲轉(zhuǎn)化為數(shù)據(jù)類(lèi)型 x 。D是一個(gè)判別模型,對(duì)任何輸入 x ,D(x)的輸出是0~1 范圍內(nèi)的一個(gè)實(shí)數(shù),用來(lái)判斷這個(gè)圖片是一個(gè)真實(shí)圖片的概率是多大,Pdata 和Pz 分別代表真實(shí)圖像的分布與生成圖像的分布。
從判別模型角度看,其目標(biāo)函數(shù)如下:
從生成模型角度看,其目標(biāo)函數(shù)如下:
因此,生成對(duì)抗網(wǎng)絡(luò)模型的優(yōu)化目標(biāo)函數(shù)如下:
對(duì)于上述這個(gè)最大最小化目標(biāo)函數(shù),優(yōu)化算法有多種方式。最簡(jiǎn)單直接的方式就是對(duì) D 和 G 分別交替迭代訓(xùn)練。也就是先固定 D,對(duì) G 進(jìn)行優(yōu)化,然后固定 G,對(duì) D 進(jìn)行優(yōu)化,如此反復(fù)交替,直至整個(gè)優(yōu)化過(guò)程穩(wěn)定收斂。
生成對(duì)抗網(wǎng)絡(luò)的優(yōu)點(diǎn)在于,可以自動(dòng)地學(xué)習(xí)真實(shí)樣本集的數(shù)據(jù)分布,這個(gè)特性非常適合應(yīng)用于圖像生成,并且在每一輪迭代優(yōu)化過(guò)程中,產(chǎn)生的圖像會(huì)越來(lái)越清晰并接近真實(shí)圖像。對(duì)測(cè)試用例的選擇可以更多的挑選余地。
圖2
圖3:生成模型神經(jīng)網(wǎng)絡(luò)層
圖4
由于針對(duì)圖像的問(wèn)題,使用卷積神經(jīng)網(wǎng)絡(luò)的效果和性能更為出色,通過(guò)融合卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)深度卷積生成對(duì)抗網(wǎng)絡(luò)模型。本文囿于計(jì)算資源限制以及評(píng)估要求,故此未選擇高像素圖像,也未構(gòu)造更深的網(wǎng)絡(luò)結(jié)構(gòu),只選擇了適當(dāng)?shù)哪P偷螖?shù)。硬件平臺(tái)上沒(méi)有可用于計(jì)算的GPU 資源,僅使用CPU 進(jìn)行計(jì)算。如果計(jì)算資源富裕,可以嘗試選擇高像素圖像以及更深網(wǎng)絡(luò)的結(jié)構(gòu),生成的圖像效果將會(huì)更出色。
整個(gè)系統(tǒng)實(shí)現(xiàn)過(guò)程,包含如下部分:數(shù)據(jù)加載、模型輸入、生成模型、判別模型、損失函數(shù)、優(yōu)化器、訓(xùn)練模型。本文采用TensorFlow 用于數(shù)值計(jì)算的開(kāi)源軟件庫(kù)來(lái)實(shí)現(xiàn)。
本文采用CIFAR-10 數(shù)據(jù)集,此數(shù)據(jù)集包含6 萬(wàn)張32x32 像素的彩色圖片,并分為10 個(gè)類(lèi)別,也就是每一類(lèi)含有6 千張圖片。這個(gè)數(shù)據(jù)集文件包含data_batch1……data_batch5,和test_batch,由pickle 庫(kù)產(chǎn)生的序列化后的對(duì)象。因此,本文使用Python 的pickle模塊,加載CIFAR-10 數(shù)據(jù)集的二進(jìn)制數(shù)據(jù)。
圖5:判別模型神經(jīng)網(wǎng)絡(luò)層shape 變換
圖6
圖7
圖8
模型輸入包含兩個(gè)部分,真實(shí)樣本(數(shù)據(jù)集圖片)和隨機(jī)噪聲。真實(shí)樣本將作為判別模型的輸入,由判別模型進(jìn)行判別并獲得結(jié)果。隨機(jī)噪聲作為生成模型來(lái)生成圖像的輸入,生成模型再將生成圖像傳遞給判別模型,獲得一個(gè)判別結(jié)果。下面的get_inputs 函數(shù)里,inputs_real 表示真實(shí)樣本的tensor,intpus_noise 表示隨機(jī)噪聲的tensor。如圖2 所示。
隨機(jī)噪聲會(huì)作為輸入傳遞給生成模型,在這個(gè)噪聲信號(hào)的基礎(chǔ)上,生成一個(gè)假樣本圖片并且作為輸入再傳給判別模型。生成模型采用了具有卷積結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),用以?xún)?yōu)化圖像處理過(guò)程。如圖3所示。
生成模型第一層采用全連接層,將隨機(jī)噪聲轉(zhuǎn)換成1 x 4 x 4 x 512 的結(jié)構(gòu),之后再reshape 成一個(gè)具有batch_size 的形狀。之后通過(guò)BN(batch normalization)進(jìn)行均值等于0,方差等于1 的歸一化處理,用以?xún)?yōu)化卷積神經(jīng)網(wǎng)絡(luò)的性能,加快模型收斂,提高模型穩(wěn)定性和魯棒性。
然后,采用激活函數(shù)Leaky ReLUs,這個(gè)函數(shù)與ReLU 不同在于,ReLU 把所有負(fù)數(shù)值設(shè)置為0,Leaky ReLUs 函數(shù)設(shè)為非零斜率。最后,是用dropout 函數(shù)來(lái)進(jìn)行正則化處理。由于生成圖像的shape必須與數(shù)據(jù)及圖像的shape 一致,因此本文采用了反卷積函數(shù),對(duì)隨機(jī)噪聲進(jìn)行處理,轉(zhuǎn)換為相同的shape。下面的get_generator 函數(shù)實(shí)現(xiàn)包含了此過(guò)程。如圖4 所示。
判別模型對(duì)一個(gè)圖像進(jìn)行判別,輸出一個(gè)概率。本質(zhì)上判別模型就是一個(gè)包含卷積神經(jīng)網(wǎng)絡(luò)的二分類(lèi)器。此處實(shí)現(xiàn)的判別模型本質(zhì)上就是一個(gè)卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別模型。如圖5 所示。
在實(shí)現(xiàn)判別模型的過(guò)程中,沒(méi)有采用池化層。原因如下,圖像在經(jīng)過(guò)多次卷積過(guò)程后已經(jīng)變得很小,之后又經(jīng)過(guò)BN 函數(shù),已經(jīng)可以達(dá)到加速訓(xùn)練模型的效果。下面的get_discriminator 函數(shù)實(shí)現(xiàn)了這個(gè)過(guò)程。變量logits 是未歸一化的對(duì)數(shù)概率,下一步用來(lái)計(jì)算Loss 時(shí)會(huì)用到。
生成對(duì)抗網(wǎng)絡(luò)中包含了兩個(gè)神經(jīng)網(wǎng)絡(luò),需要分別計(jì)算生成模型的Loss 和判別模型的Loss。同時(shí),為了增強(qiáng)模型泛化能力,引入了標(biāo)簽平滑(label smoothing)優(yōu)化來(lái)預(yù)防過(guò)擬合。下面的get_loss函數(shù)實(shí)現(xiàn)了這個(gè)過(guò)程。如圖7 所示。
生成對(duì)抗網(wǎng)絡(luò)中包含了兩個(gè)神經(jīng)網(wǎng)絡(luò),優(yōu)化器需要對(duì)兩個(gè)神經(jīng)網(wǎng)絡(luò)進(jìn)行分別優(yōu)化。在優(yōu)化過(guò)程中,需要考慮到BN 函數(shù)的特性,BN 函數(shù)的計(jì)算方式根據(jù)是否在訓(xùn)練階段,會(huì)產(chǎn)生較大差別。因此,需要使用tf.control_dependencies 函數(shù),保證訓(xùn)練階段計(jì)算正確性。下面的get_optimizer 函數(shù)實(shí)現(xiàn)了這個(gè)過(guò)程。如圖8 所示。
完成深度卷積生成對(duì)抗網(wǎng)絡(luò)的構(gòu)造之后,著手對(duì)模型進(jìn)行訓(xùn)練。本文測(cè)試了50 輪、100 輪、150 輪以及200 輪的迭代,通過(guò)深度卷積生成對(duì)抗網(wǎng)絡(luò)產(chǎn)生的馬的圖像均比較清晰和相似。圖9 和圖10,分別代表1-5 輪產(chǎn)生的圖像,75-80 輪產(chǎn)生的圖像。每一行代表一次迭代后的產(chǎn)生圖像,一共15 張??梢郧逦乜吹?,生成圖像從隨機(jī)噪聲變得越來(lái)越清晰,有些生成圖像幾乎可以以假亂真。每一次迭代的生成圖像保存下來(lái),可以挑選合適的測(cè)試用例,尤其是含有歧義的測(cè)試用例,來(lái)對(duì)計(jì)算機(jī)視覺(jué)系統(tǒng)進(jìn)行嚴(yán)格地、廣泛的測(cè)試。
在決定采用深度卷積對(duì)抗網(wǎng)絡(luò)之前,使用簡(jiǎn)單地全連接的神經(jīng)網(wǎng)絡(luò)建立模對(duì)抗網(wǎng)絡(luò),需要的迭代次數(shù)是是最終方案的5 ~8 倍,收斂速度慢4 ~7 倍,明顯不如深度卷積對(duì)抗網(wǎng)絡(luò)。更重要的是,深度卷積神經(jīng)網(wǎng)絡(luò)對(duì)于像素稍低的圖像,亦能生成較為滿(mǎn)意的圖像,對(duì)于降低計(jì)算資源的消耗量有積極的意義,降低圖像生成的成本。
隨著人工智能時(shí)代的來(lái)臨,計(jì)算機(jī)視覺(jué)系統(tǒng)的實(shí)現(xiàn)將更為復(fù)雜,尤其人工神經(jīng)網(wǎng)絡(luò)、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等技術(shù)的應(yīng)用,對(duì)于系統(tǒng)測(cè)試的完備性以及規(guī)模產(chǎn)生極大的挑戰(zhàn)。本文描述了對(duì)于生成測(cè)試用例圖像的一種通用方法,針對(duì)計(jì)算機(jī)視覺(jué)系統(tǒng)不同的任務(wù),需要對(duì)生成樣本進(jìn)行建模,努力消除組合爆炸產(chǎn)生的不完備。同時(shí),需要建立樣本的打分和評(píng)價(jià)體系,在此基礎(chǔ)上,對(duì)生成系統(tǒng)自動(dòng)調(diào)整參數(shù),進(jìn)一步優(yōu)化生成樣本的有效性。這將是本方法改進(jìn)的主要方向。深度學(xué)習(xí)技術(shù)在不斷發(fā)展中,持續(xù)跟蹤最新的模型,對(duì)于此目標(biāo)的達(dá)成有重大助力。
圖9:1-5 輪 產(chǎn)生圖像
圖10:75-80 輪 產(chǎn)生圖像