pub struct SamEncoder<B: Backend> { /* private fields */ }Expand description
SAM vision encoder for the DeepSeek-OCR DeepEncoder architecture.
Implements the complete SAM encoding pipeline:
- Patch embedding: Image → patches
- Position embedding: Add learned position encodings
- Transformer blocks: Window/global attention processing
- Neck: Project to output channels
- Compression: 16× spatial reduction via convolutional layers
§Compression Pipeline
For a 1024×1024 image with 16×16 patches:
- Input:
[B, 3, 1024, 1024] - After patch embed:
[B, 768, 64, 64](1024/16 = 64) - After transformers:
[B, 768, 64, 64] - After neck:
[B, 256, 64, 64] - After comp1:
[B, 512, 32, 32](stride=2) - After comp2:
[B, 1024, 16, 16](stride=2) - Result: 16× compression (64² → 16² tokens)
Implementations§
Source§impl<B: Backend> SamEncoder<B>
impl<B: Backend> SamEncoder<B>
Sourcepub fn forward(&self, x: Tensor<B, 4>) -> Tensor<B, 4>
pub fn forward(&self, x: Tensor<B, 4>) -> Tensor<B, 4>
Encodes an image into compressed vision features.
§Arguments
x- Input image tensor
§Shape
- Input:
[B, 3, H, W] - Output:
[B, 1024, H/P/4, W/P/4]where P is patch_size
For default settings (patch_size=16, 16× compression):
- 1024×1024 image →
[B, 1024, 16, 16](256 tokens) - 512×512 image →
[B, 1024, 8, 8](64 tokens)
§Example
ⓘ
let image = Tensor::zeros(, &device);[1]
let features = encoder.forward(image);
// Shape: = 256 vision tokens[2][1]Trait Implementations§
Source§impl<B> AutodiffModule<B> for SamEncoder<B>
impl<B> AutodiffModule<B> for SamEncoder<B>
Source§type InnerModule = SamEncoder<<B as AutodiffBackend>::InnerBackend>
type InnerModule = SamEncoder<<B as AutodiffBackend>::InnerBackend>
Inner module without auto-differentiation.
Source§fn valid(&self) -> Self::InnerModule
fn valid(&self) -> Self::InnerModule
Get the same module, but on the inner backend without auto-differentiation.
Source§impl<B: Backend> Clone for SamEncoder<B>
impl<B: Backend> Clone for SamEncoder<B>
Source§impl<B: Backend> Display for SamEncoder<B>
impl<B: Backend> Display for SamEncoder<B>
Source§impl<B: Backend> Module<B> for SamEncoder<B>
impl<B: Backend> Module<B> for SamEncoder<B>
Source§type Record = SamEncoderRecord<B>
type Record = SamEncoderRecord<B>
Type to save and load the module.
Source§fn load_record(self, record: Self::Record) -> Self
fn load_record(self, record: Self::Record) -> Self
Load the module state from a record.
Source§fn into_record(self) -> Self::Record
fn into_record(self) -> Self::Record
Convert the module into a record containing the state.
Source§fn num_params(&self) -> usize
fn num_params(&self) -> usize
Get the number of parameters the module has, including all of its sub-modules.
Source§fn visit<Visitor: ModuleVisitor<B>>(&self, visitor: &mut Visitor)
fn visit<Visitor: ModuleVisitor<B>>(&self, visitor: &mut Visitor)
Visit each tensor parameter in the module with a visitor.
Source§fn map<Mapper: ModuleMapper<B>>(self, mapper: &mut Mapper) -> Self
fn map<Mapper: ModuleMapper<B>>(self, mapper: &mut Mapper) -> Self
Map each tensor parameter in the module with a mapper.
Source§fn collect_devices(&self, devices: Devices<B>) -> Devices<B>
fn collect_devices(&self, devices: Devices<B>) -> Devices<B>
Return all the devices found in the underneath module tree added to the given vector
without duplicates.
Source§fn to_device(self, device: &B::Device) -> Self
fn to_device(self, device: &B::Device) -> Self
Move the module and all of its sub-modules to the given device. Read more
Source§fn fork(self, device: &B::Device) -> Self
fn fork(self, device: &B::Device) -> Self
Fork the module and all of its sub-modules to the given device. Read more
Source§fn devices(&self) -> Vec<<B as Backend>::Device>
fn devices(&self) -> Vec<<B as Backend>::Device>
Return all the devices found in the underneath module tree without duplicates.
Source§fn save_file<FR, PB>(
self,
file_path: PB,
recorder: &FR,
) -> Result<(), RecorderError>
fn save_file<FR, PB>( self, file_path: PB, recorder: &FR, ) -> Result<(), RecorderError>
Save the module to a file using the provided file recorder. Read more
Source§fn load_file<FR, PB>(
self,
file_path: PB,
recorder: &FR,
device: &<B as Backend>::Device,
) -> Result<Self, RecorderError>
fn load_file<FR, PB>( self, file_path: PB, recorder: &FR, device: &<B as Backend>::Device, ) -> Result<Self, RecorderError>
Load the module from a file using the provided file recorder. Read more
Source§fn quantize_weights(self, quantizer: &mut Quantizer) -> Self
fn quantize_weights(self, quantizer: &mut Quantizer) -> Self
Quantize the weights of the module.
Source§impl<B: Backend> ModuleDisplay for SamEncoder<B>
impl<B: Backend> ModuleDisplay for SamEncoder<B>
Source§fn format(&self, passed_settings: DisplaySettings) -> String
fn format(&self, passed_settings: DisplaySettings) -> String
Formats the module with provided display settings. Read more
Source§fn custom_settings(&self) -> Option<DisplaySettings>
fn custom_settings(&self) -> Option<DisplaySettings>
Custom display settings for the module. Read more
Auto Trait Implementations§
impl<B> !Freeze for SamEncoder<B>
impl<B> !RefUnwindSafe for SamEncoder<B>
impl<B> Send for SamEncoder<B>
impl<B> !Sync for SamEncoder<B>
impl<B> Unpin for SamEncoder<B>where
<B as Backend>::FloatTensorPrimitive: Unpin,
<B as Backend>::QuantizedTensorPrimitive: Unpin,
<B as Backend>::Device: Unpin,
impl<B> UnwindSafe for SamEncoder<B>where
<B as Backend>::FloatTensorPrimitive: UnwindSafe,
<B as Backend>::QuantizedTensorPrimitive: UnwindSafe,
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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