[{"data":1,"prerenderedAt":612},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Fembedding_filters":328,"docyard:crossref-index":611},[4,8,38,44,48,122],{"title":5,"path":6,"stem":7},"Getting Started","\u002Fgetting-started","1.getting-started",{"title":9,"path":10,"stem":11,"children":12,"page":37},"Recipes","\u002Frecipes","2.recipes",[13,17,21,25,29,33],{"title":14,"path":15,"stem":16},"Recipe: two-stage cascade tracker","\u002Frecipes\u002Fcascade_tracker","2.recipes\u002Fcascade_tracker",{"title":18,"path":19,"stem":20},"Recipe: cosine appearance tracker","\u002Frecipes\u002Fcosine_tracker","2.recipes\u002Fcosine_tracker",{"title":22,"path":23,"stem":24},"Recipe: Kalman motion tracker","\u002Frecipes\u002Fkalman_motion_tracker","2.recipes\u002Fkalman_motion_tracker",{"title":26,"path":27,"stem":28},"Recipe: learned MOTR-style appearance tracker","\u002Frecipes\u002Flearned_motr_tracker","2.recipes\u002Flearned_motr_tracker",{"title":30,"path":31,"stem":32},"Recipe: overlap-IoU tracker (port of 1.x models.overlap)","\u002Frecipes\u002Foverlap_tracker","2.recipes\u002Foverlap_tracker",{"title":34,"path":35,"stem":36},"Recipe: SORT-style tracker on unitrack 2.0","\u002Frecipes\u002Fsort","2.recipes\u002Fsort",false,{"title":39,"path":40,"stem":41,"children":42},"API reference","\u002Fapi","3.api\u002Findex",[43],{"title":39,"path":40,"stem":41},{"title":45,"path":46,"stem":47},"Migrating from 1.x to 2.0","\u002Fmigration","4.migration",{"title":49,"path":50,"stem":51,"children":52,"page":37},"Notebooks","\u002Fnotebooks","5.notebooks",[53,84,88],{"title":54,"path":55,"stem":56,"children":57},"Embedding \u002F appearance filters","\u002Fnotebooks\u002Fembedding_filters","5.notebooks\u002Fembedding_filters\u002Findex",[58,59,64,68,72,76,80],{"title":54,"path":55,"stem":56},{"title":60,"path":61,"stem":62,"icon":63},"Embedding filters 1 — Exponential moving average (EMA)","\u002Fnotebooks\u002Fembedding_filters\u002Fema","5.notebooks\u002Fembedding_filters\u002F1.ema","i-lucide-notebook",{"title":65,"path":66,"stem":67,"icon":63},"Embedding filters 2 — Diagonal Kalman","\u002Fnotebooks\u002Fembedding_filters\u002Fkalman_diagonal","5.notebooks\u002Fembedding_filters\u002F2.kalman_diagonal",{"title":69,"path":70,"stem":71,"icon":63},"Embedding filters 3 — von Mises-Fisher (directional)","\u002Fnotebooks\u002Fembedding_filters\u002Fvmf_directional","5.notebooks\u002Fembedding_filters\u002F3.vmf_directional",{"title":73,"path":74,"stem":75,"icon":63},"Embedding filters 4 — Ensemble Kalman & information filters","\u002Fnotebooks\u002Fembedding_filters\u002Fenkf_information","5.notebooks\u002Fembedding_filters\u002F4.enkf_information",{"title":77,"path":78,"stem":79,"icon":63},"Embedding filters 5 — Memory bank & learned propagation","\u002Fnotebooks\u002Fembedding_filters\u002Fgallery_and_learned","5.notebooks\u002Fembedding_filters\u002F5.gallery_and_learned",{"title":81,"path":82,"stem":83,"icon":63},"Embedding filters 6 — summary & benchmark","\u002Fnotebooks\u002Fembedding_filters\u002Fsummary_benchmark","5.notebooks\u002Fembedding_filters\u002F6.summary_benchmark",{"title":85,"path":86,"stem":87,"icon":63},"Kalman filters for motion prediction in tracking","\u002Fnotebooks\u002Fkalman","5.notebooks\u002Fkalman",{"title":89,"path":90,"stem":91,"children":92},"Tutorial notebooks","\u002Fnotebooks\u002Ftutorials","5.notebooks\u002Ftutorials\u002Findex",[93,94,98,102,106,110,114,118],{"title":89,"path":90,"stem":91},{"title":95,"path":96,"stem":97,"icon":63},"1. Quickstart — your first tracker","\u002Fnotebooks\u002Ftutorials\u002Fquickstart","5.notebooks\u002Ftutorials\u002F1.quickstart",{"title":99,"path":100,"stem":101,"icon":63},"2. The data model — typed records that flow through a tracker","\u002Fnotebooks\u002Ftutorials\u002Fdata_model","5.notebooks\u002Ftutorials\u002F2.data_model",{"title":103,"path":104,"stem":105,"icon":63},"3. The cost & gate zoos","\u002Fnotebooks\u002Ftutorials\u002Fcosts_and_gates","5.notebooks\u002Ftutorials\u002F3.costs_and_gates",{"title":107,"path":108,"stem":109,"icon":63},"4. The composable pipeline tree","\u002Fnotebooks\u002Ftutorials\u002Fpipeline_tree","5.notebooks\u002Ftutorials\u002F4.pipeline_tree",{"title":111,"path":112,"stem":113,"icon":63},"5. State evolution and lifecycle","\u002Fnotebooks\u002Ftutorials\u002Fstates_and_lifecycle","5.notebooks\u002Ftutorials\u002F5.states_and_lifecycle",{"title":115,"path":116,"stem":117,"icon":63},"6. End-to-end: K=2 cascaded and parallel fusion","\u002Fnotebooks\u002Ftutorials\u002Fcascaded_and_parallel","5.notebooks\u002Ftutorials\u002F6.cascaded_and_parallel",{"title":119,"path":120,"stem":121,"icon":63},"7. Migration & new possibilities — driven by a real detector","\u002Fnotebooks\u002Ftutorials\u002Fmigration","5.notebooks\u002Ftutorials\u002F7.migration",{"title":123,"path":124,"stem":125},"Unitrack","\u002F","index",[127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,249,252,255,258,261,263,266,269,272,274,277,280,282,285,288,290,293,296,299,302,305,308,311,313,315,318,320,323,326],{"title":128,"path":129},"assignment","\u002Fapi\u002Fassignment",{"title":131,"path":132},"associate","\u002Fapi\u002Fassignment\u002Fassociate",{"title":134,"path":135},"clip_associate","\u002Fapi\u002Fassignment\u002Fclip_associate",{"title":137,"path":138},"lap","\u002Fapi\u002Fassignment\u002Flap",{"title":140,"path":141},"lapjv","\u002Fapi\u002Fassignment\u002Flapjv",{"title":143,"path":144},"benchmarks","\u002Fapi\u002Fbenchmarks",{"title":146,"path":147},"hota","\u002Fapi\u002Fbenchmarks\u002Fhota",{"title":149,"path":150},"datasets","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fdatasets",{"title":152,"path":153},"learned_modules","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Flearned_modules",{"title":155,"path":156},"metric","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fmetric",{"title":158,"path":159},"models","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fmodels",{"title":161,"path":162},"protocols","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fprotocols",{"title":164,"path":165},"render","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Frender",{"title":167,"path":168},"report","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Freport",{"title":170,"path":171},"runner","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Frunner",{"title":173,"path":174},"tracker","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftracker",{"title":176,"path":177},"train_learned","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftrain_learned",{"title":179,"path":180},"types","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftypes",{"title":182,"path":183},"costs","\u002Fapi\u002Fcosts",{"title":185,"path":186},"combinators","\u002Fapi\u002Fcosts\u002Fcombinators",{"title":188,"path":189},"distance","\u002Fapi\u002Fcosts\u002Fdistance",{"title":191,"path":192},"gallery","\u002Fapi\u002Fcosts\u002Fgallery",{"title":194,"path":195},"overlap","\u002Fapi\u002Fcosts\u002Foverlap",{"title":197,"path":198},"data","\u002Fapi\u002Fdata",{"title":200,"path":201},"clip","\u002Fapi\u002Fdata\u002Fclip",{"title":203,"path":204},"cost","\u002Fapi\u002Fdata\u002Fcost",{"title":206,"path":207},"detections","\u002Fapi\u002Fdata\u002Fdetections",{"title":209,"path":210},"frame","\u002Fapi\u002Fdata\u002Fframe",{"title":212,"path":213},"gate","\u002Fapi\u002Fdata\u002Fgate",{"title":215,"path":216},"match","\u002Fapi\u002Fdata\u002Fmatch",{"title":218,"path":219},"tensor_spec","\u002Fapi\u002Fdata\u002Ftensor_spec",{"title":221,"path":222},"tracklets","\u002Fapi\u002Fdata\u002Ftracklets",{"title":224,"path":225},"gates","\u002Fapi\u002Fgates",{"title":227,"path":228},"motion","\u002Fapi\u002Fgates\u002Fmotion",{"title":230,"path":231},"simple","\u002Fapi\u002Fgates\u002Fsimple",{"title":233,"path":234},"soft","\u002Fapi\u002Fgates\u002Fsoft",{"title":236,"path":237},"spatial","\u002Fapi\u002Fgates\u002Fspatial",{"title":239,"path":240},"lifecycle","\u002Fapi\u002Flifecycle",{"title":242,"path":243},"filters","\u002Fapi\u002Flifecycle\u002Ffilters",{"title":245,"path":246},"policies","\u002Fapi\u002Flifecycle\u002Fpolicies",{"title":233,"path":248},"\u002Fapi\u002Flifecycle\u002Fsoft",{"title":250,"path":251},"status","\u002Fapi\u002Flifecycle\u002Fstatus",{"title":253,"path":254},"visibility","\u002Fapi\u002Flifecycle\u002Fvisibility",{"title":256,"path":257},"pipeline","\u002Fapi\u002Fpipeline",{"title":259,"path":260},"base","\u002Fapi\u002Fpipeline\u002Fbase",{"title":185,"path":262},"\u002Fapi\u002Fpipeline\u002Fcombinators",{"title":264,"path":265},"diff","\u002Fapi\u002Fpipeline\u002Fdiff",{"title":267,"path":268},"merge","\u002Fapi\u002Fpipeline\u002Fmerge",{"title":270,"path":271},"states","\u002Fapi\u002Fstates",{"title":259,"path":273},"\u002Fapi\u002Fstates\u002Fbase",{"title":275,"path":276},"directional","\u002Fapi\u002Fstates\u002Fdirectional",{"title":278,"path":279},"ema","\u002Fapi\u002Fstates\u002Fema",{"title":191,"path":281},"\u002Fapi\u002Fstates\u002Fgallery",{"title":283,"path":284},"identity","\u002Fapi\u002Fstates\u002Fidentity",{"title":286,"path":287},"kalman","\u002Fapi\u002Fstates\u002Fkalman",{"title":259,"path":289},"\u002Fapi\u002Fstates\u002Fkalman\u002Fbase",{"title":291,"path":292},"bbox","\u002Fapi\u002Fstates\u002Fkalman\u002Fbbox",{"title":294,"path":295},"centroid","\u002Fapi\u002Fstates\u002Fkalman\u002Fcentroid",{"title":297,"path":298},"ensemble","\u002Fapi\u002Fstates\u002Fkalman\u002Fensemble",{"title":300,"path":301},"information","\u002Fapi\u002Fstates\u002Fkalman\u002Finformation",{"title":303,"path":304},"project","\u002Fapi\u002Fstates\u002Fkalman\u002Fproject",{"title":306,"path":307},"update","\u002Fapi\u002Fstates\u002Fkalman\u002Fupdate",{"title":309,"path":310},"learned","\u002Fapi\u002Fstates\u002Flearned",{"title":233,"path":312},"\u002Fapi\u002Fstates\u002Fsoft",{"title":173,"path":314},"\u002Fapi\u002Ftracker",{"title":316,"path":317},"batch","\u002Fapi\u002Ftracker\u002Fbatch",{"title":200,"path":319},"\u002Fapi\u002Ftracker\u002Fclip",{"title":321,"path":322},"memory","\u002Fapi\u002Ftracker\u002Fmemory",{"title":324,"path":325},"multistream","\u002Fapi\u002Ftracker\u002Fmultistream",{"title":173,"path":327},"\u002Fapi\u002Ftracker\u002Ftracker",{"id":329,"title":54,"body":330,"description":605,"extension":606,"meta":607,"navigation":608,"path":55,"seo":609,"stem":56,"__hash__":610},"content\u002F5.notebooks\u002Fembedding_filters\u002Findex.md",{"type":331,"value":332,"toc":599},"minimark",[333,337,346,358,520,525,584],[334,335,54],"h1",{"id":336},"embedding-appearance-filters",[338,339,340,341,345],"p",{},"Recursive estimators for the appearance (ReID \u002F DETR query \u002F kernel)\nembedding a tracker carries per identity.\nA motion Kalman filter (see ",[342,343,344],"a",{"href":86},"Kalman intuition",")\nfits embeddings only awkwardly — they are high-dimensional,\nlive on the unit sphere, and have no motion model —\nso trackers use one of the estimators demonstrated here instead.",[338,347,348,349,357],{},"Each notebook drives a ",[350,351,352,353],"strong",{},"real ",[354,355,356],"code",{},"unitrack.Tracker",",\nso it doubles as proof the library supports the method.",[359,360,361,380],"table",{},[362,363,364],"thead",{},[365,366,367,371,374,377],"tr",{},[368,369,370],"th",{},"#",[368,372,373],{},"Notebook",[368,375,376],{},"Method",[368,378,379],{},"unitrack API",[381,382,383,406,431,449,474,501],"tbody",{},[365,384,385,389,394,397],{},[386,387,388],"td",{},"1",[386,390,391],{},[342,392,393],{"href":61},"EMA",[386,395,396],{},"Exponential moving average (steady-state scalar Kalman)",[386,398,399,402,403],{},[354,400,401],{},"EMAFuse",", ",[354,404,405],{},"EMATrack",[365,407,408,411,416,423],{},[386,409,410],{},"2",[386,412,413],{},[342,414,415],{"href":66},"Diagonal Kalman",[386,417,418,419,422],{},"Diagonal random-walk Kalman (adaptive, ",[354,420,421],{},"O(D)",")",[386,424,425,402,428],{},[354,426,427],{},"KalmanLinear",[354,429,430],{},"KalmanUpdate",[365,432,433,436,441,444],{},[386,434,435],{},"3",[386,437,438],{},[342,439,440],{"href":70},"vMF directional",[386,442,443],{},"von Mises-Fisher directional recursive Bayes (on the sphere)",[386,445,446],{},[354,447,448],{},"vmf_state_entries",[365,450,451,454,459,466],{},[386,452,453],{},"4",[386,455,456],{},[342,457,458],{"href":74},"EnKF \u002F information filter",[386,460,461,462,465],{},"Ensemble Kalman (high-",[354,463,464],{},"D",") + information filter (exact dual)",[386,467,468,402,471],{},[354,469,470],{},"enkf_state_entries",[354,472,473],{},"information_state_entries",[365,475,476,479,484,487],{},[386,477,478],{},"5",[386,480,481],{},[342,482,483],{"href":78},"Gallery and learned",[386,485,486],{},"Feature-bank gallery (DeepSORT\u002FMeMOT) + learned propagation (MOTR-style)",[386,488,489,402,492,402,495,402,498],{},[354,490,491],{},"gallery_state_entries",[354,493,494],{},"GalleryCost",[354,496,497],{},"LearnedProcess",[354,499,500],{},"LearnedObservation",[365,502,503,506,511,517],{},[386,504,505],{},"6",[386,507,508],{},[342,509,510],{"href":82},"Summary benchmark",[386,512,513,514,516],{},"All six side-by-side: FLOPs, speed vs ",[354,515,464],{},", accuracy, effort, fail\u002Fsuccess",[386,518,519],{},"benchmark of all of the above",[521,522,524],"h2",{"id":523},"which-one","Which one?",[526,527,528,534,539,554,563,572,578],"ul",{},[529,530,531,533],"li",{},[350,532,393],{}," — cheap, robust default; no uncertainty.",[529,535,536,538],{},[350,537,415],{}," — EMA cost with adaptive, measurable per-dimension uncertainty.",[529,540,541,544,545,549,550,553],{},[350,542,543],{},"vMF"," — the ",[546,547,548],"em",{},"right"," geometry for cosine-normalised embeddings;\nestimate stays on the sphere and ",[354,551,552],{},"kappa"," is a directional confidence.",[529,555,556,559,560,562],{},[350,557,558],{},"Information filter"," — exact Gaussian posterior, additive fusion of many cues (moderate ",[354,561,464],{},").",[529,564,565,568,569,571],{},[350,566,567],{},"EnKF"," — covariance information when ",[354,570,464],{}," is too large for a dense matrix.",[529,573,574,577],{},[350,575,576],{},"Gallery"," — memory across appearance change \u002F re-ID gaps.",[529,579,580,583],{},[350,581,582],{},"Learned propagation"," — the expressive, differentiable, MOTR-style option.",[338,585,586,587,590,591,594,595,598],{},"Notebooks are generated from ",[354,588,589],{},"_build.py"," in this directory;\nedit the ",[354,592,593],{},"NB_*"," cell lists there, re-run it, then execute the\nnotebook to refresh outputs. Edit the lists, not the ",[354,596,597],{},".ipynb","\nfiles directly — regenerating overwrites them, outputs included.",{"title":600,"searchDepth":601,"depth":601,"links":602},"",3,[603],{"id":523,"depth":604,"text":524},2,"Recursive estimators for the appearance (ReID \u002F DETR query \u002F kernel)\nembedding a tracker carries per identity.\nA motion Kalman filter (see Kalman intuition)\nfits embeddings only awkwardly — they are high-dimensional,\nlive on the unit sphere, and have no motion model —\nso trackers use one of the estimators demonstrated here instead.","md",{},true,{"title":54,"description":605},"g6FYOAR9KyYK8v91Tab-HYQQ4JZtAYKCOGptfGHs7Ic",{},1785139881971]