華為云ModelArts結(jié)合AnimeGANv2,讓照片在云上動漫化 丨【華為云AI賀新年】

      網(wǎng)友投稿 1620 2022-05-30

      其實(shí)早在接觸華為云的ModelArts之前,我就試過在一些科技公眾號上傳照片玩過動漫化,甚至也試過在本地IDE上自己編碼看著程序幫我給照片動漫化;但是前者是個“黑盒子”,我不知道里面發(fā)生了啥(程序做了什么操作?會不會背著我把照片上傳到服務(wù)端?);而后者限定在了自己的開發(fā)環(huán)境里,如果離開了我那臺開發(fā)電腦,在別的電腦上我又得重新搭環(huán)境重新編碼,費(fèi)時費(fèi)力。

      這時候,我接觸到了華為云的ModelArts,作為一款“是面向AI開發(fā)者的一站式開發(fā)平臺,能夠支撐開發(fā)者從數(shù)據(jù)到AI應(yīng)用的全流程開發(fā)過程;提供海量數(shù)據(jù)預(yù)處理及半自動化標(biāo)注、大規(guī)模分布式訓(xùn)練、自動化模型生成及端-邊-云模型按需部署能力,幫助用戶快速創(chuàng)建和部署模型,管理全周期AI工作流”【1】,它幫助我解決了上面的兩個難題。即我又可以看到代碼都是怎么樣的,又可以在云上進(jìn)行操作,代碼對用戶而言透明,安全隱私有保障。

      我又去了解了下ModelArts的對標(biāo)產(chǎn)品谷歌的AutoML;在后面整個流程摸索下來之后結(jié)合網(wǎng)上的評論【2】,我覺得華為云的ModelArts產(chǎn)品更適合不會代碼的小白,可以助力小白零代碼實(shí)現(xiàn)模型從數(shù)據(jù)集標(biāo)注到部署的全部流程;而谷歌的AutoML還得用戶自己配置Docker容器和Kubernetes,相對來說更難以上手。

      那么接下去我們步入正題,跟著華為云社區(qū)給出的指南文章“AnimeGANv2照片動漫化”,一起去玩一下怎么讓我們本地上傳的照片在云上動漫化吧。

      介紹一下AnimeGANv2

      其實(shí)先前自己在本地開發(fā)環(huán)境禮搭建搭建程序的時候,就用的python和AnimeGANv2;python語言簡單易懂,代碼不需要過多解釋就可以了解其意圖,且可以調(diào)用的包種類繁多;而AnimeGANv2“可以將現(xiàn)實(shí)場景的圖片處理為動漫畫分,目前支持宮崎駿、新海誠和今敏的三種風(fēng)格”【3】。

      感興趣的小伙伴可以看下AnimeGANv2 這篇論文《AnimeGAN: A Novel Lightweight GAN for Photo Animation》。論文的簡介我翻譯一下如下:

      “本文提出了一種將真實(shí)場景照片轉(zhuǎn)換成動畫風(fēng)格圖像的新方法,這在計(jì)算機(jī)視覺和藝術(shù)風(fēng)格轉(zhuǎn)換方面是一項(xiàng)有意義且具有挑戰(zhàn)性的任務(wù)。我們提出的方法結(jié)合了神經(jīng)風(fēng)格傳遞和生成式對抗網(wǎng)絡(luò)(gan)來實(shí)現(xiàn)這一任務(wù)。對于這個任務(wù),(論文之前)現(xiàn)有的一些方法并沒有取得令人滿意的動畫效果。現(xiàn)有的方法通常存在一些問題,其中比較突出的問題主要有:1)生成的圖像沒有明顯的動畫風(fēng)格紋理; 2)生成的圖像丟失了原始圖像的內(nèi)容; 3)網(wǎng)絡(luò)參數(shù)要求較大的內(nèi)存容量。 在本文中,我們提出了一種新穎的輕量級生成式對抗網(wǎng)絡(luò),稱為AnimeGAN,以實(shí)現(xiàn)動畫風(fēng)格的快速轉(zhuǎn)換。此外,我們進(jìn)一步提出了三種新穎的損失函數(shù),使生成的圖像具有更好的動畫視覺效果。這些損失函數(shù)分別是灰度樣式損失、灰度對抗損失和顏色重建損失。提出的AnimeGAN可以很容易地用未配對的訓(xùn)練數(shù)據(jù)進(jìn)行端到端訓(xùn)練。AnimeGAN參數(shù)對內(nèi)存的要求較低。實(shí)驗(yàn)結(jié)果表明,我們的方法可以快速地將真實(shí)世界的照片轉(zhuǎn)換成高質(zhì)量的動畫圖像,并優(yōu)于目前最先進(jìn)的方法。”

      ModelArts云上動漫化

      我們可以直接在AnimeGANv2照片動漫化網(wǎng)頁這,點(diǎn)擊"Run in ModelArts"的按鈕進(jìn)入ModelArts頁面:

      進(jìn)入頁面之后,會跳出一個訪問提示,告訴我們“系統(tǒng)將要創(chuàng)建Notebook實(shí)例為您提供服務(wù)”,點(diǎn)擊確定即可:

      等待頁面加載成功之后,會在頁面顯示“資源管理器”(resource manager)里關(guān)于當(dāng)前運(yùn)行環(huán)境的內(nèi)容(下圖1中的內(nèi)容);我們還需要選擇一下當(dāng)前實(shí)例里需要的kernel(因?yàn)橹改衔臋n里寫的是“基于PyTorch的實(shí)現(xiàn)”,因此kernel里我們就選擇PyTorch即可):

      1. 獲取代碼和數(shù)據(jù)

      我們可以把鼠標(biāo)放在import這一代碼框里點(diǎn)擊選擇,然后到下圖我畫紅圈的地方點(diǎn)擊運(yùn)行代碼:

      這一步的下載安裝非常快。上述的代碼會把os包導(dǎo)入到實(shí)例中(os包包含普遍的操作系統(tǒng)功能),然后通過wget的方式從網(wǎng)絡(luò)中下載下來AnimeGAN.zip這個資源壓縮包,再通過os的命令把壓縮包解壓。

      2. 安裝依賴庫

      第二步,我們?nèi)グ惭bPyTorch需要的各個依賴包;和1中一樣的方法,鼠標(biāo)先選擇!pip install dlib這一代碼框,然后點(diǎn)擊運(yùn)行代碼:

      我在這一步被卡著了,狀態(tài)界面會卡在“Building wheels for collected packages: dlib;Building wheel for dlib (setup.py) … /”并有彈窗提醒“Invalid response: 503 Service Unavailable”,顯示為服務(wù)器出錯的返回狀態(tài):

      雖然下載失敗,但我們可以看下具體下載了哪些依賴庫。

      dlib是一個使用現(xiàn)代C++技術(shù)編寫的跨平臺的通用庫,遵守Boost Software licence。是一個機(jī)器學(xué)習(xí)的開源庫,包含了機(jī)器學(xué)習(xí)的很多算法。

      torach,又稱為python torch,是一個以Python優(yōu)先的深度學(xué)習(xí)框架,一個開源的Python機(jī)器學(xué)習(xí)庫,用于自然語言處理等應(yīng)用程序,不僅能夠?qū)崿F(xiàn)強(qiáng)大的GPU加速,同時還支持動態(tài)神經(jīng)網(wǎng)絡(luò),這是現(xiàn)在很多主流框架比如Tensorflow等都不支持的。

      torchvision,該包由流行的數(shù)據(jù)集、模型架構(gòu)和常見的計(jì)算機(jī)視覺圖像轉(zhuǎn)換組成。

      下載玩依賴庫之后,進(jìn)入AnimeGANv2這個文件夾。

      3. AnimeGANv2源碼解析

      因?yàn)槲以诘诙街械囊蕾嚢鼪]有下載成功,因此就只能對下面的源代碼進(jìn)行學(xué)習(xí)分析,看看都執(zhí)行了哪些操作。

      首先,我們?nèi)ハ螺d模型文件“shape_predictor_68_face_landmarks.dat”,獲取到dlib里的前臉檢測器和形狀檢測器,再創(chuàng)建一個臉部標(biāo)志檢測函數(shù)

      def get_dlib_face_detector(predictor_path: str = "shape_predictor_68_face_landmarks.dat"): // XXXXXX return detect_face_landmarks

      接著,我們創(chuàng)建一個展示臉部標(biāo)志的函數(shù),通過一個Python的2D繪圖庫Matplotlib來繪圖展示:

      def display_facial_landmarks( img: Image, landmarks: List[np.ndarray], fig_size=[15, 15] ): // XXXXXX plt.show()

      然后,按照https://github.com/NVlabs/ffhq-dataset/blob/master/download_ffhq.py 文件里開發(fā)好的方法,利用Python圖像處理的PIL模塊,用來存儲和處理大型矩陣的numpy庫 和 多維圖像處理包的scipy.ndimage模塊在函數(shù)align_and_crop_face里,將五官數(shù)據(jù)轉(zhuǎn)為數(shù)組,計(jì)算輔助向量,提取矩形框,縮放,裁剪,填充數(shù)據(jù),轉(zhuǎn)化圖片;最后返回這個image:

      華為云ModelArts結(jié)合AnimeGANv2,讓照片在云上動漫化 丨【華為云AI賀新年】

      def align_and_crop_face( img: Image.Image, landmarks: np.ndarray, expand: float = 1.0, output_size: int = 1024, transform_size: int = 4096, enable_padding: bool = True, ): // XXXXXX return img

      然后是怎么用PyTorch去實(shí)現(xiàn)AnimeGANv2。Github代碼倉地址:https://github.com/bryandlee/animegan2-pytorch 。

      需要導(dǎo)入sys.path.append("animegan2-pytorch"),然后在函數(shù)face2paint里,得到圖片的尺寸,進(jìn)行裁剪,尺寸變化,最后返回使用了torchvision里toPILImage函數(shù)來輸出。

      def face2paint( img: Image.Image, size: int, side_by_side: bool = True, ) -> Image.Image: // XXXXXX return to_pil_image(output)

      最后通過函數(shù)inference_from_file,把圖片所在的路徑輸入進(jìn)去,最后返回出動漫化圖片。

      def inference_from_file(filepath): img = Image.open(filepath).convert("RGB") face_detector = get_dlib_face_detector() landmarks = face_detector(img) display_facial_landmarks(img, landmarks, fig_size=[5, 5]) for landmark in landmarks: face = align_and_crop_face(img, landmark, expand=1.3) display(face2paint(face, 512)) inference_from_file('4.jpg')

      當(dāng)然,還有一種方式就是不是本地上傳圖片,而是通過線上url的方式傳遞圖片:

      import requests def inference_from_url(url): img = Image.open(requests.get(url, stream=True).raw).convert("RGB") face_detector = get_dlib_face_detector() landmarks = face_detector(img) display_facial_landmarks(img, landmarks, fig_size=[5, 5]) for landmark in landmarks: face = align_and_crop_face(img, landmark, expand=1.3) display(face2paint(face, 512)) inference_from_url("https://obs-aigallery-zc.obs.cn-north-4.myhuaweicloud.com/clf/code/AnimeGAN/6.jpg")

      animegan2-pytorch Github里的示例圖如下:

      體會及建議:

      首先,作為一名程序員,可以感受到華為云ModelArts想做出一款好產(chǎn)品好平臺的良苦用心。打開平臺鏈接到開啟實(shí)例,用戶需要等待的準(zhǔn)備時間并不長,這點(diǎn)很讓人滿意。下載小的依賴庫速度很快,但是在下載多個比較大的依賴庫的時候,會有503錯誤顯示是我沒想到的。這里華為云作為國內(nèi)領(lǐng)先的云服務(wù)商,確實(shí)不太應(yīng)該(當(dāng)然我也不排除可能是因?yàn)槲疫@網(wǎng)絡(luò)的原因,但是我這1沒開proxy,2本地下載都沒問題,本地網(wǎng)絡(luò)問題的幾率不太大)。

      我感覺到了華為云想做好產(chǎn)品的決心,但因?yàn)橄螺d的失敗讓我沒感受到華為云AI的強(qiáng)大實(shí)屬有點(diǎn)遺憾。整個案例如果能感受下來全流程,這對于用戶零門檻入門AI或則對AI產(chǎn)生興趣確實(shí)幫助很大。

      還有一點(diǎn)要吐槽的是,我在點(diǎn)擊進(jìn)入ModelArts之后,并沒有什么指導(dǎo)文檔或則引導(dǎo),讓剛開始接觸ModelArts的用戶會丈二和尚摸不著頭腦。特別是需要我們自己去選擇kernel這一步,我這次就是折騰了一些時間去摸索各個按鈕都是什么,我才搞清怎么把代碼運(yùn)行起來。希望華為云可以多一點(diǎn)指南文檔和引導(dǎo),有更多的提示,多站在用戶的角度,才能讓用戶花更少的時間去了解這款產(chǎn)品,喜歡上這款產(chǎn)品。

      參考資料

      https://support.huaweicloud.com/productdesc-modelarts/modelarts_01_0001.html

      https://bbs.huaweicloud.com/forum/forum/thread-84731-1-1.html

      https://developer.huaweicloud.com/develop/aigallery/notebook/detail?id=6473b148-f59d-4064-84b6-2b6d78ec546c

      活動宣傳

      【華為云AI賀新年】有獎?wù)魑幕馃徇M(jìn)行中:https://bbs.huaweicloud.com/blogs/325842

      AI AI開發(fā)平臺ModelArts Python pytorch

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:【Android 安裝包優(yōu)化】WebP 應(yīng)用 ( Android 中使用 libwebp.so 庫解碼 WebP 圖片 )
      下一篇:Python 中級知識之裝飾器,滾雪球?qū)W Python
      相關(guān)文章
      亚洲今日精彩视频| 亚洲一区二区视频在线观看| 亚洲欧洲精品成人久久曰影片| 在线观看亚洲AV每日更新无码| 亚洲国产美女精品久久久久| 精品亚洲A∨无码一区二区三区| 亚洲中文字幕在线观看| 亚洲一区二区三区免费| 亚洲精品国产日韩无码AV永久免费网| 亚洲国产精品18久久久久久| 亚洲午夜理论片在线观看| 亚洲免费福利在线视频| 亚洲偷自精品三十六区| 亚洲一区二区三区亚瑟| 亚洲国产成人久久精品app| 亚洲精品视频在线播放| 亚洲国产夜色在线观看| 亚洲制服丝袜精品久久| 亚洲不卡中文字幕| 国产成人精品日本亚洲专| 亚洲 欧洲 自拍 另类 校园| 亚洲国产乱码最新视频| 亚洲国产一区二区三区在线观看| 亚洲一线产品二线产品| 亚洲精品无码成人| 亚洲A∨午夜成人片精品网站| 国产精品亚洲一区二区三区久久 | 亚洲AV无码国产丝袜在线观看 | 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲国产一区二区三区在线观看| 国产成人综合亚洲一区| 亚洲精品和日本精品| 中文字幕亚洲无线码| 亚洲五月综合缴情在线观看| 亚洲av无码片在线播放| 亚洲美女视频网站| 亚洲AV无码专区在线亚| 亚洲精品动漫免费二区| 亚洲国产成人久久综合野外| 国产亚洲精品资在线| 亚洲电影中文字幕|