最近做的一个实验,用一个椅子模型去匹配图片。
主要受到Categorical-Specific Mesh Reconstruction这篇论文的启发,以及德国马普所之前的一系列文章,比如SMPlify。用到了最近比较热门的可微分渲染器,比如Neural Mesh Renderer。
最后能生成一个模型和一张贴图,贴上贴图在Blender里预览一下
由于预先分了对称的uv,只有单视角,以及拟合pose不太准的问题,贴图看上去还是有点莫名其妙,并且看不到的部分还是白的。
uv texture
这里给个引子介绍一下几篇相关的论文。
Category-Specific Mesh Reconstruction
论文标题Learning Category-Specific Mesh Reconstruction from Image Collections,ECCV2018的文章。作者Kanazawa是UCB的博士,之前在德国马普所交流过,所以沿袭了SMPL的一套方法。
在Github上有代码 https://github.com/chenyuntc/cmr
首先预先训练了一个几何变形模型。
当拿到一张图片以后,用轮廓+标志点+贴图去匹配这个模型。马普所的SMPL,SMAL一系列文章也是这个套路。
使得拟合轮廓+生成贴图方法实现的原理就是可微分渲染(Differentiable Rendering),由于传统光栅化是拿不到像素的梯度的,所以没法优化。后来从OpenDR,到Neural Render, SoftRas, PyTorch3d,都是这个思路。
Neural 3D Mesh Renderer
CVPR2018的文章,可微分渲染的一个实现。
原理就是光栅化的时候,给每个像素存个梯度,这样就可微分可梯度下降了。
然后作者的例子里,对一个球的模型进行逐顶点变形,拟合照片。对比一下CMR,这变形方式就比较Naive了。
So What?
就仅仅是玩。学习一下pytorch,搬运了些代码,创建了一个可微分的几何模型,当然效果还不是很好。贴图上很多重影,拟合也不太精确。
然后目前看上去也没啥实用价值。想深入研究下发个论文,奈何自己理论水平太低写不出来啊,当然如果有人想合作发文的话欢迎私聊哦。
What's next? No Idea, 欢迎探讨。
参考文献
Loper, Matthew, et al. "SMPL: A skinned multi-person linear model." ACM transactions on graphics (TOG) 34.6 (2015): 1-16. SMPL这篇做了个参数化人体模型,经典Bogo, Federica, et al. "Keep it SMPL: Automatic estimation of 3D human pose and shape from a single image." European Conference on Computer Vision. Springer, Cham, 2016. SMPlify, 用SMPL拟合图片估计人体姿势,SMPL+CV的工作Zuffi, Silvia, et al. "Three-D Safari: Learning to Estimate Zebra Pose, Shape, and Texture from Images" In the Wild"." arXiv preprint arXiv:1908.07201 (2019). 拟合了一个斑马。用SMPL的原理做了个动物模型,然后姿势拟合图片的同时重建了贴图。Kanazawa, Angjoo, et al. "Learning category-specific mesh reconstruction from image collections." Proceedings of the European Conference on Computer Vision (ECCV). 2018. 和上面一个套路,可变形模型+姿势拟合+贴图创建Loper, Matthew M., and Michael J. Black. "OpenDR: An approximate differentiable renderer." European Conference on Computer Vision. Springer, Cham, 2014. Differential Renderer的鼻祖了,最早SMPL一系列文章用的,现在没啥人用OpenDR了Kato, Hiroharu, Yoshitaka Ushiku, and Tatsuya Harada. "Neural 3d mesh renderer." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018. 一个Differential Render比较好用的实现https://github.com/daniilidis-group/neural_renderer Neural Render的Pytorch实现。