pub(crate) mod types;
pub(super) mod accumulate;
mod calibration;
mod compare;
mod confusion;
mod diagnostics;
mod evaluate;
pub mod expand;
mod iou;
mod results;
pub mod slice;
mod summarize;
mod tide;
pub use calibration::{CalibrationBin, CalibrationResult};
pub use compare::{BootstrapCI, CategoryDelta, CompareOpts, ComparisonResult, compare};
pub use diagnostics::{
AnnotationIndex, DtStatus, ErrorProfile, GtStatus, ImageDiagnostics, ImageSummary, LabelError,
LabelErrorType,
};
pub use results::EvalResults;
pub use slice::{SliceResult, SlicedResults};
pub use types::{AccumulatedEval, ConfusionMatrix, EvalImg, EvalShape, TideErrors};
use std::collections::HashMap;
use crate::coco::COCO;
use crate::hierarchy::Hierarchy;
use crate::params::{IouType, Params};
use types::FreqGroups;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EvalMode {
Coco,
Lvis,
OpenImages,
}
pub struct COCOeval {
pub coco_gt: COCO,
pub coco_dt: COCO,
pub params: Params,
pub(crate) eval_imgs: Vec<Option<EvalImg>>,
ious: HashMap<(u64, u64), types::IouMatrix>,
pub(crate) eval: Option<AccumulatedEval>,
pub(crate) stats: Option<Vec<f64>>,
pub eval_mode: EvalMode,
freq_groups: FreqGroups,
pub hierarchy: Option<Hierarchy>,
}
impl COCOeval {
pub fn new(coco_gt: COCO, coco_dt: COCO, iou_type: IouType) -> Self {
COCOeval {
coco_gt,
coco_dt,
params: Params::new(iou_type),
eval_imgs: Vec::new(),
ious: HashMap::new(),
eval: None,
stats: None,
eval_mode: EvalMode::Coco,
freq_groups: FreqGroups::default(),
hierarchy: None,
}
}
pub fn eval_imgs(&self) -> &[Option<EvalImg>] {
&self.eval_imgs
}
pub fn accumulated(&self) -> Option<&AccumulatedEval> {
self.eval.as_ref()
}
pub fn stats(&self) -> Option<&[f64]> {
self.stats.as_deref()
}
pub fn new_lvis(coco_gt: COCO, coco_dt: COCO, iou_type: IouType) -> Self {
let mut params = Params::new(iou_type);
params.max_dets = vec![300];
COCOeval {
coco_gt,
coco_dt,
params,
eval_imgs: Vec::new(),
ious: HashMap::new(),
eval: None,
stats: None,
eval_mode: EvalMode::Lvis,
freq_groups: FreqGroups::default(),
hierarchy: None,
}
}
pub fn new_oid(coco_gt: COCO, coco_dt: COCO, hierarchy: Option<Hierarchy>) -> Self {
let mut params = Params::new(IouType::Bbox);
params.iou_thrs = vec![0.5];
params.area_ranges = vec![crate::AreaRange {
label: "all".to_string(),
range: [0.0, 1e10],
}];
params.max_dets = vec![100];
COCOeval {
coco_gt,
coco_dt,
params,
eval_imgs: Vec::new(),
ious: HashMap::new(),
eval: None,
stats: None,
eval_mode: EvalMode::OpenImages,
freq_groups: FreqGroups::default(),
hierarchy,
}
}
}