最近我尝试在windows上运行Sketch2Pose这个项目,但前前后后花了很久,疯狂踩坑,嗯,很崩溃,遇到很多问题。于是写这篇博客,结合原仓库Readme内容,记录一下项目环境搭建的过程。

搭建环境: win10+Anoconda+vscode。

以下命令根据适用性,在VScode终端或Git Bash中输入。在Git Bash里用的,都是Linux命令。

正式搭建

1. conda搭建pytorch虚拟环境

安装python=3.9的pytorch环境

一定要python=3.9,问就是踩坑了= =

2. 准备所需数据和模型文件

在sketch2pose目录下新建一个名为assets的文件夹,在smplx官方网站下载models_smplx_v1_1.zip,将zip文件放置于assets文件夹中。

然后Git Bash执行以下命令。

sh ./scripts/download.sh

要是有卡的下载不下来的,建议手动下载一下。

3. 安装所需包

安装requirements.txt,将最后两行的selfcontact和smplx删除之后再执行。因为直接执行的话,不管是否翻墙我都会失败。

pip install -r requirements.txt

转移到conda虚拟环境目录。

cd D:/software/Anaconda/envs/pytorch38/Lib/site-packages/

安装smplx库。

  • 正确命令
pip install git+https://github.com/vchoutas/smplx.git@5fa20519735cceda19afed0beeabd53caef711cd
  • 上述命令出错后,我尝试的方法——去GitHub仓库找到对应的版本仓库,直接进行下载。解压到Sketch2Pose根目录,然后使用以下命令
pip install -e smplx-5fa20519735cceda19afed0beeabd53caef711cd

安装selfcontact库,需要安装@08da422526419c24736c0616bca49623e442c26a这个版本。目前我看到的最新的提交就是这个版本,所以我这里采用直接安装了。如果你发现最新版本不是这个,并且直接用命令也无法安装,就按smplx库一样的方法来操作吧。

git clone https://github.com/muelea/selfcontact.git
pip install -e selfcontact

最后去anoconda虚拟环境里site-packages里检查一下,有smplx和selfcontact这两个文件夹,就证明没什么问题了。我的虚拟环境目录是D:\software\Anaconda\envs\pytorch39\Lib\site-packages

4. 执行patch文件

在代码所在总目录sketch2pose下执行Git Bash(我也不确定有没有必要一定要用管理员身份),随后手动执行三个patch,patch+待修改文件目录+diff文件位置

注意:

  1. D:/software/Anaconda/envs/pytorch38/Lib/site-packages/这是我的anonconda虚拟环境的路径,需要更改成自己的。
  2. 执行完git可能有报错说,Huck #: xxx rejected to xxx,或者什么Failed什么什么,可以点进去路径里的reject文件,看看有哪些修改被拒绝了,被拒绝的就手动更改以下文件。(这里我暂时也没找到更好的解决方案,但只是手动改改被拒绝的部分,其实也不多)
patch D:/software/Anaconda/envs/pytorch39/Lib/site-packages/selfcontact/selfcontact/selfcontact.py ./patches/selfcontact.diff
patch D:/software/Anaconda/envs/pytorch39/Lib/site-packages/smplx/smplx/body_models.py ./patches/smplx.diff
patch D:/software/Anaconda/envs/pytorch39/Lib/site-packages/torchgeometry/core/conversions.py ./patches/torchgeometry.diff

5. 第一次测试运行

带selfcontact的测试

python src/pose.py --save-path "./output" --img-path "./data/images" --use-contacts --use-natural --use-cos --use-angle-transf

不带selfcontact的测试

python src/pose.py --save-path "./output" --img-path "./data/images" --use-natural --use-cos --use-angle-transf

6. 遇到问题

这里列举一些我遇到的问题,以警示。

安装过程中,在网络上搜不到解答的问题,我是去GitHub仓库原作者询问他的,后来发现都是因为我在windows上部署环境,于是就自己更改命令,因为不熟悉所以更改后的,没有完全符合他给的Readme要求来进行安装导致的错误。(555555作者真的好好,都解答我了T T)
所以,要是有Linux机器,网络也良好的话,按作者给的方法,应该可以很轻松安装好的。

1)AttributeError: ‘SMPLXOutput’ object has no attribute ‘A’

Namespace(bone_parametrization_path='./models/smplx_parametrization/bone_to_param2.npy', c_cont2d=1, c_f=1000, c_msc=17500, c_mse=0, c_par=10, c_parallel=100, c_reg=1000, contact_model_path='./models/contact_hrn_w32_256x192.onnx', device='cuda', essentials_dir='./models/smplify-xmc-essentials', fist=None, foot_inds_path='./models/smplx_parametrization/foot_inds.npy', img_path='./data/images', parametrization_path='./models/smplx_parametrization/parametrization.npy', pose_estimation_model_path='./models/hrn_w48_384x288.onnx', save_path='./output', smpl_mean_params_path='./models/data/smpl_mean_params.npz', smpl_model_dir='./models/models/smplx', smpl_type='smplx', spin_model_path='./models/spin_model_smplx_eft_18.pt', use_angle_transf=True, use_contacts=True, use_cos=True, use_msc=False, use_natural=True)C:\Users\CICI\AppData\Roaming\Python\Python38\site-packages\torchvision\models_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and
will be removed in 0.15, please use 'weights' instead.
warnings.warn(
C:\Users\CICI\AppData\Roaming\Python\Python38\site-packages\torchvision\models_utils.py:223: UserWarning: Arguments other than a weight enum or None for 'weights' are deprecated since 0.13 and will be removed in 0.15. The current behavior is equivalent to passing weights=ResNet50_Weights.IMAGENET1K_V1. You can also use
weights=ResNet50_Weights.DEFAULT to get the most up-to-date weights.
warnings.warn(msg)
D:\software\Anaconda\envs\pytorch38\lib\site-packages\selfcontact\selfcontact.py:109: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
torch.tensor(hd_operator).float())
Traceback (most recent call last):
File "src/pose.py", line 1922, in
main()
File "src/pose.py", line 1815, in main
spin_step(
File "src/pose.py", line 1374, in spin_step
) = get_pred_and_data(
File "src/pose.py", line 351, in get_pred_and_data
rotmat, betas, camera, smpl_output, zz = get_predictions(
File "src/pose.py", line 335, in get_predictions
smpl_output, rotmat = get_smpl_output(
File "src/pose.py", line 319, in get_smpl_output
smpl_output = smpl(
File "C:\Users\CICI\AppData\Roaming\Python\Python38\site-packages\torch\nn\modules\module.py", line 1130, in _call_impl
return forward_call(*input, **kwargs)
File "D:\python\sketch2pose\src\spin\smpl.py", line 236, in forward
A=smpl_output.A,
AttributeError: 'SMPLXOutput' object has no attribute 'A'

原因:没有正确执行patch文件,即第4步。

2)RuntimeError: einsum(): subscript l has size 26 for operand 1 which does not broadcast with previously seen size 20

Namespace(pose_estimation_model_path='./models/hrn_w48_384x288.onnx', contact_model_path='./models/contact_hrn_w32_256x192.onnx', device='cuda', spin_model_path='./models/spin_model_smplx_eft_18.pt', smpl_type='smplx', smpl_model_dir='./models/models/smplx', smpl_mean_params_path='./models/data/smpl_mean_params.npz', essentials_dir='./models/smplify-xmc-essentials', parametrization_path='./models/smplx_parametrization/parametrization.npy', bone_parametrization_path='./models/smplx_parametrization/bone_to_param2.npy', foot_inds_path='./models/smplx_parametrization/foot_inds.npy', save_path='./output', img_path='./data/images', use_contacts=True, use_msc=False, use_natural=True, use_cos=True, use_angle_transf=True, c_mse=0, c_par=10, c_f=1000, c_parallel=100, c_reg=1000, c_cont2d=1, c_msc=17500, fist=None)
D:\software\Anaconda\envs\pytorch39\lib\site-packages\torchvision\models\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.warnings.warn(
D:\software\Anaconda\envs\pytorch39\lib\site-packages\torchvision\models\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet50_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet50_Weights.DEFAULT` to get the most up-to-date weights.warnings.warn(msg)
Traceback (most recent call last):File "d:\python\Sketch2Pose\src\pose.py", line 1922, in <module>main()File "d:\python\Sketch2Pose\src\pose.py", line 1815, in mainspin_step(File "d:\python\Sketch2Pose\src\pose.py", line 1374, in spin_step) = get_pred_and_data(File "d:\python\Sketch2Pose\src\pose.py", line 351, in get_pred_and_datarotmat, betas, camera, smpl_output, zz = get_predictions(File "d:\python\Sketch2Pose\src\pose.py", line 335, in get_predictionssmpl_output, rotmat = get_smpl_output(File "d:\python\Sketch2Pose\src\pose.py", line 319, in get_smpl_outputsmpl_output = smpl(File "D:\software\Anaconda\envs\pytorch39\lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_implreturn forward_call(*input, **kwargs)File "d:\python\Sketch2Pose\src\spin\smpl.py", line 199, in forwardsmpl_output = super(SMPLX, self).forward(*args, **kwargs)File "D:\software\Anaconda\envs\pytorch39\lib\site-packages\smplx\body_models.py", line 1242, in forwardvertices, joints, A = lbs(shape_components, full_pose, self.v_template,File "D:\software\Anaconda\envs\pytorch39\lib\site-packages\smplx\lbs.py", line 209, in lbsv_shaped = v_template + blend_shapes(betas, shapedirs)File "D:\software\Anaconda\envs\pytorch39\lib\site-packages\smplx\lbs.py", line 295, in blend_shapesblend_shape = torch.einsum('bl,mkl->bmk', [betas, shape_disps])File "D:\software\Anaconda\envs\pytorch39\lib\site-packages\torch\functional.py", line 373, in einsumreturn einsum(equation, *_operands)File "D:\software\Anaconda\envs\pytorch39\lib\site-packages\torch\functional.py", line 378, in einsumreturn _VF.einsum(equation, operands)  # type: ignore[attr-defined]
RuntimeError: einsum(): subscript l has size 26 for operand 1 which does not broadcast with previously seen size 20

原因:没有安装正确版本的smplx库,要严格按照prepare.sh里的指示。

3)IndexError: tensors used as indices must be long, byte or bool tensors

@谢谢这位哥

4)torch.cuda.OutOfMemoryError: CUDA out of memory.

这个错误是在我运行带有selfcontact的测试时发生的,如果不带selfcontact就没有这个错误。

很奇怪,我也不知道为什么GPU不够,但明明占用率很低。

后来找到了解决方案,显存不够,于是我就用以下代码换了一张卡。

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"

此外,还看到了一些其他的解决方案link -> Pytorch运行错误:CUDA out of memory处理过程


至此,完美搭建项目并运行结束。

【Sketch2Pose项目环境搭建】win10+Anoconda+VScode相关推荐

  1. GAMES101课程环境搭建(Win10+VSCode)

    GAMES101课程环境搭建(Win10+VSCode) 抄自:知乎 发现很多人遇到Mingw环境的问题,这里共享一个可用的mingw,自行解压,然后把bin目录加入环境变量即可. 链接: https ...

  2. Vue项目实战之人力资源平台系统(一)框架介绍及项目环境搭建

    前言 目录 前言 一.vue-element-admin简介 二.项目环境搭建 2.1 nodejs环境 2.2 git版本控制 2.3 vscode编辑器 三.拉取vue-element-admin ...

  3. 黑马学成在线--项目环境搭建

    完整版请移步至我的个人博客查看:https://cyborg2077.github.io/ 学成在线–项目环境搭建 学成在线–内容管理模块 学成在线–媒资管理模块 学成在线–课程发布模块 学成在线–认 ...

  4. 谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器

     导航: 谷粒商城笔记+踩坑汇总篇_谷粒商城笔记踩坑6_vincewm的博客-CSDN博客 目录 1.项目介绍 1.1 微服务架构图 1.2. 微服务划分图 2.项目环境搭建 2.1. 虚拟机搭建环境 ...

  5. 美多后台管理和项目环境搭建

    美多后台管理 Django框架已经提供了一个Admin管理后台,但是Admin的本身的页面可修改的页面布局效果比较少,无法满足公司定制页面需求,这时候就需要独立开发一套后台管理系统,满足公司对后台数据 ...

  6. linux基本项目环境搭建

    文章目录 linux基本项目环境搭建 java环境搭建 获取java源码包 解压 配置环境变量 使配置文件生效 验证 nginx安装 下载(java也可用此方法下载) 解压 配置(configure) ...

  7. 企业实战(2) 项目环境搭建之Tomcat部署

    前言: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说, ...

  8. ESP32开发1---ESP32环境搭建(ESP-IDF+VSCode)

    ESP32环境搭建(ESP-IDF+VSCode) ESP32开发可以使用ESP-IDF 工具,其安装较为复杂需要,其需要许多必备的工具如Python.Git.交叉编译器.CMake和Ninja编译工 ...

  9. Lua环境搭建 Win10

    Lua环境搭建 Win10 一.安装Lua 基于Mingw构建,需要安装好Mingw环境. 点此获取Lua Source Code.选择版本为 5.35, 解压缩,CMD/PS输入make mingw ...

最新文章

  1. Sicily 1153: 马的周游问题(DFS+剪枝)
  2. java 加解密api_API加密框架原理解密
  3. 小码哥iOS学习笔记第二天: OC对象的分类
  4. 关于ASP.NET页面打印技术的总结
  5. 数论基础之快速幂(详细教程)
  6. 免费报名|《PMCAFF产品经理第一课》Facebook、360、京东早期核心产品大牛重磅开讲...
  7. activemq配置与启动
  8. boost::histogram::histogram::fill用法的测试程序
  9. 拼多多再次超越京东:盘中市值一度超700亿美金
  10. HDU 4289 Control
  11. php怎么做群聊,workerman实现群聊
  12. 矢量叉积与折线段拐向判断---三角形顺逆判断
  13. opencv旋转摄像头
  14. 专网视频会议直播系统整合部署方案附拓扑图
  15. 【元胞自动机】基于元胞自动机实现单边教室人群疏散含Matlab源码
  16. openstack中虚拟机CPU与内存布局设计(三)
  17. 游戏3C之二——镜头
  18. IDEA 2021.2.3添加GitHub账户并提交代码到GitHub
  19. PV操作与信号灯例子
  20. 电脑小知识:计算机防火墙到底是什么?能不能阻止黑客的入侵?

热门文章

  1. java 中的接口可以继承吗?
  2. 投融界:创业路上,有项目如何找投资人
  3. 青少年机器人技术一级考试备考重点(一):机器人常识
  4. OpenCV人脸识别---相关图片操作
  5. 如何区分ufs和emmc、如何进9008模式、900E进fastboot模式方法
  6. 亲测!纯净不限速的驱动大师
  7. java详解动态代理中的代理对象
  8. 代理分账,三级分销,PHP数据库设计和接口开发
  9. mongoDB 常用查询
  10. 剧院剧场影视拍摄灯光布光技巧