[{"data":1,"prerenderedAt":6548},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Fembedding_filters\u002Fgallery_and_learned":328,"docyard:crossref-index":6547},[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":77,"body":330,"description":340,"extension":6542,"meta":6543,"navigation":6544,"path":78,"seo":6545,"stem":79,"__hash__":6546},"content\u002F5.notebooks\u002Fembedding_filters\u002F5.gallery_and_learned.md",{"type":331,"value":332,"toc":6538},"minimark",[333,337,341,380,1763,1768,1773,1795,2929,2932,3198,3204,3208,3219,3226,4877,5768,5771,5776,6505,6508,6534],[334,335,77],"h1",{"id":336},"embedding-filters-5-memory-bank-learned-propagation",[338,339,340],"p",{},"Two answers to \"one filtered vector per track is not enough memory\":",[342,343,344,362],"ol",{},[345,346,347,351,352,356,357,361],"li",{},[348,349,350],"strong",{},"Gallery (feature bank)"," — store the last ",[353,354,355],"code",{},"K"," embeddings per\ntrack and match a detection against the ",[358,359,360],"em",{},"best"," of them\n(DeepSORT \u002F MeMOT). One good past view re-associates an object\nwhose current appearance has drifted.",[345,363,364,367,368,371,372,375,376,379],{},[348,365,366],{},"Learned propagation (MOTR-style)"," — let a trained module\npropagate the track embedding frame to frame, instead of a\nhand-written filter. unitrack exposes this as ",[353,369,370],{},"LearnedProcess"," \u002F\n",[353,373,374],{},"LearnedObservation"," hooks around any ",[353,377,378],{},"nn.Module",".",[381,382,387],"pre",{"className":383,"code":384,"language":385,"meta":386,"style":386},"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","",[353,388,389,402,423,430,438,463,480,507,529,546,551,573,578,595,609,614,659,666,673,679,685,691,696,724,753,770,796,828,855,876,882,905,940,974,1022,1064,1130,1165,1189,1194,1233,1245,1266,1297,1323,1377,1424,1438,1485,1533,1538,1557,1593,1630,1660,1665,1690,1724],{"__ignoreMap":386},[390,391,394,398],"span",{"class":392,"line":393},"line",1,[390,395,397],{"class":396},"sVHd0","import",[390,399,401],{"class":400},"su5hD"," torch\n",[390,403,405,407,410,413,417,420],{"class":392,"line":404},2,[390,406,397],{"class":396},[390,408,409],{"class":400}," matplotlib",[390,411,379],{"class":412},"sP7_E",[390,414,416],{"class":415},"skxfh","pyplot",[390,418,419],{"class":396}," as",[390,421,422],{"class":400}," plt\n",[390,424,426],{"class":392,"line":425},3,[390,427,429],{"emptyLinePlaceholder":428},true,"\n",[390,431,433,435],{"class":392,"line":432},4,[390,434,397],{"class":396},[390,436,437],{"class":400}," unitrack\n",[390,439,441,444,447,449,452,454,457,460],{"class":392,"line":440},5,[390,442,443],{"class":396},"from",[390,445,446],{"class":400}," unitrack",[390,448,379],{"class":412},[390,450,451],{"class":400},"assignment ",[390,453,397],{"class":396},[390,455,456],{"class":400}," Associate",[390,458,459],{"class":412},",",[390,461,462],{"class":400}," Jonker\n",[390,464,466,468,470,472,475,477],{"class":392,"line":465},6,[390,467,443],{"class":396},[390,469,446],{"class":400},[390,471,379],{"class":412},[390,473,474],{"class":400},"costs ",[390,476,397],{"class":396},[390,478,479],{"class":400}," Cosine\n",[390,481,483,485,487,489,492,494,497,499,502,504],{"class":392,"line":482},7,[390,484,443],{"class":396},[390,486,446],{"class":400},[390,488,379],{"class":412},[390,490,491],{"class":400},"data ",[390,493,397],{"class":396},[390,495,496],{"class":400}," Detections",[390,498,459],{"class":412},[390,500,501],{"class":400}," FrameContext",[390,503,459],{"class":412},[390,505,506],{"class":400}," TensorSpec\n",[390,508,510,512,514,516,519,521,524,526],{"class":392,"line":509},8,[390,511,443],{"class":396},[390,513,446],{"class":400},[390,515,379],{"class":412},[390,517,518],{"class":400},"lifecycle ",[390,520,397],{"class":396},[390,522,523],{"class":400}," IncludeAll",[390,525,459],{"class":412},[390,527,528],{"class":400}," NoLifecycle\n",[390,530,532,534,536,538,541,543],{"class":392,"line":531},9,[390,533,443],{"class":396},[390,535,446],{"class":400},[390,537,379],{"class":412},[390,539,540],{"class":400},"pipeline ",[390,542,397],{"class":396},[390,544,545],{"class":400}," Pipe\n",[390,547,549],{"class":392,"line":548},10,[390,550,429],{"emptyLinePlaceholder":428},[390,552,554,557,559,563,566,570],{"class":392,"line":553},11,[390,555,556],{"class":400},"torch",[390,558,379],{"class":412},[390,560,562],{"class":561},"slqww","manual_seed",[390,564,565],{"class":412},"(",[390,567,569],{"class":568},"srdBf","0",[390,571,572],{"class":412},")\n",[390,574,576],{"class":392,"line":575},12,[390,577,429],{"emptyLinePlaceholder":428},[390,579,581,584,588,591],{"class":392,"line":580},13,[390,582,583],{"class":400},"D ",[390,585,587],{"class":586},"smGrS","=",[390,589,590],{"class":568}," 16",[390,592,594],{"class":593},"sutJx","          # embedding dimensionality (256+ in practice; 16 plots fast)\n",[390,596,598,601,603,606],{"class":392,"line":597},14,[390,599,600],{"class":400},"T ",[390,602,587],{"class":586},[390,604,605],{"class":568}," 44",[390,607,608],{"class":593},"          # frames\n",[390,610,612],{"class":392,"line":611},15,[390,613,429],{"emptyLinePlaceholder":428},[390,615,617,621,625,627,631,633,636,638,641,643,645,647,650,652,656],{"class":392,"line":616},16,[390,618,620],{"class":619},"sbsja","def",[390,622,624],{"class":623},"sGLFI"," make_clip",[390,626,565],{"class":412},[390,628,630],{"class":629},"sFwrP","noise",[390,632,587],{"class":586},[390,634,635],{"class":568},"0.15",[390,637,459],{"class":412},[390,639,640],{"class":629}," seed",[390,642,587],{"class":586},[390,644,569],{"class":568},[390,646,459],{"class":412},[390,648,649],{"class":629}," switch",[390,651,587],{"class":586},[390,653,655],{"class":654},"s39Yj","None",[390,657,658],{"class":412},"):\n",[390,660,662],{"class":392,"line":661},17,[390,663,665],{"class":664},"s2W-s","    \"\"\"\n",[390,667,669],{"class":392,"line":668},18,[390,670,672],{"class":671},"sithA","    A unit embedding that rotates slowly in the (e0, e1) plane plus\n",[390,674,676],{"class":392,"line":675},19,[390,677,678],{"class":671},"    per-frame noise in all D dims. Rotating in a known plane means\n",[390,680,682],{"class":392,"line":681},20,[390,683,684],{"class":671},"    projecting onto dims (0, 1) shows the true path as a circle arc.\n",[390,686,688],{"class":392,"line":687},21,[390,689,690],{"class":671},"    `switch` optionally rotates the plane mid-clip (an appearance change).\n",[390,692,694],{"class":392,"line":693},22,[390,695,665],{"class":664},[390,697,699,702,704,707,709,712,715,717,719,722],{"class":392,"line":698},23,[390,700,701],{"class":400},"    g ",[390,703,587],{"class":586},[390,705,706],{"class":400}," torch",[390,708,379],{"class":412},[390,710,711],{"class":561},"Generator",[390,713,714],{"class":412},"().",[390,716,562],{"class":561},[390,718,565],{"class":412},[390,720,721],{"class":561},"seed",[390,723,572],{"class":412},[390,725,727,730,732,734,736,739,741,744,747,750],{"class":392,"line":726},24,[390,728,729],{"class":400},"    t ",[390,731,587],{"class":586},[390,733,706],{"class":400},[390,735,379],{"class":412},[390,737,738],{"class":561},"arange",[390,740,565],{"class":412},[390,742,743],{"class":561},"T",[390,745,746],{"class":412},").",[390,748,749],{"class":561},"float",[390,751,752],{"class":412},"()\n",[390,754,756,759,761,764,767],{"class":392,"line":755},25,[390,757,758],{"class":400},"    theta ",[390,760,587],{"class":586},[390,762,763],{"class":568}," 0.10",[390,765,766],{"class":586}," *",[390,768,769],{"class":400}," t\n",[390,771,773,776,778,780,782,785,787,789,791,794],{"class":392,"line":772},26,[390,774,775],{"class":400},"    truth ",[390,777,587],{"class":586},[390,779,706],{"class":400},[390,781,379],{"class":412},[390,783,784],{"class":561},"zeros",[390,786,565],{"class":412},[390,788,743],{"class":561},[390,790,459],{"class":412},[390,792,793],{"class":561}," D",[390,795,572],{"class":412},[390,797,799,802,805,808,811,814,816,818,821,823,826],{"class":392,"line":798},27,[390,800,801],{"class":400},"    truth",[390,803,804],{"class":412},"[:,",[390,806,807],{"class":568}," 0",[390,809,810],{"class":412},"]",[390,812,813],{"class":586}," =",[390,815,706],{"class":400},[390,817,379],{"class":412},[390,819,820],{"class":561},"cos",[390,822,565],{"class":412},[390,824,825],{"class":561},"theta",[390,827,572],{"class":412},[390,829,831,833,835,838,840,842,844,846,849,851,853],{"class":392,"line":830},28,[390,832,801],{"class":400},[390,834,804],{"class":412},[390,836,837],{"class":568}," 1",[390,839,810],{"class":412},[390,841,813],{"class":586},[390,843,706],{"class":400},[390,845,379],{"class":412},[390,847,848],{"class":561},"sin",[390,850,565],{"class":412},[390,852,825],{"class":561},[390,854,572],{"class":412},[390,856,858,861,864,867,870,873],{"class":392,"line":857},29,[390,859,860],{"class":396},"    if",[390,862,863],{"class":400}," switch ",[390,865,866],{"class":586},"is",[390,868,869],{"class":586}," not",[390,871,872],{"class":654}," None",[390,874,875],{"class":412},":\n",[390,877,879],{"class":392,"line":878},30,[390,880,881],{"class":593},"        # after `switch`, swap appearance into the (e2, e3) plane.\n",[390,883,885,888,891,894,897,900,902],{"class":392,"line":884},31,[390,886,887],{"class":400},"        truth",[390,889,890],{"class":412},"[",[390,892,893],{"class":400},"switch",[390,895,896],{"class":412},":,",[390,898,899],{"class":412}," :]",[390,901,813],{"class":586},[390,903,904],{"class":568}," 0.0\n",[390,906,908,910,912,914,916,919,921,923,925,927,929,931,933,935,937],{"class":392,"line":907},32,[390,909,887],{"class":400},[390,911,890],{"class":412},[390,913,893],{"class":400},[390,915,896],{"class":412},[390,917,918],{"class":568}," 2",[390,920,810],{"class":412},[390,922,813],{"class":586},[390,924,706],{"class":400},[390,926,379],{"class":412},[390,928,820],{"class":561},[390,930,565],{"class":412},[390,932,825],{"class":561},[390,934,890],{"class":412},[390,936,893],{"class":561},[390,938,939],{"class":412},":])\n",[390,941,943,945,947,949,951,954,956,958,960,962,964,966,968,970,972],{"class":392,"line":942},33,[390,944,887],{"class":400},[390,946,890],{"class":412},[390,948,893],{"class":400},[390,950,896],{"class":412},[390,952,953],{"class":568}," 3",[390,955,810],{"class":412},[390,957,813],{"class":586},[390,959,706],{"class":400},[390,961,379],{"class":412},[390,963,848],{"class":561},[390,965,565],{"class":412},[390,967,825],{"class":561},[390,969,890],{"class":412},[390,971,893],{"class":561},[390,973,939],{"class":412},[390,975,977,980,982,985,988,991,994,996,998,1001,1003,1005,1007,1009,1011,1015,1017,1020],{"class":392,"line":976},34,[390,978,979],{"class":400},"    obs ",[390,981,587],{"class":586},[390,983,984],{"class":400}," truth ",[390,986,987],{"class":586},"+",[390,989,990],{"class":400}," noise ",[390,992,993],{"class":586},"*",[390,995,706],{"class":400},[390,997,379],{"class":412},[390,999,1000],{"class":561},"randn",[390,1002,565],{"class":412},[390,1004,743],{"class":561},[390,1006,459],{"class":412},[390,1008,793],{"class":561},[390,1010,459],{"class":412},[390,1012,1014],{"class":1013},"s99_P"," generator",[390,1016,587],{"class":586},[390,1018,1019],{"class":561},"g",[390,1021,572],{"class":412},[390,1023,1025,1027,1029,1031,1033,1036,1038,1041,1043,1046,1048,1051,1053,1056,1059,1062],{"class":392,"line":1024},35,[390,1026,979],{"class":400},[390,1028,587],{"class":586},[390,1030,706],{"class":400},[390,1032,379],{"class":412},[390,1034,1035],{"class":415},"nn",[390,1037,379],{"class":412},[390,1039,1040],{"class":415},"functional",[390,1042,379],{"class":412},[390,1044,1045],{"class":561},"normalize",[390,1047,565],{"class":412},[390,1049,1050],{"class":561},"obs",[390,1052,459],{"class":412},[390,1054,1055],{"class":1013}," dim",[390,1057,1058],{"class":586},"=-",[390,1060,1061],{"class":568},"1",[390,1063,572],{"class":412},[390,1065,1067,1070,1072,1075,1078,1080,1082,1084,1086,1088,1091,1094,1096,1099,1102,1104,1106,1108,1111,1114,1117,1119,1121,1124,1127],{"class":392,"line":1066},36,[390,1068,1069],{"class":400},"    dets ",[390,1071,587],{"class":586},[390,1073,1074],{"class":412}," [",[390,1076,1077],{"class":561},"Detections",[390,1079,565],{"class":412},[390,1081,125],{"class":1013},[390,1083,587],{"class":586},[390,1085,556],{"class":561},[390,1087,379],{"class":412},[390,1089,1090],{"class":561},"tensor",[390,1092,1093],{"class":412},"([",[390,1095,569],{"class":568},[390,1097,1098],{"class":412},"]),",[390,1100,1101],{"class":1013}," emb",[390,1103,587],{"class":586},[390,1105,1050],{"class":561},[390,1107,890],{"class":412},[390,1109,1110],{"class":561},"k",[390,1112,1113],{"class":412},":",[390,1115,1116],{"class":561},"k ",[390,1118,987],{"class":586},[390,1120,837],{"class":568},[390,1122,1123],{"class":412},"].",[390,1125,1126],{"class":561},"clone",[390,1128,1129],{"class":412},"(),\n",[390,1131,1133,1136,1138,1140,1142,1145,1148,1151,1154,1158,1160,1162],{"class":392,"line":1132},37,[390,1134,1135],{"class":1013},"                       batch_size",[390,1137,587],{"class":586},[390,1139,890],{"class":412},[390,1141,1061],{"class":568},[390,1143,1144],{"class":412},"])",[390,1146,1147],{"class":396}," for",[390,1149,1150],{"class":400}," k ",[390,1152,1153],{"class":396},"in",[390,1155,1157],{"class":1156},"sptTA"," range",[390,1159,565],{"class":412},[390,1161,743],{"class":561},[390,1163,1164],{"class":412},")]\n",[390,1166,1168,1171,1174,1176,1179,1181,1184,1186],{"class":392,"line":1167},38,[390,1169,1170],{"class":396},"    return",[390,1172,1173],{"class":400}," t",[390,1175,459],{"class":412},[390,1177,1178],{"class":400}," truth",[390,1180,459],{"class":412},[390,1182,1183],{"class":400}," obs",[390,1185,459],{"class":412},[390,1187,1188],{"class":400}," dets\n",[390,1190,1192],{"class":392,"line":1191},39,[390,1193,429],{"emptyLinePlaceholder":428},[390,1195,1197,1199,1202,1204,1206,1208,1211,1213,1216,1218,1220,1224,1228,1230],{"class":392,"line":1196},40,[390,1198,620],{"class":619},[390,1200,1201],{"class":623}," run",[390,1203,565],{"class":412},[390,1205,173],{"class":629},[390,1207,459],{"class":412},[390,1209,1210],{"class":629}," dets",[390,1212,459],{"class":412},[390,1214,1215],{"class":629}," fields",[390,1217,587],{"class":586},[390,1219,565],{"class":412},[390,1221,1223],{"class":1222},"sjJ54","\"",[390,1225,1227],{"class":1226},"s_sjI","emb",[390,1229,1223],{"class":1222},[390,1231,1232],{"class":412},",)):\n",[390,1234,1236,1239,1242],{"class":392,"line":1235},41,[390,1237,1238],{"class":664},"    \"\"\"",[390,1240,1241],{"class":671},"Run a single-object clip through a real Tracker; collect snapshot fields.",[390,1243,1244],{"class":664},"\"\"\"\n",[390,1246,1248,1251,1253,1255,1257,1260,1262,1264],{"class":392,"line":1247},42,[390,1249,1250],{"class":400},"    ms ",[390,1252,587],{"class":586},[390,1254,446],{"class":400},[390,1256,379],{"class":412},[390,1258,1259],{"class":561},"MultiStream",[390,1261,565],{"class":412},[390,1263,173],{"class":561},[390,1265,572],{"class":412},[390,1267,1269,1272,1274,1277,1280,1282,1285,1287,1290,1292,1294],{"class":392,"line":1268},43,[390,1270,1271],{"class":400},"    rec ",[390,1273,587],{"class":586},[390,1275,1276],{"class":412}," {",[390,1278,1279],{"class":400},"f",[390,1281,1113],{"class":412},[390,1283,1284],{"class":412}," []",[390,1286,1147],{"class":396},[390,1288,1289],{"class":400}," f ",[390,1291,1153],{"class":396},[390,1293,1215],{"class":400},[390,1295,1296],{"class":412},"}\n",[390,1298,1300,1303,1306,1308,1311,1313,1316,1318,1321],{"class":392,"line":1299},44,[390,1301,1302],{"class":396},"    for",[390,1304,1305],{"class":400}," k",[390,1307,459],{"class":412},[390,1309,1310],{"class":400}," d ",[390,1312,1153],{"class":396},[390,1314,1315],{"class":1156}," enumerate",[390,1317,565],{"class":412},[390,1319,1320],{"class":561},"dets",[390,1322,658],{"class":412},[390,1324,1326,1329,1331,1333,1335,1338,1340,1343,1345,1347,1349,1352,1354,1357,1359,1362,1364,1366,1368,1371,1373,1375],{"class":392,"line":1325},45,[390,1327,1328],{"class":400},"        ctx ",[390,1330,587],{"class":586},[390,1332,501],{"class":400},[390,1334,379],{"class":412},[390,1336,1337],{"class":561},"make",[390,1339,565],{"class":412},[390,1341,1342],{"class":1013},"frame_idx",[390,1344,587],{"class":586},[390,1346,1110],{"class":561},[390,1348,459],{"class":412},[390,1350,1351],{"class":1013}," delta",[390,1353,587],{"class":586},[390,1355,1356],{"class":568},"1.0",[390,1358,459],{"class":412},[390,1360,1361],{"class":1013}," fps",[390,1363,587],{"class":586},[390,1365,1356],{"class":568},[390,1367,459],{"class":412},[390,1369,1370],{"class":1013}," stream_key",[390,1372,587],{"class":586},[390,1374,569],{"class":568},[390,1376,572],{"class":412},[390,1378,1380,1383,1385,1388,1390,1393,1395,1398,1400,1402,1404,1407,1409,1412,1414,1417,1419,1422],{"class":392,"line":1379},46,[390,1381,1382],{"class":400},"        res ",[390,1384,587],{"class":586},[390,1386,1387],{"class":400}," ms",[390,1389,379],{"class":412},[390,1391,1392],{"class":561},"step",[390,1394,565],{"class":412},[390,1396,1397],{"class":1013},"stream_key",[390,1399,587],{"class":586},[390,1401,569],{"class":568},[390,1403,459],{"class":412},[390,1405,1406],{"class":1013}," detections",[390,1408,587],{"class":586},[390,1410,1411],{"class":561},"d",[390,1413,459],{"class":412},[390,1415,1416],{"class":1013}," ctx",[390,1418,587],{"class":586},[390,1420,1421],{"class":561},"ctx",[390,1423,572],{"class":412},[390,1425,1427,1430,1432,1434,1436],{"class":392,"line":1426},47,[390,1428,1429],{"class":396},"        for",[390,1431,1289],{"class":400},[390,1433,1153],{"class":396},[390,1435,1215],{"class":400},[390,1437,875],{"class":412},[390,1439,1441,1444,1446,1448,1450,1453,1455,1458,1460,1463,1465,1468,1470,1473,1476,1478,1480,1482],{"class":392,"line":1440},48,[390,1442,1443],{"class":400},"            rec",[390,1445,890],{"class":412},[390,1447,1279],{"class":400},[390,1449,1123],{"class":412},[390,1451,1452],{"class":561},"append",[390,1454,565],{"class":412},[390,1456,1457],{"class":1156},"getattr",[390,1459,565],{"class":412},[390,1461,1462],{"class":561},"res",[390,1464,379],{"class":412},[390,1466,1467],{"class":415},"snapshot",[390,1469,459],{"class":412},[390,1471,1472],{"class":561}," f",[390,1474,1475],{"class":412},")[",[390,1477,569],{"class":568},[390,1479,1123],{"class":412},[390,1481,1126],{"class":561},[390,1483,1484],{"class":412},"())\n",[390,1486,1488,1490,1492,1494,1496,1498,1500,1503,1505,1508,1511,1513,1515,1517,1520,1522,1525,1527,1530],{"class":392,"line":1487},49,[390,1489,1170],{"class":396},[390,1491,1276],{"class":412},[390,1493,1279],{"class":400},[390,1495,1113],{"class":412},[390,1497,706],{"class":400},[390,1499,379],{"class":412},[390,1501,1502],{"class":561},"stack",[390,1504,565],{"class":412},[390,1506,1507],{"class":561},"v",[390,1509,1510],{"class":412},")",[390,1512,1147],{"class":396},[390,1514,1472],{"class":400},[390,1516,459],{"class":412},[390,1518,1519],{"class":400}," v ",[390,1521,1153],{"class":396},[390,1523,1524],{"class":400}," rec",[390,1526,379],{"class":412},[390,1528,1529],{"class":561},"items",[390,1531,1532],{"class":412},"()}\n",[390,1534,1536],{"class":392,"line":1535},50,[390,1537,429],{"emptyLinePlaceholder":428},[390,1539,1541,1543,1546,1548,1551,1553,1555],{"class":392,"line":1540},51,[390,1542,620],{"class":619},[390,1544,1545],{"class":623}," cos_to_truth",[390,1547,565],{"class":412},[390,1549,1550],{"class":629},"est",[390,1552,459],{"class":412},[390,1554,1178],{"class":629},[390,1556,658],{"class":412},[390,1558,1560,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591],{"class":392,"line":1559},52,[390,1561,1562],{"class":400},"    e ",[390,1564,587],{"class":586},[390,1566,706],{"class":400},[390,1568,379],{"class":412},[390,1570,1035],{"class":415},[390,1572,379],{"class":412},[390,1574,1040],{"class":415},[390,1576,379],{"class":412},[390,1578,1045],{"class":561},[390,1580,565],{"class":412},[390,1582,1550],{"class":561},[390,1584,459],{"class":412},[390,1586,1055],{"class":1013},[390,1588,1058],{"class":586},[390,1590,1061],{"class":568},[390,1592,572],{"class":412},[390,1594,1596,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1620,1622,1624,1626,1628],{"class":392,"line":1595},53,[390,1597,1598],{"class":400},"    u ",[390,1600,587],{"class":586},[390,1602,706],{"class":400},[390,1604,379],{"class":412},[390,1606,1035],{"class":415},[390,1608,379],{"class":412},[390,1610,1040],{"class":415},[390,1612,379],{"class":412},[390,1614,1045],{"class":561},[390,1616,565],{"class":412},[390,1618,1619],{"class":561},"truth",[390,1621,459],{"class":412},[390,1623,1055],{"class":1013},[390,1625,1058],{"class":586},[390,1627,1061],{"class":568},[390,1629,572],{"class":412},[390,1631,1633,1635,1638,1641,1643,1646,1648,1651,1653,1656,1658],{"class":392,"line":1632},54,[390,1634,1170],{"class":396},[390,1636,1637],{"class":412}," (",[390,1639,1640],{"class":400},"e ",[390,1642,993],{"class":586},[390,1644,1645],{"class":400}," u",[390,1647,746],{"class":412},[390,1649,1650],{"class":561},"sum",[390,1652,565],{"class":412},[390,1654,1655],{"class":586},"-",[390,1657,1061],{"class":568},[390,1659,572],{"class":412},[390,1661,1663],{"class":392,"line":1662},55,[390,1664,429],{"emptyLinePlaceholder":428},[390,1666,1668,1671,1673,1675,1677,1679,1681,1684,1686,1688],{"class":392,"line":1667},56,[390,1669,1670],{"class":400},"t",[390,1672,459],{"class":412},[390,1674,1178],{"class":400},[390,1676,459],{"class":412},[390,1678,1183],{"class":400},[390,1680,459],{"class":412},[390,1682,1683],{"class":400}," dets ",[390,1685,587],{"class":586},[390,1687,624],{"class":561},[390,1689,752],{"class":412},[390,1691,1693,1696,1698,1700,1703,1706,1708,1711,1714,1716,1719,1721],{"class":392,"line":1692},57,[390,1694,1695],{"class":1156},"print",[390,1697,565],{"class":412},[390,1699,1279],{"class":619},[390,1701,1702],{"class":1226},"\"clip: ",[390,1704,1705],{"class":568},"{",[390,1707,743],{"class":561},[390,1709,1710],{"class":568},"}",[390,1712,1713],{"class":1226}," frames, D=",[390,1715,1705],{"class":568},[390,1717,1718],{"class":561},"D",[390,1720,1710],{"class":568},[390,1722,1723],{"class":1226},"; raw-detection mean cosine-to-truth \"\n",[390,1725,1727,1730,1733,1735,1738,1740,1742,1744,1746,1748,1751,1754,1757,1759,1761],{"class":392,"line":1726},58,[390,1728,1729],{"class":619},"      f",[390,1731,1732],{"class":1226},"\"= ",[390,1734,1705],{"class":568},[390,1736,1737],{"class":561},"cos_to_truth",[390,1739,565],{"class":412},[390,1741,1050],{"class":561},[390,1743,459],{"class":412},[390,1745,1178],{"class":561},[390,1747,746],{"class":412},[390,1749,1750],{"class":561},"mean",[390,1752,1753],{"class":412},"()",[390,1755,1756],{"class":619},":.3f",[390,1758,1710],{"class":568},[390,1760,1223],{"class":1226},[390,1762,572],{"class":412},[1764,1765],"docyard-notebook-output",{"data":1766,"kind":1767},"Y2xpcDogNDQgZnJhbWVzLCBEPTE2OyByYXctZGV0ZWN0aW9uIG1lYW4gY29zaW5lLXRvLXRydXRoID0gMC44NTUK","stream",[1769,1770,1772],"h2",{"id":1771},"gallery-beats-a-single-embedding-across-an-appearance-switch","Gallery beats a single embedding across an appearance switch",[338,1774,1775,1776,1779,1780,1783,1784,1787,1788,1791,1792,1794],{},"We build a two-object clip where object A's appearance ",[348,1777,1778],{},"switches","\npartway (a viewpoint change), then later a detection resembling its\n",[358,1781,1782],{},"old"," appearance returns. A single-embedding matcher (",[353,1785,1786],{},"Cosine"," on the\nlatest vector) has forgotten the old look; a ",[353,1789,1790],{},"GalleryCost"," that keeps\n",[353,1793,355],{}," past views still recognises it.",[381,1796,1798],{"className":383,"code":1797,"language":385,"meta":386,"style":386},"from unitrack.costs import GalleryCost\nfrom unitrack.states import gallery_state_entries\n\n# Tracklet A: appearance in plane (e0,e1). A returning query that looks\n# like A's *early* appearance should still match A's gallery.\ntorch.manual_seed(1)\nearly = torch.zeros(1, D); early[0, 0] = 1.0\nlate = torch.zeros(1, D); late[0, 2] = 1.0          # A after a switch\nviews = [early, 0.5 * (early + late), late]          # A's history, oldest first\n\ngstates = gallery_state_entries(\"emb\", dim=D, capacity=6)\nfrom unitrack.states import FromDetectionField, NoopProcess, State, Replace\nsingle = {\"emb\": State(schema=TensorSpec(shape=(D,), dtype=torch.float32),\n                       process=NoopProcess(), observation=Replace(\"emb\"),\n                       init=FromDetectionField(\"emb\"))}\n\ndef feed(states, cost):\n    tr = unitrack.Tracker(root=Pipe(cost=cost, assoc=Associate(Jonker(threshold=0.6))),\n                          states=states, lifecycle=NoLifecycle(), visibility=IncludeAll())\n    ms = unitrack.MultiStream(tr)\n    snap = None\n    for k, v in enumerate(views):\n        res = ms.step(stream_key=0, detections=Detections(index=torch.tensor([0]),\n                      emb=torch.nn.functional.normalize(v, dim=-1), batch_size=[1]),\n                      ctx=FrameContext.make(k, stream_key=0))\n        snap = res.snapshot\n    return snap\n\n# After observing A's history, a query resembling the EARLY view returns.\nquery = torch.nn.functional.normalize(early + 0.05 * torch.randn(1, D), dim=-1)\nsnap_g = feed(dict(gstates), GalleryCost(\"emb_gallery\", \"emb_count\", \"emb\", reduce=\"max\"))\nsnap_s = feed(dict(single), Cosine(\"emb\"))\nds_q = Detections(index=torch.tensor([0]), emb=query, batch_size=[1])\nctx = FrameContext.make(99)\ncost_gallery = GalleryCost(\"emb_gallery\", \"emb_count\", \"emb\", reduce=\"max\")(\n    snap_g, ds_q, ctx).matrix.item()\ncost_single = Cosine(\"emb\")(snap_s, ds_q, ctx).matrix.item()\nn_views = int(snap_g.emb_count[0].item())\nprint(\"returning early-appearance query:\")\nprint(f\"  single-embedding cost (latest view only): {cost_single:.3f}  (high -> missed)\")\nprint(f\"  gallery cost (best of {n_views} stored views):  \"\n      f\"{cost_gallery:.3f}  (low -> re-associated)\")\n\n",[353,1799,1800,1815,1831,1835,1840,1845,1859,1900,1944,1982,1986,2024,2054,2112,2143,2164,2168,2186,2246,2277,2296,2306,2327,2374,2420,2449,2464,2471,2475,2480,2536,2604,2637,2684,2704,2752,2778,2819,2848,2863,2888,2909],{"__ignoreMap":386},[390,1801,1802,1804,1806,1808,1810,1812],{"class":392,"line":393},[390,1803,443],{"class":396},[390,1805,446],{"class":400},[390,1807,379],{"class":412},[390,1809,474],{"class":400},[390,1811,397],{"class":396},[390,1813,1814],{"class":400}," GalleryCost\n",[390,1816,1817,1819,1821,1823,1826,1828],{"class":392,"line":404},[390,1818,443],{"class":396},[390,1820,446],{"class":400},[390,1822,379],{"class":412},[390,1824,1825],{"class":400},"states ",[390,1827,397],{"class":396},[390,1829,1830],{"class":400}," gallery_state_entries\n",[390,1832,1833],{"class":392,"line":425},[390,1834,429],{"emptyLinePlaceholder":428},[390,1836,1837],{"class":392,"line":432},[390,1838,1839],{"class":593},"# Tracklet A: appearance in plane (e0,e1). A returning query that looks\n",[390,1841,1842],{"class":392,"line":440},[390,1843,1844],{"class":593},"# like A's *early* appearance should still match A's gallery.\n",[390,1846,1847,1849,1851,1853,1855,1857],{"class":392,"line":465},[390,1848,556],{"class":400},[390,1850,379],{"class":412},[390,1852,562],{"class":561},[390,1854,565],{"class":412},[390,1856,1061],{"class":568},[390,1858,572],{"class":412},[390,1860,1861,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1885,1887,1889,1891,1893,1895,1897],{"class":392,"line":482},[390,1862,1863],{"class":400},"early ",[390,1865,587],{"class":586},[390,1867,706],{"class":400},[390,1869,379],{"class":412},[390,1871,784],{"class":561},[390,1873,565],{"class":412},[390,1875,1061],{"class":568},[390,1877,459],{"class":412},[390,1879,793],{"class":561},[390,1881,1510],{"class":412},[390,1883,1884],{"class":400},"; early",[390,1886,890],{"class":412},[390,1888,569],{"class":568},[390,1890,459],{"class":412},[390,1892,807],{"class":568},[390,1894,810],{"class":412},[390,1896,813],{"class":586},[390,1898,1899],{"class":568}," 1.0\n",[390,1901,1902,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1926,1928,1930,1932,1934,1936,1938,1941],{"class":392,"line":509},[390,1903,1904],{"class":400},"late ",[390,1906,587],{"class":586},[390,1908,706],{"class":400},[390,1910,379],{"class":412},[390,1912,784],{"class":561},[390,1914,565],{"class":412},[390,1916,1061],{"class":568},[390,1918,459],{"class":412},[390,1920,793],{"class":561},[390,1922,1510],{"class":412},[390,1924,1925],{"class":400},"; late",[390,1927,890],{"class":412},[390,1929,569],{"class":568},[390,1931,459],{"class":412},[390,1933,918],{"class":568},[390,1935,810],{"class":412},[390,1937,813],{"class":586},[390,1939,1940],{"class":568}," 1.0",[390,1942,1943],{"class":593},"          # A after a switch\n",[390,1945,1946,1949,1951,1953,1956,1958,1961,1963,1965,1967,1969,1972,1975,1977,1979],{"class":392,"line":531},[390,1947,1948],{"class":400},"views ",[390,1950,587],{"class":586},[390,1952,1074],{"class":412},[390,1954,1955],{"class":400},"early",[390,1957,459],{"class":412},[390,1959,1960],{"class":568}," 0.5",[390,1962,766],{"class":586},[390,1964,1637],{"class":412},[390,1966,1863],{"class":400},[390,1968,987],{"class":586},[390,1970,1971],{"class":400}," late",[390,1973,1974],{"class":412},"),",[390,1976,1971],{"class":400},[390,1978,810],{"class":412},[390,1980,1981],{"class":593},"          # A's history, oldest first\n",[390,1983,1984],{"class":392,"line":548},[390,1985,429],{"emptyLinePlaceholder":428},[390,1987,1988,1991,1993,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2017,2019,2022],{"class":392,"line":553},[390,1989,1990],{"class":400},"gstates ",[390,1992,587],{"class":586},[390,1994,1995],{"class":561}," gallery_state_entries",[390,1997,565],{"class":412},[390,1999,1223],{"class":1222},[390,2001,1227],{"class":1226},[390,2003,1223],{"class":1222},[390,2005,459],{"class":412},[390,2007,1055],{"class":1013},[390,2009,587],{"class":586},[390,2011,1718],{"class":561},[390,2013,459],{"class":412},[390,2015,2016],{"class":1013}," capacity",[390,2018,587],{"class":586},[390,2020,2021],{"class":568},"6",[390,2023,572],{"class":412},[390,2025,2026,2028,2030,2032,2034,2036,2039,2041,2044,2046,2049,2051],{"class":392,"line":575},[390,2027,443],{"class":396},[390,2029,446],{"class":400},[390,2031,379],{"class":412},[390,2033,1825],{"class":400},[390,2035,397],{"class":396},[390,2037,2038],{"class":400}," FromDetectionField",[390,2040,459],{"class":412},[390,2042,2043],{"class":400}," NoopProcess",[390,2045,459],{"class":412},[390,2047,2048],{"class":400}," State",[390,2050,459],{"class":412},[390,2052,2053],{"class":400}," Replace\n",[390,2055,2056,2059,2061,2063,2065,2067,2069,2071,2073,2075,2078,2080,2083,2085,2088,2090,2092,2094,2097,2100,2102,2104,2106,2109],{"class":392,"line":580},[390,2057,2058],{"class":400},"single ",[390,2060,587],{"class":586},[390,2062,1276],{"class":412},[390,2064,1223],{"class":1222},[390,2066,1227],{"class":1226},[390,2068,1223],{"class":1222},[390,2070,1113],{"class":412},[390,2072,2048],{"class":561},[390,2074,565],{"class":412},[390,2076,2077],{"class":1013},"schema",[390,2079,587],{"class":586},[390,2081,2082],{"class":561},"TensorSpec",[390,2084,565],{"class":412},[390,2086,2087],{"class":1013},"shape",[390,2089,587],{"class":586},[390,2091,565],{"class":412},[390,2093,1718],{"class":561},[390,2095,2096],{"class":412},",),",[390,2098,2099],{"class":1013}," dtype",[390,2101,587],{"class":586},[390,2103,556],{"class":561},[390,2105,379],{"class":412},[390,2107,2108],{"class":415},"float32",[390,2110,2111],{"class":412},"),\n",[390,2113,2114,2117,2119,2122,2125,2128,2130,2133,2135,2137,2139,2141],{"class":392,"line":597},[390,2115,2116],{"class":1013},"                       process",[390,2118,587],{"class":586},[390,2120,2121],{"class":561},"NoopProcess",[390,2123,2124],{"class":412},"(),",[390,2126,2127],{"class":1013}," observation",[390,2129,587],{"class":586},[390,2131,2132],{"class":561},"Replace",[390,2134,565],{"class":412},[390,2136,1223],{"class":1222},[390,2138,1227],{"class":1226},[390,2140,1223],{"class":1222},[390,2142,2111],{"class":412},[390,2144,2145,2148,2150,2153,2155,2157,2159,2161],{"class":392,"line":611},[390,2146,2147],{"class":1013},"                       init",[390,2149,587],{"class":586},[390,2151,2152],{"class":561},"FromDetectionField",[390,2154,565],{"class":412},[390,2156,1223],{"class":1222},[390,2158,1227],{"class":1226},[390,2160,1223],{"class":1222},[390,2162,2163],{"class":412},"))}\n",[390,2165,2166],{"class":392,"line":616},[390,2167,429],{"emptyLinePlaceholder":428},[390,2169,2170,2172,2175,2177,2179,2181,2184],{"class":392,"line":661},[390,2171,620],{"class":619},[390,2173,2174],{"class":623}," feed",[390,2176,565],{"class":412},[390,2178,270],{"class":629},[390,2180,459],{"class":412},[390,2182,2183],{"class":629}," cost",[390,2185,658],{"class":412},[390,2187,2188,2191,2193,2195,2197,2200,2202,2205,2207,2210,2212,2214,2216,2218,2220,2223,2225,2228,2230,2233,2235,2238,2240,2243],{"class":392,"line":668},[390,2189,2190],{"class":400},"    tr ",[390,2192,587],{"class":586},[390,2194,446],{"class":400},[390,2196,379],{"class":412},[390,2198,2199],{"class":561},"Tracker",[390,2201,565],{"class":412},[390,2203,2204],{"class":1013},"root",[390,2206,587],{"class":586},[390,2208,2209],{"class":561},"Pipe",[390,2211,565],{"class":412},[390,2213,203],{"class":1013},[390,2215,587],{"class":586},[390,2217,203],{"class":561},[390,2219,459],{"class":412},[390,2221,2222],{"class":1013}," assoc",[390,2224,587],{"class":586},[390,2226,2227],{"class":561},"Associate",[390,2229,565],{"class":412},[390,2231,2232],{"class":561},"Jonker",[390,2234,565],{"class":412},[390,2236,2237],{"class":1013},"threshold",[390,2239,587],{"class":586},[390,2241,2242],{"class":568},"0.6",[390,2244,2245],{"class":412},"))),\n",[390,2247,2248,2251,2253,2255,2257,2260,2262,2265,2267,2270,2272,2275],{"class":392,"line":675},[390,2249,2250],{"class":1013},"                          states",[390,2252,587],{"class":586},[390,2254,270],{"class":561},[390,2256,459],{"class":412},[390,2258,2259],{"class":1013}," lifecycle",[390,2261,587],{"class":586},[390,2263,2264],{"class":561},"NoLifecycle",[390,2266,2124],{"class":412},[390,2268,2269],{"class":1013}," visibility",[390,2271,587],{"class":586},[390,2273,2274],{"class":561},"IncludeAll",[390,2276,1484],{"class":412},[390,2278,2279,2281,2283,2285,2287,2289,2291,2294],{"class":392,"line":681},[390,2280,1250],{"class":400},[390,2282,587],{"class":586},[390,2284,446],{"class":400},[390,2286,379],{"class":412},[390,2288,1259],{"class":561},[390,2290,565],{"class":412},[390,2292,2293],{"class":561},"tr",[390,2295,572],{"class":412},[390,2297,2298,2301,2303],{"class":392,"line":687},[390,2299,2300],{"class":400},"    snap ",[390,2302,587],{"class":586},[390,2304,2305],{"class":654}," None\n",[390,2307,2308,2310,2312,2314,2316,2318,2320,2322,2325],{"class":392,"line":693},[390,2309,1302],{"class":396},[390,2311,1305],{"class":400},[390,2313,459],{"class":412},[390,2315,1519],{"class":400},[390,2317,1153],{"class":396},[390,2319,1315],{"class":1156},[390,2321,565],{"class":412},[390,2323,2324],{"class":561},"views",[390,2326,658],{"class":412},[390,2328,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367,2369,2371],{"class":392,"line":698},[390,2330,1382],{"class":400},[390,2332,587],{"class":586},[390,2334,1387],{"class":400},[390,2336,379],{"class":412},[390,2338,1392],{"class":561},[390,2340,565],{"class":412},[390,2342,1397],{"class":1013},[390,2344,587],{"class":586},[390,2346,569],{"class":568},[390,2348,459],{"class":412},[390,2350,1406],{"class":1013},[390,2352,587],{"class":586},[390,2354,1077],{"class":561},[390,2356,565],{"class":412},[390,2358,125],{"class":1013},[390,2360,587],{"class":586},[390,2362,556],{"class":561},[390,2364,379],{"class":412},[390,2366,1090],{"class":561},[390,2368,1093],{"class":412},[390,2370,569],{"class":568},[390,2372,2373],{"class":412},"]),\n",[390,2375,2376,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2412,2414,2416,2418],{"class":392,"line":726},[390,2377,2378],{"class":1013},"                      emb",[390,2380,587],{"class":586},[390,2382,556],{"class":561},[390,2384,379],{"class":412},[390,2386,1035],{"class":415},[390,2388,379],{"class":412},[390,2390,1040],{"class":415},[390,2392,379],{"class":412},[390,2394,1045],{"class":561},[390,2396,565],{"class":412},[390,2398,1507],{"class":561},[390,2400,459],{"class":412},[390,2402,1055],{"class":1013},[390,2404,1058],{"class":586},[390,2406,1061],{"class":568},[390,2408,1974],{"class":412},[390,2410,2411],{"class":1013}," batch_size",[390,2413,587],{"class":586},[390,2415,890],{"class":412},[390,2417,1061],{"class":568},[390,2419,2373],{"class":412},[390,2421,2422,2425,2427,2430,2432,2434,2436,2438,2440,2442,2444,2446],{"class":392,"line":755},[390,2423,2424],{"class":1013},"                      ctx",[390,2426,587],{"class":586},[390,2428,2429],{"class":561},"FrameContext",[390,2431,379],{"class":412},[390,2433,1337],{"class":561},[390,2435,565],{"class":412},[390,2437,1110],{"class":561},[390,2439,459],{"class":412},[390,2441,1370],{"class":1013},[390,2443,587],{"class":586},[390,2445,569],{"class":568},[390,2447,2448],{"class":412},"))\n",[390,2450,2451,2454,2456,2459,2461],{"class":392,"line":772},[390,2452,2453],{"class":400},"        snap ",[390,2455,587],{"class":586},[390,2457,2458],{"class":400}," res",[390,2460,379],{"class":412},[390,2462,2463],{"class":415},"snapshot\n",[390,2465,2466,2468],{"class":392,"line":798},[390,2467,1170],{"class":396},[390,2469,2470],{"class":400}," snap\n",[390,2472,2473],{"class":392,"line":830},[390,2474,429],{"emptyLinePlaceholder":428},[390,2476,2477],{"class":392,"line":857},[390,2478,2479],{"class":593},"# After observing A's history, a query resembling the EARLY view returns.\n",[390,2481,2482,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2510,2512,2514,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534],{"class":392,"line":878},[390,2483,2484],{"class":400},"query ",[390,2486,587],{"class":586},[390,2488,706],{"class":400},[390,2490,379],{"class":412},[390,2492,1035],{"class":415},[390,2494,379],{"class":412},[390,2496,1040],{"class":415},[390,2498,379],{"class":412},[390,2500,1045],{"class":561},[390,2502,565],{"class":412},[390,2504,1863],{"class":561},[390,2506,987],{"class":586},[390,2508,2509],{"class":568}," 0.05",[390,2511,766],{"class":586},[390,2513,706],{"class":561},[390,2515,379],{"class":412},[390,2517,1000],{"class":561},[390,2519,565],{"class":412},[390,2521,1061],{"class":568},[390,2523,459],{"class":412},[390,2525,793],{"class":561},[390,2527,1974],{"class":412},[390,2529,1055],{"class":1013},[390,2531,1058],{"class":586},[390,2533,1061],{"class":568},[390,2535,572],{"class":412},[390,2537,2538,2541,2543,2545,2547,2551,2553,2556,2558,2561,2563,2565,2568,2570,2572,2575,2578,2580,2582,2584,2586,2588,2590,2593,2595,2597,2600,2602],{"class":392,"line":884},[390,2539,2540],{"class":400},"snap_g ",[390,2542,587],{"class":586},[390,2544,2174],{"class":561},[390,2546,565],{"class":412},[390,2548,2550],{"class":2549},"sZMiF","dict",[390,2552,565],{"class":412},[390,2554,2555],{"class":561},"gstates",[390,2557,1974],{"class":412},[390,2559,2560],{"class":561}," GalleryCost",[390,2562,565],{"class":412},[390,2564,1223],{"class":1222},[390,2566,2567],{"class":1226},"emb_gallery",[390,2569,1223],{"class":1222},[390,2571,459],{"class":412},[390,2573,2574],{"class":1222}," \"",[390,2576,2577],{"class":1226},"emb_count",[390,2579,1223],{"class":1222},[390,2581,459],{"class":412},[390,2583,2574],{"class":1222},[390,2585,1227],{"class":1226},[390,2587,1223],{"class":1222},[390,2589,459],{"class":412},[390,2591,2592],{"class":1013}," reduce",[390,2594,587],{"class":586},[390,2596,1223],{"class":1222},[390,2598,2599],{"class":1226},"max",[390,2601,1223],{"class":1222},[390,2603,2448],{"class":412},[390,2605,2606,2609,2611,2613,2615,2617,2619,2622,2624,2627,2629,2631,2633,2635],{"class":392,"line":907},[390,2607,2608],{"class":400},"snap_s ",[390,2610,587],{"class":586},[390,2612,2174],{"class":561},[390,2614,565],{"class":412},[390,2616,2550],{"class":2549},[390,2618,565],{"class":412},[390,2620,2621],{"class":561},"single",[390,2623,1974],{"class":412},[390,2625,2626],{"class":561}," Cosine",[390,2628,565],{"class":412},[390,2630,1223],{"class":1222},[390,2632,1227],{"class":1226},[390,2634,1223],{"class":1222},[390,2636,2448],{"class":412},[390,2638,2639,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668,2671,2673,2675,2677,2679,2681],{"class":392,"line":942},[390,2640,2641],{"class":400},"ds_q ",[390,2643,587],{"class":586},[390,2645,496],{"class":561},[390,2647,565],{"class":412},[390,2649,125],{"class":1013},[390,2651,587],{"class":586},[390,2653,556],{"class":561},[390,2655,379],{"class":412},[390,2657,1090],{"class":561},[390,2659,1093],{"class":412},[390,2661,569],{"class":568},[390,2663,1098],{"class":412},[390,2665,1101],{"class":1013},[390,2667,587],{"class":586},[390,2669,2670],{"class":561},"query",[390,2672,459],{"class":412},[390,2674,2411],{"class":1013},[390,2676,587],{"class":586},[390,2678,890],{"class":412},[390,2680,1061],{"class":568},[390,2682,2683],{"class":412},"])\n",[390,2685,2686,2689,2691,2693,2695,2697,2699,2702],{"class":392,"line":976},[390,2687,2688],{"class":400},"ctx ",[390,2690,587],{"class":586},[390,2692,501],{"class":400},[390,2694,379],{"class":412},[390,2696,1337],{"class":561},[390,2698,565],{"class":412},[390,2700,2701],{"class":568},"99",[390,2703,572],{"class":412},[390,2705,2706,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749],{"class":392,"line":1024},[390,2707,2708],{"class":400},"cost_gallery ",[390,2710,587],{"class":586},[390,2712,2560],{"class":561},[390,2714,565],{"class":412},[390,2716,1223],{"class":1222},[390,2718,2567],{"class":1226},[390,2720,1223],{"class":1222},[390,2722,459],{"class":412},[390,2724,2574],{"class":1222},[390,2726,2577],{"class":1226},[390,2728,1223],{"class":1222},[390,2730,459],{"class":412},[390,2732,2574],{"class":1222},[390,2734,1227],{"class":1226},[390,2736,1223],{"class":1222},[390,2738,459],{"class":412},[390,2740,2592],{"class":1013},[390,2742,587],{"class":586},[390,2744,1223],{"class":1222},[390,2746,2599],{"class":1226},[390,2748,1223],{"class":1222},[390,2750,2751],{"class":412},")(\n",[390,2753,2754,2757,2759,2762,2764,2766,2768,2771,2773,2776],{"class":392,"line":1066},[390,2755,2756],{"class":561},"    snap_g",[390,2758,459],{"class":412},[390,2760,2761],{"class":561}," ds_q",[390,2763,459],{"class":412},[390,2765,1416],{"class":561},[390,2767,746],{"class":412},[390,2769,2770],{"class":415},"matrix",[390,2772,379],{"class":412},[390,2774,2775],{"class":561},"item",[390,2777,752],{"class":412},[390,2779,2780,2783,2785,2787,2789,2791,2793,2795,2798,2801,2803,2805,2807,2809,2811,2813,2815,2817],{"class":392,"line":1132},[390,2781,2782],{"class":400},"cost_single ",[390,2784,587],{"class":586},[390,2786,2626],{"class":561},[390,2788,565],{"class":412},[390,2790,1223],{"class":1222},[390,2792,1227],{"class":1226},[390,2794,1223],{"class":1222},[390,2796,2797],{"class":412},")(",[390,2799,2800],{"class":561},"snap_s",[390,2802,459],{"class":412},[390,2804,2761],{"class":561},[390,2806,459],{"class":412},[390,2808,1416],{"class":561},[390,2810,746],{"class":412},[390,2812,2770],{"class":415},[390,2814,379],{"class":412},[390,2816,2775],{"class":561},[390,2818,752],{"class":412},[390,2820,2821,2824,2826,2829,2831,2834,2836,2838,2840,2842,2844,2846],{"class":392,"line":1167},[390,2822,2823],{"class":400},"n_views ",[390,2825,587],{"class":586},[390,2827,2828],{"class":2549}," int",[390,2830,565],{"class":412},[390,2832,2833],{"class":561},"snap_g",[390,2835,379],{"class":412},[390,2837,2577],{"class":415},[390,2839,890],{"class":412},[390,2841,569],{"class":568},[390,2843,1123],{"class":412},[390,2845,2775],{"class":561},[390,2847,1484],{"class":412},[390,2849,2850,2852,2854,2856,2859,2861],{"class":392,"line":1191},[390,2851,1695],{"class":1156},[390,2853,565],{"class":412},[390,2855,1223],{"class":1222},[390,2857,2858],{"class":1226},"returning early-appearance query:",[390,2860,1223],{"class":1222},[390,2862,572],{"class":412},[390,2864,2865,2867,2869,2871,2874,2876,2879,2881,2883,2886],{"class":392,"line":1196},[390,2866,1695],{"class":1156},[390,2868,565],{"class":412},[390,2870,1279],{"class":619},[390,2872,2873],{"class":1226},"\"  single-embedding cost (latest view only): ",[390,2875,1705],{"class":568},[390,2877,2878],{"class":561},"cost_single",[390,2880,1756],{"class":619},[390,2882,1710],{"class":568},[390,2884,2885],{"class":1226},"  (high -> missed)\"",[390,2887,572],{"class":412},[390,2889,2890,2892,2894,2896,2899,2901,2904,2906],{"class":392,"line":1235},[390,2891,1695],{"class":1156},[390,2893,565],{"class":412},[390,2895,1279],{"class":619},[390,2897,2898],{"class":1226},"\"  gallery cost (best of ",[390,2900,1705],{"class":568},[390,2902,2903],{"class":561},"n_views",[390,2905,1710],{"class":568},[390,2907,2908],{"class":1226}," stored views):  \"\n",[390,2910,2911,2913,2915,2917,2920,2922,2924,2927],{"class":392,"line":1247},[390,2912,1729],{"class":619},[390,2914,1223],{"class":1226},[390,2916,1705],{"class":568},[390,2918,2919],{"class":561},"cost_gallery",[390,2921,1756],{"class":619},[390,2923,1710],{"class":568},[390,2925,2926],{"class":1226},"  (low -> re-associated)\"",[390,2928,572],{"class":412},[1764,2930],{"data":2931,"kind":1767},"cmV0dXJuaW5nIGVhcmx5LWFwcGVhcmFuY2UgcXVlcnk6CiAgc2luZ2xlLWVtYmVkZGluZyBjb3N0IChsYXRlc3QgdmlldyBvbmx5KTogMS4wMzUgIChoaWdoIC0+IG1pc3NlZCkKICBnYWxsZXJ5IGNvc3QgKGJlc3Qgb2YgMyBzdG9yZWQgdmlld3MpOiAgMC4wMTcgIChsb3cgLT4gcmUtYXNzb2NpYXRlZCkK",[381,2933,2935],{"className":383,"code":2934,"language":385,"meta":386,"style":386},"fig, ax = plt.subplots(figsize=(6, 4))\nax.bar([\"single\\n(latest)\", \"gallery\\n(best view)\"],\n       [cost_single, cost_gallery],\n       color=[\"tab:red\", \"tab:green\"])\nax.axhline(0.4, color=\"0.5\", ls=\"--\", label=\"example gate threshold\")\nax.set_ylabel(\"matching cost (lower = match)\")\nax.set_title(\"Re-associating a returning appearance\")\nax.legend(fontsize=8)\nplt.tight_layout(); plt.show()\n\n",[353,2936,2937,2975,3016,3030,3057,3115,3135,3155,3176],{"__ignoreMap":386},[390,2938,2939,2942,2944,2947,2949,2952,2954,2957,2959,2962,2964,2966,2968,2970,2973],{"class":392,"line":393},[390,2940,2941],{"class":400},"fig",[390,2943,459],{"class":412},[390,2945,2946],{"class":400}," ax ",[390,2948,587],{"class":586},[390,2950,2951],{"class":400}," plt",[390,2953,379],{"class":412},[390,2955,2956],{"class":561},"subplots",[390,2958,565],{"class":412},[390,2960,2961],{"class":1013},"figsize",[390,2963,587],{"class":586},[390,2965,565],{"class":412},[390,2967,2021],{"class":568},[390,2969,459],{"class":412},[390,2971,2972],{"class":568}," 4",[390,2974,2448],{"class":412},[390,2976,2977,2980,2982,2985,2987,2989,2991,2995,2998,3000,3002,3004,3006,3008,3011,3013],{"class":392,"line":404},[390,2978,2979],{"class":400},"ax",[390,2981,379],{"class":412},[390,2983,2984],{"class":561},"bar",[390,2986,1093],{"class":412},[390,2988,1223],{"class":1222},[390,2990,2621],{"class":1226},[390,2992,2994],{"class":2993},"s_hVV","\\n",[390,2996,2997],{"class":1226},"(latest)",[390,2999,1223],{"class":1222},[390,3001,459],{"class":412},[390,3003,2574],{"class":1222},[390,3005,191],{"class":1226},[390,3007,2994],{"class":2993},[390,3009,3010],{"class":1226},"(best view)",[390,3012,1223],{"class":1222},[390,3014,3015],{"class":412},"],\n",[390,3017,3018,3021,3023,3025,3028],{"class":392,"line":425},[390,3019,3020],{"class":412},"       [",[390,3022,2878],{"class":561},[390,3024,459],{"class":412},[390,3026,3027],{"class":561}," cost_gallery",[390,3029,3015],{"class":412},[390,3031,3032,3035,3037,3039,3041,3044,3046,3048,3050,3053,3055],{"class":392,"line":432},[390,3033,3034],{"class":1013},"       color",[390,3036,587],{"class":586},[390,3038,890],{"class":412},[390,3040,1223],{"class":1222},[390,3042,3043],{"class":1226},"tab:red",[390,3045,1223],{"class":1222},[390,3047,459],{"class":412},[390,3049,2574],{"class":1222},[390,3051,3052],{"class":1226},"tab:green",[390,3054,1223],{"class":1222},[390,3056,2683],{"class":412},[390,3058,3059,3061,3063,3066,3068,3071,3073,3076,3078,3080,3083,3085,3087,3090,3092,3094,3097,3099,3101,3104,3106,3108,3111,3113],{"class":392,"line":440},[390,3060,2979],{"class":400},[390,3062,379],{"class":412},[390,3064,3065],{"class":561},"axhline",[390,3067,565],{"class":412},[390,3069,3070],{"class":568},"0.4",[390,3072,459],{"class":412},[390,3074,3075],{"class":1013}," color",[390,3077,587],{"class":586},[390,3079,1223],{"class":1222},[390,3081,3082],{"class":1226},"0.5",[390,3084,1223],{"class":1222},[390,3086,459],{"class":412},[390,3088,3089],{"class":1013}," ls",[390,3091,587],{"class":586},[390,3093,1223],{"class":1222},[390,3095,3096],{"class":1226},"--",[390,3098,1223],{"class":1222},[390,3100,459],{"class":412},[390,3102,3103],{"class":1013}," label",[390,3105,587],{"class":586},[390,3107,1223],{"class":1222},[390,3109,3110],{"class":1226},"example gate threshold",[390,3112,1223],{"class":1222},[390,3114,572],{"class":412},[390,3116,3117,3119,3121,3124,3126,3128,3131,3133],{"class":392,"line":465},[390,3118,2979],{"class":400},[390,3120,379],{"class":412},[390,3122,3123],{"class":561},"set_ylabel",[390,3125,565],{"class":412},[390,3127,1223],{"class":1222},[390,3129,3130],{"class":1226},"matching cost (lower = match)",[390,3132,1223],{"class":1222},[390,3134,572],{"class":412},[390,3136,3137,3139,3141,3144,3146,3148,3151,3153],{"class":392,"line":482},[390,3138,2979],{"class":400},[390,3140,379],{"class":412},[390,3142,3143],{"class":561},"set_title",[390,3145,565],{"class":412},[390,3147,1223],{"class":1222},[390,3149,3150],{"class":1226},"Re-associating a returning appearance",[390,3152,1223],{"class":1222},[390,3154,572],{"class":412},[390,3156,3157,3159,3161,3164,3166,3169,3171,3174],{"class":392,"line":509},[390,3158,2979],{"class":400},[390,3160,379],{"class":412},[390,3162,3163],{"class":561},"legend",[390,3165,565],{"class":412},[390,3167,3168],{"class":1013},"fontsize",[390,3170,587],{"class":586},[390,3172,3173],{"class":568},"8",[390,3175,572],{"class":412},[390,3177,3178,3181,3183,3186,3188,3191,3193,3196],{"class":392,"line":531},[390,3179,3180],{"class":400},"plt",[390,3182,379],{"class":412},[390,3184,3185],{"class":561},"tight_layout",[390,3187,1753],{"class":412},[390,3189,3190],{"class":400},"; plt",[390,3192,379],{"class":412},[390,3194,3195],{"class":561},"show",[390,3197,752],{"class":412},[338,3199,3200],{},[3201,3202],"img",{"alt":386,"src":3203},"\u002F_nb\u002F66ad84766704b5aa.png",[1769,3205,3207],{"id":3206},"learned-propagation-trained-motr-style-through-the-association","Learned propagation, trained MOTR-style (through the association)",[338,3209,3210,3211,3214,3215,3218],{},"MOTR\u002FMeMOTR do not regress the track query toward a target embedding;\nthey train it ",[348,3212,3213],{},"through the data association"," — the query is\npropagated, matched against the next frame's detections, and the loss\nrewards keeping each identity bound to its detection. The gradient\nflows back through the (differentiable) matcher into the propagation\nmodule. We do exactly that here, using unitrack's differentiable\n",[353,3216,3217],{},"sinkhorn_log_plan"," as the soft matcher.",[338,3220,3221,3222,3225],{},"The scenario is built so propagation is ",[358,3223,3224],{},"necessary",": four identities\nsit on a circle in feature space and all rotate fast (~54° \u002F frame).\nA track that does not anticipate the rotation lags past the midpoint\nto its neighbour, so a \"match-the-last-embedding\" tracker\nsystematically assigns the wrong identity. Only a module that learns\nto rotate the query forward keeps the association correct — and the\nonly supervision is the association itself.",[381,3227,3229],{"className":383,"code":3228,"language":385,"meta":386,"style":386},"import torch.nn as nn\nfrom unitrack.assignment import sinkhorn_log_plan\nfrom unitrack.states import (\n    FromDetectionField, Identity, LearnedObservation, LearnedProcess,\n    Replace, State,\n)\n\nN, ROT_T, OMEGA, NZ = 4, 10, 0.95, 0.10   # ids, frames, rad\u002Fframe, noise\n\ndef rot_clip(seed, *, shuffle=True):\n    \"\"\"Four embeddings on a circle, rotating fast; shuffled per frame.\"\"\"\n    g = torch.Generator().manual_seed(seed)\n    phases = torch.arange(N).float() * (2 * torch.pi \u002F N)\n    frames, gts = [], []\n    for k in range(ROT_T):\n        ang = phases + OMEGA * k\n        emb = torch.zeros(N, D); emb[:, 0] = torch.cos(ang); emb[:, 1] = torch.sin(ang)\n        emb = torch.nn.functional.normalize(emb + NZ * torch.randn(N, D, generator=g), dim=-1)\n        order = torch.randperm(N, generator=g) if shuffle else torch.arange(N)\n        frames.append(emb[order])\n        gt = torch.empty(N, dtype=torch.long); gt[order] = torch.arange(N)\n        gts.append(gt)                          # gt[i] = column of identity i\n    return frames, gts\n\ndef cosdist(a, b):\n    a = torch.nn.functional.normalize(a, dim=-1)\n    b = torch.nn.functional.normalize(b, dim=-1)\n    return 1.0 - a @ b.T\n\nclass Propagator(nn.Module):\n    def __init__(self, d):\n        super().__init__()\n        self.net = nn.Sequential(nn.Linear(d, 64), nn.Tanh(), nn.Linear(64, d))\n    def forward(self, x, dt=1.0):\n        return torch.nn.functional.normalize(x + self.net(x), dim=-1)\n\nclass Fuser(nn.Module):                          # learned update (observation)\n    def __init__(self, d):\n        super().__init__()\n        self.net = nn.Sequential(nn.Linear(2 * d, 64), nn.Tanh(), nn.Linear(64, d))\n    def forward(self, track, meas):\n        return torch.nn.functional.normalize(\n            track + self.net(torch.cat([track, meas], -1)), dim=-1)\n\ndef rollout(prop, fuse, frames, gts, *, eps=0.05):\n    \"\"\"Propagate -> soft-match -> association loss; fuse with gt match (BPTT).\"\"\"\n    track = frames[0][gts[0]].clone()           # track i := identity i\n    loss = 0.0\n    for k in range(1, ROT_T):\n        pred = prop(track)\n        logP = sinkhorn_log_plan(cosdist(pred, frames[k]), epsilon=eps, num_iter=50)\n        loss = loss - logP[torch.arange(N), gts[k]].mean()   # NLL of correct cells\n        track = fuse(pred, frames[k][gts[k]])   # teacher-forced identity update\n    return loss \u002F (ROT_T - 1)\n\n@torch.no_grad()\ndef assoc_accuracy(propagate, seeds):\n    \"\"\"One-step hard-association accuracy (argmax of the soft plan vs gt).\"\"\"\n    correct = total = 0\n    for s in seeds:\n        frames, gts = rot_clip(s)\n        for k in range(1, ROT_T):\n            pred = propagate(frames[k - 1][gts[k - 1]])   # from the true prev detection\n            logP = sinkhorn_log_plan(cosdist(pred, frames[k]), epsilon=0.05, num_iter=50)\n            correct += int((logP.argmax(1) == gts[k]).sum()); total += N\n    return correct \u002F total\n\n",[353,3230,3231,3246,3261,3276,3299,3310,3314,3318,3359,3363,3391,3400,3422,3469,3487,3504,3523,3592,3655,3704,3724,3780,3799,3811,3815,3834,3869,3905,3927,3931,3951,3972,3984,4050,4077,4125,4129,4150,4166,4176,4238,4260,4281,4330,4334,4376,4385,4418,4427,4447,4463,4512,4556,4591,4609,4613,4627,4646,4655,4671,4685,4705,4726,4767,4811,4864],{"__ignoreMap":386},[390,3232,3233,3235,3237,3239,3241,3243],{"class":392,"line":393},[390,3234,397],{"class":396},[390,3236,706],{"class":400},[390,3238,379],{"class":412},[390,3240,1035],{"class":415},[390,3242,419],{"class":396},[390,3244,3245],{"class":400}," nn\n",[390,3247,3248,3250,3252,3254,3256,3258],{"class":392,"line":404},[390,3249,443],{"class":396},[390,3251,446],{"class":400},[390,3253,379],{"class":412},[390,3255,451],{"class":400},[390,3257,397],{"class":396},[390,3259,3260],{"class":400}," sinkhorn_log_plan\n",[390,3262,3263,3265,3267,3269,3271,3273],{"class":392,"line":425},[390,3264,443],{"class":396},[390,3266,446],{"class":400},[390,3268,379],{"class":412},[390,3270,1825],{"class":400},[390,3272,397],{"class":396},[390,3274,3275],{"class":412}," (\n",[390,3277,3278,3281,3283,3286,3288,3291,3293,3296],{"class":392,"line":432},[390,3279,3280],{"class":400},"    FromDetectionField",[390,3282,459],{"class":412},[390,3284,3285],{"class":400}," Identity",[390,3287,459],{"class":412},[390,3289,3290],{"class":400}," LearnedObservation",[390,3292,459],{"class":412},[390,3294,3295],{"class":400}," LearnedProcess",[390,3297,3298],{"class":412},",\n",[390,3300,3301,3304,3306,3308],{"class":392,"line":440},[390,3302,3303],{"class":400},"    Replace",[390,3305,459],{"class":412},[390,3307,2048],{"class":400},[390,3309,3298],{"class":412},[390,3311,3312],{"class":392,"line":465},[390,3313,572],{"class":412},[390,3315,3316],{"class":392,"line":482},[390,3317,429],{"emptyLinePlaceholder":428},[390,3319,3320,3323,3325,3328,3330,3333,3335,3338,3340,3342,3344,3347,3349,3352,3354,3356],{"class":392,"line":509},[390,3321,3322],{"class":400},"N",[390,3324,459],{"class":412},[390,3326,3327],{"class":2993}," ROT_T",[390,3329,459],{"class":412},[390,3331,3332],{"class":2993}," OMEGA",[390,3334,459],{"class":412},[390,3336,3337],{"class":2993}," NZ",[390,3339,813],{"class":586},[390,3341,2972],{"class":568},[390,3343,459],{"class":412},[390,3345,3346],{"class":568}," 10",[390,3348,459],{"class":412},[390,3350,3351],{"class":568}," 0.95",[390,3353,459],{"class":412},[390,3355,763],{"class":568},[390,3357,3358],{"class":593},"   # ids, frames, rad\u002Fframe, noise\n",[390,3360,3361],{"class":392,"line":531},[390,3362,429],{"emptyLinePlaceholder":428},[390,3364,3365,3367,3370,3372,3374,3376,3378,3381,3384,3386,3389],{"class":392,"line":548},[390,3366,620],{"class":619},[390,3368,3369],{"class":623}," rot_clip",[390,3371,565],{"class":412},[390,3373,721],{"class":629},[390,3375,459],{"class":412},[390,3377,766],{"class":586},[390,3379,3380],{"class":400},", ",[390,3382,3383],{"class":629},"shuffle",[390,3385,587],{"class":586},[390,3387,3388],{"class":654},"True",[390,3390,658],{"class":412},[390,3392,3393,3395,3398],{"class":392,"line":553},[390,3394,1238],{"class":664},[390,3396,3397],{"class":671},"Four embeddings on a circle, rotating fast; shuffled per frame.",[390,3399,1244],{"class":664},[390,3401,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420],{"class":392,"line":575},[390,3403,701],{"class":400},[390,3405,587],{"class":586},[390,3407,706],{"class":400},[390,3409,379],{"class":412},[390,3411,711],{"class":561},[390,3413,714],{"class":412},[390,3415,562],{"class":561},[390,3417,565],{"class":412},[390,3419,721],{"class":561},[390,3421,572],{"class":412},[390,3423,3424,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3452,3454,3456,3458,3461,3464,3467],{"class":392,"line":580},[390,3425,3426],{"class":400},"    phases ",[390,3428,587],{"class":586},[390,3430,706],{"class":400},[390,3432,379],{"class":412},[390,3434,738],{"class":561},[390,3436,565],{"class":412},[390,3438,3322],{"class":561},[390,3440,746],{"class":412},[390,3442,749],{"class":561},[390,3444,1753],{"class":412},[390,3446,766],{"class":586},[390,3448,1637],{"class":412},[390,3450,3451],{"class":568},"2",[390,3453,766],{"class":586},[390,3455,706],{"class":400},[390,3457,379],{"class":412},[390,3459,3460],{"class":415},"pi",[390,3462,3463],{"class":586}," \u002F",[390,3465,3466],{"class":400}," N",[390,3468,572],{"class":412},[390,3470,3471,3474,3476,3479,3481,3484],{"class":392,"line":597},[390,3472,3473],{"class":400},"    frames",[390,3475,459],{"class":412},[390,3477,3478],{"class":400}," gts ",[390,3480,587],{"class":586},[390,3482,3483],{"class":412}," [],",[390,3485,3486],{"class":412}," []\n",[390,3488,3489,3491,3493,3495,3497,3499,3502],{"class":392,"line":611},[390,3490,1302],{"class":396},[390,3492,1150],{"class":400},[390,3494,1153],{"class":396},[390,3496,1157],{"class":1156},[390,3498,565],{"class":412},[390,3500,3501],{"class":1156},"ROT_T",[390,3503,658],{"class":412},[390,3505,3506,3509,3511,3514,3516,3518,3520],{"class":392,"line":616},[390,3507,3508],{"class":400},"        ang ",[390,3510,587],{"class":586},[390,3512,3513],{"class":400}," phases ",[390,3515,987],{"class":586},[390,3517,3332],{"class":2993},[390,3519,766],{"class":586},[390,3521,3522],{"class":400}," k\n",[390,3524,3525,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3549,3551,3553,3555,3557,3559,3561,3563,3565,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588,3590],{"class":392,"line":661},[390,3526,3527],{"class":400},"        emb ",[390,3529,587],{"class":586},[390,3531,706],{"class":400},[390,3533,379],{"class":412},[390,3535,784],{"class":561},[390,3537,565],{"class":412},[390,3539,3322],{"class":561},[390,3541,459],{"class":412},[390,3543,793],{"class":561},[390,3545,1510],{"class":412},[390,3547,3548],{"class":400},"; emb",[390,3550,804],{"class":412},[390,3552,807],{"class":568},[390,3554,810],{"class":412},[390,3556,813],{"class":586},[390,3558,706],{"class":400},[390,3560,379],{"class":412},[390,3562,820],{"class":561},[390,3564,565],{"class":412},[390,3566,3567],{"class":561},"ang",[390,3569,1510],{"class":412},[390,3571,3548],{"class":400},[390,3573,804],{"class":412},[390,3575,837],{"class":568},[390,3577,810],{"class":412},[390,3579,813],{"class":586},[390,3581,706],{"class":400},[390,3583,379],{"class":412},[390,3585,848],{"class":561},[390,3587,565],{"class":412},[390,3589,3567],{"class":561},[390,3591,572],{"class":412},[390,3593,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653],{"class":392,"line":668},[390,3595,3527],{"class":400},[390,3597,587],{"class":586},[390,3599,706],{"class":400},[390,3601,379],{"class":412},[390,3603,1035],{"class":415},[390,3605,379],{"class":412},[390,3607,1040],{"class":415},[390,3609,379],{"class":412},[390,3611,1045],{"class":561},[390,3613,565],{"class":412},[390,3615,3616],{"class":561},"emb ",[390,3618,987],{"class":586},[390,3620,3337],{"class":1156},[390,3622,766],{"class":586},[390,3624,706],{"class":561},[390,3626,379],{"class":412},[390,3628,1000],{"class":561},[390,3630,565],{"class":412},[390,3632,3322],{"class":561},[390,3634,459],{"class":412},[390,3636,793],{"class":561},[390,3638,459],{"class":412},[390,3640,1014],{"class":1013},[390,3642,587],{"class":586},[390,3644,1019],{"class":561},[390,3646,1974],{"class":412},[390,3648,1055],{"class":1013},[390,3650,1058],{"class":586},[390,3652,1061],{"class":568},[390,3654,572],{"class":412},[390,3656,3657,3660,3662,3664,3666,3669,3671,3673,3675,3677,3679,3681,3683,3686,3689,3692,3694,3696,3698,3700,3702],{"class":392,"line":675},[390,3658,3659],{"class":400},"        order ",[390,3661,587],{"class":586},[390,3663,706],{"class":400},[390,3665,379],{"class":412},[390,3667,3668],{"class":561},"randperm",[390,3670,565],{"class":412},[390,3672,3322],{"class":561},[390,3674,459],{"class":412},[390,3676,1014],{"class":1013},[390,3678,587],{"class":586},[390,3680,1019],{"class":561},[390,3682,1510],{"class":412},[390,3684,3685],{"class":396}," if",[390,3687,3688],{"class":400}," shuffle ",[390,3690,3691],{"class":396},"else",[390,3693,706],{"class":400},[390,3695,379],{"class":412},[390,3697,738],{"class":561},[390,3699,565],{"class":412},[390,3701,3322],{"class":561},[390,3703,572],{"class":412},[390,3705,3706,3709,3711,3713,3715,3717,3719,3722],{"class":392,"line":681},[390,3707,3708],{"class":400},"        frames",[390,3710,379],{"class":412},[390,3712,1452],{"class":561},[390,3714,565],{"class":412},[390,3716,1227],{"class":561},[390,3718,890],{"class":412},[390,3720,3721],{"class":561},"order",[390,3723,2683],{"class":412},[390,3725,3726,3729,3731,3733,3735,3738,3740,3742,3744,3746,3748,3750,3752,3755,3757,3760,3762,3764,3766,3768,3770,3772,3774,3776,3778],{"class":392,"line":687},[390,3727,3728],{"class":400},"        gt ",[390,3730,587],{"class":586},[390,3732,706],{"class":400},[390,3734,379],{"class":412},[390,3736,3737],{"class":561},"empty",[390,3739,565],{"class":412},[390,3741,3322],{"class":561},[390,3743,459],{"class":412},[390,3745,2099],{"class":1013},[390,3747,587],{"class":586},[390,3749,556],{"class":561},[390,3751,379],{"class":412},[390,3753,3754],{"class":415},"long",[390,3756,1510],{"class":412},[390,3758,3759],{"class":400},"; gt",[390,3761,890],{"class":412},[390,3763,3721],{"class":400},[390,3765,810],{"class":412},[390,3767,813],{"class":586},[390,3769,706],{"class":400},[390,3771,379],{"class":412},[390,3773,738],{"class":561},[390,3775,565],{"class":412},[390,3777,3322],{"class":561},[390,3779,572],{"class":412},[390,3781,3782,3785,3787,3789,3791,3794,3796],{"class":392,"line":693},[390,3783,3784],{"class":400},"        gts",[390,3786,379],{"class":412},[390,3788,1452],{"class":561},[390,3790,565],{"class":412},[390,3792,3793],{"class":561},"gt",[390,3795,1510],{"class":412},[390,3797,3798],{"class":593},"                          # gt[i] = column of identity i\n",[390,3800,3801,3803,3806,3808],{"class":392,"line":698},[390,3802,1170],{"class":396},[390,3804,3805],{"class":400}," frames",[390,3807,459],{"class":412},[390,3809,3810],{"class":400}," gts\n",[390,3812,3813],{"class":392,"line":726},[390,3814,429],{"emptyLinePlaceholder":428},[390,3816,3817,3819,3822,3824,3827,3829,3832],{"class":392,"line":755},[390,3818,620],{"class":619},[390,3820,3821],{"class":623}," cosdist",[390,3823,565],{"class":412},[390,3825,3826],{"class":629},"a",[390,3828,459],{"class":412},[390,3830,3831],{"class":629}," b",[390,3833,658],{"class":412},[390,3835,3836,3839,3841,3843,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3865,3867],{"class":392,"line":772},[390,3837,3838],{"class":400},"    a ",[390,3840,587],{"class":586},[390,3842,706],{"class":400},[390,3844,379],{"class":412},[390,3846,1035],{"class":415},[390,3848,379],{"class":412},[390,3850,1040],{"class":415},[390,3852,379],{"class":412},[390,3854,1045],{"class":561},[390,3856,565],{"class":412},[390,3858,3826],{"class":561},[390,3860,459],{"class":412},[390,3862,1055],{"class":1013},[390,3864,1058],{"class":586},[390,3866,1061],{"class":568},[390,3868,572],{"class":412},[390,3870,3871,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3895,3897,3899,3901,3903],{"class":392,"line":798},[390,3872,3873],{"class":400},"    b ",[390,3875,587],{"class":586},[390,3877,706],{"class":400},[390,3879,379],{"class":412},[390,3881,1035],{"class":415},[390,3883,379],{"class":412},[390,3885,1040],{"class":415},[390,3887,379],{"class":412},[390,3889,1045],{"class":561},[390,3891,565],{"class":412},[390,3893,3894],{"class":561},"b",[390,3896,459],{"class":412},[390,3898,1055],{"class":1013},[390,3900,1058],{"class":586},[390,3902,1061],{"class":568},[390,3904,572],{"class":412},[390,3906,3907,3909,3911,3914,3917,3920,3922,3924],{"class":392,"line":830},[390,3908,1170],{"class":396},[390,3910,1940],{"class":568},[390,3912,3913],{"class":586}," -",[390,3915,3916],{"class":400}," a ",[390,3918,3919],{"class":586},"@",[390,3921,3831],{"class":400},[390,3923,379],{"class":412},[390,3925,3926],{"class":415},"T\n",[390,3928,3929],{"class":392,"line":857},[390,3930,429],{"emptyLinePlaceholder":428},[390,3932,3933,3936,3940,3942,3944,3946,3949],{"class":392,"line":878},[390,3934,3935],{"class":619},"class",[390,3937,3939],{"class":3938},"sbgvK"," Propagator",[390,3941,565],{"class":412},[390,3943,1035],{"class":3938},[390,3945,379],{"class":412},[390,3947,3948],{"class":3938},"Module",[390,3950,658],{"class":412},[390,3952,3953,3956,3959,3961,3965,3967,3970],{"class":392,"line":884},[390,3954,3955],{"class":619},"    def",[390,3957,3958],{"class":1156}," __init__",[390,3960,565],{"class":412},[390,3962,3964],{"class":3963},"smCYv","self",[390,3966,459],{"class":412},[390,3968,3969],{"class":629}," d",[390,3971,658],{"class":412},[390,3973,3974,3977,3979,3982],{"class":392,"line":907},[390,3975,3976],{"class":2549},"        super",[390,3978,714],{"class":412},[390,3980,3981],{"class":1156},"__init__",[390,3983,752],{"class":412},[390,3985,3986,3989,3991,3994,3996,3999,4001,4004,4006,4008,4010,4013,4015,4017,4019,4022,4024,4026,4028,4031,4033,4035,4037,4039,4041,4044,4046,4048],{"class":392,"line":942},[390,3987,3988],{"class":2993},"        self",[390,3990,379],{"class":412},[390,3992,3993],{"class":415},"net",[390,3995,813],{"class":586},[390,3997,3998],{"class":400}," nn",[390,4000,379],{"class":412},[390,4002,4003],{"class":561},"Sequential",[390,4005,565],{"class":412},[390,4007,1035],{"class":561},[390,4009,379],{"class":412},[390,4011,4012],{"class":561},"Linear",[390,4014,565],{"class":412},[390,4016,1411],{"class":561},[390,4018,459],{"class":412},[390,4020,4021],{"class":568}," 64",[390,4023,1974],{"class":412},[390,4025,3998],{"class":561},[390,4027,379],{"class":412},[390,4029,4030],{"class":561},"Tanh",[390,4032,2124],{"class":412},[390,4034,3998],{"class":561},[390,4036,379],{"class":412},[390,4038,4012],{"class":561},[390,4040,565],{"class":412},[390,4042,4043],{"class":568},"64",[390,4045,459],{"class":412},[390,4047,3969],{"class":561},[390,4049,2448],{"class":412},[390,4051,4052,4054,4057,4059,4061,4063,4066,4068,4071,4073,4075],{"class":392,"line":976},[390,4053,3955],{"class":619},[390,4055,4056],{"class":623}," forward",[390,4058,565],{"class":412},[390,4060,3964],{"class":3963},[390,4062,459],{"class":412},[390,4064,4065],{"class":629}," x",[390,4067,459],{"class":412},[390,4069,4070],{"class":629}," dt",[390,4072,587],{"class":586},[390,4074,1356],{"class":568},[390,4076,658],{"class":412},[390,4078,4079,4082,4084,4086,4088,4090,4092,4094,4096,4098,4101,4103,4106,4108,4110,4112,4115,4117,4119,4121,4123],{"class":392,"line":1024},[390,4080,4081],{"class":396},"        return",[390,4083,706],{"class":400},[390,4085,379],{"class":412},[390,4087,1035],{"class":415},[390,4089,379],{"class":412},[390,4091,1040],{"class":415},[390,4093,379],{"class":412},[390,4095,1045],{"class":561},[390,4097,565],{"class":412},[390,4099,4100],{"class":561},"x ",[390,4102,987],{"class":586},[390,4104,4105],{"class":2993}," self",[390,4107,379],{"class":412},[390,4109,3993],{"class":561},[390,4111,565],{"class":412},[390,4113,4114],{"class":561},"x",[390,4116,1974],{"class":412},[390,4118,1055],{"class":1013},[390,4120,1058],{"class":586},[390,4122,1061],{"class":568},[390,4124,572],{"class":412},[390,4126,4127],{"class":392,"line":1066},[390,4128,429],{"emptyLinePlaceholder":428},[390,4130,4131,4133,4136,4138,4140,4142,4144,4147],{"class":392,"line":1132},[390,4132,3935],{"class":619},[390,4134,4135],{"class":3938}," Fuser",[390,4137,565],{"class":412},[390,4139,1035],{"class":3938},[390,4141,379],{"class":412},[390,4143,3948],{"class":3938},[390,4145,4146],{"class":412},"):",[390,4148,4149],{"class":593},"                          # learned update (observation)\n",[390,4151,4152,4154,4156,4158,4160,4162,4164],{"class":392,"line":1167},[390,4153,3955],{"class":619},[390,4155,3958],{"class":1156},[390,4157,565],{"class":412},[390,4159,3964],{"class":3963},[390,4161,459],{"class":412},[390,4163,3969],{"class":629},[390,4165,658],{"class":412},[390,4167,4168,4170,4172,4174],{"class":392,"line":1191},[390,4169,3976],{"class":2549},[390,4171,714],{"class":412},[390,4173,3981],{"class":1156},[390,4175,752],{"class":412},[390,4177,4178,4180,4182,4184,4186,4188,4190,4192,4194,4196,4198,4200,4202,4204,4206,4208,4210,4212,4214,4216,4218,4220,4222,4224,4226,4228,4230,4232,4234,4236],{"class":392,"line":1196},[390,4179,3988],{"class":2993},[390,4181,379],{"class":412},[390,4183,3993],{"class":415},[390,4185,813],{"class":586},[390,4187,3998],{"class":400},[390,4189,379],{"class":412},[390,4191,4003],{"class":561},[390,4193,565],{"class":412},[390,4195,1035],{"class":561},[390,4197,379],{"class":412},[390,4199,4012],{"class":561},[390,4201,565],{"class":412},[390,4203,3451],{"class":568},[390,4205,766],{"class":586},[390,4207,3969],{"class":561},[390,4209,459],{"class":412},[390,4211,4021],{"class":568},[390,4213,1974],{"class":412},[390,4215,3998],{"class":561},[390,4217,379],{"class":412},[390,4219,4030],{"class":561},[390,4221,2124],{"class":412},[390,4223,3998],{"class":561},[390,4225,379],{"class":412},[390,4227,4012],{"class":561},[390,4229,565],{"class":412},[390,4231,4043],{"class":568},[390,4233,459],{"class":412},[390,4235,3969],{"class":561},[390,4237,2448],{"class":412},[390,4239,4240,4242,4244,4246,4248,4250,4253,4255,4258],{"class":392,"line":1235},[390,4241,3955],{"class":619},[390,4243,4056],{"class":623},[390,4245,565],{"class":412},[390,4247,3964],{"class":3963},[390,4249,459],{"class":412},[390,4251,4252],{"class":629}," track",[390,4254,459],{"class":412},[390,4256,4257],{"class":629}," meas",[390,4259,658],{"class":412},[390,4261,4262,4264,4266,4268,4270,4272,4274,4276,4278],{"class":392,"line":1247},[390,4263,4081],{"class":396},[390,4265,706],{"class":400},[390,4267,379],{"class":412},[390,4269,1035],{"class":415},[390,4271,379],{"class":412},[390,4273,1040],{"class":415},[390,4275,379],{"class":412},[390,4277,1045],{"class":561},[390,4279,4280],{"class":412},"(\n",[390,4282,4283,4286,4288,4290,4292,4294,4296,4298,4300,4303,4305,4308,4310,4312,4315,4317,4319,4322,4324,4326,4328],{"class":392,"line":1268},[390,4284,4285],{"class":561},"            track ",[390,4287,987],{"class":586},[390,4289,4105],{"class":2993},[390,4291,379],{"class":412},[390,4293,3993],{"class":561},[390,4295,565],{"class":412},[390,4297,556],{"class":561},[390,4299,379],{"class":412},[390,4301,4302],{"class":561},"cat",[390,4304,1093],{"class":412},[390,4306,4307],{"class":561},"track",[390,4309,459],{"class":412},[390,4311,4257],{"class":561},[390,4313,4314],{"class":412},"],",[390,4316,3913],{"class":586},[390,4318,1061],{"class":568},[390,4320,4321],{"class":412},")),",[390,4323,1055],{"class":1013},[390,4325,1058],{"class":586},[390,4327,1061],{"class":568},[390,4329,572],{"class":412},[390,4331,4332],{"class":392,"line":1299},[390,4333,429],{"emptyLinePlaceholder":428},[390,4335,4336,4338,4341,4343,4346,4348,4351,4353,4355,4357,4360,4362,4364,4366,4369,4371,4374],{"class":392,"line":1325},[390,4337,620],{"class":619},[390,4339,4340],{"class":623}," rollout",[390,4342,565],{"class":412},[390,4344,4345],{"class":629},"prop",[390,4347,459],{"class":412},[390,4349,4350],{"class":629}," fuse",[390,4352,459],{"class":412},[390,4354,3805],{"class":629},[390,4356,459],{"class":412},[390,4358,4359],{"class":629}," gts",[390,4361,459],{"class":412},[390,4363,766],{"class":586},[390,4365,3380],{"class":400},[390,4367,4368],{"class":629},"eps",[390,4370,587],{"class":586},[390,4372,4373],{"class":568},"0.05",[390,4375,658],{"class":412},[390,4377,4378,4380,4383],{"class":392,"line":1379},[390,4379,1238],{"class":664},[390,4381,4382],{"class":671},"Propagate -> soft-match -> association loss; fuse with gt match (BPTT).",[390,4384,1244],{"class":664},[390,4386,4387,4390,4392,4394,4396,4398,4401,4404,4406,4408,4411,4413,4415],{"class":392,"line":1426},[390,4388,4389],{"class":400},"    track ",[390,4391,587],{"class":586},[390,4393,3805],{"class":400},[390,4395,890],{"class":412},[390,4397,569],{"class":568},[390,4399,4400],{"class":412},"][",[390,4402,4403],{"class":400},"gts",[390,4405,890],{"class":412},[390,4407,569],{"class":568},[390,4409,4410],{"class":412},"]].",[390,4412,1126],{"class":561},[390,4414,1753],{"class":412},[390,4416,4417],{"class":593},"           # track i := identity i\n",[390,4419,4420,4423,4425],{"class":392,"line":1440},[390,4421,4422],{"class":400},"    loss ",[390,4424,587],{"class":586},[390,4426,904],{"class":568},[390,4428,4429,4431,4433,4435,4437,4439,4441,4443,4445],{"class":392,"line":1487},[390,4430,1302],{"class":396},[390,4432,1150],{"class":400},[390,4434,1153],{"class":396},[390,4436,1157],{"class":1156},[390,4438,565],{"class":412},[390,4440,1061],{"class":568},[390,4442,459],{"class":412},[390,4444,3327],{"class":1156},[390,4446,658],{"class":412},[390,4448,4449,4452,4454,4457,4459,4461],{"class":392,"line":1535},[390,4450,4451],{"class":400},"        pred ",[390,4453,587],{"class":586},[390,4455,4456],{"class":561}," prop",[390,4458,565],{"class":412},[390,4460,4307],{"class":561},[390,4462,572],{"class":412},[390,4464,4465,4468,4470,4473,4475,4478,4480,4483,4485,4487,4489,4491,4493,4496,4498,4500,4502,4505,4507,4510],{"class":392,"line":1540},[390,4466,4467],{"class":400},"        logP ",[390,4469,587],{"class":586},[390,4471,4472],{"class":561}," sinkhorn_log_plan",[390,4474,565],{"class":412},[390,4476,4477],{"class":561},"cosdist",[390,4479,565],{"class":412},[390,4481,4482],{"class":561},"pred",[390,4484,459],{"class":412},[390,4486,3805],{"class":561},[390,4488,890],{"class":412},[390,4490,1110],{"class":561},[390,4492,1098],{"class":412},[390,4494,4495],{"class":1013}," epsilon",[390,4497,587],{"class":586},[390,4499,4368],{"class":561},[390,4501,459],{"class":412},[390,4503,4504],{"class":1013}," num_iter",[390,4506,587],{"class":586},[390,4508,4509],{"class":568},"50",[390,4511,572],{"class":412},[390,4513,4514,4517,4519,4522,4524,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549,4551,4553],{"class":392,"line":1559},[390,4515,4516],{"class":400},"        loss ",[390,4518,587],{"class":586},[390,4520,4521],{"class":400}," loss ",[390,4523,1655],{"class":586},[390,4525,4526],{"class":400}," logP",[390,4528,890],{"class":412},[390,4530,556],{"class":400},[390,4532,379],{"class":412},[390,4534,738],{"class":561},[390,4536,565],{"class":412},[390,4538,3322],{"class":561},[390,4540,1974],{"class":412},[390,4542,4359],{"class":400},[390,4544,890],{"class":412},[390,4546,1110],{"class":400},[390,4548,4410],{"class":412},[390,4550,1750],{"class":561},[390,4552,1753],{"class":412},[390,4554,4555],{"class":593},"   # NLL of correct cells\n",[390,4557,4558,4561,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4588],{"class":392,"line":1595},[390,4559,4560],{"class":400},"        track ",[390,4562,587],{"class":586},[390,4564,4350],{"class":561},[390,4566,565],{"class":412},[390,4568,4482],{"class":561},[390,4570,459],{"class":412},[390,4572,3805],{"class":561},[390,4574,890],{"class":412},[390,4576,1110],{"class":561},[390,4578,4400],{"class":412},[390,4580,4403],{"class":561},[390,4582,890],{"class":412},[390,4584,1110],{"class":561},[390,4586,4587],{"class":412},"]])",[390,4589,4590],{"class":593},"   # teacher-forced identity update\n",[390,4592,4593,4595,4597,4599,4601,4603,4605,4607],{"class":392,"line":1632},[390,4594,1170],{"class":396},[390,4596,4521],{"class":400},[390,4598,124],{"class":586},[390,4600,1637],{"class":412},[390,4602,3501],{"class":2993},[390,4604,3913],{"class":586},[390,4606,837],{"class":568},[390,4608,572],{"class":412},[390,4610,4611],{"class":392,"line":1662},[390,4612,429],{"emptyLinePlaceholder":428},[390,4614,4615,4618,4620,4622,4625],{"class":392,"line":1667},[390,4616,3919],{"class":4617},"stp6e",[390,4619,556],{"class":623},[390,4621,379],{"class":4617},[390,4623,4624],{"class":623},"no_grad",[390,4626,752],{"class":412},[390,4628,4629,4631,4634,4636,4639,4641,4644],{"class":392,"line":1692},[390,4630,620],{"class":619},[390,4632,4633],{"class":623}," assoc_accuracy",[390,4635,565],{"class":412},[390,4637,4638],{"class":629},"propagate",[390,4640,459],{"class":412},[390,4642,4643],{"class":629}," seeds",[390,4645,658],{"class":412},[390,4647,4648,4650,4653],{"class":392,"line":1726},[390,4649,1238],{"class":664},[390,4651,4652],{"class":671},"One-step hard-association accuracy (argmax of the soft plan vs gt).",[390,4654,1244],{"class":664},[390,4656,4658,4661,4663,4666,4668],{"class":392,"line":4657},59,[390,4659,4660],{"class":400},"    correct ",[390,4662,587],{"class":586},[390,4664,4665],{"class":400}," total ",[390,4667,587],{"class":586},[390,4669,4670],{"class":568}," 0\n",[390,4672,4674,4676,4679,4681,4683],{"class":392,"line":4673},60,[390,4675,1302],{"class":396},[390,4677,4678],{"class":400}," s ",[390,4680,1153],{"class":396},[390,4682,4643],{"class":400},[390,4684,875],{"class":412},[390,4686,4688,4690,4692,4694,4696,4698,4700,4703],{"class":392,"line":4687},61,[390,4689,3708],{"class":400},[390,4691,459],{"class":412},[390,4693,3478],{"class":400},[390,4695,587],{"class":586},[390,4697,3369],{"class":561},[390,4699,565],{"class":412},[390,4701,4702],{"class":561},"s",[390,4704,572],{"class":412},[390,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724],{"class":392,"line":4707},62,[390,4709,1429],{"class":396},[390,4711,1150],{"class":400},[390,4713,1153],{"class":396},[390,4715,1157],{"class":1156},[390,4717,565],{"class":412},[390,4719,1061],{"class":568},[390,4721,459],{"class":412},[390,4723,3327],{"class":1156},[390,4725,658],{"class":412},[390,4727,4729,4732,4734,4737,4739,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764],{"class":392,"line":4728},63,[390,4730,4731],{"class":400},"            pred ",[390,4733,587],{"class":586},[390,4735,4736],{"class":561}," propagate",[390,4738,565],{"class":412},[390,4740,4741],{"class":561},"frames",[390,4743,890],{"class":412},[390,4745,1116],{"class":561},[390,4747,1655],{"class":586},[390,4749,837],{"class":568},[390,4751,4400],{"class":412},[390,4753,4403],{"class":561},[390,4755,890],{"class":412},[390,4757,1116],{"class":561},[390,4759,1655],{"class":586},[390,4761,837],{"class":568},[390,4763,4587],{"class":412},[390,4765,4766],{"class":593},"   # from the true prev detection\n",[390,4768,4770,4773,4775,4777,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799,4801,4803,4805,4807,4809],{"class":392,"line":4769},64,[390,4771,4772],{"class":400},"            logP ",[390,4774,587],{"class":586},[390,4776,4472],{"class":561},[390,4778,565],{"class":412},[390,4780,4477],{"class":561},[390,4782,565],{"class":412},[390,4784,4482],{"class":561},[390,4786,459],{"class":412},[390,4788,3805],{"class":561},[390,4790,890],{"class":412},[390,4792,1110],{"class":561},[390,4794,1098],{"class":412},[390,4796,4495],{"class":1013},[390,4798,587],{"class":586},[390,4800,4373],{"class":568},[390,4802,459],{"class":412},[390,4804,4504],{"class":1013},[390,4806,587],{"class":586},[390,4808,4509],{"class":568},[390,4810,572],{"class":412},[390,4812,4814,4817,4820,4822,4825,4828,4830,4833,4835,4837,4839,4842,4844,4846,4848,4851,4853,4856,4859,4861],{"class":392,"line":4813},65,[390,4815,4816],{"class":400},"            correct ",[390,4818,4819],{"class":586},"+=",[390,4821,2828],{"class":2549},[390,4823,4824],{"class":412},"((",[390,4826,4827],{"class":561},"logP",[390,4829,379],{"class":412},[390,4831,4832],{"class":561},"argmax",[390,4834,565],{"class":412},[390,4836,1061],{"class":568},[390,4838,1510],{"class":412},[390,4840,4841],{"class":586}," ==",[390,4843,4359],{"class":561},[390,4845,890],{"class":412},[390,4847,1110],{"class":561},[390,4849,4850],{"class":412},"]).",[390,4852,1650],{"class":561},[390,4854,4855],{"class":412},"())",[390,4857,4858],{"class":400},"; total ",[390,4860,4819],{"class":586},[390,4862,4863],{"class":400}," N\n",[390,4865,4867,4869,4872,4874],{"class":392,"line":4866},66,[390,4868,1170],{"class":396},[390,4870,4871],{"class":400}," correct ",[390,4873,124],{"class":586},[390,4875,4876],{"class":400}," total\n",[381,4878,4880],{"className":383,"code":4879,"language":385,"meta":386,"style":386},"prop, fuse = Propagator(D), Fuser(D)\neval_seeds = list(range(5000, 5016))\nacc_identity = assoc_accuracy(lambda x: x, eval_seeds)          # no propagation\nacc_untrained = assoc_accuracy(prop, eval_seeds)               # random init\n\nopt = torch.optim.Adam(list(prop.parameters()) + list(fuse.parameters()), lr=3e-3)\nlosses = []\nfor epoch in range(150):\n    loss = rollout(prop, fuse, *rot_clip(epoch))\n    opt.zero_grad(); loss.backward(); opt.step()\n    losses.append(loss.item())\nacc_trained = assoc_accuracy(prop, eval_seeds)\n\nprint(f\"association loss {losses[0]:.3f} -> {losses[-1]:.3f}  \"\n      f\"(optimum = log N = {torch.tensor(float(N)).log():.3f})\")\nprint(f\"association accuracy   no-propagation: {acc_identity:.3f}\")\nprint(f\"                       untrained:      {acc_untrained:.3f}\")\nprint(f\"                       TRAINED:        {acc_trained:.3f}\")\n\nfig, (axl, axb) = plt.subplots(1, 2, figsize=(12, 4))\naxl.plot(losses, color=\"tab:purple\")\naxl.axhline(float(torch.tensor(float(N)).log()), ls=\"--\", color=\"0.5\",\n            label=\"log N (optimal soft assignment)\")\naxl.set_title(\"Association loss (Sinkhorn NLL) through training\")\naxl.set_xlabel(\"epoch\"); axl.set_ylabel(\"NLL\"); axl.legend(fontsize=8)\naxl.grid(alpha=0.3)\naxb.bar([\"no\\npropagation\", \"untrained\", \"trained\"],\n        [acc_identity, acc_untrained, acc_trained],\n        color=[\"tab:red\", \"tab:orange\", \"tab:green\"])\naxb.set_ylim(0, 1.05); axb.set_ylabel(\"identity-association accuracy\")\naxb.set_title(\"Learned propagation is trained *by* the association\")\nplt.tight_layout(); plt.show()\n\n",[353,4881,4882,4909,4936,4966,4988,4992,5054,5063,5082,5112,5143,5163,5182,5186,5234,5274,5298,5322,5346,5350,5402,5430,5488,5504,5523,5576,5597,5640,5659,5693,5731,5750],{"__ignoreMap":386},[390,4883,4884,4886,4888,4891,4893,4895,4897,4899,4901,4903,4905,4907],{"class":392,"line":393},[390,4885,4345],{"class":400},[390,4887,459],{"class":412},[390,4889,4890],{"class":400}," fuse ",[390,4892,587],{"class":586},[390,4894,3939],{"class":561},[390,4896,565],{"class":412},[390,4898,1718],{"class":561},[390,4900,1974],{"class":412},[390,4902,4135],{"class":561},[390,4904,565],{"class":412},[390,4906,1718],{"class":561},[390,4908,572],{"class":412},[390,4910,4911,4914,4916,4919,4921,4924,4926,4929,4931,4934],{"class":392,"line":404},[390,4912,4913],{"class":400},"eval_seeds ",[390,4915,587],{"class":586},[390,4917,4918],{"class":2549}," list",[390,4920,565],{"class":412},[390,4922,4923],{"class":1156},"range",[390,4925,565],{"class":412},[390,4927,4928],{"class":568},"5000",[390,4930,459],{"class":412},[390,4932,4933],{"class":568}," 5016",[390,4935,2448],{"class":412},[390,4937,4938,4941,4943,4945,4947,4950,4952,4954,4956,4958,4961,4963],{"class":392,"line":425},[390,4939,4940],{"class":400},"acc_identity ",[390,4942,587],{"class":586},[390,4944,4633],{"class":561},[390,4946,565],{"class":412},[390,4948,4949],{"class":619},"lambda",[390,4951,4065],{"class":629},[390,4953,1113],{"class":412},[390,4955,4065],{"class":561},[390,4957,459],{"class":412},[390,4959,4960],{"class":561}," eval_seeds",[390,4962,1510],{"class":412},[390,4964,4965],{"class":593},"          # no propagation\n",[390,4967,4968,4971,4973,4975,4977,4979,4981,4983,4985],{"class":392,"line":432},[390,4969,4970],{"class":400},"acc_untrained ",[390,4972,587],{"class":586},[390,4974,4633],{"class":561},[390,4976,565],{"class":412},[390,4978,4345],{"class":561},[390,4980,459],{"class":412},[390,4982,4960],{"class":561},[390,4984,1510],{"class":412},[390,4986,4987],{"class":593},"               # random init\n",[390,4989,4990],{"class":392,"line":440},[390,4991,429],{"emptyLinePlaceholder":428},[390,4993,4994,4997,4999,5001,5003,5006,5008,5011,5013,5016,5018,5020,5022,5025,5027,5030,5032,5034,5037,5039,5041,5044,5047,5049,5052],{"class":392,"line":465},[390,4995,4996],{"class":400},"opt ",[390,4998,587],{"class":586},[390,5000,706],{"class":400},[390,5002,379],{"class":412},[390,5004,5005],{"class":415},"optim",[390,5007,379],{"class":412},[390,5009,5010],{"class":561},"Adam",[390,5012,565],{"class":412},[390,5014,5015],{"class":2549},"list",[390,5017,565],{"class":412},[390,5019,4345],{"class":561},[390,5021,379],{"class":412},[390,5023,5024],{"class":561},"parameters",[390,5026,4855],{"class":412},[390,5028,5029],{"class":586}," +",[390,5031,4918],{"class":2549},[390,5033,565],{"class":412},[390,5035,5036],{"class":561},"fuse",[390,5038,379],{"class":412},[390,5040,5024],{"class":561},[390,5042,5043],{"class":412},"()),",[390,5045,5046],{"class":1013}," lr",[390,5048,587],{"class":586},[390,5050,5051],{"class":568},"3e-3",[390,5053,572],{"class":412},[390,5055,5056,5059,5061],{"class":392,"line":482},[390,5057,5058],{"class":400},"losses ",[390,5060,587],{"class":586},[390,5062,3486],{"class":412},[390,5064,5065,5068,5071,5073,5075,5077,5080],{"class":392,"line":509},[390,5066,5067],{"class":396},"for",[390,5069,5070],{"class":400}," epoch ",[390,5072,1153],{"class":396},[390,5074,1157],{"class":1156},[390,5076,565],{"class":412},[390,5078,5079],{"class":568},"150",[390,5081,658],{"class":412},[390,5083,5084,5086,5088,5090,5092,5094,5096,5098,5100,5102,5105,5107,5110],{"class":392,"line":531},[390,5085,4422],{"class":400},[390,5087,587],{"class":586},[390,5089,4340],{"class":561},[390,5091,565],{"class":412},[390,5093,4345],{"class":561},[390,5095,459],{"class":412},[390,5097,4350],{"class":561},[390,5099,459],{"class":412},[390,5101,766],{"class":586},[390,5103,5104],{"class":561},"rot_clip",[390,5106,565],{"class":412},[390,5108,5109],{"class":561},"epoch",[390,5111,2448],{"class":412},[390,5113,5114,5117,5119,5122,5124,5127,5129,5132,5134,5137,5139,5141],{"class":392,"line":548},[390,5115,5116],{"class":400},"    opt",[390,5118,379],{"class":412},[390,5120,5121],{"class":561},"zero_grad",[390,5123,1753],{"class":412},[390,5125,5126],{"class":400},"; loss",[390,5128,379],{"class":412},[390,5130,5131],{"class":561},"backward",[390,5133,1753],{"class":412},[390,5135,5136],{"class":400},"; opt",[390,5138,379],{"class":412},[390,5140,1392],{"class":561},[390,5142,752],{"class":412},[390,5144,5145,5148,5150,5152,5154,5157,5159,5161],{"class":392,"line":553},[390,5146,5147],{"class":400},"    losses",[390,5149,379],{"class":412},[390,5151,1452],{"class":561},[390,5153,565],{"class":412},[390,5155,5156],{"class":561},"loss",[390,5158,379],{"class":412},[390,5160,2775],{"class":561},[390,5162,1484],{"class":412},[390,5164,5165,5168,5170,5172,5174,5176,5178,5180],{"class":392,"line":575},[390,5166,5167],{"class":400},"acc_trained ",[390,5169,587],{"class":586},[390,5171,4633],{"class":561},[390,5173,565],{"class":412},[390,5175,4345],{"class":561},[390,5177,459],{"class":412},[390,5179,4960],{"class":561},[390,5181,572],{"class":412},[390,5183,5184],{"class":392,"line":580},[390,5185,429],{"emptyLinePlaceholder":428},[390,5187,5188,5190,5192,5194,5197,5199,5202,5204,5206,5208,5210,5212,5215,5217,5219,5221,5223,5225,5227,5229,5231],{"class":392,"line":597},[390,5189,1695],{"class":1156},[390,5191,565],{"class":412},[390,5193,1279],{"class":619},[390,5195,5196],{"class":1226},"\"association loss ",[390,5198,1705],{"class":568},[390,5200,5201],{"class":561},"losses",[390,5203,890],{"class":412},[390,5205,569],{"class":568},[390,5207,810],{"class":412},[390,5209,1756],{"class":619},[390,5211,1710],{"class":568},[390,5213,5214],{"class":1226}," -> ",[390,5216,1705],{"class":568},[390,5218,5201],{"class":561},[390,5220,890],{"class":412},[390,5222,1655],{"class":586},[390,5224,1061],{"class":568},[390,5226,810],{"class":412},[390,5228,1756],{"class":619},[390,5230,1710],{"class":568},[390,5232,5233],{"class":1226},"  \"\n",[390,5235,5236,5238,5241,5243,5245,5247,5249,5251,5253,5255,5257,5260,5263,5265,5267,5269,5272],{"class":392,"line":611},[390,5237,1729],{"class":619},[390,5239,5240],{"class":1226},"\"(optimum = log N = ",[390,5242,1705],{"class":568},[390,5244,556],{"class":561},[390,5246,379],{"class":412},[390,5248,1090],{"class":561},[390,5250,565],{"class":412},[390,5252,749],{"class":2549},[390,5254,565],{"class":412},[390,5256,3322],{"class":561},[390,5258,5259],{"class":412},")).",[390,5261,5262],{"class":561},"log",[390,5264,1753],{"class":412},[390,5266,1756],{"class":619},[390,5268,1710],{"class":568},[390,5270,5271],{"class":1226},")\"",[390,5273,572],{"class":412},[390,5275,5276,5278,5280,5282,5285,5287,5290,5292,5294,5296],{"class":392,"line":616},[390,5277,1695],{"class":1156},[390,5279,565],{"class":412},[390,5281,1279],{"class":619},[390,5283,5284],{"class":1226},"\"association accuracy   no-propagation: ",[390,5286,1705],{"class":568},[390,5288,5289],{"class":561},"acc_identity",[390,5291,1756],{"class":619},[390,5293,1710],{"class":568},[390,5295,1223],{"class":1226},[390,5297,572],{"class":412},[390,5299,5300,5302,5304,5306,5309,5311,5314,5316,5318,5320],{"class":392,"line":661},[390,5301,1695],{"class":1156},[390,5303,565],{"class":412},[390,5305,1279],{"class":619},[390,5307,5308],{"class":1226},"\"                       untrained:      ",[390,5310,1705],{"class":568},[390,5312,5313],{"class":561},"acc_untrained",[390,5315,1756],{"class":619},[390,5317,1710],{"class":568},[390,5319,1223],{"class":1226},[390,5321,572],{"class":412},[390,5323,5324,5326,5328,5330,5333,5335,5338,5340,5342,5344],{"class":392,"line":668},[390,5325,1695],{"class":1156},[390,5327,565],{"class":412},[390,5329,1279],{"class":619},[390,5331,5332],{"class":1226},"\"                       TRAINED:        ",[390,5334,1705],{"class":568},[390,5336,5337],{"class":561},"acc_trained",[390,5339,1756],{"class":619},[390,5341,1710],{"class":568},[390,5343,1223],{"class":1226},[390,5345,572],{"class":412},[390,5347,5348],{"class":392,"line":675},[390,5349,429],{"emptyLinePlaceholder":428},[390,5351,5352,5354,5356,5358,5361,5363,5366,5368,5370,5372,5374,5376,5378,5380,5382,5384,5386,5389,5391,5393,5396,5398,5400],{"class":392,"line":681},[390,5353,2941],{"class":400},[390,5355,459],{"class":412},[390,5357,1637],{"class":412},[390,5359,5360],{"class":400},"axl",[390,5362,459],{"class":412},[390,5364,5365],{"class":400}," axb",[390,5367,1510],{"class":412},[390,5369,813],{"class":586},[390,5371,2951],{"class":400},[390,5373,379],{"class":412},[390,5375,2956],{"class":561},[390,5377,565],{"class":412},[390,5379,1061],{"class":568},[390,5381,459],{"class":412},[390,5383,918],{"class":568},[390,5385,459],{"class":412},[390,5387,5388],{"class":1013}," figsize",[390,5390,587],{"class":586},[390,5392,565],{"class":412},[390,5394,5395],{"class":568},"12",[390,5397,459],{"class":412},[390,5399,2972],{"class":568},[390,5401,2448],{"class":412},[390,5403,5404,5406,5408,5411,5413,5415,5417,5419,5421,5423,5426,5428],{"class":392,"line":687},[390,5405,5360],{"class":400},[390,5407,379],{"class":412},[390,5409,5410],{"class":561},"plot",[390,5412,565],{"class":412},[390,5414,5201],{"class":561},[390,5416,459],{"class":412},[390,5418,3075],{"class":1013},[390,5420,587],{"class":586},[390,5422,1223],{"class":1222},[390,5424,5425],{"class":1226},"tab:purple",[390,5427,1223],{"class":1222},[390,5429,572],{"class":412},[390,5431,5432,5434,5436,5438,5440,5442,5444,5446,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476,5478,5480,5482,5484,5486],{"class":392,"line":693},[390,5433,5360],{"class":400},[390,5435,379],{"class":412},[390,5437,3065],{"class":561},[390,5439,565],{"class":412},[390,5441,749],{"class":2549},[390,5443,565],{"class":412},[390,5445,556],{"class":561},[390,5447,379],{"class":412},[390,5449,1090],{"class":561},[390,5451,565],{"class":412},[390,5453,749],{"class":2549},[390,5455,565],{"class":412},[390,5457,3322],{"class":561},[390,5459,5259],{"class":412},[390,5461,5262],{"class":561},[390,5463,5043],{"class":412},[390,5465,3089],{"class":1013},[390,5467,587],{"class":586},[390,5469,1223],{"class":1222},[390,5471,3096],{"class":1226},[390,5473,1223],{"class":1222},[390,5475,459],{"class":412},[390,5477,3075],{"class":1013},[390,5479,587],{"class":586},[390,5481,1223],{"class":1222},[390,5483,3082],{"class":1226},[390,5485,1223],{"class":1222},[390,5487,3298],{"class":412},[390,5489,5490,5493,5495,5497,5500,5502],{"class":392,"line":698},[390,5491,5492],{"class":1013},"            label",[390,5494,587],{"class":586},[390,5496,1223],{"class":1222},[390,5498,5499],{"class":1226},"log N (optimal soft assignment)",[390,5501,1223],{"class":1222},[390,5503,572],{"class":412},[390,5505,5506,5508,5510,5512,5514,5516,5519,5521],{"class":392,"line":726},[390,5507,5360],{"class":400},[390,5509,379],{"class":412},[390,5511,3143],{"class":561},[390,5513,565],{"class":412},[390,5515,1223],{"class":1222},[390,5517,5518],{"class":1226},"Association loss (Sinkhorn NLL) through training",[390,5520,1223],{"class":1222},[390,5522,572],{"class":412},[390,5524,5525,5527,5529,5532,5534,5536,5538,5540,5542,5545,5547,5549,5551,5553,5556,5558,5560,5562,5564,5566,5568,5570,5572,5574],{"class":392,"line":755},[390,5526,5360],{"class":400},[390,5528,379],{"class":412},[390,5530,5531],{"class":561},"set_xlabel",[390,5533,565],{"class":412},[390,5535,1223],{"class":1222},[390,5537,5109],{"class":1226},[390,5539,1223],{"class":1222},[390,5541,1510],{"class":412},[390,5543,5544],{"class":400},"; axl",[390,5546,379],{"class":412},[390,5548,3123],{"class":561},[390,5550,565],{"class":412},[390,5552,1223],{"class":1222},[390,5554,5555],{"class":1226},"NLL",[390,5557,1223],{"class":1222},[390,5559,1510],{"class":412},[390,5561,5544],{"class":400},[390,5563,379],{"class":412},[390,5565,3163],{"class":561},[390,5567,565],{"class":412},[390,5569,3168],{"class":1013},[390,5571,587],{"class":586},[390,5573,3173],{"class":568},[390,5575,572],{"class":412},[390,5577,5578,5580,5582,5585,5587,5590,5592,5595],{"class":392,"line":772},[390,5579,5360],{"class":400},[390,5581,379],{"class":412},[390,5583,5584],{"class":561},"grid",[390,5586,565],{"class":412},[390,5588,5589],{"class":1013},"alpha",[390,5591,587],{"class":586},[390,5593,5594],{"class":568},"0.3",[390,5596,572],{"class":412},[390,5598,5599,5602,5604,5606,5608,5610,5613,5615,5618,5620,5622,5624,5627,5629,5631,5633,5636,5638],{"class":392,"line":798},[390,5600,5601],{"class":400},"axb",[390,5603,379],{"class":412},[390,5605,2984],{"class":561},[390,5607,1093],{"class":412},[390,5609,1223],{"class":1222},[390,5611,5612],{"class":1226},"no",[390,5614,2994],{"class":2993},[390,5616,5617],{"class":1226},"propagation",[390,5619,1223],{"class":1222},[390,5621,459],{"class":412},[390,5623,2574],{"class":1222},[390,5625,5626],{"class":1226},"untrained",[390,5628,1223],{"class":1222},[390,5630,459],{"class":412},[390,5632,2574],{"class":1222},[390,5634,5635],{"class":1226},"trained",[390,5637,1223],{"class":1222},[390,5639,3015],{"class":412},[390,5641,5642,5645,5647,5649,5652,5654,5657],{"class":392,"line":830},[390,5643,5644],{"class":412},"        [",[390,5646,5289],{"class":561},[390,5648,459],{"class":412},[390,5650,5651],{"class":561}," acc_untrained",[390,5653,459],{"class":412},[390,5655,5656],{"class":561}," acc_trained",[390,5658,3015],{"class":412},[390,5660,5661,5664,5666,5668,5670,5672,5674,5676,5678,5681,5683,5685,5687,5689,5691],{"class":392,"line":857},[390,5662,5663],{"class":1013},"        color",[390,5665,587],{"class":586},[390,5667,890],{"class":412},[390,5669,1223],{"class":1222},[390,5671,3043],{"class":1226},[390,5673,1223],{"class":1222},[390,5675,459],{"class":412},[390,5677,2574],{"class":1222},[390,5679,5680],{"class":1226},"tab:orange",[390,5682,1223],{"class":1222},[390,5684,459],{"class":412},[390,5686,2574],{"class":1222},[390,5688,3052],{"class":1226},[390,5690,1223],{"class":1222},[390,5692,2683],{"class":412},[390,5694,5695,5697,5699,5702,5704,5706,5708,5711,5713,5716,5718,5720,5722,5724,5727,5729],{"class":392,"line":878},[390,5696,5601],{"class":400},[390,5698,379],{"class":412},[390,5700,5701],{"class":561},"set_ylim",[390,5703,565],{"class":412},[390,5705,569],{"class":568},[390,5707,459],{"class":412},[390,5709,5710],{"class":568}," 1.05",[390,5712,1510],{"class":412},[390,5714,5715],{"class":400},"; axb",[390,5717,379],{"class":412},[390,5719,3123],{"class":561},[390,5721,565],{"class":412},[390,5723,1223],{"class":1222},[390,5725,5726],{"class":1226},"identity-association accuracy",[390,5728,1223],{"class":1222},[390,5730,572],{"class":412},[390,5732,5733,5735,5737,5739,5741,5743,5746,5748],{"class":392,"line":884},[390,5734,5601],{"class":400},[390,5736,379],{"class":412},[390,5738,3143],{"class":561},[390,5740,565],{"class":412},[390,5742,1223],{"class":1222},[390,5744,5745],{"class":1226},"Learned propagation is trained *by* the association",[390,5747,1223],{"class":1222},[390,5749,572],{"class":412},[390,5751,5752,5754,5756,5758,5760,5762,5764,5766],{"class":392,"line":907},[390,5753,3180],{"class":400},[390,5755,379],{"class":412},[390,5757,3185],{"class":561},[390,5759,1753],{"class":412},[390,5761,3190],{"class":400},[390,5763,379],{"class":412},[390,5765,3195],{"class":561},[390,5767,752],{"class":412},[1764,5769],{"data":5770,"kind":1767},"YXNzb2NpYXRpb24gbG9zcyA1LjI2MSAtPiAxLjM5MCAgKG9wdGltdW0gPSBsb2cgTiA9IDEuMzg2KQphc3NvY2lhdGlvbiBhY2N1cmFjeSAgIG5vLXByb3BhZ2F0aW9uOiAwLjAwNwogICAgICAgICAgICAgICAgICAgICAgIHVudHJhaW5lZDogICAgICAwLjAwMAogICAgICAgICAgICAgICAgICAgICAgIFRSQUlORUQ6ICAgICAgICAxLjAwMAo=",[338,5772,5773],{},[3201,5774],{"alt":386,"src":5775},"\u002F_nb\u002Fec1470a2aafce722.png",[381,5777,5779],{"className":383,"code":5778,"language":385,"meta":386,"style":386},"# Deploy the trained modules in a REAL unitrack.Tracker (hard Jonker\n# matching) and measure how often each track keeps its own identity.\ndef emb_state(process, observation):\n    return {\"emb\": State(schema=TensorSpec(shape=(D,), dtype=torch.float32),\n                         process=process, observation=observation,\n                         init=FromDetectionField(\"emb\"))}\n\ndef deploy_accuracy(states):\n    tr = unitrack.Tracker(\n        root=Pipe(cost=Cosine(\"emb\"), assoc=Associate(Jonker(threshold=0.95))),\n        states=states, lifecycle=NoLifecycle(), visibility=IncludeAll())\n    ms = unitrack.MultiStream(tr)\n    frames, _ = rot_clip(99, shuffle=False)     # column j == identity j\n    correct = total = 0\n    for k in range(ROT_T):\n        d = Detections(index=torch.arange(N, dtype=torch.int64),\n                       emb=frames[k].clone(), batch_size=[N])\n        res = ms.step(stream_key=0, detections=d,\n                      ctx=FrameContext.make(k, delta=1.0, stream_key=0))\n        if k > 0:                               # correct pair is (row i, col i)\n            p = res.match.matched_pairs\n            correct += int((p[:, 0] == p[:, 1]).sum()); total += p.shape[0]\n    return correct \u002F max(total, 1)\n\nwith torch.no_grad():\n    dep_learned = deploy_accuracy(emb_state(\n        LearnedProcess(\"emb\", prop),\n        LearnedObservation(\"emb\", \"emb\", fuse)))\n    dep_plain = deploy_accuracy(emb_state(Identity(\"emb\"), Replace(\"emb\")))\nprint(f\"deployed in a real Tracker (hard matching):\")\nprint(f\"  identity process + replace : {dep_plain:.3f}  (lags the rotation -> swaps)\")\nprint(f\"  learned process + learned fuse: {dep_learned:.3f}  (anticipates -> holds)\")\n\n",[353,5780,5781,5786,5791,5809,5857,5877,5896,5900,5913,5927,5975,6002,6020,6052,6064,6080,6120,6149,6179,6213,6230,6248,6298,6320,6324,6338,6354,6373,6401,6442,6455,6480],{"__ignoreMap":386},[390,5782,5783],{"class":392,"line":393},[390,5784,5785],{"class":593},"# Deploy the trained modules in a REAL unitrack.Tracker (hard Jonker\n",[390,5787,5788],{"class":392,"line":404},[390,5789,5790],{"class":593},"# matching) and measure how often each track keeps its own identity.\n",[390,5792,5793,5795,5798,5800,5803,5805,5807],{"class":392,"line":425},[390,5794,620],{"class":619},[390,5796,5797],{"class":623}," emb_state",[390,5799,565],{"class":412},[390,5801,5802],{"class":629},"process",[390,5804,459],{"class":412},[390,5806,2127],{"class":629},[390,5808,658],{"class":412},[390,5810,5811,5813,5815,5817,5819,5821,5823,5825,5827,5829,5831,5833,5835,5837,5839,5841,5843,5845,5847,5849,5851,5853,5855],{"class":392,"line":432},[390,5812,1170],{"class":396},[390,5814,1276],{"class":412},[390,5816,1223],{"class":1222},[390,5818,1227],{"class":1226},[390,5820,1223],{"class":1222},[390,5822,1113],{"class":412},[390,5824,2048],{"class":561},[390,5826,565],{"class":412},[390,5828,2077],{"class":1013},[390,5830,587],{"class":586},[390,5832,2082],{"class":561},[390,5834,565],{"class":412},[390,5836,2087],{"class":1013},[390,5838,587],{"class":586},[390,5840,565],{"class":412},[390,5842,1718],{"class":561},[390,5844,2096],{"class":412},[390,5846,2099],{"class":1013},[390,5848,587],{"class":586},[390,5850,556],{"class":561},[390,5852,379],{"class":412},[390,5854,2108],{"class":415},[390,5856,2111],{"class":412},[390,5858,5859,5862,5864,5866,5868,5870,5872,5875],{"class":392,"line":440},[390,5860,5861],{"class":1013},"                         process",[390,5863,587],{"class":586},[390,5865,5802],{"class":561},[390,5867,459],{"class":412},[390,5869,2127],{"class":1013},[390,5871,587],{"class":586},[390,5873,5874],{"class":561},"observation",[390,5876,3298],{"class":412},[390,5878,5879,5882,5884,5886,5888,5890,5892,5894],{"class":392,"line":465},[390,5880,5881],{"class":1013},"                         init",[390,5883,587],{"class":586},[390,5885,2152],{"class":561},[390,5887,565],{"class":412},[390,5889,1223],{"class":1222},[390,5891,1227],{"class":1226},[390,5893,1223],{"class":1222},[390,5895,2163],{"class":412},[390,5897,5898],{"class":392,"line":482},[390,5899,429],{"emptyLinePlaceholder":428},[390,5901,5902,5904,5907,5909,5911],{"class":392,"line":509},[390,5903,620],{"class":619},[390,5905,5906],{"class":623}," deploy_accuracy",[390,5908,565],{"class":412},[390,5910,270],{"class":629},[390,5912,658],{"class":412},[390,5914,5915,5917,5919,5921,5923,5925],{"class":392,"line":531},[390,5916,2190],{"class":400},[390,5918,587],{"class":586},[390,5920,446],{"class":400},[390,5922,379],{"class":412},[390,5924,2199],{"class":561},[390,5926,4280],{"class":412},[390,5928,5929,5932,5934,5936,5938,5940,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960,5962,5964,5966,5968,5970,5973],{"class":392,"line":548},[390,5930,5931],{"class":1013},"        root",[390,5933,587],{"class":586},[390,5935,2209],{"class":561},[390,5937,565],{"class":412},[390,5939,203],{"class":1013},[390,5941,587],{"class":586},[390,5943,1786],{"class":561},[390,5945,565],{"class":412},[390,5947,1223],{"class":1222},[390,5949,1227],{"class":1226},[390,5951,1223],{"class":1222},[390,5953,1974],{"class":412},[390,5955,2222],{"class":1013},[390,5957,587],{"class":586},[390,5959,2227],{"class":561},[390,5961,565],{"class":412},[390,5963,2232],{"class":561},[390,5965,565],{"class":412},[390,5967,2237],{"class":1013},[390,5969,587],{"class":586},[390,5971,5972],{"class":568},"0.95",[390,5974,2245],{"class":412},[390,5976,5977,5980,5982,5984,5986,5988,5990,5992,5994,5996,5998,6000],{"class":392,"line":553},[390,5978,5979],{"class":1013},"        states",[390,5981,587],{"class":586},[390,5983,270],{"class":561},[390,5985,459],{"class":412},[390,5987,2259],{"class":1013},[390,5989,587],{"class":586},[390,5991,2264],{"class":561},[390,5993,2124],{"class":412},[390,5995,2269],{"class":1013},[390,5997,587],{"class":586},[390,5999,2274],{"class":561},[390,6001,1484],{"class":412},[390,6003,6004,6006,6008,6010,6012,6014,6016,6018],{"class":392,"line":575},[390,6005,1250],{"class":400},[390,6007,587],{"class":586},[390,6009,446],{"class":400},[390,6011,379],{"class":412},[390,6013,1259],{"class":561},[390,6015,565],{"class":412},[390,6017,2293],{"class":561},[390,6019,572],{"class":412},[390,6021,6022,6024,6026,6029,6031,6033,6035,6037,6039,6042,6044,6047,6049],{"class":392,"line":580},[390,6023,3473],{"class":400},[390,6025,459],{"class":412},[390,6027,6028],{"class":400}," _ ",[390,6030,587],{"class":586},[390,6032,3369],{"class":561},[390,6034,565],{"class":412},[390,6036,2701],{"class":568},[390,6038,459],{"class":412},[390,6040,6041],{"class":1013}," shuffle",[390,6043,587],{"class":586},[390,6045,6046],{"class":654},"False",[390,6048,1510],{"class":412},[390,6050,6051],{"class":593},"     # column j == identity j\n",[390,6053,6054,6056,6058,6060,6062],{"class":392,"line":597},[390,6055,4660],{"class":400},[390,6057,587],{"class":586},[390,6059,4665],{"class":400},[390,6061,587],{"class":586},[390,6063,4670],{"class":568},[390,6065,6066,6068,6070,6072,6074,6076,6078],{"class":392,"line":611},[390,6067,1302],{"class":396},[390,6069,1150],{"class":400},[390,6071,1153],{"class":396},[390,6073,1157],{"class":1156},[390,6075,565],{"class":412},[390,6077,3501],{"class":1156},[390,6079,658],{"class":412},[390,6081,6082,6085,6087,6089,6091,6093,6095,6097,6099,6101,6103,6105,6107,6109,6111,6113,6115,6118],{"class":392,"line":616},[390,6083,6084],{"class":400},"        d ",[390,6086,587],{"class":586},[390,6088,496],{"class":561},[390,6090,565],{"class":412},[390,6092,125],{"class":1013},[390,6094,587],{"class":586},[390,6096,556],{"class":561},[390,6098,379],{"class":412},[390,6100,738],{"class":561},[390,6102,565],{"class":412},[390,6104,3322],{"class":561},[390,6106,459],{"class":412},[390,6108,2099],{"class":1013},[390,6110,587],{"class":586},[390,6112,556],{"class":561},[390,6114,379],{"class":412},[390,6116,6117],{"class":415},"int64",[390,6119,2111],{"class":412},[390,6121,6122,6125,6127,6129,6131,6133,6135,6137,6139,6141,6143,6145,6147],{"class":392,"line":661},[390,6123,6124],{"class":1013},"                       emb",[390,6126,587],{"class":586},[390,6128,4741],{"class":561},[390,6130,890],{"class":412},[390,6132,1110],{"class":561},[390,6134,1123],{"class":412},[390,6136,1126],{"class":561},[390,6138,2124],{"class":412},[390,6140,2411],{"class":1013},[390,6142,587],{"class":586},[390,6144,890],{"class":412},[390,6146,3322],{"class":561},[390,6148,2683],{"class":412},[390,6150,6151,6153,6155,6157,6159,6161,6163,6165,6167,6169,6171,6173,6175,6177],{"class":392,"line":668},[390,6152,1382],{"class":400},[390,6154,587],{"class":586},[390,6156,1387],{"class":400},[390,6158,379],{"class":412},[390,6160,1392],{"class":561},[390,6162,565],{"class":412},[390,6164,1397],{"class":1013},[390,6166,587],{"class":586},[390,6168,569],{"class":568},[390,6170,459],{"class":412},[390,6172,1406],{"class":1013},[390,6174,587],{"class":586},[390,6176,1411],{"class":561},[390,6178,3298],{"class":412},[390,6180,6181,6183,6185,6187,6189,6191,6193,6195,6197,6199,6201,6203,6205,6207,6209,6211],{"class":392,"line":675},[390,6182,2424],{"class":1013},[390,6184,587],{"class":586},[390,6186,2429],{"class":561},[390,6188,379],{"class":412},[390,6190,1337],{"class":561},[390,6192,565],{"class":412},[390,6194,1110],{"class":561},[390,6196,459],{"class":412},[390,6198,1351],{"class":1013},[390,6200,587],{"class":586},[390,6202,1356],{"class":568},[390,6204,459],{"class":412},[390,6206,1370],{"class":1013},[390,6208,587],{"class":586},[390,6210,569],{"class":568},[390,6212,2448],{"class":412},[390,6214,6215,6218,6220,6223,6225,6227],{"class":392,"line":681},[390,6216,6217],{"class":396},"        if",[390,6219,1150],{"class":400},[390,6221,6222],{"class":586},">",[390,6224,807],{"class":568},[390,6226,1113],{"class":412},[390,6228,6229],{"class":593},"                               # correct pair is (row i, col i)\n",[390,6231,6232,6235,6237,6239,6241,6243,6245],{"class":392,"line":687},[390,6233,6234],{"class":400},"            p ",[390,6236,587],{"class":586},[390,6238,2458],{"class":400},[390,6240,379],{"class":412},[390,6242,215],{"class":415},[390,6244,379],{"class":412},[390,6246,6247],{"class":415},"matched_pairs\n",[390,6249,6250,6252,6254,6256,6258,6260,6262,6264,6266,6268,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293,6295],{"class":392,"line":693},[390,6251,4816],{"class":400},[390,6253,4819],{"class":586},[390,6255,2828],{"class":2549},[390,6257,4824],{"class":412},[390,6259,338],{"class":561},[390,6261,804],{"class":412},[390,6263,807],{"class":568},[390,6265,810],{"class":412},[390,6267,4841],{"class":586},[390,6269,6270],{"class":561}," p",[390,6272,804],{"class":412},[390,6274,837],{"class":568},[390,6276,4850],{"class":412},[390,6278,1650],{"class":561},[390,6280,4855],{"class":412},[390,6282,4858],{"class":400},[390,6284,4819],{"class":586},[390,6286,6270],{"class":400},[390,6288,379],{"class":412},[390,6290,2087],{"class":415},[390,6292,890],{"class":412},[390,6294,569],{"class":568},[390,6296,6297],{"class":412},"]\n",[390,6299,6300,6302,6304,6306,6309,6311,6314,6316,6318],{"class":392,"line":698},[390,6301,1170],{"class":396},[390,6303,4871],{"class":400},[390,6305,124],{"class":586},[390,6307,6308],{"class":1156}," max",[390,6310,565],{"class":412},[390,6312,6313],{"class":561},"total",[390,6315,459],{"class":412},[390,6317,837],{"class":568},[390,6319,572],{"class":412},[390,6321,6322],{"class":392,"line":726},[390,6323,429],{"emptyLinePlaceholder":428},[390,6325,6326,6329,6331,6333,6335],{"class":392,"line":755},[390,6327,6328],{"class":396},"with",[390,6330,706],{"class":400},[390,6332,379],{"class":412},[390,6334,4624],{"class":561},[390,6336,6337],{"class":412},"():\n",[390,6339,6340,6343,6345,6347,6349,6352],{"class":392,"line":772},[390,6341,6342],{"class":400},"    dep_learned ",[390,6344,587],{"class":586},[390,6346,5906],{"class":561},[390,6348,565],{"class":412},[390,6350,6351],{"class":561},"emb_state",[390,6353,4280],{"class":412},[390,6355,6356,6359,6361,6363,6365,6367,6369,6371],{"class":392,"line":798},[390,6357,6358],{"class":561},"        LearnedProcess",[390,6360,565],{"class":412},[390,6362,1223],{"class":1222},[390,6364,1227],{"class":1226},[390,6366,1223],{"class":1222},[390,6368,459],{"class":412},[390,6370,4456],{"class":561},[390,6372,2111],{"class":412},[390,6374,6375,6378,6380,6382,6384,6386,6388,6390,6392,6394,6396,6398],{"class":392,"line":830},[390,6376,6377],{"class":561},"        LearnedObservation",[390,6379,565],{"class":412},[390,6381,1223],{"class":1222},[390,6383,1227],{"class":1226},[390,6385,1223],{"class":1222},[390,6387,459],{"class":412},[390,6389,2574],{"class":1222},[390,6391,1227],{"class":1226},[390,6393,1223],{"class":1222},[390,6395,459],{"class":412},[390,6397,4350],{"class":561},[390,6399,6400],{"class":412},")))\n",[390,6402,6403,6406,6408,6410,6412,6414,6416,6419,6421,6423,6425,6427,6429,6432,6434,6436,6438,6440],{"class":392,"line":857},[390,6404,6405],{"class":400},"    dep_plain ",[390,6407,587],{"class":586},[390,6409,5906],{"class":561},[390,6411,565],{"class":412},[390,6413,6351],{"class":561},[390,6415,565],{"class":412},[390,6417,6418],{"class":561},"Identity",[390,6420,565],{"class":412},[390,6422,1223],{"class":1222},[390,6424,1227],{"class":1226},[390,6426,1223],{"class":1222},[390,6428,1974],{"class":412},[390,6430,6431],{"class":561}," Replace",[390,6433,565],{"class":412},[390,6435,1223],{"class":1222},[390,6437,1227],{"class":1226},[390,6439,1223],{"class":1222},[390,6441,6400],{"class":412},[390,6443,6444,6446,6448,6450,6453],{"class":392,"line":878},[390,6445,1695],{"class":1156},[390,6447,565],{"class":412},[390,6449,1279],{"class":619},[390,6451,6452],{"class":1226},"\"deployed in a real Tracker (hard matching):\"",[390,6454,572],{"class":412},[390,6456,6457,6459,6461,6463,6466,6468,6471,6473,6475,6478],{"class":392,"line":884},[390,6458,1695],{"class":1156},[390,6460,565],{"class":412},[390,6462,1279],{"class":619},[390,6464,6465],{"class":1226},"\"  identity process + replace : ",[390,6467,1705],{"class":568},[390,6469,6470],{"class":561},"dep_plain",[390,6472,1756],{"class":619},[390,6474,1710],{"class":568},[390,6476,6477],{"class":1226},"  (lags the rotation -> swaps)\"",[390,6479,572],{"class":412},[390,6481,6482,6484,6486,6488,6491,6493,6496,6498,6500,6503],{"class":392,"line":907},[390,6483,1695],{"class":1156},[390,6485,565],{"class":412},[390,6487,1279],{"class":619},[390,6489,6490],{"class":1226},"\"  learned process + learned fuse: ",[390,6492,1705],{"class":568},[390,6494,6495],{"class":561},"dep_learned",[390,6497,1756],{"class":619},[390,6499,1710],{"class":568},[390,6501,6502],{"class":1226},"  (anticipates -> holds)\"",[390,6504,572],{"class":412},[1764,6506],{"data":6507,"kind":1767},"ZGVwbG95ZWQgaW4gYSByZWFsIFRyYWNrZXIgKGhhcmQgbWF0Y2hpbmcpOgogIGlkZW50aXR5IHByb2Nlc3MgKyByZXBsYWNlIDogMC4yMjIgIChsYWdzIHRoZSByb3RhdGlvbiAtPiBzd2FwcykKICBsZWFybmVkIHByb2Nlc3MgKyBsZWFybmVkIGZ1c2U6IDEuMDAwICAoYW50aWNpcGF0ZXMgLT4gaG9sZHMpCg==",[338,6509,6510,6513,6514,6516,6517,6520,6521,6524,6525,6528,6529,371,6531,6533],{},[348,6511,6512],{},"Takeaway."," A ",[348,6515,191],{}," adds memory the single-vector filters lack\n— decisive across appearance changes and re-identification gaps.\n",[348,6518,6519],{},"Learned propagation"," is the MOTR-style option: the propagation and\nupdate modules are trained end-to-end ",[358,6522,6523],{},"through the differentiable\nassociation",", not by regressing to a target embedding — the only\nsupervision is \"keep each identity matched\". With that signal the\nmodule learns to anticipate motion that a closed-form filter cannot,\nand it drops into the same ",[353,6526,6527],{},"State"," interface (",[353,6530,370],{},[353,6532,374],{},") as every other method here.",[6535,6536,6537],"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);}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .smCYv, html code.shiki .smCYv{--shiki-light:#E53935;--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 .stp6e, html code.shiki .stp6e{--shiki-light:#39ADB5;--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":386,"searchDepth":425,"depth":425,"links":6539},[6540,6541],{"id":1771,"depth":404,"text":1772},{"id":3206,"depth":404,"text":3207},"md",{"notebook":428},{"icon":63},{"title":77,"description":340},"rV3IK5sV1s3-4uWwzEFuXoPfEJyxxKeb2c84QBXLUQ0",{},1785139890360]