pub struct CocoDetections { /* private fields */ }Expand description
COCO detections collection — flat storage plus (image, category)-
and per-image indices for the per-cell gather.
Implementations§
Source§impl CocoDetections
impl CocoDetections
Sourcepub fn from_json_bytes(bytes: &[u8]) -> Result<Self, EvalError>
pub fn from_json_bytes(bytes: &[u8]) -> Result<Self, EvalError>
Loads detections from the JSON array shape pycocotools’
loadRes consumes (a list of objects with image_id,
category_id, bbox, score, optional id).
iscrowd and area fields, if present, are silently dropped:
quirks E2/J4 force is_crowd=0 and quirk J3 derives
area from bbox.
Sourcepub fn from_inputs(inputs: Vec<DetectionInput>) -> Result<Self, EvalError>
pub fn from_inputs(inputs: Vec<DetectionInput>) -> Result<Self, EvalError>
Builds a CocoDetections from typed inputs. Auto-assigns ids
(quirk J1) for inputs that did not supply one, validates
finite scores, and derives areas (quirk J3).
Sourcepub fn from_records(records: Vec<CocoDetection>) -> Self
pub fn from_records(records: Vec<CocoDetection>) -> Self
Build from already-resolved records, preserving their ids and
fields verbatim. Used by the streaming evaluator to assemble a
CocoDetections view across batches at finalize/snapshot time
without re-running the auto-id and area-derivation logic in
Self::from_inputs.
Sourcepub fn detections(&self) -> &[CocoDetection]
pub fn detections(&self) -> &[CocoDetection]
Flat slice of every detection.
Sourcepub fn indices_for(&self, image: ImageId, cat: CategoryId) -> &[usize]
pub fn indices_for(&self, image: ImageId, cat: CategoryId) -> &[usize]
Indices into Self::detections for one (image, category)
cell. Empty slice when the cell is empty (no detections of that
category on that image).
Sourcepub fn indices_for_image(&self, image: ImageId) -> &[usize]
pub fn indices_for_image(&self, image: ImageId) -> &[usize]
Indices into Self::detections for every detection on an
image, regardless of category. Path used when useCats=false
(quirk L4).
Sourcepub fn lvis_trim(&self, max_dets: i64) -> CocoDetections
pub fn lvis_trim(&self, max_dets: i64) -> CocoDetections
LVIS per-image top-max_dets trim (quirk AC2 of ADR-0026).
Mirrors LVISResults.limit_dets_per_image at
lvis/results.py:73-84: groups detections by image_id,
sorts each group by score descending (stable — quirk
AC4), and keeps the top max_dets across all
categories combined. The cross-class consequence (quirk
AC3): 250 cat-A + 350 cat-B detections on one image trim
to 300 total, not 250 + min(350, 300).
max_dets < 0 (or i64::MIN) disables the trim entirely
(quirk AC5, mirroring the if max_dets >= 0 guard at
results.py:39-40). max_dets == 0 keeps zero detections —
edge case the upstream allows but isn’t useful in practice.
The output preserves DT ids and per-detection fields verbatim;
only the membership of the flat detections vector and the
per-cell index maps change. The original CocoDetections is
untouched (the inner Arc<Vec<CocoDetection>> is not shared
with the result — the trim copies the surviving entries into a
fresh allocation).
Within each image’s group, ties on score resolve in input
order: Rust’s slice::sort_by is stable, matching Python’s
sorted(_, reverse=True) Timsort behavior. The fact that the
matching path’s argsort_score_desc is also stable
(np.argsort(-scores, kind="mergesort"), AC4) is a separate
invariant — vernier’s parity claim covers both sites.
Trait Implementations§
Source§impl Clone for CocoDetections
impl Clone for CocoDetections
Source§fn clone(&self) -> CocoDetections
fn clone(&self) -> CocoDetections
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 CocoDetections
impl RefUnwindSafe for CocoDetections
impl Send for CocoDetections
impl Sync for CocoDetections
impl Unpin for CocoDetections
impl UnsafeUnpin for CocoDetections
impl UnwindSafe for CocoDetections
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.