1202-1205工作小結(jié)

仍舊是嘗試在隱空間中隨機游動,并嘗試尋找一個子空間,該子空間對應(yīng)所有“笑”的屬性,進(jìn)而對一張圖片笑的狀態(tài)提取情感space;現(xiàn)實意義,生成同一屬性不同情感的圖片,可以達(dá)到對圖片進(jìn)行情感編輯,或者同一段臺詞的不同情感演繹效果

(一)1202工作小結(jié)
1、manipulate.py分析

`distance` is sign sensitive.表示distance這個參數(shù)值對正負(fù)值有不同表現(xiàn)(符號敏感)

編輯部分

np.tile(A, reps)
復(fù)制數(shù)組元素輸入,A是數(shù)組,reps是個list,reps的元素表示對A的各個axis進(jìn)行重復(fù)的次數(shù)
np.where(condition, x, y)
滿足條件(condition),輸出x,不滿足輸出y
key_idea:代入語義邊界和latent_code,定義L插值向量和步長,生成每一步對應(yīng)的code
大概意思能夠get√到,今天暫時只看懂了部分代碼,如何分層操作還沒有很懂;
基于已有語義向量做一些嘗試。
2、manipulate代碼初步修改
首先利用manipulate代碼對圖片語義進(jìn)行線性編輯,效果不是很好,編輯的幅度過大了??

#隨機漫步修改插值方式 - 對l進(jìn)行修改即可
l = np.random.uniform(-1,1,step) #左右隨機游動
l = (np.cumsum(l)).reshape([step if axis == 1 else 1 for axis in range(x.ndim)])
results = np.where(is_manipulatable, x + l*b, results)


1202嘗試如上,效果都沒有特別好,但是明顯看到上邊這幅圖的溶解現(xiàn)象不那么明顯了!
上邊效果不好的原因是隨機游動左右橫跳間隔時間過短,導(dǎo)致不真實;
下一步工作考慮將l進(jìn)行分段,每一小段上之后只朝著一個方向移動,隨機選擇每段移動的方向(1203實現(xiàn))
3、video
插值方法生成video不逼真的主要原因:插值過程有新數(shù)據(jù)產(chǎn)生,類似像素變換;video變化是幾何變換。
不是現(xiàn)有GAN的generater生成圖片不夠真實的問題
也不是考慮單純某個部位動而其他部位不動(例如微笑只是嘴動,那是不可能的)
關(guān)鍵在于真實的視頻每一幀之間單純是像素點的移動,而每個個體或事物一旦在視頻中出現(xiàn),以物體為例,它的整體像素是確定的,視頻中的“動”是物體像素進(jìn)行了幾何變換,而不是像素變換的結(jié)果。

而利用插值生成video中隨著步長變動,原始個體進(jìn)行了像素變換并非像素整體的幾何變換,所以才會有溶解的效果。(聯(lián)想到stylegan3做的平移旋轉(zhuǎn)不變性,其實它下一步應(yīng)該進(jìn)行的工作就是video生成了)
-------溶解現(xiàn)象的實質(zhì):對個體的像素進(jìn)行了像素值的變換(以下圖為例,可以看到肩膀部分出現(xiàn)了像素變換,即將原始肩膀?qū)?yīng)像素值變小0對應(yīng)黑色)。
我們希望在插值過程中,發(fā)生的是幾何變換并非像素變換。-還是想試下MH算法,如果不變幀比較多的話是否能緩解這種現(xiàn)象?(1203實現(xiàn))

(二)1204探路嘗試
1、嘗試分段函數(shù)進(jìn)行語義編輯
(1)思路簡單,就是將step分為幾個小區(qū)間,區(qū)間內(nèi)移動方向相同,相鄰區(qū)間之間符號相反
但首次運行后結(jié)果出現(xiàn)了很大的問題
l = np.ones(step)
temp = [0.35,0.58,0.75,0.85,1]
for i in range(len(temp)):
?m = -2*(i%2)+1
?if i == 0:
? ?l[0] = m*np.random.uniform(0,0.3)
? ?for j in range(int(step*temp[i]-1)):
? ? ?l[j+1] = l[j] + m*np.random.uniform(0,0.3)
else:
? ? ?a = int(step*temp[i-1])
? ? ?for j in range(int(step*temp[i]-a)):
? ? ? ?l[a+j] = l[a+j-1] + m*np.random.uniform(0,0.3)
l0 = l.reshape([step if axis == 1 else 1 for axis in range(x.ndim)])
results = np.where(is_manipulatable, x + l0*b, results)
#我的問題,這段代碼中定義的正負(fù)方向變量b和語義邊界向量b重名導(dǎo)致結(jié)果出錯
#這里其實就對應(yīng)我修改了語義向量b得到的結(jié)果,提供另一種探索路徑,直接修改語義向量b!

(2)修正上述錯誤之后,得到如下結(jié)果
?l = np.ones(step)
?temp = [0.35,0.58,0.75,0.85,1] #擺動列標(biāo)
?for i in range(len(temp)):
? ?m = -2*(i%2)+1
? ?if i == 0:
? ? ?l[0] = m*np.random.uniform(0,0.3) #0.3變動幅度
? ? ?for j in range(int(step*temp[i]-1)):
? ? ? ?l[j+1] = l[j] + m*np.random.uniform(0,0.3)
? ?else:
? ? ?a = int(step*temp[i-1])
? ? ?for j in range(int(step*temp[i]-a)):
? ? ? ?l[a+j] = l[a+j-1] + m*np.random.uniform(0,0.3)

(3)對擺動頻率temp和幅度值0.3進(jìn)行微調(diào)

(4)設(shè)置flag,指定方向{1,-1,0}
(1)中初步想法是設(shè)置相鄰區(qū)間移動方向相反,即flag=[1,-1,1,-1]交替進(jìn)行,進(jìn)一步考慮添加過渡的不變幀 flag = [1,0,-1,0,1,0,-1,1] ,長度與temp對應(yīng)

(5)蒙娜麗莎圖片嘗試




2、直接修改邊界向量b - 1205
通過一系列操作,上頭默認(rèn)的邊界向量不會是露牙齒的叭(ˉ▽ˉ;)...
(1)一些問題
ID_invert支持分層語義編輯,可以指定在GAN某些特征層上進(jìn)行操作
--關(guān)于數(shù)據(jù)格式:(這里使用的GAN特征層為14)
首先查看了數(shù)據(jù)格式是(14,512),對應(yīng)GAN的特征層數(shù)為14,每一層的512維向量都不同

其次interfacegan中默認(rèn)的語義向量中默認(rèn)分層語義編輯,且包含了具體在哪些層上進(jìn)行編輯


(2)根據(jù)(1)中分析的數(shù)據(jù)格式,有兩種思路,自定義分層編輯的層數(shù)和指定層數(shù)(或者不分層),直接修改邊界向量b。兩種方向都可以進(jìn)行嘗試。
(3)保持b不變,修改編輯層數(shù)(對應(yīng)code中manipulate.py)
if isinstance(boundary_file, dict):
? ?boundary = boundary_file['boundary']
? ?manipulate_layers = boundary_file['meta_data']['manipulate_layers']
? ?
? ?
codes = manipulate(latent_codes=latent_codes,
? ? ? ? ? ? ? ? ? ? boundary=boundary,
? ? ? ? ? ? ? ? ? ? start_distance=args.start_distance,
? ? ? ? ? ? ? ? ? ? end_distance=args.end_distance,
? ? ? ? ? ? ? ? ? ? step=step,
? ? ? ? ? ? ? ? ? ? layerwise_manipulation=True, #進(jìn)行逐層操作
? ? ? ? ? ? ? ? ? ? num_layers=generator.num_layers,
? ? ? ? ? ? ? ? ? ? manipulate_layers=manipulate_layers, #指定修改的層數(shù)
? ? ? ? ? ? ? ? ? ? is_code_layerwise=True, #不進(jìn)行逐層操作
? ? ? ? ? ? ? ? ? ? is_boundary_layerwise=True) #不進(jìn)行逐層操作
(a)不逐層操作
layerwise_manipulation=False
is_code_layerwise=False
is_boundary_layerwise=False

只看變化效果差不多,但不分層圖像背景顏色發(fā)生了變化

[-3,3] step=100 linear
(b)逐層操作指定層數(shù)?
num_layers=[1,2,3,4]
(4)不進(jìn)行逐層語義編輯,直接修改語義向量
首先自定義b向量為512空間的標(biāo)準(zhǔn)正交基-512個,慢慢嘗試
參考
https://ezgif.com/maker/ezgif-5-21a103f5-gif(一鍵生成gif的網(wǎng)址,家人們太好用了)