1. 程式人生 > 其它 >.《First order motion for Image Animation》心得

.《First order motion for Image Animation》心得

  《First order motion for Image Animation》

1.論文理解:

很難在同一框架下,完成表情遷移,動作遷移等多專案研究。像表情遷移,其中有固定的眼,鼻子,嘴巴。像動作遷移,有固定關節等。目標不一樣很難實現。本文采用關鍵點檢測的方法。想做什麼就通過匯入大量相同型別下的資料(表情遷移,資料就是人臉表情的變化。動作遷移,資料就是人動作變化),用模型去判別,關鍵點及分佈。

2.任務描述:

以表情遷移來講,圖片動畫化,給定一個源影象,給定一個驅動視訊,可以生成一個視訊,其中主題是源人物,視訊中源人物的表情是有驅動視訊中的表情所確定。

3.動機

萬物皆可動,該模型可應用於表情遷移,虛擬換衣等多個領域。不需要源圖片的先驗資訊和標籤資訊相對於Monkey-net對於無法通過影象扭曲得到圖片的話,採用貼圖(image inpainting)方法得到。

輸入: 輸出:

源影象 S -----------------------------------------------------------+++\ Ts ← D 密集運動場

驅動影象 D -----------------------------------------------------------+++/ Os ← D 貼圖遮罩

注:

① Ts ← D 密集運動場,D中的關鍵點到S的對映關係,其中通過 參考幀R得到,用R分別對應D與S建立關係,從而建立兩者之間關係。

② Os ← D 大概對應 程式碼中的 occlusion-map,表明在最終生成的影象中,對於驅動影象D而言,哪部分姿態可以通過S扭曲得到,那部分只能通過貼圖(image inpainting)方法得到。

Keypoint_detect(關鍵點檢測)

關鍵點探測器除了要探測關鍵點位置,D和S中關鍵點的位置是 由編碼器-解碼器網路 (Hourglass結構) 分別預測,還要計算區域性的Affine Transformation(仿射變換)矩陣加上這個矩陣的一階導數(Jacobi),要同時估計源影像和驅動幀的關鍵點變換引數,引數都是相對於虛擬的參考幀(因源影像可能與驅動幀可能完全不同)。關鍵點探測部分是一個U-Net.然後把關鍵點的引數給密集運動場以生成每一個畫素的運動(就是影象的光流場)。

考慮遮擋的影象生成這裡主要考慮源影像和驅動幀畫素之間不是一一對應的關係,這個問題可以通過特徵變形的方式解決,兩個下采樣卷積層得到一個特徵圖,然後將這個特徵圖按照仿射變換矩陣進行變形。

Affine Transformation(仿射變換)

引入參考幀(原影像),因原影像和驅動幀在外觀上可能非常不同,建立R系,使用標準的U-Net架構來估計K個熱圖,每個熱圖一個 關鍵點。解碼器的最後一層使用softmax啟用,以預測可以 被解釋為關鍵點檢測置信度圖。估計每個預期的關鍵點位置 使用對應公式進行平均運算。

Dense motion (密集運動)

掩膜為源影像中的子集。掩膜就是源影像物體減去(源影像物體和驅動幀物體的交集),也就是源影像物體減去驅動幀物體。同時密集運動場還要輸出上面提到的那個掩膜,最後生成模組將密集運動場的輸出和源影像結合生成一個新影像。大概意思:假設影像中,只有我的手運動,身體軀幹與原始背景都未改變,此時圖片其他部分不需要修復,只需要修復手運動部分。原始影像-當前,不同部分為掩膜。掩膜大概就是修補部分?

遮擋感知影象生成

源影象不是與要生成的影象逐畫素對齊的 為了處理這種錯位,我們使用了類似於[30,29,15]的特徵扭曲策略

訓練損失

使用預先訓練的VGG-19網路作為主要駕駛損失這 解析度分別為256 × 256、128 × 128、64 × 64和32 × 32。因為訓練過程是一個影象重建的過程,所以引入了重建損失,具體形式為感知損失,將兩幅圖片分別過VGG19,取其中5層的特徵值分別做差,平均然後求和。此外,感知損失採用了金字塔模式,即在4個不同的尺度上進行計算(256、128、64、32)。

4.檔案架構

1. demo.py 為測試入口檔案
2. run.py 為訓練的入口檔案(訓練的基礎配置和模型定義)
3. train.py為訓練的入口檔案(配置訓練)
4. frames_dataset.py完成對資料讀入的定義
5. generator.py 中完成對生成模組中的生成器定義
6. discriminator.py中完成對生成模組中判別器的定義
7. keypoint_detector.py中完成對動作估計模組的骨骼關鍵點提取定義
8. dense_motion.py將關鍵點轉換為D到S的對映,在生成器中使用
9. model.py是為了將所有與生成器/判別器有關的更新合併到同一個模型中,方便訓練

5.執行

一.Config 配置檔案

1.將配置檔案yaml檔案放入此資料夾下

二.Data 資料集檔案

1.將訓練集與測試集分別放置於train,test兩個資料夾下

2.yaml檔案下的root_dir引數為資料集路徑

終端執行

python run.py --config config/mgif-256clone.yaml --device_ids 0

會生成一個checkpoint.pth.tar壓縮檔案,此檔案為模型引數檔案

終端執行

checkpoint.pth.tar(關鍵點檢測引數檔案)放入自定義的資料夾下

python demo.py --config config/mgif-256clone.yaml --driving_video DSC/driving_video.mp4 --source_image DSC/xinba.png --checkpoint DSC/checkpoint.pth.tar --relative --adapt_scale

python demo.py --config config/mgif-256.yaml --driving_video REP/driving_video.mp4 --source_image REP/xinba.png --checkpoint REP/mgif-cpk.pth.tar --relative --adapt_scale