DefTruth / RVM-Inference

🔥Robust Video Matting C++ inference toolkit with ONNXRuntime、MNN、NCNN and TNN, via lite.ai.toolkit.
GNU General Public License v3.0
116 stars 27 forks source link

rvm onnx推理的代码可以跑fp16的模型么? #15

Open HZNUJeffreyRen opened 2 years ago

HZNUJeffreyRen commented 2 years ago

我跑视频,加载完模型之后就阻塞住了

DefTruth commented 2 years ago

目前只能跑fp32的模型

HZNUJeffreyRen commented 2 years ago

@DefTruth 好的,谢谢大佬回复。我还有一个疑问,就是rec的四个输出,会作为下一次的输入,我看了一下代码,是拿到所有output之后,再用memcpy拷贝到输入内存,这样的话rec四个输入的拷贝操作是不是中间会经过cpu,而不是通过gpu直接拷贝的?

HZNUJeffreyRen commented 2 years ago

@DefTruth 因为我在3070上测试,0.25下采样率,1080p的视频,纯推理只有50fps,和作者列出的推理性能差了一半,我觉得应该是这个问题

DefTruth commented 2 years ago

@DefTruth 好的,谢谢大佬回复。我还有一个疑问,就是rec的四个输出,会作为下一次的输入,我看了一下代码,是拿到所有output之后,再用memcpy拷贝到输入内存,这样的话rec四个输入的拷贝操作是不是中间会经过cpu,而不是通过gpu直接拷贝的?

是的,目前的处理逻辑,确实是会经过cpu做拷贝。你可以参考下这个讨论来修改,避免cpu的数据拷贝:
https://github.com/DefTruth/lite.ai.toolkit/issues/60

HZNUJeffreyRen commented 2 years ago

@DefTruth 好的,谢谢大佬回复。我还有一个疑问,就是rec的四个输出,会作为下一次的输入,我看了一下代码,是拿到所有output之后,再用memcpy拷贝到输入内存,这样的话rec四个输入的拷贝操作是不是中间会经过cpu,而不是通过gpu直接拷贝的?

是的,目前的处理逻辑,确实是会经过cpu做拷贝。你可以参考下这个讨论来修改,避免cpu的数据拷贝: DefTruth/lite.ai.toolkit#60

好的,谢谢大佬

wangsnowsea2020 commented 2 years ago

我也想知道,如何实现fp16的模型的推理,大佬能讲一下思路吗

DefTruth commented 2 years ago

具体的话,我没试过。不过可以看看我整理的资料,里边有关于fp16的

wangsnowsea2020 commented 2 years ago

谢谢你的回复,我使用下面方法:Ort::Value::CreateTensor(memory_info_handler, tensor_value_handler.data(), target_tensor_size*sizeof(uint16_t), tensor_dims.data(), tensor_dims.size(), ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16); 把所以的float 类型都改写为uint16t, 把所有的OpenCV 的CV 32FC ,都改成CV_16FC , 貌似不行,是不是想简单了。

YiQiu1984 commented 3 months ago

目前只能跑fp32的模型

大佬,你好,纯CPU推理的话(I5 的CPU),fps有多少呢?我看另外一个issue也有提到过类似的问题: https://github.com/DefTruth/RVM-Inference/issues/14