周末抽空研究了一下vscode中的lsp,lsp是基于rpc协议的,于是就尝试做了一个简单的RPCServer。
RPCServer的使用与Flask类似,如下:
1 | from rpc_server import RpcServer |
周末抽空研究了一下vscode中的lsp,lsp是基于rpc协议的,于是就尝试做了一个简单的RPCServer。
RPCServer的使用与Flask类似,如下:
1 | from rpc_server import RpcServer |
发现一个华为出的深度学习框架,同时支持静态图和动态图,尝试一下,将代码收藏起来方便以后使用。
需要先下载数据集:
1 | mkdir -p ./data/train ./data/test |
代码如下:
1 | import mindspore |
使用PaddlePaddle写的Mnist手写数字识别,测试集准确率99.50%。
代码如下:
1 | import paddle |
今天在编译custom_op
时发现一个gcc
的bug
,我用的是Ubuntu 21.04
系统,编译时报/usr/include/c++/10/chrono:428:27: internal compiler error: 段错误
的错误,查了一通后解决问题。
nvcc
默认使用的gcc 10.3.0
,只需要在nvcc后面添加--compiler-bindir /usr/bin/gcc-x
就可以了。
随机姿态的SMPLX模型可能千奇百怪,想生成一个随机的
真实
人体需要包含一些人体先验知识。human_body_prior
(VPoser)是一个变分自编码器,用于将人体姿态嵌入到隐空间,也可以将隐空间里的随机向量,映射为一个真实
存在的姿态。
项目地址:https://github.com/nghorbani/human_body_prior
使用pip从github中进行安装,pypi中的版本比较老,而且官方版本在window平台下有一些问题。
1 | pip install git+https://github.com/killf/human_body_prior.git |
要想直接使用VPoser,还需要从官网下载训练好的模型,代码如下:
1 | from human_body_prior.tools.model_loader import load_model |
将pose参数转换为3D模型:
1 | import smplx |
SMPLX
是一个带手势和表情的线性人体模型,官方地址:smpl-x.is.tue.mpg.de,需要注册后才能下载模型。
官方提供的smplx算法是基于pytorch的,可以直接使用pip进行安装。
1 | pip install smplx |
现在还不能直接使用,需要到官网下载对应的模型。
这里使用随机参数来创建一个模型,代码如下:
1 | import smplx |
最近在学习3D相关的算法,遇到SMPL算法,不甚理解,所以打算自己实现一遍,毕竟————学习新知识的最好方法就是自己实现一下。
项目地址:https://github.com/killf/smpl
model.py
是加载模型文件和算法的入口。
1 | import numpy as np |
C++的高效 + Python的简单 = 无与伦比的利器
总结一下使用C++编写Python扩展的方法和基本步骤,其中用到
swig
通常需要4类文件,比如
example.h
、example.cpp
、example.i
、setup.py
,可以任意选择你喜欢的IDE
example.h
头文件需要被C编译器识别,如下:
1 | #ifndef PYTHON_EXAMPLE_H |
example.cpp
1 | #include "example.h" |
example.i
swig脚本,用于生成胶水代码。注意,应当把头文件添加到生成的文件中,代码如下:
1 | %module example |
setup.py
用于生成python扩展的配置文件,代码如下:
1 | from setuptools import setup, Extension |
使用如下命令进行编译:
1 | python setup.py build_ext --inplace # 编译,构建扩展 |
使用时,像使用普通模块一样即可:
1 | import example |
LRU全称
Least Recently Used
,即最近最久未使用算法,表示如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。时间复杂度$O(1)$,空间复杂度$O(1)$。
1 | #include <iostream> |
给定一个二叉树和二叉树中的两个不同节点,寻找这个两个节点的最小公共祖先。
思路是:先找到一条路径到这个两个节点中的其中一个,然后从下往上遍历这个节点的各级父节点,寻找这个节点是否包含另外一个节点。
1 | #include <iostream> |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true