运行 三维人脸重建(VRN)

在《vrn-master》可以下载 vrn-unguided.t7 模型(没有安装 torch7,运行不了)。

在《vrn-torch-to-keras-master》提供一个 Keras 模型下载地址: vrn-unguided-keras.h5 (drive.google)

和一个 Tensorflow 的 pb 模型:vrn-tensorflow.pb (drive.google)。

我只下了vrn-unguided-keras.h5(翻墙软件的免费流量用完)。百度网盘:链接:https://pan.baidu.com/s/1pwnehTkflFXtb2hO6wMr7g 
提取码:4uzk

start_time = time.time()
model = load_model('vrn-unguided-keras.h5', custom_objects=custom_objects)
end_time = time.time()
print('载入模型用时: %f秒' % (end_time - start_time)) 

这个h5模型载入是比较慢的(解压缩慢?),需要100多秒。

按《keras_to_tensorflow-master》转换成 vrn-unguided-keras.h5.pb。

start_time = time.time()
with open('vrn-unguided-keras.h5.pb', "rb") as f:
    output_graph_def = graph_pb2.GraphDef()
    output_graph_def.ParseFromString(f.read())
    _ = tf.import_graph_def(output_graph_def, name="")

end_time = time.time()
print('载入模型用时: %f秒' % (end_time - start_time))

这个快一点了,只要 20 多秒。

然后前传:

start_time = time.time()
sess = tf.Session()

x = sess.graph.get_tensor_by_name('input_1:0')
y = sess.graph.get_tensor_by_name('activation_274/Sigmoid:0')

img = cv2.imread('joey.jpg')
img = cv2.resize(img, (192, 192))
b,g,r = cv2.split(img)
img = cv2.merge([r,g,b])
img = np.swapaxes(img, 2, 0)
img = np.swapaxes(img, 2, 1)
img = np.array([img])


out_layer_name='pred0'

pred = sess.run(y, feed_dict={x: img})

vol = pred[0] * 255

end_time = time.time()
print('运行模型用时: %f秒' % (end_time - start_time)) 

这里用时38秒(cpu).

由于 Example-Usage.ipynb 没有保存数据。

这里先把它的输出200x192x192转换成灰度图:

start_time = time.time()

print(vol.shape)

gray = np.zeros((192, 192))

#------------------------------------------
#3维
for i in range(vol.shape[0]):#图像通道数200
    v_2d=vol[i, :, :] #取出一个通道

    w=v_2d.shape[0] #图像宽高
    h=v_2d.shape[1]
    for Ii in range(w):
        for Ji in range(h):
            if v_2d[Ii,Ji] > 1 : #每一个体素转为深度值(灰度0:200)
                gray[Ii,Ji] = i 
#------------------------------------------

cv2.imwrite('gray.png',gray)

end_time = time.time()
print('转换成灰度图用时: %f秒' % (end_time - start_time)) 

这个转换用掉了将近100 秒。估计这个遍历太慢了。

效果图:

输入图

输出灰度图

再用ArtCAM 2008 (雕刻软件)打开灰度图:

旋转一下:

由于是上层覆盖下层,这个转换是没有鼻孔的,当然一般的雕刻机也只能雕成这样了。(转换成点云可能会好点)

这个精度也是比较低的。实际上网络内部只生成了48x48的点图,还要除掉四周空位,最少1/4吧,可能只有1500个或更小的点用在脸上,最后是双线性放大到192x192的。

如果有人能用96x96 或者192x192 训练出模型应该就差不多了。

先这样吧。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值