38 using InferResultArray =
39 std::vector<::reusex::vision::common::object::DetectionBoxArray>;
53 const std::string &text_encoder_path,
54 const std::string &geometry_encoder_path,
55 const std::string &decoder_path,
56 const std::string &tokenizer_path,
int gpu_id);
63 static std::unique_ptr<TensorRTSam3>
64 create(
const std::filesystem::path &model_path);
78 std::vector<IDataset::Pair>
79 forward(
const std::span<IDataset::Pair> &input)
override;
96 const cv::Mat &image,
const std::string &label,
97 const std::vector<std::pair<std::string, std::array<float, 4>>> &boxes);
118 float point_frac = 0.f;
122 void preprocess(
const TensorRTData &input,
int ibatch,
void *stream);
124 bool encode_image(
int batch_size,
void *stream);
128 void gather_vision_features(
const std::vector<PromptMeta> &batch_prompts,
129 int batch_size,
void *stream);
132 bool encode_text(
const std::vector<PromptMeta> &batch_prompts,
int batch_size,
139 bool encode_boxes(
const std::vector<PromptMeta> &batch_prompts,
140 int batch_size,
int slot_boxes,
void *stream);
141 bool decode(
int batch_size,
int prompt_len,
void *stream);
144 void postprocess(InferResult &image_result,
int batch_idx,
int image_idx,
145 const std::string &label,
const int label_id,
146 float confidence_threshold,
bool return_mask,
void *stream);
155 void allocate_memory_once();
159 std::optional<bool> probe_mask_polarity();
161 void set_binding_dim(std::shared_ptr<TensorRT::Engine> &engine,
162 int binding_index,
const std::vector<int> &dims);
166 bool isdynamic_model_ =
true;
167 int input_image_width_ = 1008;
168 int input_image_height_ = 1008;
173 const int max_image_batch_ =
176 const int max_prompt_batch_ =
179 const int max_boxes_per_prompt_ =
186 int geom_max_boxes_ = 0;
194 bool mask_true_is_valid_ =
true;
197 std::vector<std::pair<int, int>>
198 original_image_sizes_;
199 int num_queries_ = 200;
200 int mask_height_ = 288;
201 int mask_width_ = 288;
204 std::string vision_encoder_path_;
205 std::string text_encoder_path_;
206 std::string geometry_encoder_path_;
207 std::string decoder_path_;
210 std::shared_ptr<TensorRT::Engine> vision_encoder_trt_;
211 std::shared_ptr<TensorRT::Engine> text_encoder_trt_;
212 std::shared_ptr<TensorRT::Engine> decoder_trt_;
213 std::shared_ptr<TensorRT::Engine> geometry_encoder_trt_;
221 std::unordered_map<std::string, std::tuple<std::array<int64_t, 32>,
222 std::array<int64_t, 32>,
int>>
229 std::vector<int> vision_input_shape_;
230 std::vector<int> fpn_feat_0_shape_;
231 std::vector<int> text_ids_shape_;
232 std::vector<int> geom_box_shape_;
236 std::vector<std::shared_ptr<tensor::Memory<uint8_t>>> original_images_buf_;
275 std::unordered_map<std::string, std::shared_ptr<tensor::Memory<float>>>
276 geom_features_cache_;
277 std::unordered_map<std::string, std::shared_ptr<tensor::Memory<bool>>>
296 box_affine_matrices_;
299 std::unique_ptr<tokenizers::Tokenizer> tokenizer_;
TensorRTSam3(const std::string &vision_encoder_path, const std::string &text_encoder_path, const std::string &geometry_encoder_path, const std::string &decoder_path, const std::string &tokenizer_path, int gpu_id)