note

一、TensorRT (放到单独的文件中去了)

二、deepstream_5.0.1使用

​ 这是在 Jetson TX2 上弄的。

这里是deepstream5的地址。按照其所给的方法直接环境构建就好了,但是服务器图像化环境有问题,就是用官方提供的docker,下面大致讲下docker中demo的实现(这里都是针对服务器说的,不是jetson):

一般来说,就是OK的了,但是服务器环境有点问题,可能会有这样一个错误==cuGraphicsGLRegisterBuffer failed with error(219) gst_eglglessink_cuda_init texture = 1==,根据官方解答应该是在装driver时没有装nvidia opengl,这里是回答地址。

所以是不能够进行展示了,要看效果的话,就进到.txt配置文件,把[sink0]下改成enable=0,同时把[sink1]下改成enable=1,然后再执行就会得到一个名为==out.mp4==的结果视频,也代表运行成功了。这里是配置参数的说明。


docker 镜像的一个说明:

二、Triton-infer使用

==多路摄像头提到了这个:triton==

github的地址:triton-inference-server

​ 去nvidia-NGC(这里有很多英伟达相关联的container)中搜索Triton Inference Server下载 # 镜像上面去找。

​ 要注意triton镜像与cuda的版本对应,对应关系看这里。 # 一定先看这个

​ 几个参考网址123,更好的理解:

两种:(推荐直接从第二种入手吧,环境不容易出错,特别是tensort的部署)

运行这个docker,会自动映射8000、8001、8002这几个端口,如果有防火墙,也会把这几个端口开启,局域网内的其它机器可以直解连接访问,不用去设置或转发了,然后这个docker停止运行后,就会把这几个端口给关闭掉


下面是安装它的快速启动来的。(它示例demo是tensorflow和onnx)

​ 然后根据这个官方的README,把它自带的demo的模型下好(根据它的fetch_models.sh去注意存放的路径和模型最后的名字),(里面一个是tensorflow的inception模型一个是densenet_onnx的onn模型)

然后跑它的简单demo,把容器起起来:(可能还是会报错,按照提示,要加 –shm-size=1g –ulimit memlock=-1 –ulimit stack=67108864 这几个参数)

​ docker run –gpus all –rm –shm-size=1g –ulimit memlock=-1 –ulimit stack=67108864 -p8000:8000 -p8001:8001 -p8002:8002 -v $(pwd)/model_repository:/models nvcr.io/nvidia/tritonserver:20.12-py3 tritonserver –model-repository=/models


然后是获取客户端示例:


CentOS-7.9.x86_64-gnu、tritonserver:21.10-py3、tensorrt:21.10-py3是成功了的。

​ 最开始用自己在宿主机编译的王鑫宇的tensort的yolov5的.engine,各种报错,库版本不对,然后是参考的yolov4-triton-tensorrt这个项目的构建方法,详细可以去读它的README,然后简单总结一下:

  1. 先根据最上面自己宿主机的cuda版本大概在这里选好用的triton的版本,这里比如是21.10-py3,那么先去拉取同版本的tensorrt镜像,然后在这个镜像里去编译.engine文件:

    • docker pull nvcr.io/nvidia/tensorrt:21.10-py3
    • docker run –gpus all -it –rm -v $(pwd)/yolov5:/yolov5l nvcr.io/nvidia/tensorrt:21.10-py3 # 起个临时容器,把当前yolov5这个项目映射
      • mkdir build && cd build && cmake .. && make
      • 然后就根据各自tensort的项目的说明来生成对应的.engine文件
      • 此时build文件夹中应该就要有两个文件:libmyplugins.so、yolov5l.engine # 名字不一定
  2. 把上一步生成的两个文件放到一个文件夹,按triton文件夹要求来,一般会把.engine名字改为model.plan,然后拉取triton的镜像(注意版本和triton一致):

    docker pull nvcr.io/nvidia/tritonserver:21.10-py3

  3. 一切文件夹、模型都准备好了后,在合适的地方启动容器: docker run --gpus all --rm --shm-size=1g --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -p8000:8000 -p8001:8001 -p8002:8002 -v$(pwd)/model_repository:/model_repository -v$(pwd)/plugins:/plugins --env LD_PRELOAD=/plugins/libmyplugins.so nvcr.io/nvidia/tritonserver:21.10-py3 tritonserver --model-repository=/model_repository --strict-model-config=false --log-verbose 1 因为没有加项目要求的那种配置文件,根据github上的项目,docker容器启动时,加了这些参数:

    • –env LD_PRELOAD=/plugins/liblayerplugin.so # 具体值看实际情况,应该通过预加载.so库文件来自动生成相应的配置文件吧
    • –strict-model-config=false # 这个也时因为没有自己写配置文件才要的
    • –log-verbose 1 可以看到详细log

注意:

三、TorchScript以及LibTorch使用

首先 TorchScript 主要是python端的使用,它负责把模型打包,然后用C++的 LibTorch加载,教程

  1. TorchScript打包一个模型

    • import torch
      import torchvision
           
      model = torchvision.models.resnet18()
      example = torch.rand(1, 3, 3224, 224)
      traced_model = torch.jit.trace(model, example)
      traced_model.save("traced_resnet_model.pt")
      

      还可以加在回来:

      trace = torch.jit.load("traced_resnet_model.pt")
      output = trace(torch.ones(1, 3, 224, 224))
      print(output[0, :5])
      
    • 注意点:

      • 这是针对没有网络中没有流程控制if else这种,直接打包记录,若是有,要用别的方式进行==跟踪==,具体就看这里
  2. LibTorch加载

    • 首先是环境问题,我用的是vscode+msvc的方式,具体的注意事项看现相关笔记吧,(注意可能出现的.dll缺失问题,powershell和clion的情况下是不会报错的,要cmd)

    • CMakeLists.txt

      cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
      project(custom_ops)
           
      set(Torch_DIR "D:\\lib\\libtorch_1.8.2_debug\\share\\cmake\\Torch")
      find_package(Torch REQUIRED)
           
      add_executable(example-app example_app.cpp)
      target_link_libraries(example-app "${TORCH_LIBRARIES}")
      set_property(TARGET example-app PROPERTY CXX_STANDARD 14)
      
    • example_app.cpp

      #include <iostream>
      #include <memory>
      #include <vector>
      #include <torch/script.h>
           
           
      const std::string model_path("../traced_resnet_model.pt");
      int main(int argc, const char* argv[]) {
           
      	torch::jit::script::Module module;
      	try {
      		// module = torch::jit::load(argv[1]);
      		module = torch::jit::load(model_path);
      	}
      	catch (const c10::Error& e) {
      		std::cerr << "error loading the model\n";
      		return -1;
      	}
      	std::cout << "ok" << std::endl;
           
      	// create a vector of inputs
      	std::vector<torch::jit::IValue> inputs;
      	inputs.push_back(torch::ones({1, 3, 224, 224}));
      	// Execute the model and turn its output into a tensor
      	at::Tensor output = module.forward(inputs).toTensor();
      	std::cout << output.slice(/*dim=*/1, /*start=*/0, /*end=*/5) << std::endl;
      	return 1;
      }
      
  3. 1

  4. 2

  5. 3 预留的

四、OpenFace

需要下载模型,让后放到你编译好的主程序所在目录的model\patch_experts里面

​ 原话是:The C++ models have the .dat extension and should be place in the lib\local\LandmarkDetector\model\patch_experts folder if you are compiling form code, and in the model\patch_experts folder if you have downloaded the binaries.

这里是4个模型的下载地址,直接复制这个链接去迅雷下载:


自主编译:

项目地址:https://github.com/TadasBaltrusaitis/OpenFace

根据官方的方法走就好了,比较建议的是自己先装好cmake和opencv,

在centos下:


环境准备好,开始编译的话,进到openface:

当编译完成后,要把上面下载的四个.dat文件,放到build/bin/model/patch_experts/目录里。然后就可以用了

命令行参数地址:点这里

Tips:装有anaconda的机器编译时会报一些错误,直接先临时把LD_LIBRARY_PATH中关于anaconda环境变量都取消掉,再编译,具体可看环境问题的md文件。


参数说明:

头方向(orientation):

从结果的csv中来看,后三个角度值,一次对应的是垂直方向的Pitch、左右偏移(Yaw)、方向偏头(Roll),主要关注的还是第二个值


视角(Gaze):

眼动分析软件

ogama(open gaze and mouse analyzer):地址:http://www.ogama.net/

opensesame

Tableau 数据可视化的,官网https://www.tableau.com/, 介绍网址:一天入门Tableau–你也可以 - Roar的文章 - 知乎 https://zhuanlan.zhihu.com/p/71502618

瑞士的Eyeware公司

数据集:在这里去搜索:https://paperswithcode.com/paper/mpiigaze-real-world-dataset-and-deep 1、gaze360 2、MPIIGaze 3、GazeCapture

五、OpenPose

这主要是OpenPose在centos上的编译注意点:

首先就跟着官方的安装步骤走,一般到cmake时都没什么问题,然后在make时就会涌现一堆错误,一一来说:

六、OpenVIno

去看yolox的自己写的demo的脚本

openVINO的离线安装包:这里

首先是安装:看这个网址,跟着网址教程走就好了,它会在默认的python环境装一些库,

七、Caffe编译

像opencv、boost这种三方库都已经在./bashrc环境变量汇总添加了,openblas也已经yum安装了

set -e

mkdir build && cd build cmake -DBLAS=open -DBUILD_docs=OFF -DUSE_LMDB=OFF -DUSE_LEVELDB=OFF -DUSE_CUDNN=OFF .. make -j8

make install # 会安装在 ./build/install下


用它自带的makfile来的时候,可能会缺少opencv、boost的头文件这些,就设定一下环境变量,如: export CPLUS_INCLUDE_PATH=/opt/boost/boost_1_75_0/my_install/include:$CPLUS_INCLUDE_PATH

export CPLUS_INCLUDE_PATH=/opt/opencv-4.5.3/install/include/opencv4:$CPLUS_INCLUDE_PATH


装完后,在bin里面就有nccn要的==upgrade_net_proto_text==、==upgrade_net_proto_binary==这个用来更新模型参数的软件了

八、kaldi 语音处理库

kaldi几乎是所有语音处理包的一个基础,一个中文简单说明地址。相关数据集的下载地址

安装(针对linux的,):

它有两种方法(根目录的INSTALL文件中有),一种是cmake的方式,出了些问题,没搞定。所以就是用的另外一种,就是直接使用它提供的脚本文件和makefile直接搞定:

  1. 先进到总目录下的==tools/==,按照里面的==INSTALL==文件做(可以结合起来看),这里直接总结:

    1. 执行脚本: extras/check_dependencies.sh # 第一次可能会缺少inter的计算包mkl之类的,按照它的提示去安装就好了,搞定后再执行这个脚本,一般就会ok了。
    2. 上面执行完了里面应该是有一个文件夹==openfast==,进到里面编译,如下命令:
      1. ./configure
      2. make
  2. 再进到总目录下的==src/==,按照里面的==INSTALL==文件做(可以结合起来看),这里直接总结:

    1. ` ./configure –shared`
    2. ` make depend -j 8`
    3. ` make depend -j 8`
  3. 然后就是根据例子准备数据,例子都是放在目录==egs/==里面的,这里以aidatatang_200zh为例,数据解读这里

    1. 先根据上面把数据下载下来,放在==/export/a05/xna/data==这个目录下
    2. cd kaldi/egs/aidatatang_200zh/s5/local && chmod +x *.sh # 不给执行权限后面脚本运行报错
    3. 回到上级目录 s5 里面,然后执行./run.sh脚本
      1. 应该会报错“ g2p.py: command not found”,按照提示,去到 kaldi/tools/extras 里执行 ./install_sequitur.sh ,可能还会缺少“swig”,直接yum install swig搞定就好了(执行这个脚本可能会有python包的错,激活conda的环境后再来执行);这里完成后还有一个提示“Please source tools/env.sh in your path.sh to enable it”,我是直接拿到tools/env.sh的绝对路径,然后写进~/.bashrc:source a_abs_path/tool/env.sh

    哎,最后还是没有搞定,好像可能跟anaconda的python环境以及自身的python环境有些冲突。

第三步是做测试了,这个好像有些复杂,所以报错了,有个简单的demo是==egs/yesno/s5==,进到里面直接./run.sh应该是能直接成功的。