基于生成對抗神經(jīng)網(wǎng)絡的圖像風格快速遷移-畢業(yè)論文_第1頁
基于生成對抗神經(jīng)網(wǎng)絡的圖像風格快速遷移-畢業(yè)論文_第2頁
基于生成對抗神經(jīng)網(wǎng)絡的圖像風格快速遷移-畢業(yè)論文_第3頁
基于生成對抗神經(jīng)網(wǎng)絡的圖像風格快速遷移-畢業(yè)論文_第4頁
基于生成對抗神經(jīng)網(wǎng)絡的圖像風格快速遷移-畢業(yè)論文_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

---文檔均為word文檔,下載后可直接編輯使用亦可打印---摘要現(xiàn)今,無論是科研還是娛樂,人們對于圖片和視頻的處理需求越來越大,所以需要更多的處理圖片和視頻的應用,比如圖像風格遷移。對于圖像風格遷移這個領域,人類很難快速學習到某種圖片風格,而且利用人力在專門軟件上處理圖片是很耗時間的,所以人們需要可以自動化的快速的遷移方法。本文主要是實現(xiàn)了一個可以對圖像風格進行快速風格遷移的應用。針對傳統(tǒng)圖像遷移方法遷移速度慢,復用性弱的缺點,這里使用了一種更新型的神經(jīng)網(wǎng)絡方法——循環(huán)一致性生成對抗網(wǎng)絡(Cycle-ConsistentGenerativeAdversarialNetworks,CycleGAN)。編寫代碼實現(xiàn)了CycleGAN中的鑒別器和生成器之后,通過神經(jīng)網(wǎng)絡的迭代訓練,可以訓練出用來進行圖像風格遷移的生成器。利用這項技術,本文訓練出了7個風格遷移生成器,分別有:梵高,莫奈,塞尚,浮世繪,齊白石,唐寅,山水畫。除了實現(xiàn)照片風格遷移,本文還實現(xiàn)了兩個相似物體之間的風格互換。一共3種:馬與斑馬互轉,夏季與冬季互轉,蘋果與橘子互轉。關鍵詞:圖像風格遷移;快速遷移;CycleGAN;生成對抗網(wǎng)絡;鑒別器;生成器AbstractNowadays,whetheritisforscientificresearchorentertainment,peoplehaveanincreasingdemandforimageandvideoprocessing,somoreandmoreapplicationsofimageandvideoprocessingareneeded,suchasimagestyletransfer.Inthefieldofimagestyletransfer,itisdifficultforhumanbeingstolearnacertainimagestylequickly,andittakestimetoprocessimagesonspecializedsoftwarewithhumanbeings,sopeopleneedafastmethodofmigrationthatcanbeautomated.Thispapermainlyrealizesanapplicationoffaststylemigrationofimagestyle.Imagemigrationmethodfortraditionalmigrationspeedslow,problemofweakreusabilityhereUSESanewtypeofneuralnetworkmethodmoreconsistency-loopgeneratedagainstnetwork(Cycle-ConsistentGenerativeAdversarialNetworks,CycleGAN).AftercodingthediscriminatorandgeneratorinCycleGAN,thegeneratorforimagestyletransfercanbetrainedthroughtheiterativetrainingofneuralnetwork.Usingthistechnique,thispaperhastrainedsevenstyletransfergenerators,namely:vangogh,monet,Cezanne,ukiyo-e,qibaishi,tangYin,landscapepainting.Inadditiontothetransferofphotostyles,thispaperalsorealizesthestyleexchangebetweentwosimilarobjects.Therearethreekinds:thehorseturnswiththezebra,thesummerturnswiththewinter,theappleturnswiththeorange.Keywords:Imagestyletransfer;Rapidmigration;CycleGAN;Generatingantagonisticnetwork;Discriminator;Thegenerator目錄緒論1.1研究背景想象一下,如果19世紀的荷蘭畫家梵高來到校園,畫下一幅畫。那么,在他的腦海中或者在他的繪畫風格下,校園的風景會呈現(xiàn)怎樣的效果?當然,梵高可不會復活,我們也沒有那么強的想象力。所以這就衍生出一項應用——圖像風格遷移。圖像風格遷移(StyleTransfer)。顧名思義,就是把一種圖片風格轉換成另一種圖片風格。圖片風格如圖1-1,每一張圖都是不同的藝術風格。要讓計算機理解風格是什么都很困難,更不用說把一個圖像的風格變成另一種風格。圖1-13種不同的圖片風格想讓計算機理解圖片風格是什么,科學家做了很多努力。在2000年及之前的時間,那時候還沒有圖像遷移,只有圖片紋理的研究。在2000-2015年之間,圖像紋理都是手動建模的,比如《AParametricTextureModelBasedonJointStatisticsofComplexWaveletCoefficients》[1],其中用到的最重要的一個思想是:紋理可以用圖像局部特征的統(tǒng)計模型來描述。有了這個思想之后,通過用復雜的數(shù)學公式和模型,科學家可以整理和生成了一些紋理了,但是手動建模很耗費時間。紋理生成無論最后生成的紋理怎么樣,好不好看,都是紋理生成。而本文的圖像風格遷移,在當時,都沒有被準確的劃分出這個領域,名稱都沒有。當時的風格遷移研究中,每個風格的算法互相之間沒有很多共同點,是各自獨立的。例如油畫風格的遷移,用了七個不同的步驟去抽取和遷移油畫的特征。另一個例子是頭像風格遷移,用了三個步驟將一個頭像風格樣式遷移到另一個樣式上。這十個步驟都是各自發(fā)展,沒有共同點。風格遷移得以發(fā)展的背后還有游戲的功勞。游戲機從剛發(fā)明之初就離不開顯卡。顯卡最重要的功能就是處理和顯示圖像。隨著玩家對游戲場景的追求,游戲人員希望把游戲做的越來越真實絢麗,這極大的推動了過去20年顯卡的研究和發(fā)展。這時有人發(fā)現(xiàn),圖像計算和神經(jīng)網(wǎng)絡有相似的地方。它們都需要對大量的數(shù)據(jù)進行單一重復的計算,所以就同樣可以利用顯卡來加速。于是乎,被研究人員拋棄了十幾年的神經(jīng)網(wǎng)絡由于算力的爆炸式增長而重新煥發(fā)出了活力,深度學習開始崛起。這時候就開始有人用神經(jīng)網(wǎng)絡的方法去做風格遷移,該領域從此快速發(fā)展??梢钥偨Y出,如果沒有游戲的發(fā)展就沒有神經(jīng)網(wǎng)絡的崛起,也就沒有風格遷移的成熟。第一個基于神經(jīng)網(wǎng)絡的圖像風格遷移算法由Gatys等人在兩篇論文中提出:《TextureSynthesisUsingConvolutionalNeuralNetworks》[2]和《ANeuralAlgorithmofArtisticStyle》[3],第一次提出基于深度CNN(卷積神經(jīng)網(wǎng)絡)的圖像風格遷移,如圖1-2所示。圖1-2Gatys方法的圖像遷移效果,小圖是風格類型基于深度CNN的神經(jīng)網(wǎng)絡方法相比于傳統(tǒng)的非參方法(通過采樣圖像的像素紋理),會有更好的效果。特征提取不再只是提取一些底層特征,反而能夠提取全局的特征。不過Gatys這種方法是直接拿待遷移圖片和風格圖片進行訓練生成。每生成一張風格圖片就要訓練一次,非常消耗時間。而且還不能對訓練參數(shù)進行復用,生成下一張就得重新訓練參數(shù)。后來出現(xiàn)了許多比Gatys方法更好的,基于深度學習的圖像遷移算法:有固定風格任意內容的快速風格遷移《PerceptualLossesforReal-TimeStyleTransferandSuper-Resolution》[6],還有任意風格任意內容的快速風格遷移《MetaNetworksforNeuralStyleTransfer》[7]。也有人開始用GAN(生成對抗網(wǎng)絡)來生成風格圖片,比如有pix2pix和CycleGAN兩種方法,CycleGAN就是本文所要使用的方法。1.2國內外研究與現(xiàn)狀風格遷移之前只是研究圖片紋理生成,都在2000年及其之前。是用的一些統(tǒng)計模型和復雜的數(shù)學公式來描述和生成圖像局部紋理特征。在這之后的時間,圖像遷移都是基于神經(jīng)網(wǎng)絡來實現(xiàn)的。比如在2015年,由Gatys等人發(fā)表的《ANeuralAlgorithmofArtisticStyle》[3],第一次提出基于深度CNN(卷積神經(jīng)網(wǎng)絡)的圖像風格遷移。通過神經(jīng)網(wǎng)絡的反向傳播算法和梯度下降算法,不斷的迭代更新,調整參數(shù),減少損失,最終逼近一個最好的結果。但是Gatys這種方法每生成一張圖片就要訓練一次,效率很低,模型還不能復用。所以,很多研究人員就開始另辟蹊徑,尋找快速的方法。比如在2016年由JustinJohnson,AlexandreAlahi,LiFei-Fei發(fā)表的論文《PerceptualLossesforReal-TimeStyleTransferandSuper-Resolution》[6]。該篇論文解決了前面Gatys方法風格遷移久的問題。李飛飛的方法不像gatys那樣直接拿圖片和風格圖片一起訓練,而是先訓練了一個前向生成網(wǎng)絡模型,等模型訓練完成后,可以重復利用,可以用于生成風格圖片。這個網(wǎng)絡與之前的Gatys的方法相比巧妙很多,是把生成圖片從訓練中分開了,生成模型可以被復用,訓練參數(shù)不再是沒用的。兩種方法的生成效果差不多,但是速度上李飛飛的卻比Gatys的提升了數(shù)百倍,達到3個數(shù)量級,畢竟不再是生成一張就得訓練一次。2018cvpr的一篇論文,由FalongShen等人發(fā)表的《MetaNetworksforNeuralStyleTransfer》[7],使用meta轉換網(wǎng)絡實現(xiàn)多風格轉換。該方法解決了以前的網(wǎng)絡只能轉換某一種風格的缺點。這里的meta網(wǎng)絡可以對不同的風格訓練出不同的參數(shù)。近些年,JunYanZhu等加州大學伯克利分校的研究員提出了一種圖像風格轉換的技術CycleGAN,取得了很不錯的效果,并迅速引起許多關注。CycleGAN是基于GAN的一項技術,利用訓練好的生成器,可以把兩個風格域的圖像相互轉換為另一個域。這項技術被研究員應用到了很多領域,可以做圖像風格轉換,物體轉換等等。 風格遷移的現(xiàn)代史,基本上是由深度學習來書寫。最開始的Gatys的方法不會優(yōu)化網(wǎng)絡參數(shù),只會優(yōu)化生成圖,沒有復用性,每生成一張就得重新訓練一次。后面的Johnson則解決了這個問題,加入了一個轉換網(wǎng)絡,轉換網(wǎng)絡訓練好了之后,就可以利用這個網(wǎng)絡來轉換圖片,一并解決了復用性和耗時的問題,訓練效果也差不多。FalongShen的多風格轉換也差不多,只不過可以有更多選擇。這些方法缺點也是有的,生成的風格圖片越來越像目標風格圖,反而缺失了原有圖像的很多細節(jié),越來越不像原圖?;谶@一問題,利用UCberkeleyAI研究所發(fā)明的CycleGAN可以解決。利用循環(huán)一致性損失來控制生成圖和原圖的區(qū)別,以至于結果在像風格圖的同時還不會過度扭曲。還有,CycleGAN是基于兩個域的非成對風格圖片來訓練,優(yōu)點是收集圖片方便,只需要兩個域的數(shù)量不定的圖片集即可,而且風格遷移不再是只學習一張圖,而是學習整個域的所有圖片,生成的圖片像風格域的平均風格。1.3本文的主要內容正如上兩節(jié)所寫,以往的風格遷移算法也許可以勝任圖像風格快速遷移這項任務,但是會出現(xiàn)原圖扭曲,內容細節(jié)丟失的問題。結果看起來也許還不錯,但是和原圖已經(jīng)相差甚遠了。所以為了解決這些問題,本文選擇了更好的方法--CycleGAN進行風格遷移。本文1-3章先是介紹以及實現(xiàn)了CycleGAN,然后訓練模型。第4章利用訓練好的生成器生成風格圖片,分析其結果(包括生成圖片效果和losses情況),并用該結果與以往方法進行對比總結。第五章是工作總結。研究方法與原理介紹2.1生成對抗網(wǎng)絡(GAN) 研究CycleGAN先要理解它的基本結構GAN,因為CycleGAN是GAN的一種拓展。生成對抗網(wǎng)絡(GenerativeAdversarialNetworks,簡稱GANs)是利用卷積神經(jīng)網(wǎng)絡等深度學習方法進行生成性建模的一種方法。生成式建模是機器學習中的一項無監(jiān)督學習任務,它涉及到自動發(fā)現(xiàn)和學習輸入數(shù)據(jù)中的規(guī)則或模式,從而使得該模型可以用于生成一些和原始數(shù)據(jù)集相似的新樣例。生成對抗網(wǎng)絡是一種很巧妙的訓練生成模型的方法,它將問題構建為一個包含兩個子模型的監(jiān)督學習問題。兩個子模型分別為:生成器模型,鑒別器模型。生成器生成假實例,鑒別器鑒別生成器生成的實例,作分類任務分出真假。每一次迭代,兩個子模型都會不斷優(yōu)化自己的能力。生成器不斷的生成以假亂真的實例以欺騙鑒別器,而鑒別器也不斷的從真實實例中跟生成器生成的假實例做對比,提高自己的鑒別能力。兩個模型的訓練相當于在一場零和博弈,直到達到納什均衡,這時候鑒別器只能鑒別出假實例的一半,這也意味著生成器正在生成可以以假亂真的例子。2.1.1生成器模型(GeneratorModel)生成器模型接受一個固定長度的隨機向量作為一個輸入,然后輸出一個域的實例,比如一張圖片。這個向量通常從高斯分布(經(jīng)常被用于生成噪聲源,隨機數(shù)種子)中作為抽取。簡而言之呢,這個向量就是一個隨機數(shù)數(shù)組,沒有任何意義,不是一個圖像,也不是任何東西,除非由生成器模型提供意義,比如條件生成對抗網(wǎng)絡(cGAN)。通過訓練完以后,這個高維隨機向量的點被關聯(lián)到目標生成域的某些點,形成了一個數(shù)據(jù)分布的壓縮表示,稱為潛在空間,由潛在變量組成。訓練結束后,生成器模型可以保存下來,被用于生成目標實例。生成器模型結構如圖2-1。圖2-1生成器結構2.1.2鑒別器模型(DiscriminatorModel)鑒別器模型其實就是通常的深度學習分類模型。鑒別器從目標域中接受例子作為輸入(比如真實例子或者生成器生成的例子),然后做分類任務,預測結果是一個二元標簽,真(真實例子)或假(生成的例子)。鑒別器模型的結構如下圖2-2圖2-2鑒別器結構在訓練過程中,由于我們只對生成器感興趣,鑒別器模型最后就被丟棄了。鑒別器通常是另外獨自訓練,但是訓練生成器的時候還需要重新利用回鑒別器,和生成器配合組成復合模型。2.1.3生成對抗網(wǎng)絡結構 生成式建模是一個非監(jiān)督學習的任務,前面已經(jīng)談到了,然而這里的生成對抗網(wǎng)絡的巧妙之處在于,生成式建模變成了一個監(jiān)督學習的任務,兩個子模型一起訓練。生成器生成一些和目標數(shù)據(jù)相似的偽數(shù)據(jù),然后提供給鑒別器去做分類任務。 鑒別器在每一輪的迭代中提高自己的鑒別真?zhèn)卫幽芰?,更重要的是,生成器可以通過鑒別器輔助提高自己的造偽能力。換各說法就是,生成器看生成的例子是否有欺騙到鑒別器,不斷提高自己的欺騙性。 打個比喻:生成器就像偽幣制造者,不斷的制造假幣;鑒別器就像警察,不斷的找出假幣,抓住偽幣制造者。雙方為了贏得這場博弈,偽幣制造者得學會如果造出以假亂真的假幣,而警察就要不斷的提高自己假幣鑒定能力。 這樣的話,兩個子模型之間存在一個博弈的關系。它們在博弈論的意義上看是對立的,在玩一場零和游戲。零和意味著當鑒別器成功識別出真實樣本和虛假樣本時,它會得到獎勵,模型參數(shù)不用調整;而生成器會遭到懲罰,更新大量的模型參數(shù)。另一方面,鑒別器不能成功識別就會被懲罰,更新大量參數(shù),而生成器會得到獎勵,不用更新參數(shù)。 在某個極限下,生成器可以生成完美的目標域的假樣本,鑒別器不能區(qū)別出生成樣本是真還是假(假樣本的識別率為50%)。這就正好是一個最理想的情況了,這種情況在博弈論中叫納什均衡,不過得到可以使用的生成器不一定非要到達那個極限??梢栽谟柧毻局休敵鲞^程情況,看生成的效果來判斷何時停止。生成對抗網(wǎng)絡的架構如下圖2-3。圖2-3GAN結構2.1.4GAN的原理及Loss 我們先假設一個分布P_data(x)為真實圖片集。其中的x可以理解成一個向量,是真實圖片集中的一張圖片,設P_data是這類向量集合的分布。我們需要生成一些也在P_data(x)中的分布的圖片,如果直接就在這分布,是還不能夠的。 設一個分布P_G(x;θ)為現(xiàn)有生成器生成的分布,θ是這個分布的參數(shù),可以控制這個分布。我們想要計算一個似然P_G(xi;θ),xi是取自真實分布中{x1,x2,…xm},所以在生成模型中的似然L就是(1)讓生成器最大概率的生成一些真實圖像就相當于最大化這個似然L,是一個最大似然值估計的問題,所以我們需要找到一個θ來最大化這個似然。要找一個合理的θ,我們可以把P_G(x;θ)當作一個神經(jīng)網(wǎng)絡。隨機取一個向量z,讓它通過G(z)=x生成器,就可以生成圖片x。我們現(xiàn)在要取一組樣例z,因為這組z是符合某個分布的,那么通過G(z)就可以生成一個分布P_G。之后再把這個分布與真實分布P_data進行比較就可以更新θ了。有了非線性激活函數(shù)的神經(jīng)網(wǎng)絡,就可以擬合任意函數(shù),分布也是一樣的。所以,為了學習到一個很復雜的分布,我們可以用高斯分布取樣去訓練一個神經(jīng)網(wǎng)絡。 GAN的貢獻在于,它提供了一個方法可以找到更接近的分布,如下面的公式:(2)這個公式的G,D分別表示生成器和鑒別器。D(x)表示的是一個概率,區(qū)間在0到1,表示是真實分布的概率,顯然,越接近1就表示越真實,越接近0就表示越假。等式右邊的第一個式子的意思是對真實圖片的概率,第二個式子是對生成圖片的反概率。鑒別器的任務就是讓這個值V(G,D)盡可能的大,意義是對真實圖片的判斷盡可能接近1,對生成圖片的判斷盡可能接近0。生成器則相反,讓這個值盡可能的小,意思就是讓鑒別器犯錯,對真實圖片的判斷遠離1,對生成圖片的判斷遠離0。所以生成器和鑒別器是在進行一場互相拉扯的最大最小值的博弈游戲,最大最小值公式如下:(3)用該公式作為神經(jīng)網(wǎng)絡的loss,最終會訓練出θ參數(shù)比較好的生成器。2.2GAN的應用 在計算機視覺領域中,使用深度學習方法的一個最主要的優(yōu)勢就是在一項叫數(shù)據(jù)增廣的技術上。數(shù)據(jù)增廣使得模型表現(xiàn)得更加的好,包括提高了模型輕巧度和提供了正則化影響。生成器通過生成新的,人工合成的,但是及其相似的樣本給模型訓練。對于圖像數(shù)據(jù)來說,這些技術是原始的,涉及到訓練數(shù)據(jù)集中現(xiàn)有圖像的裁剪,翻轉,縮放和其他簡單轉換。成功的生成式建模為數(shù)據(jù)擴充提供了一種可選的、可能更具體于領域的方法。事實上,數(shù)據(jù)增廣是生成式建模的簡化版本,盡管很少這樣描述。 在復雜的領域或數(shù)據(jù)量有限的領域,生成式建模為建模提供了更多的訓練。GANs已經(jīng)在諸如深度強化學習等領域的用例中取得了很大的成功。GANs的有趣、重要和需求進一步研究的原因有很多。IanGoodfellow在他的2016年會議主題和相關技術報告NIPS2016Tutorial:GenerativeAdversarialNetworks[8]中概述了其中的一些。在這些原因中,他強調了GANs成功地建模高維數(shù)據(jù)、處理缺失數(shù)據(jù)的能力,以及GANs提供多模態(tài)輸出或多個貌似合理的答案的能力。GANs最引人注目的應用可能是針對需要生成新示例的任務的條件GANs。這里,Goodfellow列舉了三個主要的例子。圖像分辨率增強:生成高清圖片。創(chuàng)造生成藝術:創(chuàng)造新的藝術圖片,素描,畫作等等。圖像翻譯:圖像域與域之間的轉換。比如夏天與冬天的轉換,白天與黑夜的轉換等等。GANs被廣泛研究、開發(fā)和使用的最引人注目的原因可能是它們的成功。GANs能夠生成如此逼真的照片,以至于人們無法分辨出它們是真實生活中不存在的物體、場景和人物。對于他們的能力和成功來說,“大吃一驚”還不是一個充分的形容詞。如圖2-4,生成人臉越來越逼真清晰。圖2-4不同時期GAN生成人臉的效果2.3循環(huán)一致性生成對抗網(wǎng)絡(CycleGAN)CycleGAN是GAN的一種拓展。通常GAN模型只包含兩個模型:生成模型,判別模型,但是CycleGAN涉及到4個模型:兩個生成器,兩個判別器。CycleGAN主要用于圖像到圖像的翻譯,有另一種GAN方法叫Pix2Pix的也可以用作圖像翻譯,但是要利用成對數(shù)據(jù)進行訓練。而這些成對數(shù)據(jù)一般來說很難去準備,甚至是不可能的。然而CycleGAN這項技術可以使用非成對的數(shù)據(jù)集訓練,準備數(shù)據(jù)比較簡單,只需要準備兩個域數(shù)量不等的數(shù)據(jù)就可以了。 為了解決以前方法的圖像扭曲和細節(jié)缺失的問題,CycleGAN引入了一個叫“循環(huán)一致性(cycleconsistency)”的新概念,意思是類型a的一張圖片經(jīng)過生成器G(AtoB)生成另一種類型b,這張b再通過生成器G(BtoA)轉換回類型a,看看是否和原來的相似。通過控制這個過程的損失,就可以解決細節(jié)丟失問題。生成的圖片既要和另一種類型相似,又不會完全變成另一張圖片,保留了原有的特征。a變b再變回a,顧名思義為一條“循環(huán)”。為了訓練一個生成器往往需要另一個生成器的幫助,所以兩個生成器就得一起訓練。最后的訓練就包含了兩條循環(huán),四個模型。 CycleGAN的架構顯然很復雜,因為它涉及到4個模型。模型除了正常的判別損失之外,還加上了循環(huán)一致性損失。建立CycleGAN大體上和傳統(tǒng)GAN一樣,也是生成器和鑒別器的組合,只是實現(xiàn)循環(huán)一致性損失有點復雜。循環(huán)一致性網(wǎng)絡結構可以很好用以下的圖解釋。如圖2-5和圖2-6。圖2-5一個單向的CycleGAN(正向)。從域a到域b。圖2-6一個單向的CycleGAN(反向)。從域b到域a。其中每個方向的循環(huán)一致性損失如下:正向循環(huán)一致性損失(ForwordCycleConsisitencyLoss):域a的數(shù)據(jù)A通過G(AtoB),產(chǎn)生^B^B通過G(BtoA),產(chǎn)生^A比較A和^A同理反向:反向循環(huán)一致性損失(BackwordCycleConsisitencyLoss):域b的數(shù)據(jù)B通過G(BtoA),產(chǎn)生^A^A通過G(AtoB),產(chǎn)生^B比較B和^B理解了單向循環(huán)那么整體的CycleGAN就好理解了。如下圖出自《UnpairedImage-to-ImageTranslationusingCycle-ConsistentAdversarialNetworks》[9]。圖2-7CycleGAN模型 (a)里面包含了兩個映射函數(shù)(生成器)G:XY和F:YX,以及鑒別器DX和DY,為了更好的規(guī)范映射,就引入了兩個循環(huán)一致性損失。就是如果我們從一個域轉換到另一個域,再轉回來,這個結果應該和原來相差無幾。如(b)的正向循環(huán)一致性損失:xG(x)F(G(x))≈x和(c)的逆向循環(huán)一致性損失yF(y)G(F(y))≈y。其中XY的判別器損失公式為:(4)同理,YX的判別器損失為:(5)兩個生成器的循環(huán)一致性損失加起來為:(6)最終網(wǎng)絡的損失為:(7)2.4CycleGAN的應用 CycleGAN可以做出很多令人眼前一亮的應用,只要是有兩個域的數(shù)據(jù)集,這個網(wǎng)絡就可以訓練出來兩個域相互轉換的生成器。以下介紹幾個大方向的應用。 第一個是風格遷移,也是本文的任務。風格遷移是指從一個領域學習藝術風格(通常是繪畫),并將其藝術風格應用到另一領域(比如照片)。比如說可以把照片轉換為莫奈,梵高,塞尚,浮世繪等風格。第二個是對象轉換。對象轉換是指把一個類(如斑馬)轉換成另一個類(斑馬)。有很多具體場景,比如蘋果轉橘子,貓轉狗,人類性別變換,換臉等等。這種變形是講得通的,因為以上的例子,兩個類除了顏色和一些細節(jié)外,大小和結構都很相似。 第三個是季節(jié)變換。季節(jié)變換理論上也可以歸類為風格遷移吧,主要是將一個季節(jié)(如夏季)拍攝的照片變換成另一個季節(jié)(如冬季)。也可以理解為一個季節(jié)拍攝的照片的風格遷移成另一個季節(jié)的風格。 第四個是從繪畫中生成照片。顧名思義,就是把一副繪畫變成一張真實感的照片,其實就是風格遷移的逆過程。在CycleGAN的風格遷移訓練中,同時也進行了這項繪畫轉實景的工作。 第五個是圖像增強。圖像增強指用某種方式改善原有的圖片,比如可以提高照片的景深,或者提高圖像的分辨率。研究過程研究學習了CycleGAN的結構和原理之后,現(xiàn)在就要著手實現(xiàn)。3.1節(jié)分三小節(jié)分別來實現(xiàn)鑒別器,生成器和復合模型。3.2節(jié)定義實現(xiàn)了CycleGAN的訓練流程算法。3.3節(jié)介紹了實驗的條件,包括編程語言,深度學習框架,還有訓練的機器配置等等。3.4節(jié)開始實驗。3.1CycleGAN的實現(xiàn)3.1.1實現(xiàn)CycleGAN的鑒別器模型一般的鑒別器模型接收圖片然后只輸出一個true或者false,對一些要求高分辨率高細節(jié)保留的圖像領域中并不適用。為了解決這個問題,這里的鑒別器采用PatchGAN來實現(xiàn),與一般的鑒別器不同的是,PatchGAN輸出的是一個N*N的矩陣。這個矩陣中的每一個輸出元素,比如a(i,j),是true或false。這個a(i,j)實際上對應著原圖中的一個比較大的感受域,換句話說就是一個元素對應著一個n*n尺寸的patch,所以這種結構就被稱作PatchGAN。說到底PatchGAN也就是一個卷積網(wǎng)絡,只不過輸出是一個矩陣。這里的鑒別器我們使用70*70尺寸的PatchGAN,意味著對原圖分隔成了很多70*70像素大小的小圖片,然后再訓練,所以對細節(jié)有更好的提取能力。這里的70是已經(jīng)被前人探索出來比較好的感受域大小,原圖70*70大小的感受域對應著輸出的一個元素。模型的結構采用Conv2D層,InstanceNorm層,LeakyReLU層組成各個層,用4*4的卷積核(filters)和2*2的跨度(stride)。在風格遷移中一般使用InstanceNorm作歸一化,使用這種歸一化不僅可以加速模型收斂,并且還可以保持每個圖像實例之間的獨立。LeakyReLU是激活函數(shù)ReLU的變體,效果更好。而且,相比于sigmoid和tanh,LeakyReLU在使用梯度下降算法時,收斂速度更快。結構細節(jié)在該論文附錄中有記錄《UnpairedImage-to-ImageTranslationusingCycle-ConsistentAdversarialNetworks》[9]。按照論文,鑒別器的結構為:C64-C128-C256-C512,這幾層卷積隱藏層對原有圖像進行特征提取,減小尺寸,每層之間用LeakyReLU激活函數(shù)激活。PatchGAN之后還有一層stride為1*1的卷積層C512和最后一層stride為1*1,通道數(shù)為1的線性激活輸出層。圖3-1鑒別器網(wǎng)絡結構3.1.2實現(xiàn)CycleGAN的生成器模型 CycleGAN的生成器網(wǎng)絡很深,因為是要更好的處理高分辨率圖片。更深的網(wǎng)絡能夠更好的提取圖片特征。但是隨著網(wǎng)絡深度增加,會出現(xiàn)網(wǎng)絡退化的問題(degradation),性能會越來越差。于是這里的網(wǎng)絡添加了殘差網(wǎng)絡residualnetwork(ResNet)來解決網(wǎng)絡退化的問題。殘差網(wǎng)絡通過建立殘差連接使得優(yōu)化更容易。如下圖。圖右側的曲箭頭鏈接就是殘差連接,一個殘差連接中的幾層網(wǎng)絡組合為一個殘差塊。圖3-2殘差塊與殘差鏈接 根據(jù)論文附錄《UnpairedImage-to-ImageTranslationusingCycle-ConsistentAdversarialNetworks》[9]中的配置。生成器的結構由3個部分組成:卷積提取特征部分,殘差網(wǎng)絡部分,反卷積生成圖片部分。卷積提取特征部分有3層:c7s1-64層,卷積核大小為7*7,stride為1*1,通道數(shù)為64的卷積層;d128層,卷積核為3*3,stride為2*2,通道數(shù)為128的卷積層;d256層,卷積核為3*3,stride為2*2,通道數(shù)為256的卷積層。殘差網(wǎng)絡由殘差塊組成,模型中一共用了9個殘差塊,每個殘差塊有2層,2層都是3*3大小的卷積核,1*1的stride,256的通道數(shù)。反卷積部分有3層:u128層,卷積核大小為3*3,stride為2*2,通道數(shù)為128的反卷積層;u64,卷積核大小為3*3,stride為2*2,通道數(shù)為64的反卷積層,該層已經(jīng)把特征放大到256*256大??;c7s1-3,卷積核大小為7*7,stride為1*1,通道數(shù)為3的卷積層,該層再卷積一遍把通道數(shù)變?yōu)?。 綜上,生成器模型網(wǎng)絡結構為:c7s1-64,d128,d256,r256*9,u128,u64,c7s1-3。如下圖。圖3-2生成器網(wǎng)絡結構3.1.3實現(xiàn)CycleGAN復合模型 實現(xiàn)CycelGAN的復合模型是該工作的難點,因為要涉及到多個模型。在實現(xiàn)了生成器模型之后還不能被訓練更新權值,需要鑒別器的配合才能更新,這也是一般的GAN的生成器的做法。但是這里CycleGAN有點復雜,更新一個生成器的權值不僅僅要和鑒別器配合,還需要和另一個生成器配合。所以一共是三個模型組合成一個復合模型(兩個生成器,一個鑒別器)。 復合模型一共涉及4個損失:對抗損失(Adversarialloss),同一性損失(Identityloss),前向循環(huán)損失(Forwardcycleloss),反向循環(huán)損失(Backwardcycleloss)。 對抗損失和一般的生成對抗模型一樣,用來判斷圖片是否轉換為目標域風格。損失通常用L2損失或者用均方差(mse)。同一性損失,通過把目標風格域的圖片送到生成器,看是否有變化,是否還是同原來的圖片相差無幾,變化越小越好,這個損失是保證生成器盡量不改變形狀,只改變特征。前向和反向損失,在第二章的圖2-5和圖2-6描繪的很形象,源圖像通過生成器后的生成圖像,再通過另一個生成器,生成回原來域的風格圖片,判斷最后的圖片是否和原來域的風格一樣。后面三個損失都是用的平均絕對誤差(mae)。 復合模型的結構很復雜,作圖出來非常大,所以下面用文字加箭頭代替結構圖,分別講述復合模型每個損失的結構。其中:G-AtoB(A域生成B域)表示生成器A2B;G-BtoA(B域生成A域)表示生成器B2A;DA,DB分別表示鑒別器A,B。DomainA,B分別表示A,B域。G-AtoB的復合模型:Adversarialloss:DomainAG-AtoBDomainBDB[real/fake]Identityloss:DomainBG-AtoBDomainBForwardCycleloss:DomainAG-AtoBDomainBG-BtoADomainABackwardCycleloss:DomainBG-BtoADomainAG-AtoBDomainBG-BtoA的復合模型:Adversarialloss:DomainBG-BtoADomainADA[real/fake]Identityloss:DomainAG-BtoADomainAForwardCycleloss:DomainBG-BtoADomainAG-AtoBDomainBBackwardCycleloss:DomainAG-AtoBDomainBG-BtoADomainA3.2訓練流程算法 用于訓練的CycleGAN各個部分模型都已實現(xiàn),接下來要利用上面實現(xiàn)好的模型,設計實現(xiàn)一個訓練流程算法,更新各個模型的權值。 首先,訓練模型需要數(shù)據(jù),一方面是真實圖片集的數(shù)據(jù),一方面是生成器生成的數(shù)據(jù)。所以這里定義了兩個函數(shù):generate_real_samples(),從真實圖片集中提取圖片;generate_fake_samples()利用生成器生成的風格圖片。 接著,要定義單次迭代的訓練邏輯。這里設計成先訓練正向循環(huán),再訓練后向循環(huán),也就是先訓練生成器-A2B和鑒別器-B,后訓練生成器-B2A和鑒別器-A。利用train_on_batch()函數(shù)可以實現(xiàn)單次迭代的訓練。一次迭代模型訓練順序如下:訓練更新生成器-A2B訓練更新鑒別器-B訓練更新生成器-B2A訓練更新鑒別器-A 最后,我們還需要確定迭代總次數(shù)n_steps。n_stept由幾個值推算出來的:訓練輪數(shù)n_epochs,單次訓練批大小n_batch,每輪訓練的批數(shù)bat_per_epo。一輪訓練指的是訓練集被全部訓練一次。bat_per_epo也指的是一輪訓練下來的總迭代次數(shù),為:訓練集大小/單次訓練批大小。所以總的迭代次數(shù)由單輪的迭代數(shù)乘以輪數(shù),n_stept=bar_per_epo*n_epoch。訓練同時還打印每次迭代的loss,以及每隔1輪生成保存一張圖片以作后面分析,還有每隔5輪就保存一遍模型。 Cyclegan訓練算法偽代碼如下:算法1:CycleGAN訓練流程算法輸入:鑒別器模型A,鑒別器模型B,生成器模型A2B,生成器模型B2A,復合模型A2B,復合模型B2A,AB域的數(shù)據(jù)集輸出:無for總迭代次數(shù)n_steptdo從真實數(shù)據(jù)集中產(chǎn)生訓練數(shù)據(jù)批generate_real_samples()利用數(shù)據(jù)批通過生成器生成偽數(shù)據(jù)(生成圖片)generate_fake_samples()訓練更新復合模型A2B權值train_on_batch()訓練更新鑒別器模型B權值train_on_batch()訓練更新復合模型B2A權值train_on_batch()訓練更新鑒別器模型A權值train_on_batch()輸出每個模型的lossif迭代次數(shù)為1輪的次數(shù)then生成圖片并保存endifif迭代次數(shù)為5輪的次數(shù)then保存模型endifendfor3.3實驗條件 開發(fā)代碼的條件并不算高,一般的筆記本就能勝任。以上模型和訓練流程均由python語言編寫,代碼編輯器用了pycharm和jupyternotebook。網(wǎng)絡模型利用python的tensorflow和keras框架進行搭建。 訓練條件是實驗的難點。訓練深度學習模型,往往需要很高的運算資源,和很長的訓練時間。運算資源指的是高性能的GPU資源,和大內存的電腦,沒有這些資源,完成這個實驗幾乎是不可能的,可能要訓練幾個月才結束。為了盡可能快的完成這個實驗,尋尋覓覓了很多方法。權衡經(jīng)濟和效率,最后選擇了在淘寶上租用賣家的深度學習主機,遠程操控。雖然價格還是很昂貴,但是對比租用阿里云,淘寶的還是便宜太多,只需50元一天。而且賣家的主機已經(jīng)配置好了環(huán)境,就算中途出現(xiàn)什么配置的小問題,可以和賣家技術員討論解決。以下是主機的配置:系統(tǒng):Ubuntu16.04CPU:IntelE5-2689@2.60GHz八核內存:32G存儲空間:2TGPU:NvidiaRTX2080Ti11G顯存為了能再更快的完成任務,我租用了兩臺同樣配置的主機,前后用時8天訓練完幾個任務的所有模型。3.4實驗過程 進行風格遷移實驗前,首先要準備數(shù)據(jù)集?;贑ycleGAN的風格遷移需要非成對的兩個數(shù)據(jù)域,所以需要準備一份風格圖片數(shù)據(jù)集和一份自然景觀圖片數(shù)據(jù)集。通過網(wǎng)絡上的開源圖片集,收集到了幾種風格圖片:梵高,莫奈,塞尚,浮世繪。如下圖。圖3-34種繪畫風格這里作為拓展創(chuàng)新,又收集整理了3種中國風:齊白石,唐寅,山水畫。如下圖。圖3-43種中國風繪畫風格自然風景圖片如下。圖3-5自然景觀圖片集例子整理好圖片之后,就可以開始訓練了。通過ssh遠程連接控制linux主機,利用主機上已經(jīng)配置好的jupyternotebook進行實驗。該軟件可以很方便的在瀏覽器上開發(fā)代碼和運行代碼,還可以上傳下載文件,如下圖3-6。把代碼復制到瀏覽器中,接著就進行模型的訓練了。圖3-6jupyternotebook頁面在jupyter的代碼編輯界面編輯好圖片的地區(qū)路徑之后,就可以開始運行代碼了,訓練輪數(shù)為100epoch。為了能實時了解訓練情況,每一輪訓練完,輸出生成圖片,展示訓練過程效果。每一次迭代都輸出每個模型的loss,實時監(jiān)視模型情況(如圖3-7),如果出現(xiàn)模型坍塌可以及時發(fā)現(xiàn)及時重開。每5輪保存一遍生成器模型,供以后挑選出好的生成器。圖3-7訓練過程的loss情況待訓練結束后,可以從生成的過程圖片中評選出最好的生成器,使用該生成器可以生成風格圖片。如下圖,這是使用梵高風格生成器生成的風格圖片。更多風格圖片請見附錄。圖3-8梵高風格遷移效果圖 運用同樣的模型配置,我也做了3個圖像翻譯的任務以作拓展創(chuàng)新:夏天變冬天,馬變斑馬,橘子變蘋果。效果如下圖,更多轉換效果見附錄。圖3-9相似物體的風格互換實驗結果討論分析4.1風格圖片效果分析 實驗結果是生成圖片,要對結果進行分析,最簡單的就是直接肉眼看,看結果是否達到要求,是否有比較好的轉換效果。風格圖片的效果是否好,用人的肉眼來判斷很主觀,但通過肉眼看,還是可以基于幾個方面對生成圖像進行了評分。這里定義了一個5分制:0-1分:圖像模糊且損壞;2分:圖像完整,但是風格無明顯轉換;3分:圖像完整,風格有較明顯轉換;4分:圖像完整,風格轉換明顯;5分:圖像完整,風格轉換明顯且美觀。不同分數(shù)對應的效果如下。(給出每種分數(shù)對應圖片,以作參考)圖4-1打分示例圖因為訓練時每5輪epoch就保存一次模型,又用該生成器生成過程圖片以供評估。所以最后每個任務有20個生成器。(7個風格遷移任務,總共140個模型)。每個任務的所有模型打分情況如下表。表4-17個繪畫風格遷移模型評分表模型編號梵高莫奈塞尚浮世繪齊白石唐寅山水畫13.53.53.543.52323.523.54.53.520334.533443.544430342.5523.544.5243.56342.54.5024733.534.5243.5834.5450439443.5504.5210444514.5211434404.52123.5354032133354.505.52143.54250521543.735032164.53.534.504.52174344.504.521833.54404.52194.533.84042204.53.54.8304.52 表中加粗分值是選出來的比較不錯的模型,可用于生成風格圖片??梢钥闯?,分數(shù)并不是很有規(guī)律,而且并不是越訓練到后面,肉眼效果就越好。不過就這樣的訓練已經(jīng)可以訓練出足夠多個效果不錯的生成器了。另外,齊白石和山水畫的效果都不是很好,可能是由于圖片數(shù)據(jù)缺乏導致的。這兩個風格在網(wǎng)絡上的畫作資源不是很足,齊白石只收集了27張,山水畫只收集了31張。 利用同樣的訓練和評分方法,我對拓展的3個對象轉換任務的生成器也進行了打分。這里的模型是雙向的,所以一共是6個模型,3個AtoB,3個BtoA。打分情況如下表。表4-23個相似物體風格互換模型評分表夏轉冬馬斑馬蘋果橘子模型編號A2BB2AA2BB2AA2BB2A12200322340031332222043.72212053.7302.51263.722312.573.7433.5228343223923.54232.51023.74133113.733.511212332.5113133.522223143.5423.523.51523.5432016233.53.5311723.73.52.52.521833.72232.51944002.52.52043022.83.54.2模型損失分析 分析實驗結果還有另一個比較客觀的方法,觀察模型訓練過程的損失變化。訓練途中,每個模型的訓練損失都已被記錄下來,并作成了折線圖,如下圖4-(2,3,4,5,6)所示,分別為所有任務的losses折線圖(一共10個任務,包括風格遷移和對象)。其中,g_loss1表示生成器G-AtoB的損失,g_loss2表示生成器G-BtoA的損失,這兩個都是屬于復合生成器模型的損失。復合模型的損失如3.1.3節(jié)中所述,由4個損失組成:對抗損失,同一性損失,前向和反向損失。損失越小,生成器模型越好,表明生成圖片越像風格圖片,而且還保留原有圖片的細節(jié)越好。dA_loss1和dA_loss2表示鑒別器A分別對真實圖片A和生成圖片A的損失;同理,dB_loss1和dB_loss2表示鑒別器B分別對真實圖片B和生成圖片B的損失。損失越小,鑒別器越好,表明越能更好的區(qū)分出真實圖片和生成圖片。圖4-2梵高和莫奈風格任務的losses圖4-3塞尚和浮世繪風格任務的losses圖4-4齊白石和唐寅風格任務的losses圖4-5山水風格,蘋果橘子互換任務的losses圖4-6斑馬馬互換,夏與冬互換任務的losses從這些losses圖中可以看出在100輪epoch訓練之后,每個任務的各個鑒別器loss都非常快的下降到很低,最后基本在0-0.5之間搖擺??吹贸鲨b別器的效果很容易被訓練好。各個任務的生成器loss大約都在40輪epoch之后下降到比較低,40-100輪epoch的loss都在2-4之間搖擺,并且還有下降的趨勢??吹贸鰜?,訓練100輪也可以訓練出不錯的生成器了,但是loss還能下降,說明實驗還有改進空間,可以增多訓練輪數(shù)。除了單純的增加訓練次數(shù),還可以對訓練參數(shù)進行修改,如下?!啊璚etrainournetworksfromscratch,withalearningrateof0:0002.Inpractice,wedividetheobjectiveby2whileoptimizingD,whichslowsdowntherateatwhichDlearns,relativetotherateofG.Wekeepthesamelearningrateforthefirst100epochsandlinearlydecaytheratetozerooverthenext100epochs.WeightsareinitializedfromaGaussiandistributionN(0;0:02).”UnpairedImage-to-ImageTranslationusingCycle-ConsistentAdversarialNetworks,2017根據(jù)這篇論文的做法:一共訓練200輪,在前100輪epoch中保持不變的學習率(正如我現(xiàn)在所作),然后在后面100輪epoch中把學習率逐漸衰減到0。這種做法也會把各個模型的loss降到更低。但是由于實驗資源有限(時間和金錢),很難做到200輪的訓練。不過在前100輪的訓練中,已經(jīng)能訓練出用于風格遷移的比較好的生成器了。4.3和其他風格遷移方法的比較 在第一章中已經(jīng)介紹了風格遷移的歷史以及基于神經(jīng)網(wǎng)絡的風格遷移方法。對非神經(jīng)網(wǎng)絡的方法來說沒有可比性,這里只對神經(jīng)網(wǎng)絡的方法進行比較,每個方法都是對256*256圖像進行風格遷移。這里調查3個維度用于評估每個方法:生成速度,美觀度,圖片數(shù)對遷移風格數(shù)(一對一,一對多,多對一還是多對多)。經(jīng)查閱對應方法的文獻,下面整理出了每個方法的情況。表4-3本文方法與以往方法的比較生成一張圖片的平均時間待處理圖片--生成風格數(shù)Gatys的方法9.52s一對一李飛飛的方法0.015s多對一FalongShen的方法0.015s多對多本文的CycleGAN0.015s多對一 由于gatys的方法每生成一個圖片就要訓練一次,導致不能快速生成圖片。而后3個方法都是利用訓練好的生成器來生成所以速度都很快,生成一張圖片都少于0.5s,還可以同時生成多張風格圖。前三種方法理論上風格效果看上去差不多,而且看起來還挺奇幻且好看,但是已經(jīng)和缺失了原圖像的很多細節(jié),圖像已經(jīng)扭曲了。而本文的方法能夠在保持原圖細節(jié)的同時,還能很接近風格圖,如下圖4-7。圖4-7梵高風格下不同方法的風格遷移效果可以看出本文的方法更多的保留了原圖的細節(jié),但是也很像梵高的油畫風格。本文的方法不像其它3種方法那樣只用一張風格圖片訓練,而是利用該風格的一個圖片集的所有圖片。所以生成的圖片不會只像某一張圖,而是像該風格圖片集的平均外貌和共有的風格。比如上圖的前3個方法的遷移效果就只像梵高的《星月夜》,這樣只能稱為圖像變換不能叫風格遷移了。真正的風格遷移應該像本文的方法,學習數(shù)據(jù)集的所有圖片,得到一個平均的共同的風格然后遷移。最后總結一下本文方法用作風格遷移的優(yōu)缺點,優(yōu)點:速度快;可以生成多張風格圖片;生成圖片保留原有細節(jié);生成圖片外貌不會單一化,而是像風格的平均外貌。缺點:模型大,訓練時間長,不能同時生成多個風格??偨Y與展望5.1工作總結 本次畢設的工作是利用CycleGAN這種生成對抗網(wǎng)絡來做圖像風格快速遷移。選擇這項技術之前,查閱了很多做風格遷移的技術,在這個領域中各個方法都各有利弊。選擇這項技術是因為它對比以往方法有很多好處,解決了很多問題,一方面生成風格圖片快,另一方面就是它遷移后的圖像不會缺失原有的細節(jié)。 通過不斷的查閱學習CycleGAN相關的文獻和書籍后,在第一章中交代了風格遷移的歷史背景以及研究的主要內容;第二章中講述了GAN和CycleGAN的原理以及應用;在第三章中講述了如何實現(xiàn)CycleGAN和模型的訓練算法;在第四章中,對結果進行了分析并與以往方法進行了對比。 在本次工作中,還遇到了許多困難。做深度學習的很多資料文獻和書籍都比較少,而且一般都是全英的。最后是靠著平時英語基礎和翻譯軟件慢慢搞懂這項工作的原理的。編寫代碼也挺復雜,需要掌握一些深度學習的框架,最后也是一點點學會,編寫好代碼了。到了運行代碼,訓練模型階段的時候,更是愈發(fā)艱難。CycleGAN的模型很大,要訓練4個子模型。一開始利用學校和同學的高配置電腦運行,以為應該夠用,沒想到訓練也是龜速進行。最后尋尋覓覓找到淘寶賣家的遠程主機,租了兩臺深度學習主機,GPU是NvidiaRTX2080Ti。最后停停走走訓練了8天終于跑完所有程序。5.2后續(xù)工作展望 CycleGAN本身就有許多不足組要改進,有很多文獻也提供了很多改進的思路,模型最終效果也比原結構的效果有提升,后續(xù)可以學習這些方法來優(yōu)化。這里用100輪epoch也達到了很好的效果,如果按照CycleGAN原文獻的做法,用學習率衰減的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論