Aimol-l / OrtInference

Using OnnxRuntime to inference yolov10,yolov10+SAM ,yolov10+bytetrack and SAM2 by c++ .
MIT License
37 stars 5 forks source link

sam2接口能不能把prompt_point加上? #1

Open jackwei86 opened 1 month ago

jackwei86 commented 1 month ago

sam2->setparms({.prompt_box = {745, 695, 145, 230}});

目前我是用 opencv 4.6.0 + cuda 11.8 + Microsoft.ML.OnnxRuntime.Gpu.Windows.1.18.1 把程序跑起来了。需要用户去点击设置关心的位置,使用的point,不知道好不好加这个参数?

另外在 SAM2::initialize()里面的 win32环境设置 4个 onnx 路径 可以参考 std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert; std::wstring wOnnxPath = convert.from_bytes(onnx_paths[0]); img_encoder_session = new Ort::Session(img_encoder_env, (const wchar_t*)wOnnxPath.c_str(), this->img_encoder_options);

Aimol-l commented 1 month ago

1.win32环境设置我只是懒得写,哈哈哈,你可以参考yolosam.cpp的initialize。我以前用wstring去设置中文路径时候会出现乱码的情况。 2.添加prompt_point不会太难,我有空写写。 3.推理速度的问题我没太多办法解决,你可以尝试将onnx导出为float16,但是程序需要修改许多。改用tensorrt也许会更好。

            // const auto& api = Ort::GetApi();
            // OrtTensorRTProviderOptionsV2* tensorrt_options;
            // Ort::ThrowOnError(api.CreateTensorRTProviderOptions(&tensorrt_options));
            // std::unique_ptr<OrtTensorRTProviderOptionsV2, decltype(api.ReleaseTensorRTProviderOptions)> rel_trt_options(
            //     tensorrt_options, api.ReleaseTensorRTProviderOptions);
            // Ort::ThrowOnError(api.SessionOptionsAppendExecutionProvider_TensorRT_V2(static_cast<OrtSessionOptions*>(session_options),
            //                                                         rel_trt_options.get()));
Aimol-l commented 1 month ago

1.win32环境设置我只是懒得写,哈哈哈,你可以参考yolosam.cpp的initialize。我以前用wstring去设置中文路径时候会出现乱码的情况。 2.添加prompt_point不会太难,我有空写写。 3.推理速度的问题我没太多办法解决,你可以尝试将onnx导出为float16,但是程序需要修改许多。改用tensorrt也许会更好。

            // const auto& api = Ort::GetApi();
            // OrtTensorRTProviderOptionsV2* tensorrt_options;
            // Ort::ThrowOnError(api.CreateTensorRTProviderOptions(&tensorrt_options));
            // std::unique_ptr<OrtTensorRTProviderOptionsV2, decltype(api.ReleaseTensorRTProviderOptions)> rel_trt_options(
            //     tensorrt_options, api.ReleaseTensorRTProviderOptions);
            // Ort::ThrowOnError(api.SessionOptionsAppendExecutionProvider_TensorRT_V2(static_cast<OrtSessionOptions*>(session_options),
            //                                                         rel_trt_options.get()));

使用TensorRT 推理失败。这可能是onnx模型结构本身的问题。目前无法解决。

2024-09-15 16:56:01.134683795 [E:onnxruntime:img_encoder, tensorrt_execution_provider.h:88 log] [2024-09-15 08:56:01   ERROR] IBuilder::buildSerializedNetwork: Error Code 4: API Usage Error (buff_size: Input dimensions with this name have different constant values or have contradictory IOptimizationProfile kMIN/kMAX constraints.)
2024-09-15 16:56:01.134707651 [E:onnxruntime:, sequential_executor.cc:516 ExecuteKernel] Non-zero status code returned while running TRTKernel_graph_main_graph_15213094000733189076_0 node. Name:'TensorrtExecutionProvider_TRTKernel_graph_main_graph_15213094000733189076_0_0' Status Message: TensorRT EP failed to create engine from network.
jackwei86 commented 4 weeks ago

1.win32环境设置我只是懒得写,哈哈哈,你可以参考yolosam.cpp的initialize。我以前用wstring去设置中文路径时候会出现乱码的情况。 2.添加prompt_point不会太难,我有空写写。 3.推理速度的问题我没太多办法解决,你可以尝试将onnx导出为float16,但是程序需要修改许多。改用tensorrt也许会更好。

            // const auto& api = Ort::GetApi();
            // OrtTensorRTProviderOptionsV2* tensorrt_options;
            // Ort::ThrowOnError(api.CreateTensorRTProviderOptions(&tensorrt_options));
            // std::unique_ptr<OrtTensorRTProviderOptionsV2, decltype(api.ReleaseTensorRTProviderOptions)> rel_trt_options(
            //     tensorrt_options, api.ReleaseTensorRTProviderOptions);
            // Ort::ThrowOnError(api.SessionOptionsAppendExecutionProvider_TensorRT_V2(static_cast<OrtSessionOptions*>(session_options),
            //                                                         rel_trt_options.get()));

使用TensorRT 推理失败。这可能是onnx模型结构本身的问题。目前无法解决。

2024-09-15 16:56:01.134683795 [E:onnxruntime:img_encoder, tensorrt_execution_provider.h:88 log] [2024-09-15 08:56:01   ERROR] IBuilder::buildSerializedNetwork: Error Code 4: API Usage Error (buff_size: Input dimensions with this name have different constant values or have contradictory IOptimizationProfile kMIN/kMAX constraints.)
2024-09-15 16:56:01.134707651 [E:onnxruntime:, sequential_executor.cc:516 ExecuteKernel] Non-zero status code returned while running TRTKernel_graph_main_graph_15213094000733189076_0 node. Name:'TensorrtExecutionProvider_TRTKernel_graph_main_graph_15213094000733189076_0_0' Status Message: TensorRT EP failed to create engine from network.

感谢。我正想去用tensorRT试试呢,那就看Nvidia那边后续有没有解决办法了。有人在nvidia论坛反馈过SAM2推理慢的问题,那边官方人员也说注意到了。https://forums.developer.nvidia.com/t/unable-to-install-sam2-on-orin-nano/302009/17