| 1566 | // ── SAM2-specific loading ───────────────────────────────────────────────── |
| 1567 | |
| 1568 | static bool sam2_load_hparams(std::ifstream& fin, sam3_hparams& hp) { |
| 1569 | auto rd = [&](int32_t& v) { fin.read(reinterpret_cast<char*>(&v), 4); }; |
| 1570 | |
| 1571 | rd(hp.img_size); |
| 1572 | int32_t backbone_type; |
| 1573 | rd(backbone_type); // 1 = hiera |
| 1574 | |
| 1575 | rd(hp.hiera_embed_dim); |
| 1576 | rd(hp.hiera_num_heads); |
| 1577 | rd(hp.hiera_num_stages); |
| 1578 | for (int i = 0; i < 4; ++i) rd(hp.hiera_stages[i]); |
| 1579 | rd(hp.hiera_global_n); |
| 1580 | for (int i = 0; i < 8; ++i) rd(hp.hiera_global_idx[i]); |
| 1581 | rd(hp.hiera_q_pool); |
| 1582 | for (int i = 0; i < 4; ++i) rd(hp.hiera_window_spec[i]); |
| 1583 | rd(hp.hiera_pos_embed_bkg_h); |
| 1584 | rd(hp.hiera_pos_embed_bkg_w); |
| 1585 | rd(hp.scalp); |
| 1586 | |
| 1587 | rd(hp.neck_dim); |
| 1588 | rd(hp.fpn_top_down_n); |
| 1589 | for (int i = 0; i < 4; ++i) rd(hp.fpn_top_down_levels[i]); |
| 1590 | |
| 1591 | rd(hp.sam_embed_dim); |
| 1592 | rd(hp.sam_dec_depth); |
| 1593 | rd(hp.sam_n_multimask); |
| 1594 | rd(hp.sam_iou_head_depth); |
| 1595 | |
| 1596 | rd(hp.mem_out_dim); |
| 1597 | rd(hp.mem_attn_layers); |
| 1598 | rd(hp.num_maskmem); |
| 1599 | rd(hp.max_obj_ptrs); |
| 1600 | |
| 1601 | rd(hp.sigmoid_scale_x100); |
| 1602 | rd(hp.sigmoid_bias_x100); |
| 1603 | |
| 1604 | rd(hp.use_high_res_features); |
| 1605 | rd(hp.use_obj_ptrs_in_encoder); |
| 1606 | rd(hp.pred_obj_scores); |
| 1607 | rd(hp.use_multimask_token_for_obj_ptr); |
| 1608 | rd(hp.directly_add_no_mem_embed); |
| 1609 | rd(hp.non_overlap_masks_for_mem_enc); |
| 1610 | rd(hp.binarize_mask_from_pts); |
| 1611 | rd(hp.multimask_output_for_tracking); |
| 1612 | rd(hp.multimask_min_pt_num); |
| 1613 | rd(hp.multimask_max_pt_num); |
| 1614 | rd(hp.fixed_no_obj_ptr); |
| 1615 | rd(hp.iou_prediction_use_sigmoid); |
| 1616 | rd(hp.use_mask_input_as_output); |
| 1617 | rd(hp.multimask_output_in_sam); |
| 1618 | rd(hp.is_sam2_1); |
| 1619 | |
| 1620 | hp.backbone_type = backbone_type; |
| 1621 | if (backbone_type == 2) { |
| 1622 | // EdgeTAM: read extended hparams |
| 1623 | if (!edgetam_load_extra_hparams(fin, hp)) return false; |
| 1624 | hp.model_type = SAM3_MODEL_EDGETAM; |
| 1625 | } else { |
no test coverage detected