pub struct Sam2FpnConfig {
pub d_model: usize,
pub backbone_channel_list: Vec<usize>,
pub fpn_top_down_levels: Vec<usize>,
pub interpolation_nearest: bool,
}Expand description
FPN neck configuration. Mirrors FpnNeck in the reference.
SAM 2’s neck takes the per-stage outputs from Hiera (finest → coarsest, i.e. stage 0..3) and runs a top-down pyramid:
- Each level gets a 1×1 lateral conv to
d_model=256. - Going coarse → fine, levels listed in
fpn_top_down_levelsalso receive a nearest-neighbour ×2 upsample of the next- coarser level summed in.
The published _b+ / _l configs use fpn_top_down_levels=[2, 3],
meaning only the two coarsest levels actually fuse with their
neighbours; the two finest levels are emitted as plain laterals.
Note on indexing: backbone_channel_list and fpn_top_down_levels
are stored coarse-to-fine (i.e. [stage3_dim, …, stage0_dim])
to match the reference YAML and let conv weight keys
(image_encoder.neck.convs.{n-i}…) line up 1:1 with the
checkpoint.
Fields§
§d_model: usize§backbone_channel_list: Vec<usize>Per-stage Hiera output channels, coarse → fine order:
[stage3_dim, stage2_dim, stage1_dim, stage0_dim].
fpn_top_down_levels: Vec<usize>Backbone stage indices (in the same coarse-to-fine ordering as
backbone_channel_list) that participate in the top-down sum.
[2, 3] in every published config, i.e. only the two coarsest
levels (note: indices into the reversed level enumeration the
reference uses — kept as-is here for checkpoint compatibility).
interpolation_nearest: boolInterpolation mode for the top-down upsample. Reference uses
"nearest", which we lower as cheap host-side replicate.
Implementations§
Source§impl Sam2FpnConfig
impl Sam2FpnConfig
pub fn for_hiera(cfg: &Sam2HieraConfig) -> Sam2FpnConfig
Trait Implementations§
Source§impl Clone for Sam2FpnConfig
impl Clone for Sam2FpnConfig
Source§fn clone(&self) -> Sam2FpnConfig
fn clone(&self) -> Sam2FpnConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for Sam2FpnConfig
impl RefUnwindSafe for Sam2FpnConfig
impl Send for Sam2FpnConfig
impl Sync for Sam2FpnConfig
impl Unpin for Sam2FpnConfig
impl UnsafeUnpin for Sam2FpnConfig
impl UnwindSafe for Sam2FpnConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more