<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python AI 換臉,宋小寶換臉劉敏濤唱紅色高跟鞋,是怎么實現(xiàn)的?

          共 4546字,需瀏覽 10分鐘

           ·

          2020-06-06 23:22


          今天邀請一位小帥b的朋友 Jack Cui 來給大家做一個分享,Jack Cui 是我喜歡的技術原創(chuàng)博主之一,他現(xiàn)在在北京某大廠做視覺算法工作,我跟他挺聊得來的,感覺我們是同路人哈哈,然后就索性讓他來給 b 友們做個分享,這個事情我們商量挺久了,今天終于搞起來了哈哈。

          應該有一些 b 友知道他吧,可能你之前看過他的博客:


          ce296ec4b93320be33bca6ed2c3fe395.webp




          或者逛過他的 Github,他在 Github 上面開源了挺多不錯的項目,比如爬蟲、機器學習啥的,那個 star 量我都酸了...中國區(qū) Top 100!

          12d9012e95ed4d8073357edf40e5347c.webp

          ?

          那么接下來有請 Jack Cui 閃亮登場!!!!



          77a13f5de422525f96f672aecf8e4573.webp


          哈嘍,各位小帥b的朋友們,你們好哇~小帥b大佬人很nice,要帶小弟飛一次~特此有了今天的邀請分享。我本身做算法工作,所以今天給大家?guī)砹薃I換臉的分享,希望各位喜歡!
          咱們進入正題:

          紅色高跟鞋


          劉敏濤,中國內地知名女演員。
          我還是從 2015 年上映的《偽裝者》知道她的。
          5 月 5 日,又憑借著在晚會合唱的《紅色高跟鞋》上了微博熱搜,直拍視頻的播放量高達 4000 多萬,逗趣的表情管理,讓人忍俊不禁。
          AI 換臉技術,可以直接讓你也擁有這自我陶醉的表情管理能力。
          比如,看下宋小寶“演唱”一首《紅色高跟鞋》。

          fc7f62049449bd98ac7ef808815e8ed1.webp


          公眾號上傳了 Deepfake 視頻,但是一直無法過審
          人臉這東西還是有些風險的,索性就不放視頻了,想看視頻的,可以去 B 站搜索,宋小寶紅色高跟鞋,有很多其他人的作品,絕對驚艷
          今天,我繼續(xù)手把手教學
          算法原理、環(huán)境搭建、模型訓練、效果測試,一條龍服務,盡在下文!
          搞起來

          Faceswap
          這種換臉的算法,其實有很多。
          例如 Faceswap 、DeepFaceLab、Faceswap-GAN 等等。
          本文以 star 量最多的 Faceswap 為例,進行說明。

          733789e9ff81aa9ba7807d57327497be.webp


          Faceswap 項目地址:https://github.com/deepfakes/faceswap

          算法原理
          Faceswap 是一個名為 deepfakes 的 Github 用戶開源的項目。
          Deepfake 就是“Deep Machine Learning”(深度學習)和“Fake Photo”(假照片)組合而成的。
          早期技術可以追溯到 2018 年,當時在構建模型的時候使用了 Encoder-Decoder 自編解碼架構。
          而 Faceswap 算法,在此之上又引入 GAN(生成對抗網絡)技術,顯著提升了換臉的效果。
          總體上,「Faceswap」換臉主要分為以下三個過程:
          • 人臉檢測

          • 特征提取

          • 人臉轉換


          人臉檢測

          想要替換人臉,那首先得找到人臉的位置,這就需要用到人臉檢測算法。

          a23bcbc5073c6713002d7b3ff700faa7.webp


          Faceswap 算法采用了 SSD 這類比較成熟的檢測框架,同于提取面部圖像。
          與傳統(tǒng)人臉檢測略有不同的,F(xiàn)aceswap 算法需要裁剪的人臉邊界框(bouding box, bbox)是正方形的,同時還會適當的向外擴充一些,以保證人臉都在 bbox 內。

          特征提取
          檢測到人臉后,需要提取人臉的特征
          首先要做的就是,人臉關鍵點檢測,也就是 landmark。

          b215f8bbe0ae36d0b92016f0f60c1d32.webp


          這些關鍵點,抽取了人臉的表情特征,同時大致描述了人臉的器官分布。

          我們可以直接通過 dlib 和 OpenCV 等主流的工具包直接提取人臉的關鍵點。
          當然,為了取得更好的定位精度,也可以使用 CNN 訓練一個人臉關鍵點檢測模型,簡單好用。
          人臉轉換



          人臉轉換的思想,其實和我上篇文章?ALAE?的思想很像。

          就是采用自編碼器的原理,不記得它是啥的話,可以去上一篇文章看一看。
          簡單來講,就是將人臉圖像壓縮到短向量,再由短向量恢復到人臉圖像。這些短向量包含了人臉的主要信息,例如該向量的元素可能表示人臉膚色、眉毛位置、眼睛大小等等。

          f936168fb88d960b8b90823f3d15fe53.webp


          所以如果我們用某個編碼器學習所有人,那么它就能學習到人臉的共性;如果再用某個解碼器學習特定的某個人,那么就能學習到這個人的特性。

          簡單而言,當我們用通用編碼器編碼人臉 A,再使用特定解碼器 B 解碼短向量,那么就能生成出擁有 A 的人臉表情,但卻是 B 人臉的圖像。
          就好比,你擺出一個表情,我根據你睜眼的大小嘴巴咧開的大小等面部特征,模仿出你的表情
          我們表情一樣,但長相不一樣
          人臉轉換,除了自編碼器的方法,還有一種 GAN 方法。
          GAN 會利用提取的人臉特征點,使用生成器直接生成對應的目標人臉圖像,這跟 StyleGAN 人臉生成算法很類似,但不同的是需要生成指定表情的人臉。
          在生成的圖片后,會接一個判別器,判斷圖片的逼真程度。

          f37c3c3bee467a015e5f0efab8feb113.webp


          上述算法都是針對單張圖片而言的,對于視頻而言,就是多了一個視頻拆分成圖片,圖片拼接成視頻的過程。

          DeepFakes 技術發(fā)展已久,2020 年有一篇最新發(fā)表的綜述論文,包含了各種 DeepFakes 算法的概述,想了解更多的讀者,可以去“啃”一下論文了。
          論文地址:https://arxiv.org/pdf/2001.00179.pdf
          預處理和后處理
          大致思路就是這樣,里面還有很多細節(jié),我們稱之為 Tricks ,這就需要通過閱讀源碼去學習了。
          比如,在進行提取人臉特征之前,需要進行圖像的預處理。
          對數據進行規(guī)范化(Normalization),使訓練的圖像的分布信息盡可能相近:

          d2ea6c825ddc3e79a3f62fdf7950a19c.webp


          訓練的數據集是分為 A 數據集和 B 數據集的,如上圖,A 數據集為川普,B 數據集為凱奇。

          我們可以將 A 數據集(川普)加上兩者數據集的平均差值(RGB三通道差值)來使兩個輸入圖像圖像的分布盡可以相近,這樣我們的損失函數曲線下降會更快些。
          用代碼表示就是:
          images_A += images_B.mean(axis=(0, 1, 2)) - images_A.mean(axis=(0, 1, 2))

          再比如,換臉之后,需要進行圖像的后處理。
          為了是生成的人臉效果更加,會進行諸如邊緣融合、色彩均衡等處理方法。
          想要了解算法背后的實現(xiàn)方法,那就得耐著性子看源碼了。

          環(huán)境搭建
          大致的原理講完了,開始進入實戰(zhàn)部分,環(huán)境搭建。
          Faceswap 項目地址:https://github.com/deepfakes/faceswap
          Faceswap 這類的換臉算法,計算量很大,強烈推薦使用 GPU 搭建開發(fā)環(huán)境。
          我是 RXT 2060 super ,訓練模型都需要 12 個小時以上,如果只用 CPU 訓練,那可能需要幾個星期的時間才能訓練好。
          Faceswap 程序,對于 Python 版本、 CUDA 版本和 tensoflow-gpu 版本都有要求。

          f3d17bed19d21e0bc87c4377179e7878.webp


          經過我的熬夜測試,Python 版本必須是 3.6.x,如果是 3.7.x 都跑不起來。

          CUDA 版本也得是 10.0 或 9.0,版本高了,比如 10.2,訓練的時候會出現(xiàn) gpu 用不起來的情況。
          我的運行環(huán)境是:
          • CUDA 10.0

          • Python 3.6

          • tensorflow-gpu 1.14.0


          還是推薦使用 Anaconda 配置環(huán)境,直接創(chuàng)建一個 Python 3.6 的環(huán)境,然后在里面折騰:
          conda create -n tf python==3.6

          只要這幾個基礎庫版本沒有問題,其他就好說了,根據項目的 requirements.txt 直接安裝第三方庫即可:
          python -m pip install -r _requirements_base.txt

          8d63f3f6fb19757a173feb436ce05d8a.webp


          除了這些第三方庫,官方還少統(tǒng)計了一個 pynvml,直接用 pip 安裝即可。
          python -m pip install pynvml


          此外還需要配置一下 FFmpeg,安裝好后記得配置環(huán)境變量。


          下載地址:

          http://ffmpeg.org/


          安裝好這些,環(huán)境就算準備完畢了。

          模型訓練
          faceswap 有一個強大的 GUI 。
          輸入如下指令,打開 GUI。

          python?faceswap.py?gui


          3847ae82c05a9d7d74e70e67b686290b.webp


          主要提供了四個功能:
          • Extract:數據集制作,可以自動提取視頻或圖片中的人臉。

          • Train:訓練模型,有多種算法可供選擇。

          • Convert:換臉,使用訓練好的模型對圖片或視頻換臉。

          • Tools:工具,很多圖像處理小工具。


          數據集制作
          想要訓練換臉模型,首先要處理數據集,可以用 Extract ,比如下載一些宋小寶的高清視頻,然后使用 Extract 處理。

          232137ac9d25173083f098a0acae1e1e.webp


          指定好視頻路徑和輸出圖片路徑,點擊 Extract 即可處理圖片。
          Extract 除了會生成參見后的人臉數據意外,還會生成 alignments.fsa 文件,也就是人臉對齊文件。
          這個提取,是提取視頻中所有的人臉,所以提取完之后,需要使用人臉識別接口或者人工清晰一遍數據,將無用的數據刪除。
          刪除圖片之后,需要根據剩余的圖片重新生成 alignments.fsa 文件。
          這時候,就需要用到 Tools 里面的功能。
          選擇 Tools 標簽下的 Sort 選項,Input 填寫為剛剛處理完圖片的文件夾,Output 填寫新的文件夾,其余選項默認,點擊 Sort 執(zhí)行按鈕,對所有圖片進行重新排序
          圖片名處理完了,再選擇 Tools 標簽下的 Alignments,job 選項 Remove-Faces:

          0d6dc38bf443f2890f7465cd810ebfcc.webp


          其中 Alignments files 是 Extract 后生成的對齊文件,F(xiàn)aces Folder 是我們剛剛 Sort 后的輸出目錄。設置完畢后點擊Alignments 即可。
          這樣我們就獲得了,重新排序好,干凈的宋小寶人臉數據集人臉對齊文件
          另外一個數據集,處理方法同理。

          eb846d7b0aa182a755d76ca9edc809cb.webp


          數據集要保證一下幾點:
          • 圖片要高清!模糊的圖片訓練效果欠佳。

          • 圖片要多樣化!僅僅一個處理一個視頻得到的圖片是不夠的,要找足夠多樣豐富的圖片作為數據集。


          數據集 A 和 數據集 B 越多越好,至少各 1000 張左右。


          模型訓練


          訓練模型不麻煩,選擇數據集 A 和 數據集 B 的地址,以及兩個數據集對應的人臉對齊文件。
          最后再指定一個模型保存地址即可。

          d6ed4036b59536a61b659454e9e2fa23.webp


          數據集 A 和 數據集 B 要區(qū)分一下,誰替換誰。
          比如,我是要將《紅色高跟鞋》的劉敏濤替換為宋小寶。
          那么,數據集 A 就是劉敏濤的圖片,數據集 B 就是宋小寶的圖片。
          點擊 Train 就可以開始訓練了。
          訓練過程中,點擊 Preview,可以看到中間的訓練結果。

          1b7b9377c991d40990775995145fa06f.webp


          點擊 Analysis 可以看到 Loss 的收斂情況。

          df716de6a179128608e7c58a45a58305.webp


          你需要的,它都有,就問你香不香

          訓練的時候,可以選擇多種算法,也有各種訓練參數,了解一下每個算法的特點,每個訓練參數的含義,怎么訓練的更好,可以去官方論壇,看一下英文教程。
          論壇地址(需代理):https://forum.faceswap.dev/

          5312d15364935ebd5e9ab097c99b7c9e.webp


          官方文檔,很全面。

          效果測試
          模型訓練可能需要花費一天的時間。
          訓練好模型后,就可以直接搞起了。

          a924645daf79c1769bef20792e3951c3.webp


          首先,需要指定需要想要替換的視頻,以及對應的人臉對齊文件(可以使用 Extract 生成)。
          點擊 Convert 開始轉換!
          換臉大功告成,再看一下效果!

          fc7f62049449bd98ac7ef808815e8ed1.webp



          最后
          • 切勿濫用技術,切勿商用。

          • 算法的魅力無處不在,多多學習背后的技術。




          感謝 Jack Cui 給我們帶來了非常 nice 的分享,如果你對他感興趣的話(壞笑),不妨關注下他,就在小帥b的隔壁喲:


          4df564602b82312fe787ae546b80c554.webp



          那么,我們下回見咯,peace!

          瀏覽 703
          點贊
          評論
          1收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          1收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本亚洲黄色视频 | 乱熟女高潮一区二区在线观看 | 抽插美女逼的视频 | 天天弄| 青娱乐成人在线视頻 |