| import os |
| from rtmlib import RTMO |
|
|
| class RTMO_GPU(RTMO): |
|
|
| def __init__(self, |
| onnx_model: str = None, |
| model_input_size: tuple = (640, 640), |
| mean: tuple = None, |
| std: tuple = None, |
| to_openpose: bool = False, |
| backend: str = 'onnxruntime', |
| device: str = 'cuda'): |
| |
| if backend == 'onnxruntime': |
|
|
| if not os.path.exists(onnx_model): |
| from rtmlib.tools.file import download_checkpoint |
| onnx_model = download_checkpoint(onnx_model) |
|
|
| import onnxruntime as ort |
|
|
| providers = {'cpu': 'CPUExecutionProvider', |
| 'cuda': [ |
| ('CUDAExecutionProvider', { |
| 'device_id': 0, |
| 'arena_extend_strategy': 'kNextPowerOfTwo', |
| 'gpu_mem_limit': 2 * 1024 * 1024 * 1024, |
| 'cudnn_conv_algo_search': 'DEFAULT', |
| 'do_copy_in_default_stream': True, |
| 'enable_cuda_graph': False |
| }), |
| 'CPUExecutionProvider']} |
| |
| self.session = ort.InferenceSession(path_or_bytes=onnx_model, |
| providers=providers[device]) |
|
|
| print(f'load {onnx_model} with {backend} backend') |
|
|
| self.onnx_model = onnx_model |
| self.model_input_size = model_input_size |
| self.mean = mean |
| self.std = std |
| self.backend = backend |
| self.device = device |
| self.to_openpose = to_openpose |
|
|
| else: |
| super().__init__(onnx_model, |
| model_input_size, |
| mean, |
| std, |
| to_openpose, |
| backend, |
| device) |
|
|