ReUseX  0.0.5
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
Sam3.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Povl Filip Sonne-Frederiksen
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#pragma once
6#include "reusex/vision/IModel.hpp"
7#include "reusex/vision/common/object.hpp"
8#include "reusex/vision/onnx/Sam3Data.hpp"
9
10#include <onnxruntime_cxx_api.h>
11#include <tokenizers_cpp.h>
12
13#include <filesystem>
14#include <memory>
15#include <span>
16#include <string>
17#include <unordered_map>
18#include <vector>
19
20namespace reusex::vision::onnx {
21
30class ONNXSam3 : public IModel {
31 public:
36 explicit ONNXSam3(const std::filesystem::path &model_dir,
37 bool use_cuda = false);
38
43 static std::unique_ptr<ONNXSam3>
44 create(const std::filesystem::path &model_dir, bool use_cuda = false);
45
54 std::vector<IDataset::Pair>
55 forward(const std::span<IDataset::Pair> &input) override;
56
57 private:
58 using InferResult = common::object::DetectionBoxArray;
59
68 std::pair<std::vector<float>, cv::Mat> preprocess(const cv::Mat &image) const;
69
73 std::pair<std::array<int64_t, 32>, std::array<int64_t, 32>>
74 tokenize(const std::string &text);
75
79 cv::Mat infer_single(const ONNXSam3Data &sam3_data);
80
81 // ONNX Runtime state
82 Ort::Env env_;
83 Ort::SessionOptions session_options_;
84 std::unique_ptr<Ort::Session> vision_encoder_;
85 std::unique_ptr<Ort::Session> text_encoder_;
86 std::unique_ptr<Ort::Session> decoder_;
87
88 // Tokenizer
89 std::unique_ptr<tokenizers::Tokenizer> tokenizer_;
90
91 // Model parameters
92 int input_size_ = 1008;
93 int num_queries_ = 200;
94 int mask_height_ = 288;
95 int mask_width_ = 288;
96
97 // Tokenizer cache: text -> (input_ids, attention_mask)
98 std::unordered_map<std::string,
99 std::pair<std::array<int64_t, 32>, std::array<int64_t, 32>>>
100 text_cache_;
101
102 // Memory allocator
103 Ort::MemoryInfo memory_info_;
104};
105
106} // namespace reusex::vision::onnx
static std::unique_ptr< ONNXSam3 > create(const std::filesystem::path &model_dir, bool use_cuda=false)
Factory method for creating an ONNXSam3 instance.
std::vector< IDataset::Pair > forward(const std::span< IDataset::Pair > &input) override
Run SAM3 inference on a batch of images.
ONNXSam3(const std::filesystem::path &model_dir, bool use_cuda=false)
Construct and load a SAM3 model from a directory.
std::vector< DetectionBox > DetectionBoxArray
Convenience alias for a collection of DetectionBox results.
Definition object.hpp:212
Data carrier for ONNX Runtime SAM3 inference pipeline.
Definition Sam3Data.hpp:19