pub struct SynthSegParams {
pub version: SynthSegVersion,
pub crop: Option<usize>,
pub flip_averaging: bool,
pub topology_cleanup: bool,
pub sigma_smoothing: f64,
pub inference: SynthSegInference,
pub head_crop: Option<usize>,
pub posteriors: PosteriorPrecision,
}Expand description
SynthSeg inference parameters.
Fields§
§version: SynthSegVersionWhich generation of weights is being run — this selects the label table, so it must match
the .onnx being passed in.
crop: Option<usize>Optional cubic centre-crop, in voxels at 1 mm, applied before inference (rounded up to a
multiple of 32). None — the default, and the SynthSeg CLI’s — processes the whole
volume. Note that the CLI’s --crop help text claims a default of 192, but its argparse
default is in fact None; matching the CLI means cropping nothing.
flip_averaging: boolAverage the posteriors with a left-right flipped second pass (SynthSeg’s default).
Doubles inference time; --fast turns it off.
topology_cleanup: boolReset each topological class to its largest connected component (SynthSeg’s default).
--fast turns it off.
sigma_smoothing: f64Gaussian blur applied to the posteriors, in voxels (SynthSeg’s default is 0.5). Zero disables it.
inference: SynthSegInferenceWhole-volume (default, the CLI’s) or sliding-window inference.
head_crop: Option<usize>Crop the padded volume to the head before inference: the bounding box of the largest
connected region brighter than 10 % of the normalised intensity range, grown by this
many voxels on every side and rounded out to the pooling lattice. Everything outside it
is background. None (the default, and the CLI’s) runs on the whole padded volume.
It saves memory and time only where there is empty space around the head (wide-FOV
acquisitions, e.g. a 256³ field of view). When the head fills the field of view, as on
typical GRE and MP2RAGE head scans (and their neck), the box plus margin is the whole
padded volume and the run is identical to None, at no extra cost.
posteriors: PosteriorPrecisionHow the posteriors are stored (the default, single precision, is the CLI’s).
Implementations§
Source§impl SynthSegParams
impl SynthSegParams
Sourcepub fn fast() -> Self
pub fn fast() -> Self
SynthSeg’s --fast: no flip averaging and no topological cleanup. Roughly halves the
runtime for a small accuracy cost.
Sourcepub fn low_memory() -> Self
pub fn low_memory() -> Self
Memory-bounded setting for constrained hosts (e.g. 32-bit WASM): the defaults with
SynthSegInference::LOW_MEMORY windows, a 16-voxel head crop and half-precision
posteriors.
- The windows are what bring the network under a 4 GB heap; no whole-volume setting fits. 96³ rather than 128³ because 128³ fits only grids up to about 192×256×128.
- The head crop saves memory and time on wide-FOV scans and changes nothing (at no cost) when the head fills the field of view.
- Half-precision posteriors save 0.4 GB with no accuracy loss: peak WASM heap 2025 MB against 2418 MB at single precision on a 184×256×128 head, 2138 against 2634 MB on a 180×241×131 one.
It runs no slower than 96³ windows at a step of half a patch (the earlier browser
setting): both place the same number of windows on 192×256×128 and 192×256×160 grids,
and in back-to-back runs on those two grids it took 0.96–1.00× that setting’s time
natively (median of 3 pairs each, 1 and 8 threads) and 0.98–1.00× in a single-threaded
WASM build under Node (about 17 and 26 minutes). Converting half-precision values one
at a time had made it 1–6 % slower natively; see Posterior::load.
Trait Implementations§
Source§impl Clone for SynthSegParams
impl Clone for SynthSegParams
Source§fn clone(&self) -> SynthSegParams
fn clone(&self) -> SynthSegParams
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SynthSegParams
impl Debug for SynthSegParams
Source§impl Default for SynthSegParams
impl Default for SynthSegParams
Source§impl PartialEq for SynthSegParams
impl PartialEq for SynthSegParams
Source§impl Serialize for SynthSegParams
impl Serialize for SynthSegParams
impl StructuralPartialEq for SynthSegParams
Auto Trait Implementations§
impl Freeze for SynthSegParams
impl RefUnwindSafe for SynthSegParams
impl Send for SynthSegParams
impl Sync for SynthSegParams
impl Unpin for SynthSegParams
impl UnsafeUnpin for SynthSegParams
impl UnwindSafe for SynthSegParams
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<T> CloneAny for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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