[{"data":1,"prerenderedAt":3270},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Fembedding_filters\u002Fema":328,"docyard:crossref-index":3269},[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":60,"body":330,"description":3263,"extension":3264,"meta":3265,"navigation":3266,"path":61,"seo":3267,"stem":62,"__hash__":3268},"content\u002F5.notebooks\u002Fembedding_filters\u002F1.ema.md",{"type":331,"value":332,"toc":3260},"minimark",[333,337,354,377,1761,1766,2101,2857,2863,2866,2871,2882,3239,3244,3256],[334,335,60],"h1",{"id":336},"embedding-filters-1-exponential-moving-average-ema",[338,339,340,341,345,346,349,350,353],"p",{},"The workhorse for appearance\u002FReID embeddings. An EMA blend\n",[342,343,344],"code",{},"e \u003C- rho * e + (1 - rho) * z"," is a steady-state scalar Kalman\nfilter: the gain ",[342,347,348],{},"(1 - rho)"," is constant rather than derived from a\ncovariance. It is cheap (",[342,351,352],{},"O(D)","), stable, and is what DeepSORT,\nFairMOT and BoT-SORT use to smooth the per-track feature.",[338,355,356,357,360,361,364,365,368,369,372,373,376],{},"unitrack ships it as ",[342,358,359],{},"EMAFuse"," (the blend, an ",[342,362,363],{},"Observation",") paired\nwith ",[342,366,367],{},"EMATrack"," (a no-op ",[342,370,371],{},"Process","). Here we plug it into a real\n",[342,374,375],{},"Tracker"," and watch it denoise a drifting embedding.",[378,379,384],"pre",{"className":380,"code":381,"language":382,"meta":383,"style":383},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import torch\nimport matplotlib.pyplot as plt\n\nimport unitrack\nfrom unitrack.assignment import Associate, Jonker\nfrom unitrack.costs import Cosine\nfrom unitrack.data import Detections, FrameContext, TensorSpec\nfrom unitrack.lifecycle import IncludeAll, NoLifecycle\nfrom unitrack.pipeline import Pipe\n\ntorch.manual_seed(0)\n\nD = 16          # embedding dimensionality (256+ in practice; 16 plots fast)\nT = 44          # frames\n\ndef make_clip(noise=0.15, seed=0, switch=None):\n    \"\"\"\n    A unit embedding that rotates slowly in the (e0, e1) plane plus\n    per-frame noise in all D dims. Rotating in a known plane means\n    projecting onto dims (0, 1) shows the true path as a circle arc.\n    `switch` optionally rotates the plane mid-clip (an appearance change).\n    \"\"\"\n    g = torch.Generator().manual_seed(seed)\n    t = torch.arange(T).float()\n    theta = 0.10 * t\n    truth = torch.zeros(T, D)\n    truth[:, 0] = torch.cos(theta)\n    truth[:, 1] = torch.sin(theta)\n    if switch is not None:\n        # after `switch`, swap appearance into the (e2, e3) plane.\n        truth[switch:, :] = 0.0\n        truth[switch:, 2] = torch.cos(theta[switch:])\n        truth[switch:, 3] = torch.sin(theta[switch:])\n    obs = truth + noise * torch.randn(T, D, generator=g)\n    obs = torch.nn.functional.normalize(obs, dim=-1)\n    dets = [Detections(index=torch.tensor([0]), emb=obs[k:k + 1].clone(),\n                       batch_size=[1]) for k in range(T)]\n    return t, truth, obs, dets\n\ndef run(tracker, dets, fields=(\"emb\",)):\n    \"\"\"Run a single-object clip through a real Tracker; collect snapshot fields.\"\"\"\n    ms = unitrack.MultiStream(tracker)\n    rec = {f: [] for f in fields}\n    for k, d in enumerate(dets):\n        ctx = FrameContext.make(frame_idx=k, delta=1.0, fps=1.0, stream_key=0)\n        res = ms.step(stream_key=0, detections=d, ctx=ctx)\n        for f in fields:\n            rec[f].append(getattr(res.snapshot, f)[0].clone())\n    return {f: torch.stack(v) for f, v in rec.items()}\n\ndef cos_to_truth(est, truth):\n    e = torch.nn.functional.normalize(est, dim=-1)\n    u = torch.nn.functional.normalize(truth, dim=-1)\n    return (e * u).sum(-1)\n\nt, truth, obs, dets = make_clip()\nprint(f\"clip: {T} frames, D={D}; raw-detection mean cosine-to-truth \"\n      f\"= {cos_to_truth(obs, truth).mean():.3f}\")\n\n","python","",[342,385,386,399,421,428,436,461,478,505,527,544,549,571,576,593,607,612,657,664,671,677,683,689,694,722,751,768,794,826,853,874,880,903,938,972,1020,1062,1128,1163,1187,1192,1231,1243,1264,1295,1321,1375,1422,1436,1483,1531,1536,1555,1591,1628,1658,1663,1688,1722],{"__ignoreMap":383},[387,388,391,395],"span",{"class":389,"line":390},"line",1,[387,392,394],{"class":393},"sVHd0","import",[387,396,398],{"class":397},"su5hD"," torch\n",[387,400,402,404,407,411,415,418],{"class":389,"line":401},2,[387,403,394],{"class":393},[387,405,406],{"class":397}," matplotlib",[387,408,410],{"class":409},"sP7_E",".",[387,412,414],{"class":413},"skxfh","pyplot",[387,416,417],{"class":393}," as",[387,419,420],{"class":397}," plt\n",[387,422,424],{"class":389,"line":423},3,[387,425,427],{"emptyLinePlaceholder":426},true,"\n",[387,429,431,433],{"class":389,"line":430},4,[387,432,394],{"class":393},[387,434,435],{"class":397}," unitrack\n",[387,437,439,442,445,447,450,452,455,458],{"class":389,"line":438},5,[387,440,441],{"class":393},"from",[387,443,444],{"class":397}," unitrack",[387,446,410],{"class":409},[387,448,449],{"class":397},"assignment ",[387,451,394],{"class":393},[387,453,454],{"class":397}," Associate",[387,456,457],{"class":409},",",[387,459,460],{"class":397}," Jonker\n",[387,462,464,466,468,470,473,475],{"class":389,"line":463},6,[387,465,441],{"class":393},[387,467,444],{"class":397},[387,469,410],{"class":409},[387,471,472],{"class":397},"costs ",[387,474,394],{"class":393},[387,476,477],{"class":397}," Cosine\n",[387,479,481,483,485,487,490,492,495,497,500,502],{"class":389,"line":480},7,[387,482,441],{"class":393},[387,484,444],{"class":397},[387,486,410],{"class":409},[387,488,489],{"class":397},"data ",[387,491,394],{"class":393},[387,493,494],{"class":397}," Detections",[387,496,457],{"class":409},[387,498,499],{"class":397}," FrameContext",[387,501,457],{"class":409},[387,503,504],{"class":397}," TensorSpec\n",[387,506,508,510,512,514,517,519,522,524],{"class":389,"line":507},8,[387,509,441],{"class":393},[387,511,444],{"class":397},[387,513,410],{"class":409},[387,515,516],{"class":397},"lifecycle ",[387,518,394],{"class":393},[387,520,521],{"class":397}," IncludeAll",[387,523,457],{"class":409},[387,525,526],{"class":397}," NoLifecycle\n",[387,528,530,532,534,536,539,541],{"class":389,"line":529},9,[387,531,441],{"class":393},[387,533,444],{"class":397},[387,535,410],{"class":409},[387,537,538],{"class":397},"pipeline ",[387,540,394],{"class":393},[387,542,543],{"class":397}," Pipe\n",[387,545,547],{"class":389,"line":546},10,[387,548,427],{"emptyLinePlaceholder":426},[387,550,552,555,557,561,564,568],{"class":389,"line":551},11,[387,553,554],{"class":397},"torch",[387,556,410],{"class":409},[387,558,560],{"class":559},"slqww","manual_seed",[387,562,563],{"class":409},"(",[387,565,567],{"class":566},"srdBf","0",[387,569,570],{"class":409},")\n",[387,572,574],{"class":389,"line":573},12,[387,575,427],{"emptyLinePlaceholder":426},[387,577,579,582,586,589],{"class":389,"line":578},13,[387,580,581],{"class":397},"D ",[387,583,585],{"class":584},"smGrS","=",[387,587,588],{"class":566}," 16",[387,590,592],{"class":591},"sutJx","          # embedding dimensionality (256+ in practice; 16 plots fast)\n",[387,594,596,599,601,604],{"class":389,"line":595},14,[387,597,598],{"class":397},"T ",[387,600,585],{"class":584},[387,602,603],{"class":566}," 44",[387,605,606],{"class":591},"          # frames\n",[387,608,610],{"class":389,"line":609},15,[387,611,427],{"emptyLinePlaceholder":426},[387,613,615,619,623,625,629,631,634,636,639,641,643,645,648,650,654],{"class":389,"line":614},16,[387,616,618],{"class":617},"sbsja","def",[387,620,622],{"class":621},"sGLFI"," make_clip",[387,624,563],{"class":409},[387,626,628],{"class":627},"sFwrP","noise",[387,630,585],{"class":584},[387,632,633],{"class":566},"0.15",[387,635,457],{"class":409},[387,637,638],{"class":627}," seed",[387,640,585],{"class":584},[387,642,567],{"class":566},[387,644,457],{"class":409},[387,646,647],{"class":627}," switch",[387,649,585],{"class":584},[387,651,653],{"class":652},"s39Yj","None",[387,655,656],{"class":409},"):\n",[387,658,660],{"class":389,"line":659},17,[387,661,663],{"class":662},"s2W-s","    \"\"\"\n",[387,665,667],{"class":389,"line":666},18,[387,668,670],{"class":669},"sithA","    A unit embedding that rotates slowly in the (e0, e1) plane plus\n",[387,672,674],{"class":389,"line":673},19,[387,675,676],{"class":669},"    per-frame noise in all D dims. Rotating in a known plane means\n",[387,678,680],{"class":389,"line":679},20,[387,681,682],{"class":669},"    projecting onto dims (0, 1) shows the true path as a circle arc.\n",[387,684,686],{"class":389,"line":685},21,[387,687,688],{"class":669},"    `switch` optionally rotates the plane mid-clip (an appearance change).\n",[387,690,692],{"class":389,"line":691},22,[387,693,663],{"class":662},[387,695,697,700,702,705,707,710,713,715,717,720],{"class":389,"line":696},23,[387,698,699],{"class":397},"    g ",[387,701,585],{"class":584},[387,703,704],{"class":397}," torch",[387,706,410],{"class":409},[387,708,709],{"class":559},"Generator",[387,711,712],{"class":409},"().",[387,714,560],{"class":559},[387,716,563],{"class":409},[387,718,719],{"class":559},"seed",[387,721,570],{"class":409},[387,723,725,728,730,732,734,737,739,742,745,748],{"class":389,"line":724},24,[387,726,727],{"class":397},"    t ",[387,729,585],{"class":584},[387,731,704],{"class":397},[387,733,410],{"class":409},[387,735,736],{"class":559},"arange",[387,738,563],{"class":409},[387,740,741],{"class":559},"T",[387,743,744],{"class":409},").",[387,746,747],{"class":559},"float",[387,749,750],{"class":409},"()\n",[387,752,754,757,759,762,765],{"class":389,"line":753},25,[387,755,756],{"class":397},"    theta ",[387,758,585],{"class":584},[387,760,761],{"class":566}," 0.10",[387,763,764],{"class":584}," *",[387,766,767],{"class":397}," t\n",[387,769,771,774,776,778,780,783,785,787,789,792],{"class":389,"line":770},26,[387,772,773],{"class":397},"    truth ",[387,775,585],{"class":584},[387,777,704],{"class":397},[387,779,410],{"class":409},[387,781,782],{"class":559},"zeros",[387,784,563],{"class":409},[387,786,741],{"class":559},[387,788,457],{"class":409},[387,790,791],{"class":559}," D",[387,793,570],{"class":409},[387,795,797,800,803,806,809,812,814,816,819,821,824],{"class":389,"line":796},27,[387,798,799],{"class":397},"    truth",[387,801,802],{"class":409},"[:,",[387,804,805],{"class":566}," 0",[387,807,808],{"class":409},"]",[387,810,811],{"class":584}," =",[387,813,704],{"class":397},[387,815,410],{"class":409},[387,817,818],{"class":559},"cos",[387,820,563],{"class":409},[387,822,823],{"class":559},"theta",[387,825,570],{"class":409},[387,827,829,831,833,836,838,840,842,844,847,849,851],{"class":389,"line":828},28,[387,830,799],{"class":397},[387,832,802],{"class":409},[387,834,835],{"class":566}," 1",[387,837,808],{"class":409},[387,839,811],{"class":584},[387,841,704],{"class":397},[387,843,410],{"class":409},[387,845,846],{"class":559},"sin",[387,848,563],{"class":409},[387,850,823],{"class":559},[387,852,570],{"class":409},[387,854,856,859,862,865,868,871],{"class":389,"line":855},29,[387,857,858],{"class":393},"    if",[387,860,861],{"class":397}," switch ",[387,863,864],{"class":584},"is",[387,866,867],{"class":584}," not",[387,869,870],{"class":652}," None",[387,872,873],{"class":409},":\n",[387,875,877],{"class":389,"line":876},30,[387,878,879],{"class":591},"        # after `switch`, swap appearance into the (e2, e3) plane.\n",[387,881,883,886,889,892,895,898,900],{"class":389,"line":882},31,[387,884,885],{"class":397},"        truth",[387,887,888],{"class":409},"[",[387,890,891],{"class":397},"switch",[387,893,894],{"class":409},":,",[387,896,897],{"class":409}," :]",[387,899,811],{"class":584},[387,901,902],{"class":566}," 0.0\n",[387,904,906,908,910,912,914,917,919,921,923,925,927,929,931,933,935],{"class":389,"line":905},32,[387,907,885],{"class":397},[387,909,888],{"class":409},[387,911,891],{"class":397},[387,913,894],{"class":409},[387,915,916],{"class":566}," 2",[387,918,808],{"class":409},[387,920,811],{"class":584},[387,922,704],{"class":397},[387,924,410],{"class":409},[387,926,818],{"class":559},[387,928,563],{"class":409},[387,930,823],{"class":559},[387,932,888],{"class":409},[387,934,891],{"class":559},[387,936,937],{"class":409},":])\n",[387,939,941,943,945,947,949,952,954,956,958,960,962,964,966,968,970],{"class":389,"line":940},33,[387,942,885],{"class":397},[387,944,888],{"class":409},[387,946,891],{"class":397},[387,948,894],{"class":409},[387,950,951],{"class":566}," 3",[387,953,808],{"class":409},[387,955,811],{"class":584},[387,957,704],{"class":397},[387,959,410],{"class":409},[387,961,846],{"class":559},[387,963,563],{"class":409},[387,965,823],{"class":559},[387,967,888],{"class":409},[387,969,891],{"class":559},[387,971,937],{"class":409},[387,973,975,978,980,983,986,989,992,994,996,999,1001,1003,1005,1007,1009,1013,1015,1018],{"class":389,"line":974},34,[387,976,977],{"class":397},"    obs ",[387,979,585],{"class":584},[387,981,982],{"class":397}," truth ",[387,984,985],{"class":584},"+",[387,987,988],{"class":397}," noise ",[387,990,991],{"class":584},"*",[387,993,704],{"class":397},[387,995,410],{"class":409},[387,997,998],{"class":559},"randn",[387,1000,563],{"class":409},[387,1002,741],{"class":559},[387,1004,457],{"class":409},[387,1006,791],{"class":559},[387,1008,457],{"class":409},[387,1010,1012],{"class":1011},"s99_P"," generator",[387,1014,585],{"class":584},[387,1016,1017],{"class":559},"g",[387,1019,570],{"class":409},[387,1021,1023,1025,1027,1029,1031,1034,1036,1039,1041,1044,1046,1049,1051,1054,1057,1060],{"class":389,"line":1022},35,[387,1024,977],{"class":397},[387,1026,585],{"class":584},[387,1028,704],{"class":397},[387,1030,410],{"class":409},[387,1032,1033],{"class":413},"nn",[387,1035,410],{"class":409},[387,1037,1038],{"class":413},"functional",[387,1040,410],{"class":409},[387,1042,1043],{"class":559},"normalize",[387,1045,563],{"class":409},[387,1047,1048],{"class":559},"obs",[387,1050,457],{"class":409},[387,1052,1053],{"class":1011}," dim",[387,1055,1056],{"class":584},"=-",[387,1058,1059],{"class":566},"1",[387,1061,570],{"class":409},[387,1063,1065,1068,1070,1073,1076,1078,1080,1082,1084,1086,1089,1092,1094,1097,1100,1102,1104,1106,1109,1112,1115,1117,1119,1122,1125],{"class":389,"line":1064},36,[387,1066,1067],{"class":397},"    dets ",[387,1069,585],{"class":584},[387,1071,1072],{"class":409}," [",[387,1074,1075],{"class":559},"Detections",[387,1077,563],{"class":409},[387,1079,125],{"class":1011},[387,1081,585],{"class":584},[387,1083,554],{"class":559},[387,1085,410],{"class":409},[387,1087,1088],{"class":559},"tensor",[387,1090,1091],{"class":409},"([",[387,1093,567],{"class":566},[387,1095,1096],{"class":409},"]),",[387,1098,1099],{"class":1011}," emb",[387,1101,585],{"class":584},[387,1103,1048],{"class":559},[387,1105,888],{"class":409},[387,1107,1108],{"class":559},"k",[387,1110,1111],{"class":409},":",[387,1113,1114],{"class":559},"k ",[387,1116,985],{"class":584},[387,1118,835],{"class":566},[387,1120,1121],{"class":409},"].",[387,1123,1124],{"class":559},"clone",[387,1126,1127],{"class":409},"(),\n",[387,1129,1131,1134,1136,1138,1140,1143,1146,1149,1152,1156,1158,1160],{"class":389,"line":1130},37,[387,1132,1133],{"class":1011},"                       batch_size",[387,1135,585],{"class":584},[387,1137,888],{"class":409},[387,1139,1059],{"class":566},[387,1141,1142],{"class":409},"])",[387,1144,1145],{"class":393}," for",[387,1147,1148],{"class":397}," k ",[387,1150,1151],{"class":393},"in",[387,1153,1155],{"class":1154},"sptTA"," range",[387,1157,563],{"class":409},[387,1159,741],{"class":559},[387,1161,1162],{"class":409},")]\n",[387,1164,1166,1169,1172,1174,1177,1179,1182,1184],{"class":389,"line":1165},38,[387,1167,1168],{"class":393},"    return",[387,1170,1171],{"class":397}," t",[387,1173,457],{"class":409},[387,1175,1176],{"class":397}," truth",[387,1178,457],{"class":409},[387,1180,1181],{"class":397}," obs",[387,1183,457],{"class":409},[387,1185,1186],{"class":397}," dets\n",[387,1188,1190],{"class":389,"line":1189},39,[387,1191,427],{"emptyLinePlaceholder":426},[387,1193,1195,1197,1200,1202,1204,1206,1209,1211,1214,1216,1218,1222,1226,1228],{"class":389,"line":1194},40,[387,1196,618],{"class":617},[387,1198,1199],{"class":621}," run",[387,1201,563],{"class":409},[387,1203,173],{"class":627},[387,1205,457],{"class":409},[387,1207,1208],{"class":627}," dets",[387,1210,457],{"class":409},[387,1212,1213],{"class":627}," fields",[387,1215,585],{"class":584},[387,1217,563],{"class":409},[387,1219,1221],{"class":1220},"sjJ54","\"",[387,1223,1225],{"class":1224},"s_sjI","emb",[387,1227,1221],{"class":1220},[387,1229,1230],{"class":409},",)):\n",[387,1232,1234,1237,1240],{"class":389,"line":1233},41,[387,1235,1236],{"class":662},"    \"\"\"",[387,1238,1239],{"class":669},"Run a single-object clip through a real Tracker; collect snapshot fields.",[387,1241,1242],{"class":662},"\"\"\"\n",[387,1244,1246,1249,1251,1253,1255,1258,1260,1262],{"class":389,"line":1245},42,[387,1247,1248],{"class":397},"    ms ",[387,1250,585],{"class":584},[387,1252,444],{"class":397},[387,1254,410],{"class":409},[387,1256,1257],{"class":559},"MultiStream",[387,1259,563],{"class":409},[387,1261,173],{"class":559},[387,1263,570],{"class":409},[387,1265,1267,1270,1272,1275,1278,1280,1283,1285,1288,1290,1292],{"class":389,"line":1266},43,[387,1268,1269],{"class":397},"    rec ",[387,1271,585],{"class":584},[387,1273,1274],{"class":409}," {",[387,1276,1277],{"class":397},"f",[387,1279,1111],{"class":409},[387,1281,1282],{"class":409}," []",[387,1284,1145],{"class":393},[387,1286,1287],{"class":397}," f ",[387,1289,1151],{"class":393},[387,1291,1213],{"class":397},[387,1293,1294],{"class":409},"}\n",[387,1296,1298,1301,1304,1306,1309,1311,1314,1316,1319],{"class":389,"line":1297},44,[387,1299,1300],{"class":393},"    for",[387,1302,1303],{"class":397}," k",[387,1305,457],{"class":409},[387,1307,1308],{"class":397}," d ",[387,1310,1151],{"class":393},[387,1312,1313],{"class":1154}," enumerate",[387,1315,563],{"class":409},[387,1317,1318],{"class":559},"dets",[387,1320,656],{"class":409},[387,1322,1324,1327,1329,1331,1333,1336,1338,1341,1343,1345,1347,1350,1352,1355,1357,1360,1362,1364,1366,1369,1371,1373],{"class":389,"line":1323},45,[387,1325,1326],{"class":397},"        ctx ",[387,1328,585],{"class":584},[387,1330,499],{"class":397},[387,1332,410],{"class":409},[387,1334,1335],{"class":559},"make",[387,1337,563],{"class":409},[387,1339,1340],{"class":1011},"frame_idx",[387,1342,585],{"class":584},[387,1344,1108],{"class":559},[387,1346,457],{"class":409},[387,1348,1349],{"class":1011}," delta",[387,1351,585],{"class":584},[387,1353,1354],{"class":566},"1.0",[387,1356,457],{"class":409},[387,1358,1359],{"class":1011}," fps",[387,1361,585],{"class":584},[387,1363,1354],{"class":566},[387,1365,457],{"class":409},[387,1367,1368],{"class":1011}," stream_key",[387,1370,585],{"class":584},[387,1372,567],{"class":566},[387,1374,570],{"class":409},[387,1376,1378,1381,1383,1386,1388,1391,1393,1396,1398,1400,1402,1405,1407,1410,1412,1415,1417,1420],{"class":389,"line":1377},46,[387,1379,1380],{"class":397},"        res ",[387,1382,585],{"class":584},[387,1384,1385],{"class":397}," ms",[387,1387,410],{"class":409},[387,1389,1390],{"class":559},"step",[387,1392,563],{"class":409},[387,1394,1395],{"class":1011},"stream_key",[387,1397,585],{"class":584},[387,1399,567],{"class":566},[387,1401,457],{"class":409},[387,1403,1404],{"class":1011}," detections",[387,1406,585],{"class":584},[387,1408,1409],{"class":559},"d",[387,1411,457],{"class":409},[387,1413,1414],{"class":1011}," ctx",[387,1416,585],{"class":584},[387,1418,1419],{"class":559},"ctx",[387,1421,570],{"class":409},[387,1423,1425,1428,1430,1432,1434],{"class":389,"line":1424},47,[387,1426,1427],{"class":393},"        for",[387,1429,1287],{"class":397},[387,1431,1151],{"class":393},[387,1433,1213],{"class":397},[387,1435,873],{"class":409},[387,1437,1439,1442,1444,1446,1448,1451,1453,1456,1458,1461,1463,1466,1468,1471,1474,1476,1478,1480],{"class":389,"line":1438},48,[387,1440,1441],{"class":397},"            rec",[387,1443,888],{"class":409},[387,1445,1277],{"class":397},[387,1447,1121],{"class":409},[387,1449,1450],{"class":559},"append",[387,1452,563],{"class":409},[387,1454,1455],{"class":1154},"getattr",[387,1457,563],{"class":409},[387,1459,1460],{"class":559},"res",[387,1462,410],{"class":409},[387,1464,1465],{"class":413},"snapshot",[387,1467,457],{"class":409},[387,1469,1470],{"class":559}," f",[387,1472,1473],{"class":409},")[",[387,1475,567],{"class":566},[387,1477,1121],{"class":409},[387,1479,1124],{"class":559},[387,1481,1482],{"class":409},"())\n",[387,1484,1486,1488,1490,1492,1494,1496,1498,1501,1503,1506,1509,1511,1513,1515,1518,1520,1523,1525,1528],{"class":389,"line":1485},49,[387,1487,1168],{"class":393},[387,1489,1274],{"class":409},[387,1491,1277],{"class":397},[387,1493,1111],{"class":409},[387,1495,704],{"class":397},[387,1497,410],{"class":409},[387,1499,1500],{"class":559},"stack",[387,1502,563],{"class":409},[387,1504,1505],{"class":559},"v",[387,1507,1508],{"class":409},")",[387,1510,1145],{"class":393},[387,1512,1470],{"class":397},[387,1514,457],{"class":409},[387,1516,1517],{"class":397}," v ",[387,1519,1151],{"class":393},[387,1521,1522],{"class":397}," rec",[387,1524,410],{"class":409},[387,1526,1527],{"class":559},"items",[387,1529,1530],{"class":409},"()}\n",[387,1532,1534],{"class":389,"line":1533},50,[387,1535,427],{"emptyLinePlaceholder":426},[387,1537,1539,1541,1544,1546,1549,1551,1553],{"class":389,"line":1538},51,[387,1540,618],{"class":617},[387,1542,1543],{"class":621}," cos_to_truth",[387,1545,563],{"class":409},[387,1547,1548],{"class":627},"est",[387,1550,457],{"class":409},[387,1552,1176],{"class":627},[387,1554,656],{"class":409},[387,1556,1558,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589],{"class":389,"line":1557},52,[387,1559,1560],{"class":397},"    e ",[387,1562,585],{"class":584},[387,1564,704],{"class":397},[387,1566,410],{"class":409},[387,1568,1033],{"class":413},[387,1570,410],{"class":409},[387,1572,1038],{"class":413},[387,1574,410],{"class":409},[387,1576,1043],{"class":559},[387,1578,563],{"class":409},[387,1580,1548],{"class":559},[387,1582,457],{"class":409},[387,1584,1053],{"class":1011},[387,1586,1056],{"class":584},[387,1588,1059],{"class":566},[387,1590,570],{"class":409},[387,1592,1594,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1618,1620,1622,1624,1626],{"class":389,"line":1593},53,[387,1595,1596],{"class":397},"    u ",[387,1598,585],{"class":584},[387,1600,704],{"class":397},[387,1602,410],{"class":409},[387,1604,1033],{"class":413},[387,1606,410],{"class":409},[387,1608,1038],{"class":413},[387,1610,410],{"class":409},[387,1612,1043],{"class":559},[387,1614,563],{"class":409},[387,1616,1617],{"class":559},"truth",[387,1619,457],{"class":409},[387,1621,1053],{"class":1011},[387,1623,1056],{"class":584},[387,1625,1059],{"class":566},[387,1627,570],{"class":409},[387,1629,1631,1633,1636,1639,1641,1644,1646,1649,1651,1654,1656],{"class":389,"line":1630},54,[387,1632,1168],{"class":393},[387,1634,1635],{"class":409}," (",[387,1637,1638],{"class":397},"e ",[387,1640,991],{"class":584},[387,1642,1643],{"class":397}," u",[387,1645,744],{"class":409},[387,1647,1648],{"class":559},"sum",[387,1650,563],{"class":409},[387,1652,1653],{"class":584},"-",[387,1655,1059],{"class":566},[387,1657,570],{"class":409},[387,1659,1661],{"class":389,"line":1660},55,[387,1662,427],{"emptyLinePlaceholder":426},[387,1664,1666,1669,1671,1673,1675,1677,1679,1682,1684,1686],{"class":389,"line":1665},56,[387,1667,1668],{"class":397},"t",[387,1670,457],{"class":409},[387,1672,1176],{"class":397},[387,1674,457],{"class":409},[387,1676,1181],{"class":397},[387,1678,457],{"class":409},[387,1680,1681],{"class":397}," dets ",[387,1683,585],{"class":584},[387,1685,622],{"class":559},[387,1687,750],{"class":409},[387,1689,1691,1694,1696,1698,1701,1704,1706,1709,1712,1714,1717,1719],{"class":389,"line":1690},57,[387,1692,1693],{"class":1154},"print",[387,1695,563],{"class":409},[387,1697,1277],{"class":617},[387,1699,1700],{"class":1224},"\"clip: ",[387,1702,1703],{"class":566},"{",[387,1705,741],{"class":559},[387,1707,1708],{"class":566},"}",[387,1710,1711],{"class":1224}," frames, D=",[387,1713,1703],{"class":566},[387,1715,1716],{"class":559},"D",[387,1718,1708],{"class":566},[387,1720,1721],{"class":1224},"; raw-detection mean cosine-to-truth \"\n",[387,1723,1725,1728,1731,1733,1736,1738,1740,1742,1744,1746,1749,1752,1755,1757,1759],{"class":389,"line":1724},58,[387,1726,1727],{"class":617},"      f",[387,1729,1730],{"class":1224},"\"= ",[387,1732,1703],{"class":566},[387,1734,1735],{"class":559},"cos_to_truth",[387,1737,563],{"class":409},[387,1739,1048],{"class":559},[387,1741,457],{"class":409},[387,1743,1176],{"class":559},[387,1745,744],{"class":409},[387,1747,1748],{"class":559},"mean",[387,1750,1751],{"class":409},"()",[387,1753,1754],{"class":617},":.3f",[387,1756,1708],{"class":566},[387,1758,1221],{"class":1224},[387,1760,570],{"class":409},[1762,1763],"docyard-notebook-output",{"data":1764,"kind":1765},"Y2xpcDogNDQgZnJhbWVzLCBEPTE2OyByYXctZGV0ZWN0aW9uIG1lYW4gY29zaW5lLXRvLXRydXRoID0gMC44NTUK","stream",[378,1767,1769],{"className":380,"code":1768,"language":382,"meta":383,"style":383},"from unitrack.states import EMAFuse, EMATrack, FromDetectionField, State\n\ndef ema_tracker(rho):\n    states = {\n        \"emb\": State(\n            schema=TensorSpec(shape=(D,), dtype=torch.float32),\n            process=EMATrack(\"emb\"),\n            observation=EMAFuse(\"emb\", rho=rho),\n            init=FromDetectionField(\"emb\"),\n        ),\n    }\n    return unitrack.Tracker(\n        root=Pipe(cost=Cosine(\"emb\"), assoc=Associate(Jonker(threshold=0.6))),\n        states=states, lifecycle=NoLifecycle(), visibility=IncludeAll(),\n    )\n\nrec = run(ema_tracker(rho=0.8), dets)\n\n",[342,1770,1771,1802,1806,1820,1830,1847,1886,1905,1933,1953,1958,1963,1975,2031,2063,2068,2072],{"__ignoreMap":383},[387,1772,1773,1775,1777,1779,1782,1784,1787,1789,1792,1794,1797,1799],{"class":389,"line":390},[387,1774,441],{"class":393},[387,1776,444],{"class":397},[387,1778,410],{"class":409},[387,1780,1781],{"class":397},"states ",[387,1783,394],{"class":393},[387,1785,1786],{"class":397}," EMAFuse",[387,1788,457],{"class":409},[387,1790,1791],{"class":397}," EMATrack",[387,1793,457],{"class":409},[387,1795,1796],{"class":397}," FromDetectionField",[387,1798,457],{"class":409},[387,1800,1801],{"class":397}," State\n",[387,1803,1804],{"class":389,"line":401},[387,1805,427],{"emptyLinePlaceholder":426},[387,1807,1808,1810,1813,1815,1818],{"class":389,"line":423},[387,1809,618],{"class":617},[387,1811,1812],{"class":621}," ema_tracker",[387,1814,563],{"class":409},[387,1816,1817],{"class":627},"rho",[387,1819,656],{"class":409},[387,1821,1822,1825,1827],{"class":389,"line":430},[387,1823,1824],{"class":397},"    states ",[387,1826,585],{"class":584},[387,1828,1829],{"class":409}," {\n",[387,1831,1832,1835,1837,1839,1841,1844],{"class":389,"line":438},[387,1833,1834],{"class":1220},"        \"",[387,1836,1225],{"class":1224},[387,1838,1221],{"class":1220},[387,1840,1111],{"class":409},[387,1842,1843],{"class":559}," State",[387,1845,1846],{"class":409},"(\n",[387,1848,1849,1852,1854,1857,1859,1862,1864,1866,1868,1871,1874,1876,1878,1880,1883],{"class":389,"line":463},[387,1850,1851],{"class":1011},"            schema",[387,1853,585],{"class":584},[387,1855,1856],{"class":559},"TensorSpec",[387,1858,563],{"class":409},[387,1860,1861],{"class":1011},"shape",[387,1863,585],{"class":584},[387,1865,563],{"class":409},[387,1867,1716],{"class":559},[387,1869,1870],{"class":409},",),",[387,1872,1873],{"class":1011}," dtype",[387,1875,585],{"class":584},[387,1877,554],{"class":559},[387,1879,410],{"class":409},[387,1881,1882],{"class":413},"float32",[387,1884,1885],{"class":409},"),\n",[387,1887,1888,1891,1893,1895,1897,1899,1901,1903],{"class":389,"line":480},[387,1889,1890],{"class":1011},"            process",[387,1892,585],{"class":584},[387,1894,367],{"class":559},[387,1896,563],{"class":409},[387,1898,1221],{"class":1220},[387,1900,1225],{"class":1224},[387,1902,1221],{"class":1220},[387,1904,1885],{"class":409},[387,1906,1907,1910,1912,1914,1916,1918,1920,1922,1924,1927,1929,1931],{"class":389,"line":507},[387,1908,1909],{"class":1011},"            observation",[387,1911,585],{"class":584},[387,1913,359],{"class":559},[387,1915,563],{"class":409},[387,1917,1221],{"class":1220},[387,1919,1225],{"class":1224},[387,1921,1221],{"class":1220},[387,1923,457],{"class":409},[387,1925,1926],{"class":1011}," rho",[387,1928,585],{"class":584},[387,1930,1817],{"class":559},[387,1932,1885],{"class":409},[387,1934,1935,1938,1940,1943,1945,1947,1949,1951],{"class":389,"line":529},[387,1936,1937],{"class":1011},"            init",[387,1939,585],{"class":584},[387,1941,1942],{"class":559},"FromDetectionField",[387,1944,563],{"class":409},[387,1946,1221],{"class":1220},[387,1948,1225],{"class":1224},[387,1950,1221],{"class":1220},[387,1952,1885],{"class":409},[387,1954,1955],{"class":389,"line":546},[387,1956,1957],{"class":409},"        ),\n",[387,1959,1960],{"class":389,"line":551},[387,1961,1962],{"class":409},"    }\n",[387,1964,1965,1967,1969,1971,1973],{"class":389,"line":573},[387,1966,1168],{"class":393},[387,1968,444],{"class":397},[387,1970,410],{"class":409},[387,1972,375],{"class":559},[387,1974,1846],{"class":409},[387,1976,1977,1980,1982,1985,1987,1989,1991,1994,1996,1998,2000,2002,2005,2008,2010,2013,2015,2018,2020,2023,2025,2028],{"class":389,"line":578},[387,1978,1979],{"class":1011},"        root",[387,1981,585],{"class":584},[387,1983,1984],{"class":559},"Pipe",[387,1986,563],{"class":409},[387,1988,203],{"class":1011},[387,1990,585],{"class":584},[387,1992,1993],{"class":559},"Cosine",[387,1995,563],{"class":409},[387,1997,1221],{"class":1220},[387,1999,1225],{"class":1224},[387,2001,1221],{"class":1220},[387,2003,2004],{"class":409},"),",[387,2006,2007],{"class":1011}," assoc",[387,2009,585],{"class":584},[387,2011,2012],{"class":559},"Associate",[387,2014,563],{"class":409},[387,2016,2017],{"class":559},"Jonker",[387,2019,563],{"class":409},[387,2021,2022],{"class":1011},"threshold",[387,2024,585],{"class":584},[387,2026,2027],{"class":566},"0.6",[387,2029,2030],{"class":409},"))),\n",[387,2032,2033,2036,2038,2040,2042,2045,2047,2050,2053,2056,2058,2061],{"class":389,"line":595},[387,2034,2035],{"class":1011},"        states",[387,2037,585],{"class":584},[387,2039,270],{"class":559},[387,2041,457],{"class":409},[387,2043,2044],{"class":1011}," lifecycle",[387,2046,585],{"class":584},[387,2048,2049],{"class":559},"NoLifecycle",[387,2051,2052],{"class":409},"(),",[387,2054,2055],{"class":1011}," visibility",[387,2057,585],{"class":584},[387,2059,2060],{"class":559},"IncludeAll",[387,2062,1127],{"class":409},[387,2064,2065],{"class":389,"line":609},[387,2066,2067],{"class":409},"    )\n",[387,2069,2070],{"class":389,"line":614},[387,2071,427],{"emptyLinePlaceholder":426},[387,2073,2074,2077,2079,2081,2083,2086,2088,2090,2092,2095,2097,2099],{"class":389,"line":659},[387,2075,2076],{"class":397},"rec ",[387,2078,585],{"class":584},[387,2080,1199],{"class":559},[387,2082,563],{"class":409},[387,2084,2085],{"class":559},"ema_tracker",[387,2087,563],{"class":409},[387,2089,1817],{"class":1011},[387,2091,585],{"class":584},[387,2093,2094],{"class":566},"0.8",[387,2096,2004],{"class":409},[387,2098,1208],{"class":559},[387,2100,570],{"class":409},[378,2102,2104],{"className":380,"code":2103,"language":382,"meta":383,"style":383},"fig, (axp, axc) = plt.subplots(1, 2, figsize=(12, 4))\naxp.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.55\", lw=2, label=\"truth\")\naxp.scatter(obs[:, 0], obs[:, 1], marker=\"x\", color=\"tab:red\", s=22,\n            alpha=0.5, label=\"noisy detections\")\naxp.plot(rec[\"emb\"][:, 0], rec[\"emb\"][:, 1], \"o-\", color=\"tab:blue\",\n         ms=3, label=\"filtered estimate\")\naxp.set_title(\"Embedding trajectory, projected to (dim 0, dim 1)\")\naxp.set_xlabel(\"dim 0\"); axp.set_ylabel(\"dim 1\")\naxp.legend(fontsize=8); axp.grid(alpha=0.3); axp.set_aspect(\"equal\")\n\naxc.plot(t, cos_to_truth(obs, truth), color=\"tab:red\", alpha=0.6,\n         label=\"raw detections\")\naxc.plot(t, cos_to_truth(rec[\"emb\"], truth), color=\"tab:blue\",\n         label=\"filtered\")\naxc.set_title(\"Cosine similarity to ground truth (higher = better)\")\naxc.set_xlabel(\"frame\"); axc.set_ylabel(\"cosine\"); axc.legend(fontsize=8)\naxc.grid(alpha=0.3)\n\nplt.tight_layout(); plt.show()\nprint(f\"raw mean cos = {cos_to_truth(obs, truth).mean():.3f}   \"\n      f\"filtered mean cos = {cos_to_truth(rec['emb'], truth).mean():.3f}\")\n\n",[342,2105,2106,2163,2237,2302,2327,2393,2418,2438,2477,2535,2539,2587,2603,2649,2664,2683,2735,2753,2757,2779,2815],{"__ignoreMap":383},[387,2107,2108,2111,2113,2115,2118,2120,2123,2125,2127,2130,2132,2135,2137,2139,2141,2143,2145,2148,2150,2152,2155,2157,2160],{"class":389,"line":390},[387,2109,2110],{"class":397},"fig",[387,2112,457],{"class":409},[387,2114,1635],{"class":409},[387,2116,2117],{"class":397},"axp",[387,2119,457],{"class":409},[387,2121,2122],{"class":397}," axc",[387,2124,1508],{"class":409},[387,2126,811],{"class":584},[387,2128,2129],{"class":397}," plt",[387,2131,410],{"class":409},[387,2133,2134],{"class":559},"subplots",[387,2136,563],{"class":409},[387,2138,1059],{"class":566},[387,2140,457],{"class":409},[387,2142,916],{"class":566},[387,2144,457],{"class":409},[387,2146,2147],{"class":1011}," figsize",[387,2149,585],{"class":584},[387,2151,563],{"class":409},[387,2153,2154],{"class":566},"12",[387,2156,457],{"class":409},[387,2158,2159],{"class":566}," 4",[387,2161,2162],{"class":409},"))\n",[387,2164,2165,2167,2169,2172,2174,2176,2178,2180,2183,2185,2187,2189,2191,2194,2196,2198,2200,2203,2205,2207,2210,2212,2214,2217,2219,2222,2224,2227,2229,2231,2233,2235],{"class":389,"line":401},[387,2166,2117],{"class":397},[387,2168,410],{"class":409},[387,2170,2171],{"class":559},"plot",[387,2173,563],{"class":409},[387,2175,1617],{"class":559},[387,2177,802],{"class":409},[387,2179,805],{"class":566},[387,2181,2182],{"class":409},"],",[387,2184,1176],{"class":559},[387,2186,802],{"class":409},[387,2188,835],{"class":566},[387,2190,2182],{"class":409},[387,2192,2193],{"class":1220}," \"",[387,2195,1653],{"class":1224},[387,2197,1221],{"class":1220},[387,2199,457],{"class":409},[387,2201,2202],{"class":1011}," color",[387,2204,585],{"class":584},[387,2206,1221],{"class":1220},[387,2208,2209],{"class":1224},"0.55",[387,2211,1221],{"class":1220},[387,2213,457],{"class":409},[387,2215,2216],{"class":1011}," lw",[387,2218,585],{"class":584},[387,2220,2221],{"class":566},"2",[387,2223,457],{"class":409},[387,2225,2226],{"class":1011}," label",[387,2228,585],{"class":584},[387,2230,1221],{"class":1220},[387,2232,1617],{"class":1224},[387,2234,1221],{"class":1220},[387,2236,570],{"class":409},[387,2238,2239,2241,2243,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2267,2269,2271,2274,2276,2278,2280,2282,2284,2287,2289,2291,2294,2296,2299],{"class":389,"line":423},[387,2240,2117],{"class":397},[387,2242,410],{"class":409},[387,2244,2245],{"class":559},"scatter",[387,2247,563],{"class":409},[387,2249,1048],{"class":559},[387,2251,802],{"class":409},[387,2253,805],{"class":566},[387,2255,2182],{"class":409},[387,2257,1181],{"class":559},[387,2259,802],{"class":409},[387,2261,835],{"class":566},[387,2263,2182],{"class":409},[387,2265,2266],{"class":1011}," marker",[387,2268,585],{"class":584},[387,2270,1221],{"class":1220},[387,2272,2273],{"class":1224},"x",[387,2275,1221],{"class":1220},[387,2277,457],{"class":409},[387,2279,2202],{"class":1011},[387,2281,585],{"class":584},[387,2283,1221],{"class":1220},[387,2285,2286],{"class":1224},"tab:red",[387,2288,1221],{"class":1220},[387,2290,457],{"class":409},[387,2292,2293],{"class":1011}," s",[387,2295,585],{"class":584},[387,2297,2298],{"class":566},"22",[387,2300,2301],{"class":409},",\n",[387,2303,2304,2307,2309,2312,2314,2316,2318,2320,2323,2325],{"class":389,"line":430},[387,2305,2306],{"class":1011},"            alpha",[387,2308,585],{"class":584},[387,2310,2311],{"class":566},"0.5",[387,2313,457],{"class":409},[387,2315,2226],{"class":1011},[387,2317,585],{"class":584},[387,2319,1221],{"class":1220},[387,2321,2322],{"class":1224},"noisy detections",[387,2324,1221],{"class":1220},[387,2326,570],{"class":409},[387,2328,2329,2331,2333,2335,2337,2340,2342,2344,2346,2348,2351,2353,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373,2376,2378,2380,2382,2384,2386,2389,2391],{"class":389,"line":438},[387,2330,2117],{"class":397},[387,2332,410],{"class":409},[387,2334,2171],{"class":559},[387,2336,563],{"class":409},[387,2338,2339],{"class":559},"rec",[387,2341,888],{"class":409},[387,2343,1221],{"class":1220},[387,2345,1225],{"class":1224},[387,2347,1221],{"class":1220},[387,2349,2350],{"class":409},"][:,",[387,2352,805],{"class":566},[387,2354,2182],{"class":409},[387,2356,1522],{"class":559},[387,2358,888],{"class":409},[387,2360,1221],{"class":1220},[387,2362,1225],{"class":1224},[387,2364,1221],{"class":1220},[387,2366,2350],{"class":409},[387,2368,835],{"class":566},[387,2370,2182],{"class":409},[387,2372,2193],{"class":1220},[387,2374,2375],{"class":1224},"o-",[387,2377,1221],{"class":1220},[387,2379,457],{"class":409},[387,2381,2202],{"class":1011},[387,2383,585],{"class":584},[387,2385,1221],{"class":1220},[387,2387,2388],{"class":1224},"tab:blue",[387,2390,1221],{"class":1220},[387,2392,2301],{"class":409},[387,2394,2395,2398,2400,2403,2405,2407,2409,2411,2414,2416],{"class":389,"line":463},[387,2396,2397],{"class":1011},"         ms",[387,2399,585],{"class":584},[387,2401,2402],{"class":566},"3",[387,2404,457],{"class":409},[387,2406,2226],{"class":1011},[387,2408,585],{"class":584},[387,2410,1221],{"class":1220},[387,2412,2413],{"class":1224},"filtered estimate",[387,2415,1221],{"class":1220},[387,2417,570],{"class":409},[387,2419,2420,2422,2424,2427,2429,2431,2434,2436],{"class":389,"line":480},[387,2421,2117],{"class":397},[387,2423,410],{"class":409},[387,2425,2426],{"class":559},"set_title",[387,2428,563],{"class":409},[387,2430,1221],{"class":1220},[387,2432,2433],{"class":1224},"Embedding trajectory, projected to (dim 0, dim 1)",[387,2435,1221],{"class":1220},[387,2437,570],{"class":409},[387,2439,2440,2442,2444,2447,2449,2451,2454,2456,2458,2461,2463,2466,2468,2470,2473,2475],{"class":389,"line":507},[387,2441,2117],{"class":397},[387,2443,410],{"class":409},[387,2445,2446],{"class":559},"set_xlabel",[387,2448,563],{"class":409},[387,2450,1221],{"class":1220},[387,2452,2453],{"class":1224},"dim 0",[387,2455,1221],{"class":1220},[387,2457,1508],{"class":409},[387,2459,2460],{"class":397},"; axp",[387,2462,410],{"class":409},[387,2464,2465],{"class":559},"set_ylabel",[387,2467,563],{"class":409},[387,2469,1221],{"class":1220},[387,2471,2472],{"class":1224},"dim 1",[387,2474,1221],{"class":1220},[387,2476,570],{"class":409},[387,2478,2479,2481,2483,2486,2488,2491,2493,2496,2498,2500,2502,2505,2507,2510,2512,2515,2517,2519,2521,2524,2526,2528,2531,2533],{"class":389,"line":529},[387,2480,2117],{"class":397},[387,2482,410],{"class":409},[387,2484,2485],{"class":559},"legend",[387,2487,563],{"class":409},[387,2489,2490],{"class":1011},"fontsize",[387,2492,585],{"class":584},[387,2494,2495],{"class":566},"8",[387,2497,1508],{"class":409},[387,2499,2460],{"class":397},[387,2501,410],{"class":409},[387,2503,2504],{"class":559},"grid",[387,2506,563],{"class":409},[387,2508,2509],{"class":1011},"alpha",[387,2511,585],{"class":584},[387,2513,2514],{"class":566},"0.3",[387,2516,1508],{"class":409},[387,2518,2460],{"class":397},[387,2520,410],{"class":409},[387,2522,2523],{"class":559},"set_aspect",[387,2525,563],{"class":409},[387,2527,1221],{"class":1220},[387,2529,2530],{"class":1224},"equal",[387,2532,1221],{"class":1220},[387,2534,570],{"class":409},[387,2536,2537],{"class":389,"line":546},[387,2538,427],{"emptyLinePlaceholder":426},[387,2540,2541,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578,2581,2583,2585],{"class":389,"line":551},[387,2542,2543],{"class":397},"axc",[387,2545,410],{"class":409},[387,2547,2171],{"class":559},[387,2549,563],{"class":409},[387,2551,1668],{"class":559},[387,2553,457],{"class":409},[387,2555,1543],{"class":559},[387,2557,563],{"class":409},[387,2559,1048],{"class":559},[387,2561,457],{"class":409},[387,2563,1176],{"class":559},[387,2565,2004],{"class":409},[387,2567,2202],{"class":1011},[387,2569,585],{"class":584},[387,2571,1221],{"class":1220},[387,2573,2286],{"class":1224},[387,2575,1221],{"class":1220},[387,2577,457],{"class":409},[387,2579,2580],{"class":1011}," alpha",[387,2582,585],{"class":584},[387,2584,2027],{"class":566},[387,2586,2301],{"class":409},[387,2588,2589,2592,2594,2596,2599,2601],{"class":389,"line":573},[387,2590,2591],{"class":1011},"         label",[387,2593,585],{"class":584},[387,2595,1221],{"class":1220},[387,2597,2598],{"class":1224},"raw detections",[387,2600,1221],{"class":1220},[387,2602,570],{"class":409},[387,2604,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647],{"class":389,"line":578},[387,2606,2543],{"class":397},[387,2608,410],{"class":409},[387,2610,2171],{"class":559},[387,2612,563],{"class":409},[387,2614,1668],{"class":559},[387,2616,457],{"class":409},[387,2618,1543],{"class":559},[387,2620,563],{"class":409},[387,2622,2339],{"class":559},[387,2624,888],{"class":409},[387,2626,1221],{"class":1220},[387,2628,1225],{"class":1224},[387,2630,1221],{"class":1220},[387,2632,2182],{"class":409},[387,2634,1176],{"class":559},[387,2636,2004],{"class":409},[387,2638,2202],{"class":1011},[387,2640,585],{"class":584},[387,2642,1221],{"class":1220},[387,2644,2388],{"class":1224},[387,2646,1221],{"class":1220},[387,2648,2301],{"class":409},[387,2650,2651,2653,2655,2657,2660,2662],{"class":389,"line":595},[387,2652,2591],{"class":1011},[387,2654,585],{"class":584},[387,2656,1221],{"class":1220},[387,2658,2659],{"class":1224},"filtered",[387,2661,1221],{"class":1220},[387,2663,570],{"class":409},[387,2665,2666,2668,2670,2672,2674,2676,2679,2681],{"class":389,"line":609},[387,2667,2543],{"class":397},[387,2669,410],{"class":409},[387,2671,2426],{"class":559},[387,2673,563],{"class":409},[387,2675,1221],{"class":1220},[387,2677,2678],{"class":1224},"Cosine similarity to ground truth (higher = better)",[387,2680,1221],{"class":1220},[387,2682,570],{"class":409},[387,2684,2685,2687,2689,2691,2693,2695,2697,2699,2701,2704,2706,2708,2710,2712,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733],{"class":389,"line":614},[387,2686,2543],{"class":397},[387,2688,410],{"class":409},[387,2690,2446],{"class":559},[387,2692,563],{"class":409},[387,2694,1221],{"class":1220},[387,2696,209],{"class":1224},[387,2698,1221],{"class":1220},[387,2700,1508],{"class":409},[387,2702,2703],{"class":397},"; axc",[387,2705,410],{"class":409},[387,2707,2465],{"class":559},[387,2709,563],{"class":409},[387,2711,1221],{"class":1220},[387,2713,2714],{"class":1224},"cosine",[387,2716,1221],{"class":1220},[387,2718,1508],{"class":409},[387,2720,2703],{"class":397},[387,2722,410],{"class":409},[387,2724,2485],{"class":559},[387,2726,563],{"class":409},[387,2728,2490],{"class":1011},[387,2730,585],{"class":584},[387,2732,2495],{"class":566},[387,2734,570],{"class":409},[387,2736,2737,2739,2741,2743,2745,2747,2749,2751],{"class":389,"line":659},[387,2738,2543],{"class":397},[387,2740,410],{"class":409},[387,2742,2504],{"class":559},[387,2744,563],{"class":409},[387,2746,2509],{"class":1011},[387,2748,585],{"class":584},[387,2750,2514],{"class":566},[387,2752,570],{"class":409},[387,2754,2755],{"class":389,"line":666},[387,2756,427],{"emptyLinePlaceholder":426},[387,2758,2759,2762,2764,2767,2769,2772,2774,2777],{"class":389,"line":673},[387,2760,2761],{"class":397},"plt",[387,2763,410],{"class":409},[387,2765,2766],{"class":559},"tight_layout",[387,2768,1751],{"class":409},[387,2770,2771],{"class":397},"; plt",[387,2773,410],{"class":409},[387,2775,2776],{"class":559},"show",[387,2778,750],{"class":409},[387,2780,2781,2783,2785,2787,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812],{"class":389,"line":679},[387,2782,1693],{"class":1154},[387,2784,563],{"class":409},[387,2786,1277],{"class":617},[387,2788,2789],{"class":1224},"\"raw mean cos = ",[387,2791,1703],{"class":566},[387,2793,1735],{"class":559},[387,2795,563],{"class":409},[387,2797,1048],{"class":559},[387,2799,457],{"class":409},[387,2801,1176],{"class":559},[387,2803,744],{"class":409},[387,2805,1748],{"class":559},[387,2807,1751],{"class":409},[387,2809,1754],{"class":617},[387,2811,1708],{"class":566},[387,2813,2814],{"class":1224},"   \"\n",[387,2816,2817,2819,2822,2824,2826,2828,2830,2832,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855],{"class":389,"line":685},[387,2818,1727],{"class":617},[387,2820,2821],{"class":1224},"\"filtered mean cos = ",[387,2823,1703],{"class":566},[387,2825,1735],{"class":559},[387,2827,563],{"class":409},[387,2829,2339],{"class":559},[387,2831,888],{"class":409},[387,2833,2834],{"class":1220},"'",[387,2836,1225],{"class":1224},[387,2838,2834],{"class":1220},[387,2840,2182],{"class":409},[387,2842,1176],{"class":559},[387,2844,744],{"class":409},[387,2846,1748],{"class":559},[387,2848,1751],{"class":409},[387,2850,1754],{"class":617},[387,2852,1708],{"class":566},[387,2854,1221],{"class":1224},[387,2856,570],{"class":409},[338,2858,2859],{},[2860,2861],"img",{"alt":383,"src":2862},"\u002F_nb\u002F7204326f4e55f704.png",[1762,2864],{"data":2865,"kind":1765},"cmF3IG1lYW4gY29zID0gMC44NTUgICBmaWx0ZXJlZCBtZWFuIGNvcyA9IDAuODk4Cg==",[2867,2868,2870],"h2",{"id":2869},"the-bias-variance-knob","The bias-variance knob",[338,2872,2873,2875,2876,2878,2879,2881],{},[342,2874,1817],{}," trades responsiveness for smoothness: high ",[342,2877,1817],{}," rejects noise\nbut lags the drift; low ",[342,2880,1817],{}," follows the drift but keeps more noise.\nThere is a sweet spot — the same trade a Kalman filter makes\nautomatically through its gain (next notebook).",[378,2883,2885],{"className":380,"code":2884,"language":382,"meta":383,"style":383},"fig, ax = plt.subplots(figsize=(7, 4))\nfor rho in (0.5, 0.8, 0.95):\n    r = run(ema_tracker(rho), dets)\n    ax.plot(t, cos_to_truth(r[\"emb\"], truth), label=f\"rho={rho} \"\n            f\"(mean {cos_to_truth(r['emb'], truth).mean():.3f})\")\nax.plot(t, cos_to_truth(obs, truth), color=\"0.6\", ls=\":\", label=\"raw\")\nax.set_title(\"EMA rho sweep — cosine to truth\")\nax.set_xlabel(\"frame\"); ax.set_ylabel(\"cosine\")\nax.legend(fontsize=8); ax.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\n\n",[342,2886,2887,2922,2948,2971,3025,3068,3133,3152,3187,3221],{"__ignoreMap":383},[387,2888,2889,2891,2893,2896,2898,2900,2902,2904,2906,2909,2911,2913,2916,2918,2920],{"class":389,"line":390},[387,2890,2110],{"class":397},[387,2892,457],{"class":409},[387,2894,2895],{"class":397}," ax ",[387,2897,585],{"class":584},[387,2899,2129],{"class":397},[387,2901,410],{"class":409},[387,2903,2134],{"class":559},[387,2905,563],{"class":409},[387,2907,2908],{"class":1011},"figsize",[387,2910,585],{"class":584},[387,2912,563],{"class":409},[387,2914,2915],{"class":566},"7",[387,2917,457],{"class":409},[387,2919,2159],{"class":566},[387,2921,2162],{"class":409},[387,2923,2924,2927,2930,2932,2934,2936,2938,2941,2943,2946],{"class":389,"line":401},[387,2925,2926],{"class":393},"for",[387,2928,2929],{"class":397}," rho ",[387,2931,1151],{"class":393},[387,2933,1635],{"class":409},[387,2935,2311],{"class":566},[387,2937,457],{"class":409},[387,2939,2940],{"class":566}," 0.8",[387,2942,457],{"class":409},[387,2944,2945],{"class":566}," 0.95",[387,2947,656],{"class":409},[387,2949,2950,2953,2955,2957,2959,2961,2963,2965,2967,2969],{"class":389,"line":423},[387,2951,2952],{"class":397},"    r ",[387,2954,585],{"class":584},[387,2956,1199],{"class":559},[387,2958,563],{"class":409},[387,2960,2085],{"class":559},[387,2962,563],{"class":409},[387,2964,1817],{"class":559},[387,2966,2004],{"class":409},[387,2968,1208],{"class":559},[387,2970,570],{"class":409},[387,2972,2973,2976,2978,2980,2982,2984,2986,2988,2990,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3016,3018,3020,3022],{"class":389,"line":430},[387,2974,2975],{"class":397},"    ax",[387,2977,410],{"class":409},[387,2979,2171],{"class":559},[387,2981,563],{"class":409},[387,2983,1668],{"class":559},[387,2985,457],{"class":409},[387,2987,1543],{"class":559},[387,2989,563],{"class":409},[387,2991,2992],{"class":559},"r",[387,2994,888],{"class":409},[387,2996,1221],{"class":1220},[387,2998,1225],{"class":1224},[387,3000,1221],{"class":1220},[387,3002,2182],{"class":409},[387,3004,1176],{"class":559},[387,3006,2004],{"class":409},[387,3008,2226],{"class":1011},[387,3010,585],{"class":584},[387,3012,1277],{"class":617},[387,3014,3015],{"class":1224},"\"rho=",[387,3017,1703],{"class":566},[387,3019,1817],{"class":559},[387,3021,1708],{"class":566},[387,3023,3024],{"class":1224}," \"\n",[387,3026,3027,3030,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3066],{"class":389,"line":438},[387,3028,3029],{"class":617},"            f",[387,3031,3032],{"class":1224},"\"(mean ",[387,3034,1703],{"class":566},[387,3036,1735],{"class":559},[387,3038,563],{"class":409},[387,3040,2992],{"class":559},[387,3042,888],{"class":409},[387,3044,2834],{"class":1220},[387,3046,1225],{"class":1224},[387,3048,2834],{"class":1220},[387,3050,2182],{"class":409},[387,3052,1176],{"class":559},[387,3054,744],{"class":409},[387,3056,1748],{"class":559},[387,3058,1751],{"class":409},[387,3060,1754],{"class":617},[387,3062,1708],{"class":566},[387,3064,3065],{"class":1224},")\"",[387,3067,570],{"class":409},[387,3069,3070,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3110,3112,3114,3116,3118,3120,3122,3124,3126,3129,3131],{"class":389,"line":463},[387,3071,3072],{"class":397},"ax",[387,3074,410],{"class":409},[387,3076,2171],{"class":559},[387,3078,563],{"class":409},[387,3080,1668],{"class":559},[387,3082,457],{"class":409},[387,3084,1543],{"class":559},[387,3086,563],{"class":409},[387,3088,1048],{"class":559},[387,3090,457],{"class":409},[387,3092,1176],{"class":559},[387,3094,2004],{"class":409},[387,3096,2202],{"class":1011},[387,3098,585],{"class":584},[387,3100,1221],{"class":1220},[387,3102,2027],{"class":1224},[387,3104,1221],{"class":1220},[387,3106,457],{"class":409},[387,3108,3109],{"class":1011}," ls",[387,3111,585],{"class":584},[387,3113,1221],{"class":1220},[387,3115,1111],{"class":1224},[387,3117,1221],{"class":1220},[387,3119,457],{"class":409},[387,3121,2226],{"class":1011},[387,3123,585],{"class":584},[387,3125,1221],{"class":1220},[387,3127,3128],{"class":1224},"raw",[387,3130,1221],{"class":1220},[387,3132,570],{"class":409},[387,3134,3135,3137,3139,3141,3143,3145,3148,3150],{"class":389,"line":480},[387,3136,3072],{"class":397},[387,3138,410],{"class":409},[387,3140,2426],{"class":559},[387,3142,563],{"class":409},[387,3144,1221],{"class":1220},[387,3146,3147],{"class":1224},"EMA rho sweep — cosine to truth",[387,3149,1221],{"class":1220},[387,3151,570],{"class":409},[387,3153,3154,3156,3158,3160,3162,3164,3166,3168,3170,3173,3175,3177,3179,3181,3183,3185],{"class":389,"line":507},[387,3155,3072],{"class":397},[387,3157,410],{"class":409},[387,3159,2446],{"class":559},[387,3161,563],{"class":409},[387,3163,1221],{"class":1220},[387,3165,209],{"class":1224},[387,3167,1221],{"class":1220},[387,3169,1508],{"class":409},[387,3171,3172],{"class":397},"; ax",[387,3174,410],{"class":409},[387,3176,2465],{"class":559},[387,3178,563],{"class":409},[387,3180,1221],{"class":1220},[387,3182,2714],{"class":1224},[387,3184,1221],{"class":1220},[387,3186,570],{"class":409},[387,3188,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219],{"class":389,"line":529},[387,3190,3072],{"class":397},[387,3192,410],{"class":409},[387,3194,2485],{"class":559},[387,3196,563],{"class":409},[387,3198,2490],{"class":1011},[387,3200,585],{"class":584},[387,3202,2495],{"class":566},[387,3204,1508],{"class":409},[387,3206,3172],{"class":397},[387,3208,410],{"class":409},[387,3210,2504],{"class":559},[387,3212,563],{"class":409},[387,3214,2509],{"class":1011},[387,3216,585],{"class":584},[387,3218,2514],{"class":566},[387,3220,570],{"class":409},[387,3222,3223,3225,3227,3229,3231,3233,3235,3237],{"class":389,"line":546},[387,3224,2761],{"class":397},[387,3226,410],{"class":409},[387,3228,2766],{"class":559},[387,3230,1751],{"class":409},[387,3232,2771],{"class":397},[387,3234,410],{"class":409},[387,3236,2776],{"class":559},[387,3238,750],{"class":409},[338,3240,3241],{},[2860,3242],{"alt":383,"src":3243},"\u002F_nb\u002F34f37d7fb7e368c6.png",[338,3245,3246,3250,3251,3255],{},[3247,3248,3249],"strong",{},"Takeaway."," EMA is the cheap, robust default. It carries no\nuncertainty, so it cannot tell you ",[3252,3253,3254],"em",{},"how sure"," it is — for that, use a\nKalman \u002F information \u002F vMF filter (notebooks 2-4), or a gallery\n(notebook 5) when one vector per track is too little memory.",[3257,3258,3259],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s2W-s, html code.shiki .s2W-s{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#032F62;--shiki-default-font-style:inherit;--shiki-dark:#9ECBFF;--shiki-dark-font-style:inherit}html pre.shiki code .sithA, html code.shiki .sithA{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#032F62;--shiki-default-font-style:inherit;--shiki-dark:#9ECBFF;--shiki-dark-font-style:inherit}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":383,"searchDepth":423,"depth":423,"links":3261},[3262],{"id":2869,"depth":401,"text":2870},"The workhorse for appearance\u002FReID embeddings. An EMA blend\ne \u003C- rho * e + (1 - rho) * z is a steady-state scalar Kalman\nfilter: the gain (1 - rho) is constant rather than derived from a\ncovariance. It is cheap (O(D)), stable, and is what DeepSORT,\nFairMOT and BoT-SORT use to smooth the per-track feature.","md",{"notebook":426},{"icon":63},{"title":60,"description":3263},"PgTP6BC8FIu0i9OVA6W5_SNDa-FJaZerLZPtVwsofz8",{},1785139890147]