RVM-Inference icon indicating copy to clipboard operation
RVM-Inference copied to clipboard

8线程,使用cpu推理,约0.5s一帧,使用GPU推理,约0.15s一帧,请问这个速度正常吗,感觉比原版python的慢好多

Open chris2lee opened this issue 4 years ago • 11 comments

chris2lee avatar Dec 31 '21 10:12 chris2lee

#15 看这个讨论,可能是由于cpu数据传输的原因

DefTruth avatar Jan 06 '22 02:01 DefTruth

#15 看这个讨论,可能是由于cpu数据传输的原因

您好,大佬想请教一下,作者原文RVM 在4k视频可以达到76fps,我想在3090上达到最快速度推理,基于咱们这个库如何改进呢,这里推理包括数据加载方式、数据预处理以及模型推理得到输出值alpha、fgr,不包含后续合成

zhanghongyong123456 avatar Mar 26 '22 03:03 zhanghongyong123456

#15 看这个讨论,可能是由于cpu数据传输的原因

您好,大佬想请教一下,作者原文RVM 在4k视频可以达到76fps,我想在3090上达到最快速度推理,基于咱们这个库如何改进呢,这里推理包括数据加载方式、数据预处理以及模型推理得到输出值alpha、fgr,不包含后续合成

在服务端的话,感觉不是很有必要用c++,可以看我fork的分支,里面有个python的推理:

  • https://github.com/DefTruth/RobustVideoMatting/blob/onnx/inference_onnx.py

需要用到onnxruntime的gpu版本,并且做好iobinding,onnxruntime-gpu python服务端的配置可以看我写的文章:

如果你想用c++版本,我具体也没试过做这些优化,业余精力有限,主要还是在研究算法本身。但是你可以从2点入手:

    1. 优化rxi的数据传递,如果是onnxruntime,可以尝试做c++版本的iobinding, 可以看官方文档tune-performance 进行性能调优
    1. 如果是用MNN,那么可以尝试把rxi设置成device的张量,避免device->host->device的拷贝(我没有尝试过)

DefTruth avatar Mar 26 '22 04:03 DefTruth

大佬,目的是使用C++推理,1.使用TensorRT会不会增加推理速度呢,2.我看你回复其他人问题,有提到rxi是在cpu操作的, 3.视频加载使用什么能提速?opencv GPU版本还是ffmpeg gpu?,预处理是否必须在cpu下才能操作。

zhanghongyong123456 avatar Mar 26 '22 04:03 zhanghongyong123456

大佬,目的是使用C++推理,1.使用TensorRT会不会增加推理速度呢,2.我看你回复其他人问题,有提到rxi是在cpu操作的, 3.视频加载使用什么能提速?opencv GPU版本还是ffmpeg gpu?,预处理是否必须在cpu下才能操作。 我认为应该进行GPU编解码才能做到真正的实时

positive666 avatar Apr 13 '22 12:04 positive666

大佬,目的是使用C++推理,1.使用TensorRT会不会增加推理速度呢,2.我看你回复其他人问题,有提到rxi是在cpu操作的, 3.视频加载使用什么能提速?opencv GPU版本还是ffmpeg gpu?,预处理是否必须在cpu下才能操作。 我认为应该进行GPU编解码才能做到真正的实时

你能提供一些思路吗,该如何操作,才能实现真正的实时,期待大佬的回复

zhanghongyong123456 avatar Apr 15 '22 02:04 zhanghongyong123456

大佬,目的是使用C++推理,1.使用TensorRT会不会增加推理速度呢,2.我看你回复其他人问题,有提到rxi是在cpu操作的, 3.视频加载使用什么能提速?opencv GPU版本还是ffmpeg gpu?,预处理是否必须在cpu下才能操作。 我认为应该进行GPU编解码才能做到真正的实时

你能提供一些思路吗,该如何操作,才能实现真正的实时,期待大佬的回复

预处理肯定是要在GPU上做,这个模型的逻辑是循环,要提高GPU利用率是最优解法 并不是模型转换

positive666 avatar Apr 15 '22 04:04 positive666

大佬,目的是使用C++推理,1.使用TensorRT会不会增加推理速度呢,2.我看你回复其他人问题,有提到rxi是在cpu操作的, 3.视频加载使用什么能提速?opencv GPU版本还是ffmpeg gpu?,预处理是否必须在cpu下才能操作。 我认为应该进行GPU编解码才能做到真正的实时

你能提供一些思路吗,该如何操作,才能实现真正的实时,期待大佬的回复

预处理肯定是要在GPU上做,这个模型的逻辑是循环,要提高GPU利用率是最优解法 并不是模型转换

很抱歉~ 最近工作太忙了,回复稍晚。这位大佬的思路是对的,onnxruntime-gpu可以考虑使用io_binding把张量放在gpu进行处理,避免context的io,我之前写了一份python版本的代码,你可以参考一下,但是c++的没时间搞了:

  • https://github.com/DefTruth/RobustVideoMatting/blob/onnx/inference_onnx.py

DefTruth avatar Apr 15 '22 04:04 DefTruth

大佬,目的是使用C++推理,1.使用TensorRT会不会增加推理速度呢,2.我看你回复其他人问题,有提到rxi是在cpu操作的, 3.视频加载使用什么能提速?opencv GPU版本还是ffmpeg gpu?,预处理是否必须在cpu下才能操作。 我认为应该进行GPU编解码才能做到真正的实时

你能提供一些思路吗,该如何操作,才能实现真正的实时,期待大佬的回复

预处理肯定是要在GPU上做,这个模型的逻辑是循环,要提高GPU利用率是最优解法 并不是模型转换

很抱歉~ 最近工作太忙了,回复稍晚。这位大佬的思路是对的,onnxruntime-gpu可以考虑使用io_binding把张量放在gpu进行处理,避免context的io,我之前写了一份python版本的代码,你可以参考一下,但是c++的没时间搞了:

  • https://github.com/DefTruth/RobustVideoMatting/blob/onnx/inference_onnx.py

恩恩,我参照研究一下,谢谢大佬

zhanghongyong123456 avatar Apr 16 '22 01:04 zhanghongyong123456

大佬,目的是使用C++推理,1.使用TensorRT会不会增加推理速度呢,2.我看你回复其他人问题,有提到rxi是在cpu操作的, 3.视频加载使用什么能提速?opencv GPU版本还是ffmpeg gpu?,预处理是否必须在cpu下才能操作。 我认为应该进行GPU编解码才能做到真正的实时

你能提供一些思路吗,该如何操作,才能实现真正的实时,期待大佬的回复

预处理肯定是要在GPU上做,这个模型的逻辑是循环,要提高GPU利用率是最优解法 并不是模型转换

很抱歉~ 最近工作太忙了,回复稍晚。这位大佬的思路是对的,onnxruntime-gpu可以考虑使用io_binding把张量放在gpu进行处理,避免context的io,我之前写了一份python版本的代码,你可以参考一下,但是c++的没时间搞了:

  • https://github.com/DefTruth/RobustVideoMatting/blob/onnx/inference_onnx.py

大佬,我按照转换代码转了,静态转onnx测试没有问题,动态的转onnx,采用这个推理( https://github.com/DefTruth/RobustVideoMatting/blob/onnx/inference_onnx.py ),cpu float32 没有问题,切换成 gpu 无论 fl16 还是fl32 都会报错 ,转换时候 和推理的 float都是对应的,,采用报错 /media/lg/1484975B84973E64/anaconda3/envs/RVM/bin/python "/media/lg/1484975B84973E64/project/Matte/RobustVideoMatting-onnx _infer/RobustVideoMatting-onnx/inference_onnx.py" --checkpoint ./rvm_model1.onnx --device cuda --dtype fp32 --input-source /media/lg/1484975B84973E64/project/Matte/video/Depth.mov --downsample-ratio 0.125 --output-type video --output-composition composition.mp4 --output-alpha alpha.mp4 --output-video-mbps 4 --seq-chunk 1 /media/lg/1484975B84973E64/anaconda3/envs/RVM/lib/python3.9/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py:350: UserWarning: Deprecation warning. This ORT build has ['CUDAExecutionProvider', 'CPUExecutionProvider'] enabled. The next release (ORT 1.10) will require explicitly setting the providers parameter (as opposed to the current behavior of providers getting set/registered by default based on the build flags) when instantiating InferenceSession.For example, onnxruntime.InferenceSession(..., providers=["CUDAExecutionProvider"], ...) warnings.warn("Deprecation warning. This ORT build has {} enabled. ".format(available_providers) + Traceback (most recent call last): File "/media/lg/1484975B84973E64/project/Matte/RobustVideoMatting-onnx _infer/RobustVideoMatting-onnx/inference_onnx.py", line 230, in converter = Converter(args.checkpoint, args.device, args.dtype) File "/media/lg/1484975B84973E64/project/Matte/RobustVideoMatting-onnx _infer/RobustVideoMatting-onnx/inference_onnx.py", line 202, in init self.session = ort.InferenceSession(checkpoint) File "/media/lg/1484975B84973E64/anaconda3/envs/RVM/lib/python3.9/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 324, in init self._create_inference_session(providers, provider_options, disabled_optimizers) File "/media/lg/1484975B84973E64/anaconda3/envs/RVM/lib/python3.9/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 358, in _create_inference_session sess = C.InferenceSession(session_options, self._model_path, True, self._read_config_from_model) onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Load model from ./rvm_model1.onnx failed:Type Error: Type parameter (T) of Optype (Conv) bound to different types (tensor(float) and tensor(float16) in node (Conv_19).

zhanghongyong123456 avatar Apr 17 '22 09:04 zhanghongyong123456