王冠群
(上海市軟件評測中心有限公司 上海市 200000)
當(dāng)前,計(jì)算機(jī)視覺是一個(gè)非常熱門的人工智能研究領(lǐng)域,可以分為圖像處理、圖像識(shí)別、圖像理解、景物分析、動(dòng)作識(shí)別等多個(gè)研究方向。從研究到產(chǎn)品,對任何一個(gè)計(jì)算機(jī)視覺系統(tǒng)而言,嚴(yán)格且完備的大規(guī)模系統(tǒng)測試尤為重要, 影響到用戶體驗(yàn)甚至是用戶安全。只有完成嚴(yán)格的系統(tǒng)測試之后,才能正式上線交付用戶使用。在計(jì)算機(jī)視覺系統(tǒng)測試過程中,大規(guī)模、高覆蓋率、有測試針對性的圖像數(shù)據(jù)集,對于測試覆蓋率和完備性至關(guān)重要。計(jì)算機(jī)視覺系統(tǒng)的輸入對象一般都是以圖像為主,測試用例也是圖像。無論是購買商用數(shù)據(jù)集或是自行采集和制作圖像的時(shí)間成本和經(jīng)濟(jì)成本均比較高昂。因此,探索一種高效率、低成本以及可控的圖像生成方式,對于計(jì)算機(jī)視覺系統(tǒng)的大規(guī)模系統(tǒng)測試顯得更為重要。本文研究了如何利用生成對抗網(wǎng)絡(luò)(GAN)模型,根據(jù)真實(shí)圖像樣本來生成可用的類似的圖像樣本。該方法可以靈活地生成各種類型的圖像樣本,且可以同時(shí)生成不同相似程度圖像樣本。
當(dāng)前,計(jì)算機(jī)視覺系統(tǒng)主要的測試用例獲取,大多是購買常用的商用測試數(shù)據(jù)集,結(jié)合人工采集典型場景的圖像的方式。對于較新或是專業(yè)領(lǐng)域的計(jì)算機(jī)視覺系統(tǒng),購買常用的商用測試數(shù)據(jù)集的方式,缺點(diǎn)是與系統(tǒng)目標(biāo)的匹配度相對比較差,尤其是新型應(yīng)用的吻合度更是不盡如人意。人工采集和制作圖像的方式,對于數(shù)據(jù)集規(guī)模和經(jīng)濟(jì)成本均是極大的考驗(yàn)和挑戰(zhàn),無法滿足系統(tǒng)測試的覆蓋率和完備性要求。與此同時(shí),真實(shí)世界圖像集是組合的,任何數(shù)據(jù)集都很難完整體現(xiàn)現(xiàn)實(shí)世界的復(fù)雜性。在某些視覺任務(wù)中,這種組合爆炸基本不會(huì)發(fā)生。例如,醫(yī)院數(shù)字化X 光片等專業(yè)領(lǐng)域的標(biāo)準(zhǔn)化圖像等。但是,對于許多日常使用的應(yīng)用程序來說,如果沒有指數(shù)級別的圖像數(shù)據(jù)集,我們就無法捕捉到現(xiàn)實(shí)世界的復(fù)雜性。如果只能在有限的子集上測試計(jì)算機(jī)視覺系統(tǒng)和算法,那么如何有效地測試并確保它們在龐大的數(shù)據(jù)集中表現(xiàn)優(yōu)秀,并且測試過程中發(fā)現(xiàn)系統(tǒng)的缺陷和問題,就成為擺在計(jì)算機(jī)視覺系統(tǒng)設(shè)計(jì)與測試人員面前的一個(gè)重要課題。
本文針對計(jì)算機(jī)視覺系統(tǒng)測試所遇到的問題,考慮到所生成的測試用例圖像,必須滿足如下兩個(gè)具體要求:
(1)與真實(shí)參考樣本是類型相同。
(2)有不同程度的差異和模糊度。
針對上述兩個(gè)要求,研究和篩選各種圖像生成方法之后,最終決定選擇深度卷積生成對抗網(wǎng)絡(luò)(DCGAN)模型,進(jìn)行測試用例生成方案的實(shí)施。
如圖1 所示,生成對抗網(wǎng)絡(luò)(GAN)模型受到博弈論中的二人零和博弈的啟發(fā)。生成對抗網(wǎng)絡(luò)模型中,有兩位博弈者,分別是生成模型(Generative Model)和判別模型(Discriminative Model)。生成模型通過學(xué)習(xí)之后,模擬和捕捉真實(shí)樣本集的高維數(shù)據(jù)分布,使用服從某一分布(均勻分布,高斯分布等)的隨機(jī)噪聲 z 生成一個(gè)類似真實(shí)訓(xùn)練數(shù)據(jù)的偽造樣本,通過學(xué)習(xí)使得偽造樣本與真實(shí)樣本之間無法分辨,以至于判別模型無法判斷偽造樣本的真?zhèn)巍E袆e模型 D 本質(zhì)上是一個(gè)基于神經(jīng)網(wǎng)絡(luò)的二分類器,評估一個(gè)樣本來自于真實(shí)數(shù)據(jù)集的可能性,輸出概率值。如果輸入樣本來自于真實(shí)數(shù)據(jù)集,則 D 輸出大概率,反之,D 輸出小概率。

圖1:生成對抗網(wǎng)絡(luò)示意圖
當(dāng)一個(gè)圖像生成模型和一個(gè)圖像判別模型,通過如下模式:生成模型生成圖片,判別模型學(xué)習(xí)區(qū)分真實(shí)圖像和生成圖像,生成模型再次根據(jù)判別模型進(jìn)行改進(jìn),生成模型生成新的圖像。以此類推,經(jīng)過多次學(xué)習(xí)和博弈之后,直至兩個(gè)模型都無法再次提高自己,也就是當(dāng)判別模型對生成圖像的輸出結(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ò)作為模型類型,那么就稱為生成對抗網(wǎng)絡(luò)(GAN)。使用數(shù)學(xué)語言描述整個(gè)博弈過程,假設(shè)我們的生成模型是G(z),其中 z 是一個(gè)隨機(jī)噪聲,而 z 將這個(gè)隨機(jī)噪聲轉(zhuǎn)化為數(shù)據(jù)類型 x 。D是一個(gè)判別模型,對任何輸入 x ,D(x)的輸出是0~1 范圍內(nèi)的一個(gè)實(shí)數(shù),用來判斷這個(gè)圖片是一個(gè)真實(shí)圖片的概率是多大,Pdata 和Pz 分別代表真實(shí)圖像的分布與生成圖像的分布。
從判別模型角度看,其目標(biāo)函數(shù)如下:

從生成模型角度看,其目標(biāo)函數(shù)如下:

因此,生成對抗網(wǎng)絡(luò)模型的優(yōu)化目標(biāo)函數(shù)如下:

對于上述這個(gè)最大最小化目標(biāo)函數(shù),優(yōu)化算法有多種方式。最簡單直接的方式就是對 D 和 G 分別交替迭代訓(xùn)練。也就是先固定 D,對 G 進(jìn)行優(yōu)化,然后固定 G,對 D 進(jìn)行優(yōu)化,如此反復(fù)交替,直至整個(gè)優(yōu)化過程穩(wěn)定收斂。
生成對抗網(wǎng)絡(luò)的優(yōu)點(diǎn)在于,可以自動(dòng)地學(xué)習(xí)真實(shí)樣本集的數(shù)據(jù)分布,這個(gè)特性非常適合應(yīng)用于圖像生成,并且在每一輪迭代優(yōu)化過程中,產(chǎn)生的圖像會(huì)越來越清晰并接近真實(shí)圖像。對測試用例的選擇可以更多的挑選余地。

圖2

圖3:生成模型神經(jīng)網(wǎng)絡(luò)層

圖4
由于針對圖像的問題,使用卷積神經(jīng)網(wǎng)絡(luò)的效果和性能更為出色,通過融合卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)深度卷積生成對抗網(wǎng)絡(luò)模型。本文囿于計(jì)算資源限制以及評估要求,故此未選擇高像素圖像,也未構(gòu)造更深的網(wǎng)絡(luò)結(jié)構(gòu),只選擇了適當(dāng)?shù)哪P偷螖?shù)。硬件平臺(tái)上沒有可用于計(jì)算的GPU 資源,僅使用CPU 進(jìn)行計(jì)算。如果計(jì)算資源富裕,可以嘗試選擇高像素圖像以及更深網(wǎng)絡(luò)的結(jié)構(gòu),生成的圖像效果將會(huì)更出色。
整個(gè)系統(tǒng)實(shí)現(xiàn)過程,包含如下部分:數(shù)據(jù)加載、模型輸入、生成模型、判別模型、損失函數(shù)、優(yōu)化器、訓(xùn)練模型。本文采用TensorFlow 用于數(shù)值計(jì)算的開源軟件庫來實(shí)現(xiàn)。
本文采用CIFAR-10 數(shù)據(jù)集,此數(shù)據(jù)集包含6 萬張32x32 像素的彩色圖片,并分為10 個(gè)類別,也就是每一類含有6 千張圖片。這個(gè)數(shù)據(jù)集文件包含data_batch1……data_batch5,和test_batch,由pickle 庫產(chǎn)生的序列化后的對象。因此,本文使用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ī)噪聲作為生成模型來生成圖像的輸入,生成模型再將生成圖像傳遞給判別模型,獲得一個(gè)判別結(jié)果。下面的get_inputs 函數(shù)里,inputs_real 表示真實(shí)樣本的tensor,intpus_noise 表示隨機(jī)噪聲的tensor。如圖2 所示。
隨機(jī)噪聲會(huì)作為輸入傳遞給生成模型,在這個(gè)噪聲信號的基礎(chǔ)上,生成一個(gè)假樣本圖片并且作為輸入再傳給判別模型。生成模型采用了具有卷積結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),用以優(yōu)化圖像處理過程。如圖3所示。
生成模型第一層采用全連接層,將隨機(jī)噪聲轉(zhuǎn)換成1 x 4 x 4 x 512 的結(jié)構(gòu),之后再reshape 成一個(gè)具有batch_size 的形狀。之后通過BN(batch normalization)進(jìn)行均值等于0,方差等于1 的歸一化處理,用以優(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ù)來進(jìn)行正則化處理。由于生成圖像的shape必須與數(shù)據(jù)及圖像的shape 一致,因此本文采用了反卷積函數(shù),對隨機(jī)噪聲進(jìn)行處理,轉(zhuǎn)換為相同的shape。下面的get_generator 函數(shù)實(shí)現(xiàn)包含了此過程。如圖4 所示。
判別模型對一個(gè)圖像進(jìn)行判別,輸出一個(gè)概率。本質(zhì)上判別模型就是一個(gè)包含卷積神經(jīng)網(wǎng)絡(luò)的二分類器。此處實(shí)現(xiàn)的判別模型本質(zhì)上就是一個(gè)卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別模型。如圖5 所示。
在實(shí)現(xiàn)判別模型的過程中,沒有采用池化層。原因如下,圖像在經(jīng)過多次卷積過程后已經(jīng)變得很小,之后又經(jīng)過BN 函數(shù),已經(jīng)可以達(dá)到加速訓(xùn)練模型的效果。下面的get_discriminator 函數(shù)實(shí)現(xiàn)了這個(gè)過程。變量logits 是未歸一化的對數(shù)概率,下一步用來計(jì)算Loss 時(shí)會(huì)用到。
生成對抗網(wǎng)絡(luò)中包含了兩個(gè)神經(jīng)網(wǎng)絡(luò),需要分別計(jì)算生成模型的Loss 和判別模型的Loss。同時(shí),為了增強(qiáng)模型泛化能力,引入了標(biāo)簽平滑(label smoothing)優(yōu)化來預(yù)防過擬合。下面的get_loss函數(shù)實(shí)現(xiàn)了這個(gè)過程。如圖7 所示。
生成對抗網(wǎng)絡(luò)中包含了兩個(gè)神經(jīng)網(wǎng)絡(luò),優(yōu)化器需要對兩個(gè)神經(jīng)網(wǎng)絡(luò)進(jìn)行分別優(yōu)化。在優(yōu)化過程中,需要考慮到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è)過程。如圖8 所示。
完成深度卷積生成對抗網(wǎng)絡(luò)的構(gòu)造之后,著手對模型進(jìn)行訓(xùn)練。本文測試了50 輪、100 輪、150 輪以及200 輪的迭代,通過深度卷積生成對抗網(wǎng)絡(luò)產(chǎn)生的馬的圖像均比較清晰和相似。圖9 和圖10,分別代表1-5 輪產(chǎn)生的圖像,75-80 輪產(chǎn)生的圖像。每一行代表一次迭代后的產(chǎn)生圖像,一共15 張。可以清晰地看到,生成圖像從隨機(jī)噪聲變得越來越清晰,有些生成圖像幾乎可以以假亂真。每一次迭代的生成圖像保存下來,可以挑選合適的測試用例,尤其是含有歧義的測試用例,來對計(jì)算機(jī)視覺系統(tǒng)進(jìn)行嚴(yán)格地、廣泛的測試。
在決定采用深度卷積對抗網(wǎng)絡(luò)之前,使用簡單地全連接的神經(jīng)網(wǎng)絡(luò)建立模對抗網(wǎng)絡(luò),需要的迭代次數(shù)是是最終方案的5 ~8 倍,收斂速度慢4 ~7 倍,明顯不如深度卷積對抗網(wǎng)絡(luò)。更重要的是,深度卷積神經(jīng)網(wǎng)絡(luò)對于像素稍低的圖像,亦能生成較為滿意的圖像,對于降低計(jì)算資源的消耗量有積極的意義,降低圖像生成的成本。
隨著人工智能時(shí)代的來臨,計(jì)算機(jī)視覺系統(tǒng)的實(shí)現(xiàn)將更為復(fù)雜,尤其人工神經(jīng)網(wǎng)絡(luò)、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等技術(shù)的應(yīng)用,對于系統(tǒng)測試的完備性以及規(guī)模產(chǎn)生極大的挑戰(zhàn)。本文描述了對于生成測試用例圖像的一種通用方法,針對計(jì)算機(jī)視覺系統(tǒng)不同的任務(wù),需要對生成樣本進(jìn)行建模,努力消除組合爆炸產(chǎn)生的不完備。同時(shí),需要建立樣本的打分和評價(jià)體系,在此基礎(chǔ)上,對生成系統(tǒng)自動(dòng)調(diào)整參數(shù),進(jìn)一步優(yōu)化生成樣本的有效性。這將是本方法改進(jìn)的主要方向。深度學(xué)習(xí)技術(shù)在不斷發(fā)展中,持續(xù)跟蹤最新的模型,對于此目標(biāo)的達(dá)成有重大助力。

圖9:1-5 輪 產(chǎn)生圖像

圖10:75-80 輪 產(chǎn)生圖像