1. "螞蟻呀嘿",快用 ModelArts 自己實(shí)現(xiàn)一個(gè)!

        共 6289字,需瀏覽 13分鐘

         ·

        2021-03-02 05:27

        ?

        一夜之間,朋友圈都在“螞蟻呀嘿”!網(wǎng)友卻擔(dān)心......"Baby, don't worry, we have ModelArts!",是的,咱用 ModelArts 來制作,無需擔(dān)心“有人模仿我的臉?”,也不用擔(dān)心偌大的水印。不過,使用別人的臉可能真的有法律風(fēng)險(xiǎn)!本文將介紹如何借力一站式 AI 開發(fā)平臺(tái),“傻瓜式”操作實(shí)現(xiàn)生成“螞蟻呀嘿“小視頻。

        ?

        環(huán)境準(zhǔn)備

        ModelArts 和她的最佳搭檔--對(duì)象存儲(chǔ)服務(wù) OBS ,您可以理解為是“網(wǎng)盤”,主要要來存放數(shù)據(jù)集、模型或其他文件。

        6baaba4558ee3e4850e71480bf473711.webpWhat'sModeArts.png

        ModelArts: https://www.huaweicloud.com/product/modelarts.htmlAI開發(fā)平臺(tái)ModelArts是面向開發(fā)者的一站式AI開發(fā)平臺(tái),為機(jī)器學(xué)習(xí)與深度學(xué)習(xí)提供海量數(shù)據(jù)預(yù)處理及半自動(dòng)化標(biāo)注、大規(guī)模分布式Training、自動(dòng)化模型生成,及端-邊-云模型按需部署能力,幫助用戶快速創(chuàng)建和部署模型,管理全周期AI工作流。

        44a8f3654e47c7d380dfd02ee1a6298d.webpWhat'sOBS.png

        OBS: https://www.huaweicloud.com/product/obs.html
        對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,OBS)提供海量、安全、高可靠、低成本的數(shù)據(jù)存儲(chǔ)能力,可供用戶存儲(chǔ)任意類型和大小的數(shù)據(jù)。適合企業(yè)備份/歸檔、視頻點(diǎn)播、視頻監(jiān)控等多種數(shù)據(jù)存儲(chǔ)場景。

        使用以上服務(wù)會(huì)有一定費(fèi)用產(chǎn)生,或者您可以嘗試認(rèn)證為開發(fā)者會(huì)有一定代金券贈(zèng)送,當(dāng)然關(guān)注 ModelArts 和加入 ModelArts 開發(fā)者社區(qū)也會(huì)有機(jī)會(huì)獲得大額代金券。

        模型、素材準(zhǔn)備

        本次實(shí)現(xiàn)使用的是用于圖像動(dòng)畫的一階運(yùn)動(dòng)模型,這是一種基于關(guān)鍵點(diǎn)和局部仿射變換的圖像動(dòng)畫方法,
        論文地址:https://arxiv.org/abs/2003.00196

        下載預(yù)訓(xùn)練模型及素材

        最近手頭緊,非常抱歉不能為大家提供 OBS 路徑直接下載,我已將預(yù)訓(xùn)練模型及素材上傳到 AI Gallery 數(shù)據(jù)集,請(qǐng)自行下載到您的 OBS 中。
        當(dāng)然如果您有可快速下載的地址,歡迎分享!
        源文件地址:https://drive.google.com/drive/folders/1kZ1gCnpfU0BnpdU47pLM_TQ6RypDDqgw?usp=sharing 或者h(yuǎn)ttps://drive.google.com/drive/folders/16inDpBRPT1UC0YMGMX3dKvRnOUsf5Dhn?usp=sharing因?yàn)槭窃次募?,因此不包含?span style="color:rgb(89,89,89);font-family:'Optima-Regular', Optima, 'PingFangTC-Light', 'PingFangSC-light', 'PingFangTC-light';font-size:14px;text-align:left;background-color:rgb(246,238,255);">螞蟻呀嘿“原視頻素材,但我已添加至AI Gallery 數(shù)據(jù)集
        如仍有需求,可以直接找我要,公眾號(hào):胡琦,WeChat:Hugi66;
        歡迎加入 ModelArts 開發(fā)者社區(qū),廣州地區(qū)的小伙伴可以加入我們共創(chuàng) MDG 廣州站哦!

        • AI Gallery 是在 ModelArts 的基礎(chǔ)上構(gòu)建的開發(fā)者生態(tài)社區(qū),提供模型、算法、HiLens技能、數(shù)據(jù)集等內(nèi)容的共享和交易。因此您可以下載分發(fā)的數(shù)據(jù)集或文件到您的 OBS ,使用時(shí)請(qǐng)遵守相應(yīng)的政策和規(guī)則!打開?? https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=00bc20c3-2a00-4231-bdfd-dfa3eb62a46d 點(diǎn)擊「下載按鈕」進(jìn)入「下載詳情」,設(shè)置 OBS 路徑,「確定」下載即可將模型和素材下載到自己的 OBS 中,比如我路徑是/modelarts-lab/first-order-motion-model。下載進(jìn)度可以在 AI Gallery 「個(gè)人中心-我的下載」查看。

        cf5bce29d1d527a6f22e6eb045a5f0f2.webp
        35971c672ffe5a8e5fb7b439512b09a3.webp
        f86e9f8ea77ccf59ab1562b9a160caf9.webp
        bc6b2125ea49eabaca2f7d861cce13d7.webp

        JUST DO IT -- ModelArts 我的筆記本

        接下來開始使用 「ModelArts--我的筆記本」 ,即開即用的在線集成開發(fā)環(huán)境,可以輕松的構(gòu)建、訓(xùn)練、調(diào)試、部署機(jī)器學(xué)習(xí)算法與模型。當(dāng)前使用免費(fèi)規(guī)格用于體驗(yàn), 值得留意的是 72 小時(shí)內(nèi)沒有使用,會(huì)釋放資源,因此需要注意文件備份。當(dāng)然還可以使用 Notebook 免費(fèi)算力,記得選擇 GPU 環(huán)境哦!cef8b38945f94477d81fbba768a5d879.webp

        當(dāng)我們使用「我的筆記本」時(shí)默認(rèn)開啟的是 CPU 環(huán)境,因此我們需要切換到 GPU 環(huán)境。目前「ModelArts-我的筆記本」支持8 vCPU + 64 GiB + 1 x Tesla V100-PCIE-32GB。52efc7d3a7ea044888b8120b5c107fa2.webp

        新建Pytorch 1.0.ipynb文件,開始我們的“螞蟻呀嘿”體驗(yàn)之旅。87d734953ebf2756e666da2d4f6a3c90.webp

        • 下載代碼

          !git?clone?https://github.com/AliaksandrSiarohin/first-order-model
          #?or
          !git?clone?https://codehub.devcloud.cn-north-4.huaweicloud.com/ai-pome-free00001/first-order-model.git

          github 速度慢,建議轉(zhuǎn)存到華為云代碼托管平臺(tái)再拉取。
          此處提供我已經(jīng)緩存好的代碼倉庫地址,因此不再演示如何將 github 代碼遷移到 codehub。
          (不保證我的賬號(hào)欠費(fèi)而無法訪問,因此建議大家以自己的方式上傳代碼到 Notebook !)

          d8f34b441dd2bf34d5b3884f8288378e.webp
        • 利用 Moxing 拷貝文件到 JupyterLab
          將之前下載到 OBS 中的模型和素材通過 Moxing 拷貝過來,此處注意替換為您的 OBS 路徑。02.mp4是“螞蟻呀嘿”的模版視頻,

          #?此處牛刀小試--用?Moxing?下載文件
          import?moxing?as?mox

          #?此處需要替換您的?OBS?地址
          mox.file.copy_parallel('obs://modelarts-lab/first-order-motion-model/first-order-motion-model-20210226T075740Z-001.zip'?,?'first-order-motion-model.zip')
          mox.file.copy_parallel('obs://modelarts-lab/first-order-motion-model/02.mp4'?,?'02.mp4')
          #?解壓
          !unzip?first-order-motion-model.zip

          #?模版視頻
          !mv?02.mp4?first-order-motion-model/
          9193cba22ed52c7dde466a00451cfc78.webp
        • JUST DO IT
          準(zhǔn)備工作完成之后,擼起袖子就是干!切換到first-order-model目錄,然后將 source_image_path中的路徑替換為”您的臉”所在的路徑,臉的照片可以直接通過 Notebook 的文件上傳功能上傳。
          當(dāng)然您還可以將默認(rèn)的“螞蟻呀嘿”視頻替換為您自定義的視頻,格式為 mp4。一路執(zhí)行可以查看到合成前的預(yù)覽。

          cd?first-order-model
          import?imageio
          import?numpy?as?np
          import?matplotlib.pyplot?as?plt
          import?matplotlib.animation?as?animation
          from?skimage.transform?import?resize
          from?IPython.display?import?HTML
          import?warnings
          warnings.filterwarnings("ignore")

          #?此處替換為您的圖片路徑,圖片最好為?256*256,這里默認(rèn)為普京大帝
          source_image_path?=?'/home/ma-user/work/first-order-motion-model/02.png'
          source_image?=?imageio.imread(source_image_path)

          #?此處可替換為您的視頻路徑,這里默認(rèn)為“螞蟻牙黑”
          reader_path?=?'/home/ma-user/work/first-order-motion-model/02.mp4'
          reader?=?imageio.get_reader(reader_path)


          #?調(diào)整圖片和視頻大小為?256x256

          source_image?=?resize(source_image,?(256,?256))[...,?:3]

          fps?=?reader.get_meta_data()['fps']
          driving_video?=?[]
          try:
          ????for?im?in?reader:
          ????????driving_video.append(im)
          except?RuntimeError:
          ????pass
          reader.close()

          driving_video?=?[resize(frame,?(256,?256))[...,?:3]?for?frame?in?driving_video]

          def?display(source,?driving,?generated=None):
          ????fig?=?plt.figure(figsize=(8?+?4?*?(generated?is?not?None),?6))

          ????ims?=?[]
          ????for?i?in?range(len(driving)):
          ????????cols?=?[source]
          ????????cols.append(driving[i])
          ????????if?generated?is?not?None:
          ????????????cols.append(generated[i])
          ????????im?=?plt.imshow(np.concatenate(cols,?axis=1),?animated=True)
          ????????plt.axis('off')
          ????????ims.append([im])

          ????ani?=?animation.ArtistAnimation(fig,?ims,?interval=50,?repeat_delay=1000)
          ????plt.close()
          ????return?ani


          HTML(display(source_image,?driving_video).to_html5_video())
          a5d98424b3b8ec6bc68eb9fe382a0673.webp
        • 創(chuàng)建模型并加載 checkpoints
          這一步完成之后,我們便得到了“螞蟻呀嘿”的視頻了--“generated.mp4”,這就結(jié)束了?不過,問題來了……

          from?demo?import?load_checkpoints
          generator,?kp_detector?=?load_checkpoints(config_path='config/vox-256.yaml',?
          ????????????????????????????checkpoint_path='/home/ma-user/work/first-order-motion-model/vox-cpk.pth.tar')
          from?demo?import?make_animation
          from?skimage?import?img_as_ubyte

          predictions?=?make_animation(source_image,?driving_video,?generator,?kp_detector,?relative=True)

          #?保存結(jié)果視頻
          imageio.mimsave('../generated.mp4',?[img_as_ubyte(frame)?for?frame?in?predictions],?fps=fps)
          #?在?Notebook?根目錄能找,/home/ma-user/work/

          HTML(display(source_image,?driving_video,?predictions).to_html5_video())
          58bf685dc7e708b2afc1b4521e3d0849.webp
        • 后續(xù)操作
          如果您和我一樣直接下載并打開上面操作的產(chǎn)物--generated.mp4,您一定會(huì)和我一樣困惑:聲音呢?
          是的,聲音丟失了,因?yàn)楹诵拇a只處理圖像,聲音需要我們自行找回,因?yàn)槲覀兪褂胢oviepy。
          不僅如此,我們還可以為視頻加水印

          • 安裝 moviepy,為視頻剪輯做準(zhǔn)備

        #?安裝視頻剪輯神器?moviepy
        !pip?install?moviepy
        0fbd4c632e455d127be174334f238cc1.webp
        • 合成背景音樂
          #?為生成的視頻加上源視頻聲音
          from?moviepy.editor?import?*

          videoclip_1?=?VideoFileClip(reader_path)
          videoclip_2?=?VideoFileClip("../generated.mp4")

          audio_1?=?videoclip_1.audio

          videoclip_3?=?videoclip_2.set_audio(audio_1)

          videoclip_3.write_videofile("../result.mp4",?audio_codec="aac")
          172f9f47d77572fedf1593e73c354cdf.webp
        • 別人花錢去水印,我卻還要加水印
          #?還可以給視頻加水印
          video?=?VideoFileClip("../result.mp4")
          #?水印圖片請(qǐng)自行上傳
          logo?=?(ImageClip("/home/ma-user/work/first-order-motion-model/water.png")
          ????????.set_duration(video.duration)?#?水印持續(xù)時(shí)間
          ????????.resize(height=50)?#?水印的高度,會(huì)等比縮放
          ????????.margin(right=0,?top=0,?opacity=1)?#?水印邊距和透明度
          ????????.set_pos(("left","top")))?#?水印的位置

          final?=?CompositeVideoClip([video,?logo])
          final.write_videofile("../result_water.mp4",?audio_codec="aac")

          final_reader?=?imageio.get_reader("../result_water.mp4")

          fps?=?final_reader.get_meta_data()['fps']
          result_water_video?=?[]
          try:
          ????for?im?in?final_reader:
          ????????result_water_video.append(im)
          except?RuntimeError:
          ????pass
          reader.close()
          result_water_video?=?[resize(frame,?(256,?256))[...,?:3]?for?frame?in?result_water_video]
          HTML(display(source_image,?driving_video,?result_water_video).to_html5_video())
        • 07717c37d470711dd190c5c5855349c7.webp

        至此,本次實(shí)現(xiàn)先告一段落,關(guān)于“多人運(yùn)動(dòng)”--合照的解決辦法還沒來得及探索,歡迎您在評(píng)論區(qū)分享指導(dǎo),感謝!

        最后,打個(gè)小廣告:廣州的小伙伴歡迎加入我們,共建 ModelArts 生態(tài)!



        瀏覽 92
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 后进女神白嫩翘臀进入在线观看 | 无码av五月天 | 成人做爰高潮片免费视频QQ群 | 91精品国产乱码久久久久久久久 | 天天cao在线 |