有没有办法从张量流中的图像中获取 IUV 图?

Posted

技术标签:

【中文标题】有没有办法从张量流中的图像中获取 IUV 图?【英文标题】:Is there a way to obtain IUV map from image in tensorflow? 【发布时间】:2020-10-23 21:20:24 【问题描述】:

我一直在使用detectron2/densepose 生成 IUV 贴图,它帮助我从输入图像生成 UV 纹理。现在,为了部署,我需要使用 javascript 从客户端的输入图像生成 IUV 地图。我对 TensorFlow 很熟悉,但目前的密集姿势模型只能在 PyTorch 上运行,而且相互转换工具也会出错。

对问题的任何评论或解决方案都会非常有帮助。

需要 IUV 图像:

最终的UV贴图:

【问题讨论】:

【参考方案1】:

首先,您需要使用dump命令生成pkl文件,然后我们才能生成所需的IUV图像。

在Densepose 内部使用apply_net.py 生成pkl 文件。它还有很多其他选择。您可以查看here。

python3 apply_net.py dump configs/densepose_rcnn_R_101_FPN_s1x.yaml /models/R_101_FPN_s1x.pkl /Images/frame.jpg --output output.pkl -v

在获得pkl 文件后,我们需要从中提取信息并创建您需要的 IUV 图像。

img = Image.open('/Images/frame.jpg')
img_w ,img_h = img.size
with open('output.pkl','rb') as f:
  data=pickle.load(f)
i = data[0]['pred_densepose'][0].labels.cpu().numpy()
uv = data[0]['pred_densepose'][0].uv.cpu().numpy()
iuv = np.stack((uv[1,:,:], uv[0,:,:], i * 0,))
iuv = np.transpose(iuv, (1,2,0))
iuv_img = Image.fromarray(np.uint8(iuv*255),"RGB")
iuv_img.show() #It shows only the croped person

box = data[0]["pred_boxes_XYXY"][0]
box[2]=box[2]-box[0]
box[3]=box[3]-box[1]
x,y,w,h=[int(v) for v in box]
bg=np.zeros((img_h,img_w,3))
bg[y:y+h,x:x+w,:]=iuv
bg_img = Image.fromarray(np.uint8(bg*255),"RGB")
bg_img.save('output.png')

【讨论】:

以上是关于有没有办法从张量流中的图像中获取 IUV 图?的主要内容,如果未能解决你的问题,请参考以下文章

张量流中的ocr实现

有没有办法在张量流中剪辑中间爆炸梯度

张量流中的动态批量大小

张量流中的条件图和访问张量大小的for循环

在张量流中,如何迭代存储在张量中的输入序列?

如何从子目录加载张量流中的数据