[{"data":1,"prerenderedAt":9413},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Ftutorials\u002Fmigration":328,"docyard:crossref-index":9412},[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":119,"body":330,"description":340,"extension":9407,"meta":9408,"navigation":9409,"path":120,"seo":9410,"stem":121,"__hash__":9411},"content\u002F5.notebooks\u002Ftutorials\u002F7.migration.md",{"type":331,"value":332,"toc":9393},"minimark",[333,337,341,367,375,380,387,435,440,443,870,874,877,899,915,1885,1896,2703,2706,3244,3247,3251,3259,4096,4099,4103,4109,4607,4613,4617,4623,4968,4974,4978,5020,5651,5843,5846,6288,6293,6296,6300,6306,6624,6627,6634,6638,6654,6864,6867,6871,6881,7068,7071,7075,7103,7693,7696,8181,8186,8190,8196,8206,8980,8983,9321,9326,9348,9352,9389],[334,335,119],"h1",{"id":336},"_7-migration-new-possibilities-driven-by-a-real-detector",[338,339,340],"p",{},"This notebook does two things at once:",[342,343,344,357],"ol",{},[345,346,347,351,352,356],"li",{},[348,349,350],"strong",{},"Migrates a real 1.x tracker to 2.0."," We take the\nappearance-embedding tracker from the\n",[353,354,355],"a",{"href":46},"migration guide"," and rebuild it in\nthe 2.0 syntax, then run it on detections from an actual\npretrained model.",[345,358,359,362,363,366],{},[348,360,361],{},"Showcases what 2.0 makes possible"," that 1.x could not\nexpress: parallel cost fusion, cascaded matching, lifecycle\npolicies, and end-to-end ",[348,364,365],{},"differentiable"," matching.",[338,368,369,370,374],{},"Everything runs locally on CPU. The detections come from a tiny\nHugging Face detector (",[371,372,373],"code",{},"hustvl\u002Fyolos-tiny",", ~6M params) plus a\ntorchvision ResNet-18 appearance encoder — both download their\nweights on first run. If the model or network is unavailable, the\nnotebook falls back to a deterministic synthetic seed so it still\nruns end to end.",[376,377,379],"h2",{"id":378},"setup","Setup",[338,381,382,383,386],{},"Install the extra dependencies once (the core library needs only\n",[371,384,385],{},"unitrack","; this notebook adds a detector and plotting):",[388,389,394],"pre",{"className":390,"code":391,"language":392,"meta":393,"style":393},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","# One-time install. Comment out after the first run.\n%pip install -q \"transformers>=4.40\" torchvision matplotlib pillow\n\n","python","",[371,395,396,405],{"__ignoreMap":393},[397,398,401],"span",{"class":399,"line":400},"line",1,[397,402,404],{"class":403},"sutJx","# One-time install. Comment out after the first run.\n",[397,406,408,412,416,419,422,426,430,432],{"class":399,"line":407},2,[397,409,411],{"class":410},"smGrS","%",[397,413,415],{"class":414},"su5hD","pip install ",[397,417,418],{"class":410},"-",[397,420,421],{"class":414},"q ",[397,423,425],{"class":424},"sjJ54","\"",[397,427,429],{"class":428},"s_sjI","transformers>=4.40",[397,431,425],{"class":424},[397,433,434],{"class":414}," torchvision matplotlib pillow\n",[436,437],"docyard-notebook-output",{"data":438,"kind":439},"L2hvbWUva2h3c3RvbGxlL1Byb2plY3RzL3Jlc2VhcmNoL3VuaXRyYWNrLy52ZW52L2Jpbi9weXRob24zOiBObyBtb2R1bGUgbmFtZWQgcGlwDQo=","stream",[436,441],{"data":442,"kind":439},"Tm90ZTogeW91IG1heSBuZWVkIHRvIHJlc3RhcnQgdGhlIGtlcm5lbCB0byB1c2UgdXBkYXRlZCBwYWNrYWdlcy4K",[388,444,446],{"className":390,"code":445,"language":392,"meta":393,"style":393},"import urllib.request\n\nimport matplotlib.patches as mpatches\nimport matplotlib.pyplot as plt\nimport torch\n\nimport unitrack as ut\nfrom unitrack.assignment import Associate, Jonker, SoftAssignment\nfrom unitrack.costs import BoxIoU, Cosine\nfrom unitrack.data import (\n    Detections, FrameContext, TensorSpec, Tracklets,\n)\nfrom unitrack.gates import ClassGate, ScoreGate\nfrom unitrack.lifecycle import (\n    ConfirmedOnly, IncludeAll, NoLifecycle, StandardLifecycle,\n    TrackletStatus,\n)\nfrom unitrack.pipeline import Gated, Parallel, Pipe, Sequential\nfrom unitrack.pipeline.merge import WeightedSum\nfrom unitrack.states import (\n    FromDetectionField, Identity, Replace, State,\n)\n\ntorch.manual_seed(0)\nplt.rcParams[\"figure.figsize\"] = (7, 4)\n\n",[371,447,448,465,471,490,507,515,520,534,564,586,603,627,633,655,671,694,702,707,739,760,776,799,804,809,830],{"__ignoreMap":393},[397,449,450,454,457,461],{"class":399,"line":400},[397,451,453],{"class":452},"sVHd0","import",[397,455,456],{"class":414}," urllib",[397,458,460],{"class":459},"sP7_E",".",[397,462,464],{"class":463},"skxfh","request\n",[397,466,467],{"class":399,"line":407},[397,468,470],{"emptyLinePlaceholder":469},true,"\n",[397,472,474,476,479,481,484,487],{"class":399,"line":473},3,[397,475,453],{"class":452},[397,477,478],{"class":414}," matplotlib",[397,480,460],{"class":459},[397,482,483],{"class":463},"patches",[397,485,486],{"class":452}," as",[397,488,489],{"class":414}," mpatches\n",[397,491,493,495,497,499,502,504],{"class":399,"line":492},4,[397,494,453],{"class":452},[397,496,478],{"class":414},[397,498,460],{"class":459},[397,500,501],{"class":463},"pyplot",[397,503,486],{"class":452},[397,505,506],{"class":414}," plt\n",[397,508,510,512],{"class":399,"line":509},5,[397,511,453],{"class":452},[397,513,514],{"class":414}," torch\n",[397,516,518],{"class":399,"line":517},6,[397,519,470],{"emptyLinePlaceholder":469},[397,521,523,525,528,531],{"class":399,"line":522},7,[397,524,453],{"class":452},[397,526,527],{"class":414}," unitrack ",[397,529,530],{"class":452},"as",[397,532,533],{"class":414}," ut\n",[397,535,537,540,543,545,548,550,553,556,559,561],{"class":399,"line":536},8,[397,538,539],{"class":452},"from",[397,541,542],{"class":414}," unitrack",[397,544,460],{"class":459},[397,546,547],{"class":414},"assignment ",[397,549,453],{"class":452},[397,551,552],{"class":414}," Associate",[397,554,555],{"class":459},",",[397,557,558],{"class":414}," Jonker",[397,560,555],{"class":459},[397,562,563],{"class":414}," SoftAssignment\n",[397,565,567,569,571,573,576,578,581,583],{"class":399,"line":566},9,[397,568,539],{"class":452},[397,570,542],{"class":414},[397,572,460],{"class":459},[397,574,575],{"class":414},"costs ",[397,577,453],{"class":452},[397,579,580],{"class":414}," BoxIoU",[397,582,555],{"class":459},[397,584,585],{"class":414}," Cosine\n",[397,587,589,591,593,595,598,600],{"class":399,"line":588},10,[397,590,539],{"class":452},[397,592,542],{"class":414},[397,594,460],{"class":459},[397,596,597],{"class":414},"data ",[397,599,453],{"class":452},[397,601,602],{"class":459}," (\n",[397,604,606,609,611,614,616,619,621,624],{"class":399,"line":605},11,[397,607,608],{"class":414},"    Detections",[397,610,555],{"class":459},[397,612,613],{"class":414}," FrameContext",[397,615,555],{"class":459},[397,617,618],{"class":414}," TensorSpec",[397,620,555],{"class":459},[397,622,623],{"class":414}," Tracklets",[397,625,626],{"class":459},",\n",[397,628,630],{"class":399,"line":629},12,[397,631,632],{"class":459},")\n",[397,634,636,638,640,642,645,647,650,652],{"class":399,"line":635},13,[397,637,539],{"class":452},[397,639,542],{"class":414},[397,641,460],{"class":459},[397,643,644],{"class":414},"gates ",[397,646,453],{"class":452},[397,648,649],{"class":414}," ClassGate",[397,651,555],{"class":459},[397,653,654],{"class":414}," ScoreGate\n",[397,656,658,660,662,664,667,669],{"class":399,"line":657},14,[397,659,539],{"class":452},[397,661,542],{"class":414},[397,663,460],{"class":459},[397,665,666],{"class":414},"lifecycle ",[397,668,453],{"class":452},[397,670,602],{"class":459},[397,672,674,677,679,682,684,687,689,692],{"class":399,"line":673},15,[397,675,676],{"class":414},"    ConfirmedOnly",[397,678,555],{"class":459},[397,680,681],{"class":414}," IncludeAll",[397,683,555],{"class":459},[397,685,686],{"class":414}," NoLifecycle",[397,688,555],{"class":459},[397,690,691],{"class":414}," StandardLifecycle",[397,693,626],{"class":459},[397,695,697,700],{"class":399,"line":696},16,[397,698,699],{"class":414},"    TrackletStatus",[397,701,626],{"class":459},[397,703,705],{"class":399,"line":704},17,[397,706,632],{"class":459},[397,708,710,712,714,716,719,721,724,726,729,731,734,736],{"class":399,"line":709},18,[397,711,539],{"class":452},[397,713,542],{"class":414},[397,715,460],{"class":459},[397,717,718],{"class":414},"pipeline ",[397,720,453],{"class":452},[397,722,723],{"class":414}," Gated",[397,725,555],{"class":459},[397,727,728],{"class":414}," Parallel",[397,730,555],{"class":459},[397,732,733],{"class":414}," Pipe",[397,735,555],{"class":459},[397,737,738],{"class":414}," Sequential\n",[397,740,742,744,746,748,750,752,755,757],{"class":399,"line":741},19,[397,743,539],{"class":452},[397,745,542],{"class":414},[397,747,460],{"class":459},[397,749,256],{"class":414},[397,751,460],{"class":459},[397,753,754],{"class":414},"merge ",[397,756,453],{"class":452},[397,758,759],{"class":414}," WeightedSum\n",[397,761,763,765,767,769,772,774],{"class":399,"line":762},20,[397,764,539],{"class":452},[397,766,542],{"class":414},[397,768,460],{"class":459},[397,770,771],{"class":414},"states ",[397,773,453],{"class":452},[397,775,602],{"class":459},[397,777,779,782,784,787,789,792,794,797],{"class":399,"line":778},21,[397,780,781],{"class":414},"    FromDetectionField",[397,783,555],{"class":459},[397,785,786],{"class":414}," Identity",[397,788,555],{"class":459},[397,790,791],{"class":414}," Replace",[397,793,555],{"class":459},[397,795,796],{"class":414}," State",[397,798,626],{"class":459},[397,800,802],{"class":399,"line":801},22,[397,803,632],{"class":459},[397,805,807],{"class":399,"line":806},23,[397,808,470],{"emptyLinePlaceholder":469},[397,810,812,815,817,821,824,828],{"class":399,"line":811},24,[397,813,814],{"class":414},"torch",[397,816,460],{"class":459},[397,818,820],{"class":819},"slqww","manual_seed",[397,822,823],{"class":459},"(",[397,825,827],{"class":826},"srdBf","0",[397,829,632],{"class":459},[397,831,833,836,838,841,844,846,849,851,854,857,860,863,865,868],{"class":399,"line":832},25,[397,834,835],{"class":414},"plt",[397,837,460],{"class":459},[397,839,840],{"class":463},"rcParams",[397,842,843],{"class":459},"[",[397,845,425],{"class":424},[397,847,848],{"class":428},"figure.figsize",[397,850,425],{"class":424},[397,852,853],{"class":459},"]",[397,855,856],{"class":410}," =",[397,858,859],{"class":459}," (",[397,861,862],{"class":826},"7",[397,864,555],{"class":459},[397,866,867],{"class":826}," 4",[397,869,632],{"class":459},[376,871,873],{"id":872},"a-real-lightweight-detector-appearance-encoder","A real, lightweight detector + appearance encoder",[338,875,876],{},"unitrack tracks; it does not detect. In a real pipeline the\nper-frame detections come from an object detector, and the\nappearance embeddings from a ReID encoder. We use:",[878,879,880,889],"ul",{},[345,881,882,885,886,888],{},[348,883,884],{},"Detector"," — ",[371,887,373],{}," via 🤗 Transformers. Returns\nboxes (xyxy, pixels), class labels, and scores.",[345,890,891,894,895,898],{},[348,892,893],{},"Appearance"," — torchvision ",[371,896,897],{},"ResNet-18"," with its classification\nhead removed, giving a 512-d feature per cropped box. We\nL2-normalise it so a cosine cost is well-behaved.",[338,900,901,902,904,905,904,908,911,912,460],{},"These are exactly the four fields the migrated tracker consumes:\n",[371,903,291],{},", ",[371,906,907],{},"category",[371,909,910],{},"score",", and ",[371,913,914],{},"reid",[388,916,918],{"className":390,"code":917,"language":392,"meta":393,"style":393},"def load_detector_and_encoder():\n    \"\"\"Load a tiny HF detector + a torchvision ReID encoder.\"\"\"\n    import torchvision\n    from transformers import (\n        AutoImageProcessor, AutoModelForObjectDetection,\n    )\n\n    processor = AutoImageProcessor.from_pretrained(\"hustvl\u002Fyolos-tiny\")\n    detector = AutoModelForObjectDetection.from_pretrained(\n        \"hustvl\u002Fyolos-tiny\"\n    ).eval()\n\n    weights = torchvision.models.ResNet18_Weights.DEFAULT\n    encoder = torchvision.models.resnet18(weights=weights)\n    encoder.fc = torch.nn.Identity()  # expose the 512-d features\n    encoder.eval()\n    return processor, detector, encoder, weights.transforms()\n\n\n@torch.no_grad()\ndef detect_and_embed(image, bundle, *, score_thr=0.7):\n    \"\"\"Detect objects and attach a 512-d appearance embedding each.\"\"\"\n    processor, detector, encoder, crop_tf = bundle\n    inputs = processor(images=image, return_tensors=\"pt\")\n    outputs = detector(**inputs)\n    target_sizes = torch.tensor([[image.height, image.width]])\n    out = processor.post_process_object_detection(\n        outputs, threshold=score_thr, target_sizes=target_sizes\n    )[0]\n    boxes, labels, scores = out[\"boxes\"], out[\"labels\"], out[\"scores\"]\n\n    crops = []\n    for x0, y0, x1, y1 in boxes.tolist():\n        x1, y1 = max(x1, x0 + 1), max(y1, y0 + 1)  # guard degenerate boxes\n        crops.append(crop_tf(image.crop((x0, y0, x1, y1))))\n    reid = (\n        torch.nn.functional.normalize(encoder(torch.stack(crops)), dim=-1)\n        if crops else torch.zeros(0, 512)\n    )\n    names = [detector.config.id2label[int(c)] for c in labels]\n    return {\n        \"boxes\": boxes.float(), \"category\": labels.long(),\n        \"score\": scores.float(), \"reid\": reid.float(), \"names\": names,\n    }\n\n",[371,919,920,933,946,954,966,978,983,987,1013,1029,1039,1050,1054,1079,1109,1140,1150,1180,1184,1188,1203,1239,1248,1271,1305,1324,1362,1379,1404,1415,1474,1479,1490,1527,1584,1631,1641,1694,1724,1729,1779,1787,1828,1879],{"__ignoreMap":393},[397,921,922,926,930],{"class":399,"line":400},[397,923,925],{"class":924},"sbsja","def",[397,927,929],{"class":928},"sGLFI"," load_detector_and_encoder",[397,931,932],{"class":459},"():\n",[397,934,935,939,943],{"class":399,"line":407},[397,936,938],{"class":937},"s2W-s","    \"\"\"",[397,940,942],{"class":941},"sithA","Load a tiny HF detector + a torchvision ReID encoder.",[397,944,945],{"class":937},"\"\"\"\n",[397,947,948,951],{"class":399,"line":473},[397,949,950],{"class":452},"    import",[397,952,953],{"class":414}," torchvision\n",[397,955,956,959,962,964],{"class":399,"line":492},[397,957,958],{"class":452},"    from",[397,960,961],{"class":414}," transformers ",[397,963,453],{"class":452},[397,965,602],{"class":459},[397,967,968,971,973,976],{"class":399,"line":509},[397,969,970],{"class":414},"        AutoImageProcessor",[397,972,555],{"class":459},[397,974,975],{"class":414}," AutoModelForObjectDetection",[397,977,626],{"class":459},[397,979,980],{"class":399,"line":517},[397,981,982],{"class":459},"    )\n",[397,984,985],{"class":399,"line":522},[397,986,470],{"emptyLinePlaceholder":469},[397,988,989,992,995,998,1000,1003,1005,1007,1009,1011],{"class":399,"line":536},[397,990,991],{"class":414},"    processor ",[397,993,994],{"class":410},"=",[397,996,997],{"class":414}," AutoImageProcessor",[397,999,460],{"class":459},[397,1001,1002],{"class":819},"from_pretrained",[397,1004,823],{"class":459},[397,1006,425],{"class":424},[397,1008,373],{"class":428},[397,1010,425],{"class":424},[397,1012,632],{"class":459},[397,1014,1015,1018,1020,1022,1024,1026],{"class":399,"line":566},[397,1016,1017],{"class":414},"    detector ",[397,1019,994],{"class":410},[397,1021,975],{"class":414},[397,1023,460],{"class":459},[397,1025,1002],{"class":819},[397,1027,1028],{"class":459},"(\n",[397,1030,1031,1034,1036],{"class":399,"line":588},[397,1032,1033],{"class":424},"        \"",[397,1035,373],{"class":428},[397,1037,1038],{"class":424},"\"\n",[397,1040,1041,1044,1047],{"class":399,"line":605},[397,1042,1043],{"class":459},"    ).",[397,1045,1046],{"class":819},"eval",[397,1048,1049],{"class":459},"()\n",[397,1051,1052],{"class":399,"line":629},[397,1053,470],{"emptyLinePlaceholder":469},[397,1055,1056,1059,1061,1064,1066,1068,1070,1073,1075],{"class":399,"line":635},[397,1057,1058],{"class":414},"    weights ",[397,1060,994],{"class":410},[397,1062,1063],{"class":414}," torchvision",[397,1065,460],{"class":459},[397,1067,158],{"class":463},[397,1069,460],{"class":459},[397,1071,1072],{"class":463},"ResNet18_Weights",[397,1074,460],{"class":459},[397,1076,1078],{"class":1077},"swQdS","DEFAULT\n",[397,1080,1081,1084,1086,1088,1090,1092,1094,1097,1099,1103,1105,1107],{"class":399,"line":657},[397,1082,1083],{"class":414},"    encoder ",[397,1085,994],{"class":410},[397,1087,1063],{"class":414},[397,1089,460],{"class":459},[397,1091,158],{"class":463},[397,1093,460],{"class":459},[397,1095,1096],{"class":819},"resnet18",[397,1098,823],{"class":459},[397,1100,1102],{"class":1101},"s99_P","weights",[397,1104,994],{"class":410},[397,1106,1102],{"class":819},[397,1108,632],{"class":459},[397,1110,1111,1114,1116,1119,1121,1124,1126,1129,1131,1134,1137],{"class":399,"line":673},[397,1112,1113],{"class":414},"    encoder",[397,1115,460],{"class":459},[397,1117,1118],{"class":463},"fc",[397,1120,856],{"class":410},[397,1122,1123],{"class":414}," torch",[397,1125,460],{"class":459},[397,1127,1128],{"class":463},"nn",[397,1130,460],{"class":459},[397,1132,1133],{"class":819},"Identity",[397,1135,1136],{"class":459},"()",[397,1138,1139],{"class":403},"  # expose the 512-d features\n",[397,1141,1142,1144,1146,1148],{"class":399,"line":696},[397,1143,1113],{"class":414},[397,1145,460],{"class":459},[397,1147,1046],{"class":819},[397,1149,1049],{"class":459},[397,1151,1152,1155,1158,1160,1163,1165,1168,1170,1173,1175,1178],{"class":399,"line":704},[397,1153,1154],{"class":452},"    return",[397,1156,1157],{"class":414}," processor",[397,1159,555],{"class":459},[397,1161,1162],{"class":414}," detector",[397,1164,555],{"class":459},[397,1166,1167],{"class":414}," encoder",[397,1169,555],{"class":459},[397,1171,1172],{"class":414}," weights",[397,1174,460],{"class":459},[397,1176,1177],{"class":819},"transforms",[397,1179,1049],{"class":459},[397,1181,1182],{"class":399,"line":709},[397,1183,470],{"emptyLinePlaceholder":469},[397,1185,1186],{"class":399,"line":741},[397,1187,470],{"emptyLinePlaceholder":469},[397,1189,1190,1194,1196,1198,1201],{"class":399,"line":762},[397,1191,1193],{"class":1192},"stp6e","@",[397,1195,814],{"class":928},[397,1197,460],{"class":1192},[397,1199,1200],{"class":928},"no_grad",[397,1202,1049],{"class":459},[397,1204,1205,1207,1210,1212,1216,1218,1221,1223,1226,1228,1231,1233,1236],{"class":399,"line":778},[397,1206,925],{"class":924},[397,1208,1209],{"class":928}," detect_and_embed",[397,1211,823],{"class":459},[397,1213,1215],{"class":1214},"sFwrP","image",[397,1217,555],{"class":459},[397,1219,1220],{"class":1214}," bundle",[397,1222,555],{"class":459},[397,1224,1225],{"class":410}," *",[397,1227,904],{"class":414},[397,1229,1230],{"class":1214},"score_thr",[397,1232,994],{"class":410},[397,1234,1235],{"class":826},"0.7",[397,1237,1238],{"class":459},"):\n",[397,1240,1241,1243,1246],{"class":399,"line":801},[397,1242,938],{"class":937},[397,1244,1245],{"class":941},"Detect objects and attach a 512-d appearance embedding each.",[397,1247,945],{"class":937},[397,1249,1250,1253,1255,1257,1259,1261,1263,1266,1268],{"class":399,"line":806},[397,1251,1252],{"class":414},"    processor",[397,1254,555],{"class":459},[397,1256,1162],{"class":414},[397,1258,555],{"class":459},[397,1260,1167],{"class":414},[397,1262,555],{"class":459},[397,1264,1265],{"class":414}," crop_tf ",[397,1267,994],{"class":410},[397,1269,1270],{"class":414}," bundle\n",[397,1272,1273,1276,1278,1280,1282,1285,1287,1289,1291,1294,1296,1298,1301,1303],{"class":399,"line":811},[397,1274,1275],{"class":414},"    inputs ",[397,1277,994],{"class":410},[397,1279,1157],{"class":819},[397,1281,823],{"class":459},[397,1283,1284],{"class":1101},"images",[397,1286,994],{"class":410},[397,1288,1215],{"class":819},[397,1290,555],{"class":459},[397,1292,1293],{"class":1101}," return_tensors",[397,1295,994],{"class":410},[397,1297,425],{"class":424},[397,1299,1300],{"class":428},"pt",[397,1302,425],{"class":424},[397,1304,632],{"class":459},[397,1306,1307,1310,1312,1314,1316,1319,1322],{"class":399,"line":832},[397,1308,1309],{"class":414},"    outputs ",[397,1311,994],{"class":410},[397,1313,1162],{"class":819},[397,1315,823],{"class":459},[397,1317,1318],{"class":410},"**",[397,1320,1321],{"class":819},"inputs",[397,1323,632],{"class":459},[397,1325,1327,1330,1332,1334,1336,1339,1342,1344,1346,1349,1351,1354,1356,1359],{"class":399,"line":1326},26,[397,1328,1329],{"class":414},"    target_sizes ",[397,1331,994],{"class":410},[397,1333,1123],{"class":414},[397,1335,460],{"class":459},[397,1337,1338],{"class":819},"tensor",[397,1340,1341],{"class":459},"([[",[397,1343,1215],{"class":819},[397,1345,460],{"class":459},[397,1347,1348],{"class":463},"height",[397,1350,555],{"class":459},[397,1352,1353],{"class":819}," image",[397,1355,460],{"class":459},[397,1357,1358],{"class":463},"width",[397,1360,1361],{"class":459},"]])\n",[397,1363,1365,1368,1370,1372,1374,1377],{"class":399,"line":1364},27,[397,1366,1367],{"class":414},"    out ",[397,1369,994],{"class":410},[397,1371,1157],{"class":414},[397,1373,460],{"class":459},[397,1375,1376],{"class":819},"post_process_object_detection",[397,1378,1028],{"class":459},[397,1380,1382,1385,1387,1390,1392,1394,1396,1399,1401],{"class":399,"line":1381},28,[397,1383,1384],{"class":819},"        outputs",[397,1386,555],{"class":459},[397,1388,1389],{"class":1101}," threshold",[397,1391,994],{"class":410},[397,1393,1230],{"class":819},[397,1395,555],{"class":459},[397,1397,1398],{"class":1101}," target_sizes",[397,1400,994],{"class":410},[397,1402,1403],{"class":819},"target_sizes\n",[397,1405,1407,1410,1412],{"class":399,"line":1406},29,[397,1408,1409],{"class":459},"    )[",[397,1411,827],{"class":826},[397,1413,1414],{"class":459},"]\n",[397,1416,1418,1421,1423,1426,1428,1431,1433,1436,1438,1440,1443,1445,1448,1450,1452,1454,1457,1459,1461,1463,1465,1467,1470,1472],{"class":399,"line":1417},30,[397,1419,1420],{"class":414},"    boxes",[397,1422,555],{"class":459},[397,1424,1425],{"class":414}," labels",[397,1427,555],{"class":459},[397,1429,1430],{"class":414}," scores ",[397,1432,994],{"class":410},[397,1434,1435],{"class":414}," out",[397,1437,843],{"class":459},[397,1439,425],{"class":424},[397,1441,1442],{"class":428},"boxes",[397,1444,425],{"class":424},[397,1446,1447],{"class":459},"],",[397,1449,1435],{"class":414},[397,1451,843],{"class":459},[397,1453,425],{"class":424},[397,1455,1456],{"class":428},"labels",[397,1458,425],{"class":424},[397,1460,1447],{"class":459},[397,1462,1435],{"class":414},[397,1464,843],{"class":459},[397,1466,425],{"class":424},[397,1468,1469],{"class":428},"scores",[397,1471,425],{"class":424},[397,1473,1414],{"class":459},[397,1475,1477],{"class":399,"line":1476},31,[397,1478,470],{"emptyLinePlaceholder":469},[397,1480,1482,1485,1487],{"class":399,"line":1481},32,[397,1483,1484],{"class":414},"    crops ",[397,1486,994],{"class":410},[397,1488,1489],{"class":459}," []\n",[397,1491,1493,1496,1499,1501,1504,1506,1509,1511,1514,1517,1520,1522,1525],{"class":399,"line":1492},33,[397,1494,1495],{"class":452},"    for",[397,1497,1498],{"class":414}," x0",[397,1500,555],{"class":459},[397,1502,1503],{"class":414}," y0",[397,1505,555],{"class":459},[397,1507,1508],{"class":414}," x1",[397,1510,555],{"class":459},[397,1512,1513],{"class":414}," y1 ",[397,1515,1516],{"class":452},"in",[397,1518,1519],{"class":414}," boxes",[397,1521,460],{"class":459},[397,1523,1524],{"class":819},"tolist",[397,1526,932],{"class":459},[397,1528,1530,1533,1535,1537,1539,1543,1545,1548,1550,1553,1556,1559,1562,1564,1566,1569,1571,1574,1576,1578,1581],{"class":399,"line":1529},34,[397,1531,1532],{"class":414},"        x1",[397,1534,555],{"class":459},[397,1536,1513],{"class":414},[397,1538,994],{"class":410},[397,1540,1542],{"class":1541},"sptTA"," max",[397,1544,823],{"class":459},[397,1546,1547],{"class":819},"x1",[397,1549,555],{"class":459},[397,1551,1552],{"class":819}," x0 ",[397,1554,1555],{"class":410},"+",[397,1557,1558],{"class":826}," 1",[397,1560,1561],{"class":459},"),",[397,1563,1542],{"class":1541},[397,1565,823],{"class":459},[397,1567,1568],{"class":819},"y1",[397,1570,555],{"class":459},[397,1572,1573],{"class":819}," y0 ",[397,1575,1555],{"class":410},[397,1577,1558],{"class":826},[397,1579,1580],{"class":459},")",[397,1582,1583],{"class":403},"  # guard degenerate boxes\n",[397,1585,1587,1590,1592,1595,1597,1600,1602,1604,1606,1609,1612,1615,1617,1619,1621,1623,1625,1628],{"class":399,"line":1586},35,[397,1588,1589],{"class":414},"        crops",[397,1591,460],{"class":459},[397,1593,1594],{"class":819},"append",[397,1596,823],{"class":459},[397,1598,1599],{"class":819},"crop_tf",[397,1601,823],{"class":459},[397,1603,1215],{"class":819},[397,1605,460],{"class":459},[397,1607,1608],{"class":819},"crop",[397,1610,1611],{"class":459},"((",[397,1613,1614],{"class":819},"x0",[397,1616,555],{"class":459},[397,1618,1503],{"class":819},[397,1620,555],{"class":459},[397,1622,1508],{"class":819},[397,1624,555],{"class":459},[397,1626,1627],{"class":819}," y1",[397,1629,1630],{"class":459},"))))\n",[397,1632,1634,1637,1639],{"class":399,"line":1633},36,[397,1635,1636],{"class":414},"    reid ",[397,1638,994],{"class":410},[397,1640,602],{"class":459},[397,1642,1644,1647,1649,1651,1653,1656,1658,1661,1663,1666,1668,1670,1672,1675,1677,1680,1683,1686,1689,1692],{"class":399,"line":1643},37,[397,1645,1646],{"class":414},"        torch",[397,1648,460],{"class":459},[397,1650,1128],{"class":463},[397,1652,460],{"class":459},[397,1654,1655],{"class":463},"functional",[397,1657,460],{"class":459},[397,1659,1660],{"class":819},"normalize",[397,1662,823],{"class":459},[397,1664,1665],{"class":819},"encoder",[397,1667,823],{"class":459},[397,1669,814],{"class":819},[397,1671,460],{"class":459},[397,1673,1674],{"class":819},"stack",[397,1676,823],{"class":459},[397,1678,1679],{"class":819},"crops",[397,1681,1682],{"class":459},")),",[397,1684,1685],{"class":1101}," dim",[397,1687,1688],{"class":410},"=-",[397,1690,1691],{"class":826},"1",[397,1693,632],{"class":459},[397,1695,1697,1700,1703,1706,1708,1710,1713,1715,1717,1719,1722],{"class":399,"line":1696},38,[397,1698,1699],{"class":452},"        if",[397,1701,1702],{"class":414}," crops ",[397,1704,1705],{"class":452},"else",[397,1707,1123],{"class":414},[397,1709,460],{"class":459},[397,1711,1712],{"class":819},"zeros",[397,1714,823],{"class":459},[397,1716,827],{"class":826},[397,1718,555],{"class":459},[397,1720,1721],{"class":826}," 512",[397,1723,632],{"class":459},[397,1725,1727],{"class":399,"line":1726},39,[397,1728,982],{"class":459},[397,1730,1732,1735,1737,1740,1743,1745,1748,1750,1753,1755,1759,1761,1764,1767,1770,1773,1775,1777],{"class":399,"line":1731},40,[397,1733,1734],{"class":414},"    names ",[397,1736,994],{"class":410},[397,1738,1739],{"class":459}," [",[397,1741,1742],{"class":414},"detector",[397,1744,460],{"class":459},[397,1746,1747],{"class":463},"config",[397,1749,460],{"class":459},[397,1751,1752],{"class":463},"id2label",[397,1754,843],{"class":459},[397,1756,1758],{"class":1757},"sZMiF","int",[397,1760,823],{"class":459},[397,1762,1763],{"class":819},"c",[397,1765,1766],{"class":459},")]",[397,1768,1769],{"class":452}," for",[397,1771,1772],{"class":414}," c ",[397,1774,1516],{"class":452},[397,1776,1425],{"class":414},[397,1778,1414],{"class":459},[397,1780,1782,1784],{"class":399,"line":1781},41,[397,1783,1154],{"class":452},[397,1785,1786],{"class":459}," {\n",[397,1788,1790,1792,1794,1796,1799,1801,1803,1806,1809,1812,1814,1816,1818,1820,1822,1825],{"class":399,"line":1789},42,[397,1791,1033],{"class":424},[397,1793,1442],{"class":428},[397,1795,425],{"class":424},[397,1797,1798],{"class":459},":",[397,1800,1519],{"class":414},[397,1802,460],{"class":459},[397,1804,1805],{"class":819},"float",[397,1807,1808],{"class":459},"(),",[397,1810,1811],{"class":424}," \"",[397,1813,907],{"class":428},[397,1815,425],{"class":424},[397,1817,1798],{"class":459},[397,1819,1425],{"class":414},[397,1821,460],{"class":459},[397,1823,1824],{"class":819},"long",[397,1826,1827],{"class":459},"(),\n",[397,1829,1831,1833,1835,1837,1839,1842,1844,1846,1848,1850,1852,1854,1856,1859,1861,1863,1865,1867,1870,1872,1874,1877],{"class":399,"line":1830},43,[397,1832,1033],{"class":424},[397,1834,910],{"class":428},[397,1836,425],{"class":424},[397,1838,1798],{"class":459},[397,1840,1841],{"class":414}," scores",[397,1843,460],{"class":459},[397,1845,1805],{"class":819},[397,1847,1808],{"class":459},[397,1849,1811],{"class":424},[397,1851,914],{"class":428},[397,1853,425],{"class":424},[397,1855,1798],{"class":459},[397,1857,1858],{"class":414}," reid",[397,1860,460],{"class":459},[397,1862,1805],{"class":819},[397,1864,1808],{"class":459},[397,1866,1811],{"class":424},[397,1868,1869],{"class":428},"names",[397,1871,425],{"class":424},[397,1873,1798],{"class":459},[397,1875,1876],{"class":414}," names",[397,1878,626],{"class":459},[397,1880,1882],{"class":399,"line":1881},44,[397,1883,1884],{"class":459},"    }\n",[338,1886,1887,1888,1891,1892,1895],{},"Run the detector on one image. We use a stock multi-object photo;\npoint ",[371,1889,1890],{},"IMAGE_URL"," (or a local ",[371,1893,1894],{},"IMAGE_PATH",") at your own to try it\non something else. If anything fails — no network, deps missing —\nwe drop to a deterministic synthetic seed and keep going.",[388,1897,1899],{"className":390,"code":1898,"language":392,"meta":393,"style":393},"IMAGE_URL = \"http:\u002F\u002Fimages.cocodataset.org\u002Fval2017\u002F000000039769.jpg\"\n\n\ndef synthetic_seed(reid_dim=512):\n    \"\"\"Offline stand-in: three objects, two sharing a class.\"\"\"\n    g = torch.Generator().manual_seed(0)\n    q, _ = torch.linalg.qr(torch.randn(reid_dim, reid_dim, generator=g))\n    return {\n        \"boxes\": torch.tensor([[10., 10, 40, 60],\n                               [120, 20, 150, 70],\n                               [220, 15, 250, 65]]),\n        \"category\": torch.tensor([1, 1, 2]),\n        \"score\": torch.tensor([0.95, 0.9, 0.8]),\n        \"reid\": q[:3],\n        \"names\": [\"cat\", \"cat\", \"remote\"],\n    }\n\n\nimage = None\ntry:\n    from PIL import Image\n    bundle = load_detector_and_encoder()\n    image = Image.open(urllib.request.urlopen(IMAGE_URL)).convert(\"RGB\")\n    seed = detect_and_embed(image, bundle)\n    if seed[\"boxes\"].shape[0] == 0:\n        raise RuntimeError(\"detector found no objects above threshold\")\n    SOURCE = f\"hugging face yolos-tiny ({len(seed['names'])} detections)\"\nexcept Exception as exc:  # noqa: BLE001 — any failure -> deterministic seed\n    print(f\"[fallback] real model unavailable \"\n          f\"({type(exc).__name__}: {exc}); using a synthetic seed.\")\n    seed = synthetic_seed()\n    SOURCE = \"synthetic fallback\"\n\nREID_DIM = seed[\"reid\"].shape[1]\nprint(f\"source:  {SOURCE}\")\nprint(f\"objects: {seed['names']}\")\nprint(f\"scores:  {seed['score'].round(decimals=2).tolist()}\")\n\n",[371,1900,1901,1915,1919,1923,1942,1951,1976,2031,2037,2077,2102,2127,2160,2193,2214,2252,2256,2260,2264,2275,2283,2296,2307,2358,2377,2413,2432,2474,2492,2505,2545,2555,2568,2572,2599,2622,2653],{"__ignoreMap":393},[397,1902,1903,1906,1908,1910,1913],{"class":399,"line":400},[397,1904,1890],{"class":1905},"s_hVV",[397,1907,856],{"class":410},[397,1909,1811],{"class":424},[397,1911,1912],{"class":428},"http:\u002F\u002Fimages.cocodataset.org\u002Fval2017\u002F000000039769.jpg",[397,1914,1038],{"class":424},[397,1916,1917],{"class":399,"line":407},[397,1918,470],{"emptyLinePlaceholder":469},[397,1920,1921],{"class":399,"line":473},[397,1922,470],{"emptyLinePlaceholder":469},[397,1924,1925,1927,1930,1932,1935,1937,1940],{"class":399,"line":492},[397,1926,925],{"class":924},[397,1928,1929],{"class":928}," synthetic_seed",[397,1931,823],{"class":459},[397,1933,1934],{"class":1214},"reid_dim",[397,1936,994],{"class":410},[397,1938,1939],{"class":826},"512",[397,1941,1238],{"class":459},[397,1943,1944,1946,1949],{"class":399,"line":509},[397,1945,938],{"class":937},[397,1947,1948],{"class":941},"Offline stand-in: three objects, two sharing a class.",[397,1950,945],{"class":937},[397,1952,1953,1956,1958,1960,1962,1965,1968,1970,1972,1974],{"class":399,"line":517},[397,1954,1955],{"class":414},"    g ",[397,1957,994],{"class":410},[397,1959,1123],{"class":414},[397,1961,460],{"class":459},[397,1963,1964],{"class":819},"Generator",[397,1966,1967],{"class":459},"().",[397,1969,820],{"class":819},[397,1971,823],{"class":459},[397,1973,827],{"class":826},[397,1975,632],{"class":459},[397,1977,1978,1981,1983,1986,1988,1990,1992,1995,1997,2000,2002,2004,2006,2009,2011,2013,2015,2018,2020,2023,2025,2028],{"class":399,"line":522},[397,1979,1980],{"class":414},"    q",[397,1982,555],{"class":459},[397,1984,1985],{"class":414}," _ ",[397,1987,994],{"class":410},[397,1989,1123],{"class":414},[397,1991,460],{"class":459},[397,1993,1994],{"class":463},"linalg",[397,1996,460],{"class":459},[397,1998,1999],{"class":819},"qr",[397,2001,823],{"class":459},[397,2003,814],{"class":819},[397,2005,460],{"class":459},[397,2007,2008],{"class":819},"randn",[397,2010,823],{"class":459},[397,2012,1934],{"class":819},[397,2014,555],{"class":459},[397,2016,2017],{"class":819}," reid_dim",[397,2019,555],{"class":459},[397,2021,2022],{"class":1101}," generator",[397,2024,994],{"class":410},[397,2026,2027],{"class":819},"g",[397,2029,2030],{"class":459},"))\n",[397,2032,2033,2035],{"class":399,"line":536},[397,2034,1154],{"class":452},[397,2036,1786],{"class":459},[397,2038,2039,2041,2043,2045,2047,2049,2051,2053,2055,2058,2061,2064,2066,2069,2071,2074],{"class":399,"line":566},[397,2040,1033],{"class":424},[397,2042,1442],{"class":428},[397,2044,425],{"class":424},[397,2046,1798],{"class":459},[397,2048,1123],{"class":414},[397,2050,460],{"class":459},[397,2052,1338],{"class":819},[397,2054,1341],{"class":459},[397,2056,2057],{"class":826},"10",[397,2059,2060],{"class":459},".,",[397,2062,2063],{"class":826}," 10",[397,2065,555],{"class":459},[397,2067,2068],{"class":826}," 40",[397,2070,555],{"class":459},[397,2072,2073],{"class":826}," 60",[397,2075,2076],{"class":459},"],\n",[397,2078,2079,2082,2085,2087,2090,2092,2095,2097,2100],{"class":399,"line":588},[397,2080,2081],{"class":459},"                               [",[397,2083,2084],{"class":826},"120",[397,2086,555],{"class":459},[397,2088,2089],{"class":826}," 20",[397,2091,555],{"class":459},[397,2093,2094],{"class":826}," 150",[397,2096,555],{"class":459},[397,2098,2099],{"class":826}," 70",[397,2101,2076],{"class":459},[397,2103,2104,2106,2109,2111,2114,2116,2119,2121,2124],{"class":399,"line":605},[397,2105,2081],{"class":459},[397,2107,2108],{"class":826},"220",[397,2110,555],{"class":459},[397,2112,2113],{"class":826}," 15",[397,2115,555],{"class":459},[397,2117,2118],{"class":826}," 250",[397,2120,555],{"class":459},[397,2122,2123],{"class":826}," 65",[397,2125,2126],{"class":459},"]]),\n",[397,2128,2129,2131,2133,2135,2137,2139,2141,2143,2146,2148,2150,2152,2154,2157],{"class":399,"line":629},[397,2130,1033],{"class":424},[397,2132,907],{"class":428},[397,2134,425],{"class":424},[397,2136,1798],{"class":459},[397,2138,1123],{"class":414},[397,2140,460],{"class":459},[397,2142,1338],{"class":819},[397,2144,2145],{"class":459},"([",[397,2147,1691],{"class":826},[397,2149,555],{"class":459},[397,2151,1558],{"class":826},[397,2153,555],{"class":459},[397,2155,2156],{"class":826}," 2",[397,2158,2159],{"class":459},"]),\n",[397,2161,2162,2164,2166,2168,2170,2172,2174,2176,2178,2181,2183,2186,2188,2191],{"class":399,"line":635},[397,2163,1033],{"class":424},[397,2165,910],{"class":428},[397,2167,425],{"class":424},[397,2169,1798],{"class":459},[397,2171,1123],{"class":414},[397,2173,460],{"class":459},[397,2175,1338],{"class":819},[397,2177,2145],{"class":459},[397,2179,2180],{"class":826},"0.95",[397,2182,555],{"class":459},[397,2184,2185],{"class":826}," 0.9",[397,2187,555],{"class":459},[397,2189,2190],{"class":826}," 0.8",[397,2192,2159],{"class":459},[397,2194,2195,2197,2199,2201,2203,2206,2209,2212],{"class":399,"line":657},[397,2196,1033],{"class":424},[397,2198,914],{"class":428},[397,2200,425],{"class":424},[397,2202,1798],{"class":459},[397,2204,2205],{"class":414}," q",[397,2207,2208],{"class":459},"[:",[397,2210,2211],{"class":826},"3",[397,2213,2076],{"class":459},[397,2215,2216,2218,2220,2222,2224,2226,2228,2231,2233,2235,2237,2239,2241,2243,2245,2248,2250],{"class":399,"line":673},[397,2217,1033],{"class":424},[397,2219,1869],{"class":428},[397,2221,425],{"class":424},[397,2223,1798],{"class":459},[397,2225,1739],{"class":459},[397,2227,425],{"class":424},[397,2229,2230],{"class":428},"cat",[397,2232,425],{"class":424},[397,2234,555],{"class":459},[397,2236,1811],{"class":424},[397,2238,2230],{"class":428},[397,2240,425],{"class":424},[397,2242,555],{"class":459},[397,2244,1811],{"class":424},[397,2246,2247],{"class":428},"remote",[397,2249,425],{"class":424},[397,2251,2076],{"class":459},[397,2253,2254],{"class":399,"line":696},[397,2255,1884],{"class":459},[397,2257,2258],{"class":399,"line":704},[397,2259,470],{"emptyLinePlaceholder":469},[397,2261,2262],{"class":399,"line":709},[397,2263,470],{"emptyLinePlaceholder":469},[397,2265,2266,2269,2271],{"class":399,"line":741},[397,2267,2268],{"class":414},"image ",[397,2270,994],{"class":410},[397,2272,2274],{"class":2273},"s39Yj"," None\n",[397,2276,2277,2280],{"class":399,"line":762},[397,2278,2279],{"class":452},"try",[397,2281,2282],{"class":459},":\n",[397,2284,2285,2287,2290,2293],{"class":399,"line":778},[397,2286,958],{"class":452},[397,2288,2289],{"class":1905}," PIL",[397,2291,2292],{"class":452}," import",[397,2294,2295],{"class":414}," Image\n",[397,2297,2298,2301,2303,2305],{"class":399,"line":801},[397,2299,2300],{"class":414},"    bundle ",[397,2302,994],{"class":410},[397,2304,929],{"class":819},[397,2306,1049],{"class":459},[397,2308,2309,2312,2314,2317,2319,2322,2324,2327,2329,2332,2334,2337,2339,2341,2344,2347,2349,2351,2354,2356],{"class":399,"line":806},[397,2310,2311],{"class":414},"    image ",[397,2313,994],{"class":410},[397,2315,2316],{"class":414}," Image",[397,2318,460],{"class":459},[397,2320,2321],{"class":819},"open",[397,2323,823],{"class":459},[397,2325,2326],{"class":819},"urllib",[397,2328,460],{"class":459},[397,2330,2331],{"class":463},"request",[397,2333,460],{"class":459},[397,2335,2336],{"class":819},"urlopen",[397,2338,823],{"class":459},[397,2340,1890],{"class":1541},[397,2342,2343],{"class":459},")).",[397,2345,2346],{"class":819},"convert",[397,2348,823],{"class":459},[397,2350,425],{"class":424},[397,2352,2353],{"class":428},"RGB",[397,2355,425],{"class":424},[397,2357,632],{"class":459},[397,2359,2360,2363,2365,2367,2369,2371,2373,2375],{"class":399,"line":811},[397,2361,2362],{"class":414},"    seed ",[397,2364,994],{"class":410},[397,2366,1209],{"class":819},[397,2368,823],{"class":459},[397,2370,1215],{"class":819},[397,2372,555],{"class":459},[397,2374,1220],{"class":819},[397,2376,632],{"class":459},[397,2378,2379,2382,2385,2387,2389,2391,2393,2396,2399,2401,2403,2405,2408,2411],{"class":399,"line":832},[397,2380,2381],{"class":452},"    if",[397,2383,2384],{"class":414}," seed",[397,2386,843],{"class":459},[397,2388,425],{"class":424},[397,2390,1442],{"class":428},[397,2392,425],{"class":424},[397,2394,2395],{"class":459},"].",[397,2397,2398],{"class":463},"shape",[397,2400,843],{"class":459},[397,2402,827],{"class":826},[397,2404,853],{"class":459},[397,2406,2407],{"class":410}," ==",[397,2409,2410],{"class":826}," 0",[397,2412,2282],{"class":459},[397,2414,2415,2418,2421,2423,2425,2428,2430],{"class":399,"line":1326},[397,2416,2417],{"class":452},"        raise",[397,2419,2420],{"class":1757}," RuntimeError",[397,2422,823],{"class":459},[397,2424,425],{"class":424},[397,2426,2427],{"class":428},"detector found no objects above threshold",[397,2429,425],{"class":424},[397,2431,632],{"class":459},[397,2433,2434,2437,2439,2442,2445,2448,2451,2453,2456,2458,2461,2463,2465,2468,2471],{"class":399,"line":1364},[397,2435,2436],{"class":1905},"    SOURCE",[397,2438,856],{"class":410},[397,2440,2441],{"class":924}," f",[397,2443,2444],{"class":428},"\"hugging face yolos-tiny (",[397,2446,2447],{"class":826},"{",[397,2449,2450],{"class":1541},"len",[397,2452,823],{"class":459},[397,2454,2455],{"class":819},"seed",[397,2457,843],{"class":459},[397,2459,2460],{"class":424},"'",[397,2462,1869],{"class":428},[397,2464,2460],{"class":424},[397,2466,2467],{"class":459},"])",[397,2469,2470],{"class":826},"}",[397,2472,2473],{"class":428}," detections)\"\n",[397,2475,2476,2479,2482,2484,2487,2489],{"class":399,"line":1381},[397,2477,2478],{"class":452},"except",[397,2480,2481],{"class":1757}," Exception",[397,2483,486],{"class":452},[397,2485,2486],{"class":414}," exc",[397,2488,1798],{"class":459},[397,2490,2491],{"class":403},"  # noqa: BLE001 — any failure -> deterministic seed\n",[397,2493,2494,2497,2499,2502],{"class":399,"line":1406},[397,2495,2496],{"class":1541},"    print",[397,2498,823],{"class":459},[397,2500,2501],{"class":924},"f",[397,2503,2504],{"class":428},"\"[fallback] real model unavailable \"\n",[397,2506,2507,2510,2513,2515,2518,2520,2523,2526,2529,2531,2534,2536,2538,2540,2543],{"class":399,"line":1417},[397,2508,2509],{"class":924},"          f",[397,2511,2512],{"class":428},"\"(",[397,2514,2447],{"class":826},[397,2516,2517],{"class":1757},"type",[397,2519,823],{"class":459},[397,2521,2522],{"class":819},"exc",[397,2524,2525],{"class":459},").",[397,2527,2528],{"class":1905},"__name__",[397,2530,2470],{"class":826},[397,2532,2533],{"class":428},": ",[397,2535,2447],{"class":826},[397,2537,2522],{"class":819},[397,2539,2470],{"class":826},[397,2541,2542],{"class":428},"); using a synthetic seed.\"",[397,2544,632],{"class":459},[397,2546,2547,2549,2551,2553],{"class":399,"line":1476},[397,2548,2362],{"class":414},[397,2550,994],{"class":410},[397,2552,1929],{"class":819},[397,2554,1049],{"class":459},[397,2556,2557,2559,2561,2563,2566],{"class":399,"line":1481},[397,2558,2436],{"class":1905},[397,2560,856],{"class":410},[397,2562,1811],{"class":424},[397,2564,2565],{"class":428},"synthetic fallback",[397,2567,1038],{"class":424},[397,2569,2570],{"class":399,"line":1492},[397,2571,470],{"emptyLinePlaceholder":469},[397,2573,2574,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597],{"class":399,"line":1529},[397,2575,2576],{"class":1905},"REID_DIM",[397,2578,856],{"class":410},[397,2580,2384],{"class":414},[397,2582,843],{"class":459},[397,2584,425],{"class":424},[397,2586,914],{"class":428},[397,2588,425],{"class":424},[397,2590,2395],{"class":459},[397,2592,2398],{"class":463},[397,2594,843],{"class":459},[397,2596,1691],{"class":826},[397,2598,1414],{"class":459},[397,2600,2601,2604,2606,2608,2611,2613,2616,2618,2620],{"class":399,"line":1586},[397,2602,2603],{"class":1541},"print",[397,2605,823],{"class":459},[397,2607,2501],{"class":924},[397,2609,2610],{"class":428},"\"source:  ",[397,2612,2447],{"class":826},[397,2614,2615],{"class":1541},"SOURCE",[397,2617,2470],{"class":826},[397,2619,425],{"class":428},[397,2621,632],{"class":459},[397,2623,2624,2626,2628,2630,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651],{"class":399,"line":1633},[397,2625,2603],{"class":1541},[397,2627,823],{"class":459},[397,2629,2501],{"class":924},[397,2631,2632],{"class":428},"\"objects: ",[397,2634,2447],{"class":826},[397,2636,2455],{"class":819},[397,2638,843],{"class":459},[397,2640,2460],{"class":424},[397,2642,1869],{"class":428},[397,2644,2460],{"class":424},[397,2646,853],{"class":459},[397,2648,2470],{"class":826},[397,2650,425],{"class":428},[397,2652,632],{"class":459},[397,2654,2655,2657,2659,2661,2664,2666,2668,2670,2672,2674,2676,2678,2681,2683,2686,2688,2691,2693,2695,2697,2699,2701],{"class":399,"line":1643},[397,2656,2603],{"class":1541},[397,2658,823],{"class":459},[397,2660,2501],{"class":924},[397,2662,2663],{"class":428},"\"scores:  ",[397,2665,2447],{"class":826},[397,2667,2455],{"class":819},[397,2669,843],{"class":459},[397,2671,2460],{"class":424},[397,2673,910],{"class":428},[397,2675,2460],{"class":424},[397,2677,2395],{"class":459},[397,2679,2680],{"class":819},"round",[397,2682,823],{"class":459},[397,2684,2685],{"class":1101},"decimals",[397,2687,994],{"class":410},[397,2689,2690],{"class":826},"2",[397,2692,2525],{"class":459},[397,2694,1524],{"class":819},[397,2696,1136],{"class":459},[397,2698,2470],{"class":826},[397,2700,425],{"class":428},[397,2702,632],{"class":459},[436,2704],{"data":2705,"kind":439},"W2ZhbGxiYWNrXSByZWFsIG1vZGVsIHVuYXZhaWxhYmxlIChNb2R1bGVOb3RGb3VuZEVycm9yOiBObyBtb2R1bGUgbmFtZWQgJ3RyYW5zZm9ybWVycycpOyB1c2luZyBhIHN5bnRoZXRpYyBzZWVkLgpzb3VyY2U6ICBzeW50aGV0aWMgZmFsbGJhY2sKb2JqZWN0czogWydjYXQnLCAnY2F0JywgJ3JlbW90ZSddCnNjb3JlczogIFswLjk0OTk5OTk4ODA3OTA3MSwgMC44OTk5OTk5NzYxNTgxNDIxLCAwLjgwMDAwMDAxMTkyMDkyOV0K",[388,2707,2709],{"className":390,"code":2708,"language":392,"meta":393,"style":393},"# Show the detections on the image (or list them in the fallback case).\nif image is not None:\n    fig, ax = plt.subplots(figsize=(7, 5))\n    ax.imshow(image)\n    for (x0, y0, x1, y1), name, sc in zip(\n        seed[\"boxes\"].tolist(), seed[\"names\"], seed[\"score\"].tolist()\n    ):\n        ax.add_patch(mpatches.Rectangle(\n            (x0, y0), x1 - x0, y1 - y0,\n            fill=False, edgecolor=\"lime\", linewidth=2))\n        ax.text(x0, y0 - 4, f\"{name} {sc:.2f}\", color=\"lime\",\n                fontsize=9,\n                bbox=dict(facecolor=\"black\", alpha=0.5, pad=1))\n    ax.set_axis_off()\n    ax.set_title(f\"Detections from {SOURCE}\")\n    plt.show()\nelse:\n    for name, box in zip(seed[\"names\"], seed[\"boxes\"].tolist()):\n        print(f\"  {name:8s} bbox={[round(v, 1) for v in box]}\")\n\n",[371,2710,2711,2716,2735,2773,2789,2826,2873,2878,2900,2930,2965,3027,3039,3084,3095,3121,3133,3139,3185],{"__ignoreMap":393},[397,2712,2713],{"class":399,"line":400},[397,2714,2715],{"class":403},"# Show the detections on the image (or list them in the fallback case).\n",[397,2717,2718,2721,2724,2727,2730,2733],{"class":399,"line":407},[397,2719,2720],{"class":452},"if",[397,2722,2723],{"class":414}," image ",[397,2725,2726],{"class":410},"is",[397,2728,2729],{"class":410}," not",[397,2731,2732],{"class":2273}," None",[397,2734,2282],{"class":459},[397,2736,2737,2740,2742,2745,2747,2750,2752,2755,2757,2760,2762,2764,2766,2768,2771],{"class":399,"line":473},[397,2738,2739],{"class":414},"    fig",[397,2741,555],{"class":459},[397,2743,2744],{"class":414}," ax ",[397,2746,994],{"class":410},[397,2748,2749],{"class":414}," plt",[397,2751,460],{"class":459},[397,2753,2754],{"class":819},"subplots",[397,2756,823],{"class":459},[397,2758,2759],{"class":1101},"figsize",[397,2761,994],{"class":410},[397,2763,823],{"class":459},[397,2765,862],{"class":826},[397,2767,555],{"class":459},[397,2769,2770],{"class":826}," 5",[397,2772,2030],{"class":459},[397,2774,2775,2778,2780,2783,2785,2787],{"class":399,"line":492},[397,2776,2777],{"class":414},"    ax",[397,2779,460],{"class":459},[397,2781,2782],{"class":819},"imshow",[397,2784,823],{"class":459},[397,2786,1215],{"class":819},[397,2788,632],{"class":459},[397,2790,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2814,2816,2819,2821,2824],{"class":399,"line":509},[397,2792,1495],{"class":452},[397,2794,859],{"class":459},[397,2796,1614],{"class":414},[397,2798,555],{"class":459},[397,2800,1503],{"class":414},[397,2802,555],{"class":459},[397,2804,1508],{"class":414},[397,2806,555],{"class":459},[397,2808,1627],{"class":414},[397,2810,1561],{"class":459},[397,2812,2813],{"class":414}," name",[397,2815,555],{"class":459},[397,2817,2818],{"class":414}," sc ",[397,2820,1516],{"class":452},[397,2822,2823],{"class":1541}," zip",[397,2825,1028],{"class":459},[397,2827,2828,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871],{"class":399,"line":517},[397,2829,2830],{"class":819},"        seed",[397,2832,843],{"class":459},[397,2834,425],{"class":424},[397,2836,1442],{"class":428},[397,2838,425],{"class":424},[397,2840,2395],{"class":459},[397,2842,1524],{"class":819},[397,2844,1808],{"class":459},[397,2846,2384],{"class":819},[397,2848,843],{"class":459},[397,2850,425],{"class":424},[397,2852,1869],{"class":428},[397,2854,425],{"class":424},[397,2856,1447],{"class":459},[397,2858,2384],{"class":819},[397,2860,843],{"class":459},[397,2862,425],{"class":424},[397,2864,910],{"class":428},[397,2866,425],{"class":424},[397,2868,2395],{"class":459},[397,2870,1524],{"class":819},[397,2872,1049],{"class":459},[397,2874,2875],{"class":399,"line":522},[397,2876,2877],{"class":459},"    ):\n",[397,2879,2880,2883,2885,2888,2890,2893,2895,2898],{"class":399,"line":536},[397,2881,2882],{"class":414},"        ax",[397,2884,460],{"class":459},[397,2886,2887],{"class":819},"add_patch",[397,2889,823],{"class":459},[397,2891,2892],{"class":819},"mpatches",[397,2894,460],{"class":459},[397,2896,2897],{"class":819},"Rectangle",[397,2899,1028],{"class":459},[397,2901,2902,2905,2907,2909,2911,2913,2916,2918,2920,2922,2924,2926,2928],{"class":399,"line":566},[397,2903,2904],{"class":459},"            (",[397,2906,1614],{"class":819},[397,2908,555],{"class":459},[397,2910,1503],{"class":819},[397,2912,1561],{"class":459},[397,2914,2915],{"class":819}," x1 ",[397,2917,418],{"class":410},[397,2919,1498],{"class":819},[397,2921,555],{"class":459},[397,2923,1513],{"class":819},[397,2925,418],{"class":410},[397,2927,1503],{"class":819},[397,2929,626],{"class":459},[397,2931,2932,2935,2937,2940,2942,2945,2947,2949,2952,2954,2956,2959,2961,2963],{"class":399,"line":588},[397,2933,2934],{"class":1101},"            fill",[397,2936,994],{"class":410},[397,2938,2939],{"class":2273},"False",[397,2941,555],{"class":459},[397,2943,2944],{"class":1101}," edgecolor",[397,2946,994],{"class":410},[397,2948,425],{"class":424},[397,2950,2951],{"class":428},"lime",[397,2953,425],{"class":424},[397,2955,555],{"class":459},[397,2957,2958],{"class":1101}," linewidth",[397,2960,994],{"class":410},[397,2962,2690],{"class":826},[397,2964,2030],{"class":459},[397,2966,2967,2969,2971,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2997,2999,3002,3005,3008,3010,3012,3014,3017,3019,3021,3023,3025],{"class":399,"line":605},[397,2968,2882],{"class":414},[397,2970,460],{"class":459},[397,2972,2973],{"class":819},"text",[397,2975,823],{"class":459},[397,2977,1614],{"class":819},[397,2979,555],{"class":459},[397,2981,1573],{"class":819},[397,2983,418],{"class":410},[397,2985,867],{"class":826},[397,2987,555],{"class":459},[397,2989,2441],{"class":924},[397,2991,425],{"class":428},[397,2993,2447],{"class":826},[397,2995,2996],{"class":819},"name",[397,2998,2470],{"class":826},[397,3000,3001],{"class":826}," {",[397,3003,3004],{"class":819},"sc",[397,3006,3007],{"class":924},":.2f",[397,3009,2470],{"class":826},[397,3011,425],{"class":428},[397,3013,555],{"class":459},[397,3015,3016],{"class":1101}," color",[397,3018,994],{"class":410},[397,3020,425],{"class":424},[397,3022,2951],{"class":428},[397,3024,425],{"class":424},[397,3026,626],{"class":459},[397,3028,3029,3032,3034,3037],{"class":399,"line":629},[397,3030,3031],{"class":1101},"                fontsize",[397,3033,994],{"class":410},[397,3035,3036],{"class":826},"9",[397,3038,626],{"class":459},[397,3040,3041,3044,3046,3049,3051,3054,3056,3058,3061,3063,3065,3068,3070,3073,3075,3078,3080,3082],{"class":399,"line":635},[397,3042,3043],{"class":1101},"                bbox",[397,3045,994],{"class":410},[397,3047,3048],{"class":1757},"dict",[397,3050,823],{"class":459},[397,3052,3053],{"class":1101},"facecolor",[397,3055,994],{"class":410},[397,3057,425],{"class":424},[397,3059,3060],{"class":428},"black",[397,3062,425],{"class":424},[397,3064,555],{"class":459},[397,3066,3067],{"class":1101}," alpha",[397,3069,994],{"class":410},[397,3071,3072],{"class":826},"0.5",[397,3074,555],{"class":459},[397,3076,3077],{"class":1101}," pad",[397,3079,994],{"class":410},[397,3081,1691],{"class":826},[397,3083,2030],{"class":459},[397,3085,3086,3088,3090,3093],{"class":399,"line":657},[397,3087,2777],{"class":414},[397,3089,460],{"class":459},[397,3091,3092],{"class":819},"set_axis_off",[397,3094,1049],{"class":459},[397,3096,3097,3099,3101,3104,3106,3108,3111,3113,3115,3117,3119],{"class":399,"line":673},[397,3098,2777],{"class":414},[397,3100,460],{"class":459},[397,3102,3103],{"class":819},"set_title",[397,3105,823],{"class":459},[397,3107,2501],{"class":924},[397,3109,3110],{"class":428},"\"Detections from ",[397,3112,2447],{"class":826},[397,3114,2615],{"class":1541},[397,3116,2470],{"class":826},[397,3118,425],{"class":428},[397,3120,632],{"class":459},[397,3122,3123,3126,3128,3131],{"class":399,"line":696},[397,3124,3125],{"class":414},"    plt",[397,3127,460],{"class":459},[397,3129,3130],{"class":819},"show",[397,3132,1049],{"class":459},[397,3134,3135,3137],{"class":399,"line":704},[397,3136,1705],{"class":452},[397,3138,2282],{"class":459},[397,3140,3141,3143,3145,3147,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182],{"class":399,"line":709},[397,3142,1495],{"class":452},[397,3144,2813],{"class":414},[397,3146,555],{"class":459},[397,3148,3149],{"class":414}," box ",[397,3151,1516],{"class":452},[397,3153,2823],{"class":1541},[397,3155,823],{"class":459},[397,3157,2455],{"class":819},[397,3159,843],{"class":459},[397,3161,425],{"class":424},[397,3163,1869],{"class":428},[397,3165,425],{"class":424},[397,3167,1447],{"class":459},[397,3169,2384],{"class":819},[397,3171,843],{"class":459},[397,3173,425],{"class":424},[397,3175,1442],{"class":428},[397,3177,425],{"class":424},[397,3179,2395],{"class":459},[397,3181,1524],{"class":819},[397,3183,3184],{"class":459},"()):\n",[397,3186,3187,3190,3192,3194,3197,3199,3201,3204,3206,3209,3211,3213,3215,3217,3220,3222,3224,3226,3228,3231,3233,3236,3238,3240,3242],{"class":399,"line":741},[397,3188,3189],{"class":1541},"        print",[397,3191,823],{"class":459},[397,3193,2501],{"class":924},[397,3195,3196],{"class":428},"\"  ",[397,3198,2447],{"class":826},[397,3200,2996],{"class":819},[397,3202,3203],{"class":924},":8s",[397,3205,2470],{"class":826},[397,3207,3208],{"class":428}," bbox=",[397,3210,2447],{"class":826},[397,3212,843],{"class":459},[397,3214,2680],{"class":1541},[397,3216,823],{"class":459},[397,3218,3219],{"class":819},"v",[397,3221,555],{"class":459},[397,3223,1558],{"class":826},[397,3225,1580],{"class":459},[397,3227,1769],{"class":452},[397,3229,3230],{"class":819}," v ",[397,3232,1516],{"class":452},[397,3234,3235],{"class":819}," box",[397,3237,853],{"class":459},[397,3239,2470],{"class":826},[397,3241,425],{"class":428},[397,3243,632],{"class":459},[436,3245],{"data":3246,"kind":439},"ICBjYXQgICAgICBiYm94PVsxMC4wLCAxMC4wLCA0MC4wLCA2MC4wXQogIGNhdCAgICAgIGJib3g9WzEyMC4wLCAyMC4wLCAxNTAuMCwgNzAuMF0KICByZW1vdGUgICBiYm94PVsyMjAuMCwgMTUuMCwgMjUwLjAsIDY1LjBdCg==",[376,3248,3250],{"id":3249},"from-one-image-to-a-clip","From one image to a clip",[338,3252,3253,3254,3258],{},"Tracking needs a ",[3255,3256,3257],"em",{},"sequence",". We synthesize one from the single set\nof real detections: each frame pans the camera by a fixed vector,\nshuffles the detection order (so the tracker can't cheat on row\nalignment), and jitters the appearance embeddings slightly. The\nmotion is deterministic, so every tracker below sees the identical\nclip — differences in their output come from the tracker, not the\ndata.",[388,3260,3262],{"className":390,"code":3261,"language":392,"meta":393,"style":393},"def make_clip(seed, *, n_frames=8, pan=(15.0, 4.0), drop=()):\n    M = seed[\"boxes\"].shape[0]\n    pan_v = torch.tensor([pan[0], pan[1], pan[0], pan[1]])\n    g = torch.Generator().manual_seed(1)\n    clip = []\n    for k in range(n_frames):\n        if k in drop:  # a missed-detection \u002F occlusion frame\n            clip.append(Detections(\n                index=torch.zeros(0, dtype=torch.int64),\n                reid=torch.zeros(0, REID_DIM), bbox=torch.zeros(0, 4),\n                centroid=torch.zeros(0, 2),\n                category=torch.zeros(0, dtype=torch.int64),\n                score=torch.zeros(0), batch_size=[0]))\n            continue\n        boxes = seed[\"boxes\"] + k * pan_v\n        centroid = torch.stack(\n            [(boxes[:, 0] + boxes[:, 2]) \u002F 2,\n             (boxes[:, 1] + boxes[:, 3]) \u002F 2], dim=-1)\n        reid = seed[\"reid\"] + 0.01 * torch.randn(\n            M, REID_DIM, generator=g)\n        reid = torch.nn.functional.normalize(reid, dim=-1)\n        order = torch.randperm(M, generator=g)\n        clip.append(Detections(\n            index=torch.arange(M, dtype=torch.int64),\n            reid=reid[order], bbox=boxes[order], centroid=centroid[order],\n            category=seed[\"category\"][order], score=seed[\"score\"][order],\n            batch_size=[M]))\n    return clip\n\nclip = make_clip(seed)\nprint(f\"clip: {len(clip)} frames x {seed['boxes'].shape[0]} detections\")\n\n",[371,3263,3264,3315,3342,3390,3412,3421,3439,3454,3470,3504,3549,3572,3603,3634,3639,3669,3684,3715,3753,3787,3806,3840,3869,3884,3916,3957,4002,4015,4022,4026,4041],{"__ignoreMap":393},[397,3265,3266,3268,3271,3273,3275,3277,3279,3281,3284,3286,3289,3291,3294,3296,3298,3301,3303,3306,3308,3311,3313],{"class":399,"line":400},[397,3267,925],{"class":924},[397,3269,3270],{"class":928}," make_clip",[397,3272,823],{"class":459},[397,3274,2455],{"class":1214},[397,3276,555],{"class":459},[397,3278,1225],{"class":410},[397,3280,904],{"class":414},[397,3282,3283],{"class":1214},"n_frames",[397,3285,994],{"class":410},[397,3287,3288],{"class":826},"8",[397,3290,555],{"class":459},[397,3292,3293],{"class":1214}," pan",[397,3295,994],{"class":410},[397,3297,823],{"class":459},[397,3299,3300],{"class":826},"15.0",[397,3302,555],{"class":459},[397,3304,3305],{"class":826}," 4.0",[397,3307,1561],{"class":459},[397,3309,3310],{"class":1214}," drop",[397,3312,994],{"class":410},[397,3314,3184],{"class":459},[397,3316,3317,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338,3340],{"class":399,"line":407},[397,3318,3319],{"class":414},"    M ",[397,3321,994],{"class":410},[397,3323,2384],{"class":414},[397,3325,843],{"class":459},[397,3327,425],{"class":424},[397,3329,1442],{"class":428},[397,3331,425],{"class":424},[397,3333,2395],{"class":459},[397,3335,2398],{"class":463},[397,3337,843],{"class":459},[397,3339,827],{"class":826},[397,3341,1414],{"class":459},[397,3343,3344,3347,3349,3351,3353,3355,3357,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388],{"class":399,"line":473},[397,3345,3346],{"class":414},"    pan_v ",[397,3348,994],{"class":410},[397,3350,1123],{"class":414},[397,3352,460],{"class":459},[397,3354,1338],{"class":819},[397,3356,2145],{"class":459},[397,3358,3359],{"class":819},"pan",[397,3361,843],{"class":459},[397,3363,827],{"class":826},[397,3365,1447],{"class":459},[397,3367,3293],{"class":819},[397,3369,843],{"class":459},[397,3371,1691],{"class":826},[397,3373,1447],{"class":459},[397,3375,3293],{"class":819},[397,3377,843],{"class":459},[397,3379,827],{"class":826},[397,3381,1447],{"class":459},[397,3383,3293],{"class":819},[397,3385,843],{"class":459},[397,3387,1691],{"class":826},[397,3389,1361],{"class":459},[397,3391,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410],{"class":399,"line":492},[397,3393,1955],{"class":414},[397,3395,994],{"class":410},[397,3397,1123],{"class":414},[397,3399,460],{"class":459},[397,3401,1964],{"class":819},[397,3403,1967],{"class":459},[397,3405,820],{"class":819},[397,3407,823],{"class":459},[397,3409,1691],{"class":826},[397,3411,632],{"class":459},[397,3413,3414,3417,3419],{"class":399,"line":509},[397,3415,3416],{"class":414},"    clip ",[397,3418,994],{"class":410},[397,3420,1489],{"class":459},[397,3422,3423,3425,3428,3430,3433,3435,3437],{"class":399,"line":517},[397,3424,1495],{"class":452},[397,3426,3427],{"class":414}," k ",[397,3429,1516],{"class":452},[397,3431,3432],{"class":1541}," range",[397,3434,823],{"class":459},[397,3436,3283],{"class":819},[397,3438,1238],{"class":459},[397,3440,3441,3443,3445,3447,3449,3451],{"class":399,"line":522},[397,3442,1699],{"class":452},[397,3444,3427],{"class":414},[397,3446,1516],{"class":410},[397,3448,3310],{"class":414},[397,3450,1798],{"class":459},[397,3452,3453],{"class":403},"  # a missed-detection \u002F occlusion frame\n",[397,3455,3456,3459,3461,3463,3465,3468],{"class":399,"line":536},[397,3457,3458],{"class":414},"            clip",[397,3460,460],{"class":459},[397,3462,1594],{"class":819},[397,3464,823],{"class":459},[397,3466,3467],{"class":819},"Detections",[397,3469,1028],{"class":459},[397,3471,3472,3475,3477,3479,3481,3483,3485,3487,3489,3492,3494,3496,3498,3501],{"class":399,"line":566},[397,3473,3474],{"class":1101},"                index",[397,3476,994],{"class":410},[397,3478,814],{"class":819},[397,3480,460],{"class":459},[397,3482,1712],{"class":819},[397,3484,823],{"class":459},[397,3486,827],{"class":826},[397,3488,555],{"class":459},[397,3490,3491],{"class":1101}," dtype",[397,3493,994],{"class":410},[397,3495,814],{"class":819},[397,3497,460],{"class":459},[397,3499,3500],{"class":463},"int64",[397,3502,3503],{"class":459},"),\n",[397,3505,3506,3509,3511,3513,3515,3517,3519,3521,3523,3526,3528,3531,3533,3535,3537,3539,3541,3543,3545,3547],{"class":399,"line":588},[397,3507,3508],{"class":1101},"                reid",[397,3510,994],{"class":410},[397,3512,814],{"class":819},[397,3514,460],{"class":459},[397,3516,1712],{"class":819},[397,3518,823],{"class":459},[397,3520,827],{"class":826},[397,3522,555],{"class":459},[397,3524,3525],{"class":1541}," REID_DIM",[397,3527,1561],{"class":459},[397,3529,3530],{"class":1101}," bbox",[397,3532,994],{"class":410},[397,3534,814],{"class":819},[397,3536,460],{"class":459},[397,3538,1712],{"class":819},[397,3540,823],{"class":459},[397,3542,827],{"class":826},[397,3544,555],{"class":459},[397,3546,867],{"class":826},[397,3548,3503],{"class":459},[397,3550,3551,3554,3556,3558,3560,3562,3564,3566,3568,3570],{"class":399,"line":605},[397,3552,3553],{"class":1101},"                centroid",[397,3555,994],{"class":410},[397,3557,814],{"class":819},[397,3559,460],{"class":459},[397,3561,1712],{"class":819},[397,3563,823],{"class":459},[397,3565,827],{"class":826},[397,3567,555],{"class":459},[397,3569,2156],{"class":826},[397,3571,3503],{"class":459},[397,3573,3574,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601],{"class":399,"line":629},[397,3575,3576],{"class":1101},"                category",[397,3578,994],{"class":410},[397,3580,814],{"class":819},[397,3582,460],{"class":459},[397,3584,1712],{"class":819},[397,3586,823],{"class":459},[397,3588,827],{"class":826},[397,3590,555],{"class":459},[397,3592,3491],{"class":1101},[397,3594,994],{"class":410},[397,3596,814],{"class":819},[397,3598,460],{"class":459},[397,3600,3500],{"class":463},[397,3602,3503],{"class":459},[397,3604,3605,3608,3610,3612,3614,3616,3618,3620,3622,3625,3627,3629,3631],{"class":399,"line":635},[397,3606,3607],{"class":1101},"                score",[397,3609,994],{"class":410},[397,3611,814],{"class":819},[397,3613,460],{"class":459},[397,3615,1712],{"class":819},[397,3617,823],{"class":459},[397,3619,827],{"class":826},[397,3621,1561],{"class":459},[397,3623,3624],{"class":1101}," batch_size",[397,3626,994],{"class":410},[397,3628,843],{"class":459},[397,3630,827],{"class":826},[397,3632,3633],{"class":459},"]))\n",[397,3635,3636],{"class":399,"line":657},[397,3637,3638],{"class":452},"            continue\n",[397,3640,3641,3644,3646,3648,3650,3652,3654,3656,3658,3661,3663,3666],{"class":399,"line":673},[397,3642,3643],{"class":414},"        boxes ",[397,3645,994],{"class":410},[397,3647,2384],{"class":414},[397,3649,843],{"class":459},[397,3651,425],{"class":424},[397,3653,1442],{"class":428},[397,3655,425],{"class":424},[397,3657,853],{"class":459},[397,3659,3660],{"class":410}," +",[397,3662,3427],{"class":414},[397,3664,3665],{"class":410},"*",[397,3667,3668],{"class":414}," pan_v\n",[397,3670,3671,3674,3676,3678,3680,3682],{"class":399,"line":696},[397,3672,3673],{"class":414},"        centroid ",[397,3675,994],{"class":410},[397,3677,1123],{"class":414},[397,3679,460],{"class":459},[397,3681,1674],{"class":819},[397,3683,1028],{"class":459},[397,3685,3686,3689,3691,3694,3696,3698,3700,3702,3704,3706,3708,3711,3713],{"class":399,"line":704},[397,3687,3688],{"class":459},"            [(",[397,3690,1442],{"class":819},[397,3692,3693],{"class":459},"[:,",[397,3695,2410],{"class":826},[397,3697,853],{"class":459},[397,3699,3660],{"class":410},[397,3701,1519],{"class":819},[397,3703,3693],{"class":459},[397,3705,2156],{"class":826},[397,3707,2467],{"class":459},[397,3709,3710],{"class":410}," \u002F",[397,3712,2156],{"class":826},[397,3714,626],{"class":459},[397,3716,3717,3720,3722,3724,3726,3728,3730,3732,3734,3737,3739,3741,3743,3745,3747,3749,3751],{"class":399,"line":709},[397,3718,3719],{"class":459},"             (",[397,3721,1442],{"class":819},[397,3723,3693],{"class":459},[397,3725,1558],{"class":826},[397,3727,853],{"class":459},[397,3729,3660],{"class":410},[397,3731,1519],{"class":819},[397,3733,3693],{"class":459},[397,3735,3736],{"class":826}," 3",[397,3738,2467],{"class":459},[397,3740,3710],{"class":410},[397,3742,2156],{"class":826},[397,3744,1447],{"class":459},[397,3746,1685],{"class":1101},[397,3748,1688],{"class":410},[397,3750,1691],{"class":826},[397,3752,632],{"class":459},[397,3754,3755,3758,3760,3762,3764,3766,3768,3770,3772,3774,3777,3779,3781,3783,3785],{"class":399,"line":741},[397,3756,3757],{"class":414},"        reid ",[397,3759,994],{"class":410},[397,3761,2384],{"class":414},[397,3763,843],{"class":459},[397,3765,425],{"class":424},[397,3767,914],{"class":428},[397,3769,425],{"class":424},[397,3771,853],{"class":459},[397,3773,3660],{"class":410},[397,3775,3776],{"class":826}," 0.01",[397,3778,1225],{"class":410},[397,3780,1123],{"class":414},[397,3782,460],{"class":459},[397,3784,2008],{"class":819},[397,3786,1028],{"class":459},[397,3788,3789,3792,3794,3796,3798,3800,3802,3804],{"class":399,"line":762},[397,3790,3791],{"class":819},"            M",[397,3793,555],{"class":459},[397,3795,3525],{"class":1541},[397,3797,555],{"class":459},[397,3799,2022],{"class":1101},[397,3801,994],{"class":410},[397,3803,2027],{"class":819},[397,3805,632],{"class":459},[397,3807,3808,3810,3812,3814,3816,3818,3820,3822,3824,3826,3828,3830,3832,3834,3836,3838],{"class":399,"line":778},[397,3809,3757],{"class":414},[397,3811,994],{"class":410},[397,3813,1123],{"class":414},[397,3815,460],{"class":459},[397,3817,1128],{"class":463},[397,3819,460],{"class":459},[397,3821,1655],{"class":463},[397,3823,460],{"class":459},[397,3825,1660],{"class":819},[397,3827,823],{"class":459},[397,3829,914],{"class":819},[397,3831,555],{"class":459},[397,3833,1685],{"class":1101},[397,3835,1688],{"class":410},[397,3837,1691],{"class":826},[397,3839,632],{"class":459},[397,3841,3842,3845,3847,3849,3851,3854,3856,3859,3861,3863,3865,3867],{"class":399,"line":801},[397,3843,3844],{"class":414},"        order ",[397,3846,994],{"class":410},[397,3848,1123],{"class":414},[397,3850,460],{"class":459},[397,3852,3853],{"class":819},"randperm",[397,3855,823],{"class":459},[397,3857,3858],{"class":819},"M",[397,3860,555],{"class":459},[397,3862,2022],{"class":1101},[397,3864,994],{"class":410},[397,3866,2027],{"class":819},[397,3868,632],{"class":459},[397,3870,3871,3874,3876,3878,3880,3882],{"class":399,"line":806},[397,3872,3873],{"class":414},"        clip",[397,3875,460],{"class":459},[397,3877,1594],{"class":819},[397,3879,823],{"class":459},[397,3881,3467],{"class":819},[397,3883,1028],{"class":459},[397,3885,3886,3889,3891,3893,3895,3898,3900,3902,3904,3906,3908,3910,3912,3914],{"class":399,"line":811},[397,3887,3888],{"class":1101},"            index",[397,3890,994],{"class":410},[397,3892,814],{"class":819},[397,3894,460],{"class":459},[397,3896,3897],{"class":819},"arange",[397,3899,823],{"class":459},[397,3901,3858],{"class":819},[397,3903,555],{"class":459},[397,3905,3491],{"class":1101},[397,3907,994],{"class":410},[397,3909,814],{"class":819},[397,3911,460],{"class":459},[397,3913,3500],{"class":463},[397,3915,3503],{"class":459},[397,3917,3918,3921,3923,3925,3927,3930,3932,3934,3936,3938,3940,3942,3944,3947,3949,3951,3953,3955],{"class":399,"line":832},[397,3919,3920],{"class":1101},"            reid",[397,3922,994],{"class":410},[397,3924,914],{"class":819},[397,3926,843],{"class":459},[397,3928,3929],{"class":819},"order",[397,3931,1447],{"class":459},[397,3933,3530],{"class":1101},[397,3935,994],{"class":410},[397,3937,1442],{"class":819},[397,3939,843],{"class":459},[397,3941,3929],{"class":819},[397,3943,1447],{"class":459},[397,3945,3946],{"class":1101}," centroid",[397,3948,994],{"class":410},[397,3950,294],{"class":819},[397,3952,843],{"class":459},[397,3954,3929],{"class":819},[397,3956,2076],{"class":459},[397,3958,3959,3962,3964,3966,3968,3970,3972,3974,3977,3979,3981,3984,3986,3988,3990,3992,3994,3996,3998,4000],{"class":399,"line":1326},[397,3960,3961],{"class":1101},"            category",[397,3963,994],{"class":410},[397,3965,2455],{"class":819},[397,3967,843],{"class":459},[397,3969,425],{"class":424},[397,3971,907],{"class":428},[397,3973,425],{"class":424},[397,3975,3976],{"class":459},"][",[397,3978,3929],{"class":819},[397,3980,1447],{"class":459},[397,3982,3983],{"class":1101}," score",[397,3985,994],{"class":410},[397,3987,2455],{"class":819},[397,3989,843],{"class":459},[397,3991,425],{"class":424},[397,3993,910],{"class":428},[397,3995,425],{"class":424},[397,3997,3976],{"class":459},[397,3999,3929],{"class":819},[397,4001,2076],{"class":459},[397,4003,4004,4007,4009,4011,4013],{"class":399,"line":1364},[397,4005,4006],{"class":1101},"            batch_size",[397,4008,994],{"class":410},[397,4010,843],{"class":459},[397,4012,3858],{"class":819},[397,4014,3633],{"class":459},[397,4016,4017,4019],{"class":399,"line":1381},[397,4018,1154],{"class":452},[397,4020,4021],{"class":414}," clip\n",[397,4023,4024],{"class":399,"line":1406},[397,4025,470],{"emptyLinePlaceholder":469},[397,4027,4028,4031,4033,4035,4037,4039],{"class":399,"line":1417},[397,4029,4030],{"class":414},"clip ",[397,4032,994],{"class":410},[397,4034,3270],{"class":819},[397,4036,823],{"class":459},[397,4038,2455],{"class":819},[397,4040,632],{"class":459},[397,4042,4043,4045,4047,4049,4052,4054,4056,4058,4060,4062,4064,4067,4069,4071,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091,4094],{"class":399,"line":1476},[397,4044,2603],{"class":1541},[397,4046,823],{"class":459},[397,4048,2501],{"class":924},[397,4050,4051],{"class":428},"\"clip: ",[397,4053,2447],{"class":826},[397,4055,2450],{"class":1541},[397,4057,823],{"class":459},[397,4059,200],{"class":819},[397,4061,1580],{"class":459},[397,4063,2470],{"class":826},[397,4065,4066],{"class":428}," frames x ",[397,4068,2447],{"class":826},[397,4070,2455],{"class":819},[397,4072,843],{"class":459},[397,4074,2460],{"class":424},[397,4076,1442],{"class":428},[397,4078,2460],{"class":424},[397,4080,2395],{"class":459},[397,4082,2398],{"class":463},[397,4084,843],{"class":459},[397,4086,827],{"class":826},[397,4088,853],{"class":459},[397,4090,2470],{"class":826},[397,4092,4093],{"class":428}," detections\"",[397,4095,632],{"class":459},[436,4097],{"data":4098,"kind":439},"Y2xpcDogOCBmcmFtZXMgeCAzIGRldGVjdGlvbnMK",[376,4100,4102],{"id":4101},"are-the-objects-separable-by-appearance","Are the objects separable by appearance?",[338,4104,4105,4106,4108],{},"The migrated tracker matches on the ",[371,4107,914],{}," embedding, so before\nrunning it, it's worth asking whether the embeddings actually\ntell the objects apart. The cosine similarity below is 1 on the\ndiagonal; small off-diagonal values mean the cue is informative.\nTwo objects of the same class (e.g. two cats) will show a higher\noff-diagonal value — exactly the case where motion has to help.",[388,4110,4112],{"className":390,"code":4111,"language":392,"meta":393,"style":393},"sim = seed[\"reid\"] @ seed[\"reid\"].T   # reid rows are L2-normalized\nfig, ax = plt.subplots(figsize=(4.4, 3.8))\nim = ax.imshow(sim.numpy(), cmap=\"viridis\", vmin=-1, vmax=1)\nax.set_title(\"Appearance space — reid cosine similarity\")\nn = len(seed[\"names\"])\nax.set_xticks(range(n)); ax.set_yticks(range(n))\nax.set_xticklabels(seed[\"names\"], rotation=45, ha=\"right\", fontsize=8)\nax.set_yticklabels(seed[\"names\"], fontsize=8)\nfor i in range(n):\n    for j in range(n):\n        ax.text(j, i, f\"{sim[i, j]:.2f}\", ha=\"center\", va=\"center\",\n                color=\"white\", fontsize=8)\nfig.colorbar(im, ax=ax, fraction=0.046)\nplt.tight_layout()\nplt.show()\n\n",[371,4113,4114,4154,4189,4247,4267,4292,4332,4388,4419,4437,4454,4528,4552,4586,4597],{"__ignoreMap":393},[397,4115,4116,4119,4121,4123,4125,4127,4129,4131,4133,4136,4138,4140,4142,4144,4146,4148,4151],{"class":399,"line":400},[397,4117,4118],{"class":414},"sim ",[397,4120,994],{"class":410},[397,4122,2384],{"class":414},[397,4124,843],{"class":459},[397,4126,425],{"class":424},[397,4128,914],{"class":428},[397,4130,425],{"class":424},[397,4132,853],{"class":459},[397,4134,4135],{"class":410}," @",[397,4137,2384],{"class":414},[397,4139,843],{"class":459},[397,4141,425],{"class":424},[397,4143,914],{"class":428},[397,4145,425],{"class":424},[397,4147,2395],{"class":459},[397,4149,4150],{"class":463},"T",[397,4152,4153],{"class":403},"   # reid rows are L2-normalized\n",[397,4155,4156,4159,4161,4163,4165,4167,4169,4171,4173,4175,4177,4179,4182,4184,4187],{"class":399,"line":407},[397,4157,4158],{"class":414},"fig",[397,4160,555],{"class":459},[397,4162,2744],{"class":414},[397,4164,994],{"class":410},[397,4166,2749],{"class":414},[397,4168,460],{"class":459},[397,4170,2754],{"class":819},[397,4172,823],{"class":459},[397,4174,2759],{"class":1101},[397,4176,994],{"class":410},[397,4178,823],{"class":459},[397,4180,4181],{"class":826},"4.4",[397,4183,555],{"class":459},[397,4185,4186],{"class":826}," 3.8",[397,4188,2030],{"class":459},[397,4190,4191,4194,4196,4199,4201,4203,4205,4208,4210,4213,4215,4218,4220,4222,4225,4227,4229,4232,4234,4236,4238,4241,4243,4245],{"class":399,"line":473},[397,4192,4193],{"class":414},"im ",[397,4195,994],{"class":410},[397,4197,4198],{"class":414}," ax",[397,4200,460],{"class":459},[397,4202,2782],{"class":819},[397,4204,823],{"class":459},[397,4206,4207],{"class":819},"sim",[397,4209,460],{"class":459},[397,4211,4212],{"class":819},"numpy",[397,4214,1808],{"class":459},[397,4216,4217],{"class":1101}," cmap",[397,4219,994],{"class":410},[397,4221,425],{"class":424},[397,4223,4224],{"class":428},"viridis",[397,4226,425],{"class":424},[397,4228,555],{"class":459},[397,4230,4231],{"class":1101}," vmin",[397,4233,1688],{"class":410},[397,4235,1691],{"class":826},[397,4237,555],{"class":459},[397,4239,4240],{"class":1101}," vmax",[397,4242,994],{"class":410},[397,4244,1691],{"class":826},[397,4246,632],{"class":459},[397,4248,4249,4252,4254,4256,4258,4260,4263,4265],{"class":399,"line":492},[397,4250,4251],{"class":414},"ax",[397,4253,460],{"class":459},[397,4255,3103],{"class":819},[397,4257,823],{"class":459},[397,4259,425],{"class":424},[397,4261,4262],{"class":428},"Appearance space — reid cosine similarity",[397,4264,425],{"class":424},[397,4266,632],{"class":459},[397,4268,4269,4272,4274,4277,4279,4281,4283,4285,4287,4289],{"class":399,"line":509},[397,4270,4271],{"class":414},"n ",[397,4273,994],{"class":410},[397,4275,4276],{"class":1541}," len",[397,4278,823],{"class":459},[397,4280,2455],{"class":819},[397,4282,843],{"class":459},[397,4284,425],{"class":424},[397,4286,1869],{"class":428},[397,4288,425],{"class":424},[397,4290,4291],{"class":459},"])\n",[397,4293,4294,4296,4298,4301,4303,4306,4308,4311,4314,4317,4319,4322,4324,4326,4328,4330],{"class":399,"line":517},[397,4295,4251],{"class":414},[397,4297,460],{"class":459},[397,4299,4300],{"class":819},"set_xticks",[397,4302,823],{"class":459},[397,4304,4305],{"class":1541},"range",[397,4307,823],{"class":459},[397,4309,4310],{"class":819},"n",[397,4312,4313],{"class":459},"))",[397,4315,4316],{"class":414},"; ax",[397,4318,460],{"class":459},[397,4320,4321],{"class":819},"set_yticks",[397,4323,823],{"class":459},[397,4325,4305],{"class":1541},[397,4327,823],{"class":459},[397,4329,4310],{"class":819},[397,4331,2030],{"class":459},[397,4333,4334,4336,4338,4341,4343,4345,4347,4349,4351,4353,4355,4358,4360,4363,4365,4368,4370,4372,4375,4377,4379,4382,4384,4386],{"class":399,"line":522},[397,4335,4251],{"class":414},[397,4337,460],{"class":459},[397,4339,4340],{"class":819},"set_xticklabels",[397,4342,823],{"class":459},[397,4344,2455],{"class":819},[397,4346,843],{"class":459},[397,4348,425],{"class":424},[397,4350,1869],{"class":428},[397,4352,425],{"class":424},[397,4354,1447],{"class":459},[397,4356,4357],{"class":1101}," rotation",[397,4359,994],{"class":410},[397,4361,4362],{"class":826},"45",[397,4364,555],{"class":459},[397,4366,4367],{"class":1101}," ha",[397,4369,994],{"class":410},[397,4371,425],{"class":424},[397,4373,4374],{"class":428},"right",[397,4376,425],{"class":424},[397,4378,555],{"class":459},[397,4380,4381],{"class":1101}," fontsize",[397,4383,994],{"class":410},[397,4385,3288],{"class":826},[397,4387,632],{"class":459},[397,4389,4390,4392,4394,4397,4399,4401,4403,4405,4407,4409,4411,4413,4415,4417],{"class":399,"line":536},[397,4391,4251],{"class":414},[397,4393,460],{"class":459},[397,4395,4396],{"class":819},"set_yticklabels",[397,4398,823],{"class":459},[397,4400,2455],{"class":819},[397,4402,843],{"class":459},[397,4404,425],{"class":424},[397,4406,1869],{"class":428},[397,4408,425],{"class":424},[397,4410,1447],{"class":459},[397,4412,4381],{"class":1101},[397,4414,994],{"class":410},[397,4416,3288],{"class":826},[397,4418,632],{"class":459},[397,4420,4421,4424,4427,4429,4431,4433,4435],{"class":399,"line":566},[397,4422,4423],{"class":452},"for",[397,4425,4426],{"class":414}," i ",[397,4428,1516],{"class":452},[397,4430,3432],{"class":1541},[397,4432,823],{"class":459},[397,4434,4310],{"class":819},[397,4436,1238],{"class":459},[397,4438,4439,4441,4444,4446,4448,4450,4452],{"class":399,"line":588},[397,4440,1495],{"class":452},[397,4442,4443],{"class":414}," j ",[397,4445,1516],{"class":452},[397,4447,3432],{"class":1541},[397,4449,823],{"class":459},[397,4451,4310],{"class":819},[397,4453,1238],{"class":459},[397,4455,4456,4458,4460,4462,4464,4467,4469,4472,4474,4476,4478,4480,4482,4484,4487,4489,4492,4494,4496,4498,4500,4502,4504,4506,4508,4511,4513,4515,4518,4520,4522,4524,4526],{"class":399,"line":605},[397,4457,2882],{"class":414},[397,4459,460],{"class":459},[397,4461,2973],{"class":819},[397,4463,823],{"class":459},[397,4465,4466],{"class":819},"j",[397,4468,555],{"class":459},[397,4470,4471],{"class":819}," i",[397,4473,555],{"class":459},[397,4475,2441],{"class":924},[397,4477,425],{"class":428},[397,4479,2447],{"class":826},[397,4481,4207],{"class":819},[397,4483,843],{"class":459},[397,4485,4486],{"class":819},"i",[397,4488,555],{"class":459},[397,4490,4491],{"class":819}," j",[397,4493,853],{"class":459},[397,4495,3007],{"class":924},[397,4497,2470],{"class":826},[397,4499,425],{"class":428},[397,4501,555],{"class":459},[397,4503,4367],{"class":1101},[397,4505,994],{"class":410},[397,4507,425],{"class":424},[397,4509,4510],{"class":428},"center",[397,4512,425],{"class":424},[397,4514,555],{"class":459},[397,4516,4517],{"class":1101}," va",[397,4519,994],{"class":410},[397,4521,425],{"class":424},[397,4523,4510],{"class":428},[397,4525,425],{"class":424},[397,4527,626],{"class":459},[397,4529,4530,4533,4535,4537,4540,4542,4544,4546,4548,4550],{"class":399,"line":629},[397,4531,4532],{"class":1101},"                color",[397,4534,994],{"class":410},[397,4536,425],{"class":424},[397,4538,4539],{"class":428},"white",[397,4541,425],{"class":424},[397,4543,555],{"class":459},[397,4545,4381],{"class":1101},[397,4547,994],{"class":410},[397,4549,3288],{"class":826},[397,4551,632],{"class":459},[397,4553,4554,4556,4558,4561,4563,4566,4568,4570,4572,4574,4576,4579,4581,4584],{"class":399,"line":635},[397,4555,4158],{"class":414},[397,4557,460],{"class":459},[397,4559,4560],{"class":819},"colorbar",[397,4562,823],{"class":459},[397,4564,4565],{"class":819},"im",[397,4567,555],{"class":459},[397,4569,4198],{"class":1101},[397,4571,994],{"class":410},[397,4573,4251],{"class":819},[397,4575,555],{"class":459},[397,4577,4578],{"class":1101}," fraction",[397,4580,994],{"class":410},[397,4582,4583],{"class":826},"0.046",[397,4585,632],{"class":459},[397,4587,4588,4590,4592,4595],{"class":399,"line":657},[397,4589,835],{"class":414},[397,4591,460],{"class":459},[397,4593,4594],{"class":819},"tight_layout",[397,4596,1049],{"class":459},[397,4598,4599,4601,4603,4605],{"class":399,"line":673},[397,4600,835],{"class":414},[397,4602,460],{"class":459},[397,4604,3130],{"class":819},[397,4606,1049],{"class":459},[338,4608,4609],{},[4610,4611],"img",{"alt":393,"src":4612},"\u002F_nb\u002F977eb90b338e6573.png",[376,4614,4616],{"id":4615},"the-1x-tracker-were-migrating","The 1.x tracker we're migrating",[338,4618,4619,4620,4622],{},"In unitrack 1.x the appearance tracker was built like this (see the\n",[353,4621,355],{"href":46}," for the full before \u002F\nafter and the symbol-by-symbol mapping):",[388,4624,4626],{"className":390,"code":4625,"language":392,"meta":393,"style":393},"# --- unitrack 1.x ---\ncost = ut.costs.Cosine(field=\"reid\")\ncost = ut.costs.GateCost(\"category\").wrap(cost)        # gate fused into cost\ntracker = ut.SimpleTracker(\n    tracker=ut.MultiStageTracker(\n        fields=[_build_field(\"reid\"), _build_field(\"score\"), ...],\n        stages=[ut.stages.Gate(gate=SelectAndFilter(\"score\", min_score),\n                then=[ut.stages.Association(\n                    cost=cost,\n                    assignment=ut.assignment.Jonker(threshold=0.9))])],\n    ),\n    memory=ut.TrackletMemory(states={\n        \"reid\": ut.states.Value(torch.float, shape=(512,)), ...}),\n)\n",[371,4627,4628,4633,4667,4706,4722,4739,4779,4824,4846,4857,4888,4893,4916,4964],{"__ignoreMap":393},[397,4629,4630],{"class":399,"line":400},[397,4631,4632],{"class":403},"# --- unitrack 1.x ---\n",[397,4634,4635,4638,4640,4643,4645,4647,4649,4652,4654,4657,4659,4661,4663,4665],{"class":399,"line":407},[397,4636,4637],{"class":414},"cost ",[397,4639,994],{"class":410},[397,4641,4642],{"class":414}," ut",[397,4644,460],{"class":459},[397,4646,182],{"class":463},[397,4648,460],{"class":459},[397,4650,4651],{"class":819},"Cosine",[397,4653,823],{"class":459},[397,4655,4656],{"class":1101},"field",[397,4658,994],{"class":410},[397,4660,425],{"class":424},[397,4662,914],{"class":428},[397,4664,425],{"class":424},[397,4666,632],{"class":459},[397,4668,4669,4671,4673,4675,4677,4679,4681,4684,4686,4688,4690,4692,4694,4697,4699,4701,4703],{"class":399,"line":473},[397,4670,4637],{"class":414},[397,4672,994],{"class":410},[397,4674,4642],{"class":414},[397,4676,460],{"class":459},[397,4678,182],{"class":463},[397,4680,460],{"class":459},[397,4682,4683],{"class":819},"GateCost",[397,4685,823],{"class":459},[397,4687,425],{"class":424},[397,4689,907],{"class":428},[397,4691,425],{"class":424},[397,4693,2525],{"class":459},[397,4695,4696],{"class":819},"wrap",[397,4698,823],{"class":459},[397,4700,203],{"class":819},[397,4702,1580],{"class":459},[397,4704,4705],{"class":403},"        # gate fused into cost\n",[397,4707,4708,4711,4713,4715,4717,4720],{"class":399,"line":492},[397,4709,4710],{"class":414},"tracker ",[397,4712,994],{"class":410},[397,4714,4642],{"class":414},[397,4716,460],{"class":459},[397,4718,4719],{"class":819},"SimpleTracker",[397,4721,1028],{"class":459},[397,4723,4724,4727,4729,4732,4734,4737],{"class":399,"line":509},[397,4725,4726],{"class":1101},"    tracker",[397,4728,994],{"class":410},[397,4730,4731],{"class":819},"ut",[397,4733,460],{"class":459},[397,4735,4736],{"class":819},"MultiStageTracker",[397,4738,1028],{"class":459},[397,4740,4741,4744,4746,4748,4751,4753,4755,4757,4759,4761,4764,4766,4768,4770,4772,4774,4777],{"class":399,"line":517},[397,4742,4743],{"class":1101},"        fields",[397,4745,994],{"class":410},[397,4747,843],{"class":459},[397,4749,4750],{"class":819},"_build_field",[397,4752,823],{"class":459},[397,4754,425],{"class":424},[397,4756,914],{"class":428},[397,4758,425],{"class":424},[397,4760,1561],{"class":459},[397,4762,4763],{"class":819}," _build_field",[397,4765,823],{"class":459},[397,4767,425],{"class":424},[397,4769,910],{"class":428},[397,4771,425],{"class":424},[397,4773,1561],{"class":459},[397,4775,4776],{"class":1541}," ...",[397,4778,2076],{"class":459},[397,4780,4781,4784,4786,4788,4790,4792,4795,4797,4800,4802,4804,4806,4809,4811,4813,4815,4817,4819,4822],{"class":399,"line":522},[397,4782,4783],{"class":1101},"        stages",[397,4785,994],{"class":410},[397,4787,843],{"class":459},[397,4789,4731],{"class":819},[397,4791,460],{"class":459},[397,4793,4794],{"class":463},"stages",[397,4796,460],{"class":459},[397,4798,4799],{"class":819},"Gate",[397,4801,823],{"class":459},[397,4803,212],{"class":1101},[397,4805,994],{"class":410},[397,4807,4808],{"class":819},"SelectAndFilter",[397,4810,823],{"class":459},[397,4812,425],{"class":424},[397,4814,910],{"class":428},[397,4816,425],{"class":424},[397,4818,555],{"class":459},[397,4820,4821],{"class":819}," min_score",[397,4823,3503],{"class":459},[397,4825,4826,4829,4831,4833,4835,4837,4839,4841,4844],{"class":399,"line":536},[397,4827,4828],{"class":1101},"                then",[397,4830,994],{"class":410},[397,4832,843],{"class":459},[397,4834,4731],{"class":819},[397,4836,460],{"class":459},[397,4838,4794],{"class":463},[397,4840,460],{"class":459},[397,4842,4843],{"class":819},"Association",[397,4845,1028],{"class":459},[397,4847,4848,4851,4853,4855],{"class":399,"line":566},[397,4849,4850],{"class":1101},"                    cost",[397,4852,994],{"class":410},[397,4854,203],{"class":819},[397,4856,626],{"class":459},[397,4858,4859,4862,4864,4866,4868,4870,4872,4875,4877,4880,4882,4885],{"class":399,"line":588},[397,4860,4861],{"class":1101},"                    assignment",[397,4863,994],{"class":410},[397,4865,4731],{"class":819},[397,4867,460],{"class":459},[397,4869,128],{"class":463},[397,4871,460],{"class":459},[397,4873,4874],{"class":819},"Jonker",[397,4876,823],{"class":459},[397,4878,4879],{"class":1101},"threshold",[397,4881,994],{"class":410},[397,4883,4884],{"class":826},"0.9",[397,4886,4887],{"class":459},"))])],\n",[397,4889,4890],{"class":399,"line":605},[397,4891,4892],{"class":459},"    ),\n",[397,4894,4895,4898,4900,4902,4904,4907,4909,4911,4913],{"class":399,"line":629},[397,4896,4897],{"class":1101},"    memory",[397,4899,994],{"class":410},[397,4901,4731],{"class":819},[397,4903,460],{"class":459},[397,4905,4906],{"class":819},"TrackletMemory",[397,4908,823],{"class":459},[397,4910,270],{"class":1101},[397,4912,994],{"class":410},[397,4914,4915],{"class":459},"{\n",[397,4917,4918,4920,4922,4924,4926,4928,4930,4932,4934,4937,4939,4941,4943,4945,4947,4950,4952,4954,4956,4959,4961],{"class":399,"line":635},[397,4919,1033],{"class":424},[397,4921,914],{"class":428},[397,4923,425],{"class":424},[397,4925,1798],{"class":459},[397,4927,4642],{"class":819},[397,4929,460],{"class":459},[397,4931,270],{"class":463},[397,4933,460],{"class":459},[397,4935,4936],{"class":819},"Value",[397,4938,823],{"class":459},[397,4940,814],{"class":819},[397,4942,460],{"class":459},[397,4944,1805],{"class":463},[397,4946,555],{"class":459},[397,4948,4949],{"class":1101}," shape",[397,4951,994],{"class":410},[397,4953,823],{"class":459},[397,4955,1939],{"class":826},[397,4957,4958],{"class":459},",)),",[397,4960,4776],{"class":1541},[397,4962,4963],{"class":459},"}),\n",[397,4965,4966],{"class":399,"line":657},[397,4967,632],{"class":459},[338,4969,4970,4971,4973],{},"Field-selection modules at the front, gating fused into the cost,\nstates living on the memory, and a ",[371,4972,4719],{}," bundling\ntracker + memory.",[376,4975,4977],{"id":4976},"step-1-the-same-tracker-in-20","Step 1 — the same tracker, in 2.0",[338,4979,4980,4981,904,4984,4987,4988,4991,4992,4995,4996,4999,5000,5002,5003,5006,5007,5010,5011,5013,5014,5013,5017,460],{},"The 2.0 version reads as a small tree. Gates are first-class\n(",[371,4982,4983],{},"ClassGate",[371,4985,4986],{},"ScoreGate",") and combine with ",[371,4989,4990],{},"Sequential","; ",[371,4993,4994],{},"Gated","\napplies them to a ",[371,4997,4998],{},"Pipe"," that turns a ",[371,5001,4651],{}," cost into a match.\nStates move onto the ",[371,5004,5005],{},"Tracker"," as ",[371,5008,5009],{},"(Process, Observation, Initializer)"," triples — a plain appearance cache is\n",[371,5012,1133],{}," + ",[371,5015,5016],{},"Replace",[371,5018,5019],{},"FromDetectionField",[388,5021,5023],{"className":390,"code":5022,"language":392,"meta":393,"style":393},"def feature_state(name, shape, dtype):\n    \"\"\"A pure cache: no motion model, replace on match, seed from det.\"\"\"\n    return State(\n        schema=TensorSpec(shape=shape, dtype=dtype),\n        process=Identity(name), observation=Replace(name),\n        init=FromDetectionField(name))\n\nSTATES = {\n    \"reid\": feature_state(\"reid\", (REID_DIM,), torch.float32),\n    \"bbox\": feature_state(\"bbox\", (4,), torch.float32),\n    \"centroid\": feature_state(\"centroid\", (2,), torch.float32),\n    \"category\": feature_state(\"category\", (), torch.int64),\n    \"score\": feature_state(\"score\", (), torch.float32),\n}\n\ndef make_tracker(root, *, lifecycle=None, visibility=None):\n    return ut.Tracker(\n        root=root, states=dict(STATES),\n        lifecycle=lifecycle or NoLifecycle(),\n        visibility=visibility or IncludeAll())\n\ndef run_clip(tracker, clip):\n    ms = ut.MultiStream(tracker)\n    return [ms.step(0, d, FrameContext.make(k, fps=15.0, stream_key=0))\n            for k, d in enumerate(clip)]\n\ndef distinct_ids(results):\n    ids = set()\n    for r in results:\n        ids.update(r.snapshot.id.tolist())\n    return sorted(ids)\n\n",[371,5024,5025,5046,5055,5063,5092,5120,5135,5139,5148,5187,5224,5260,5293,5325,5330,5334,5370,5382,5406,5422,5439,5443,5461,5481,5538,5563,5567,5581,5593,5607,5637],{"__ignoreMap":393},[397,5026,5027,5029,5032,5034,5036,5038,5040,5042,5044],{"class":399,"line":400},[397,5028,925],{"class":924},[397,5030,5031],{"class":928}," feature_state",[397,5033,823],{"class":459},[397,5035,2996],{"class":1214},[397,5037,555],{"class":459},[397,5039,4949],{"class":1214},[397,5041,555],{"class":459},[397,5043,3491],{"class":1214},[397,5045,1238],{"class":459},[397,5047,5048,5050,5053],{"class":399,"line":407},[397,5049,938],{"class":937},[397,5051,5052],{"class":941},"A pure cache: no motion model, replace on match, seed from det.",[397,5054,945],{"class":937},[397,5056,5057,5059,5061],{"class":399,"line":473},[397,5058,1154],{"class":452},[397,5060,796],{"class":819},[397,5062,1028],{"class":459},[397,5064,5065,5068,5070,5073,5075,5077,5079,5081,5083,5085,5087,5090],{"class":399,"line":492},[397,5066,5067],{"class":1101},"        schema",[397,5069,994],{"class":410},[397,5071,5072],{"class":819},"TensorSpec",[397,5074,823],{"class":459},[397,5076,2398],{"class":1101},[397,5078,994],{"class":410},[397,5080,2398],{"class":819},[397,5082,555],{"class":459},[397,5084,3491],{"class":1101},[397,5086,994],{"class":410},[397,5088,5089],{"class":819},"dtype",[397,5091,3503],{"class":459},[397,5093,5094,5097,5099,5101,5103,5105,5107,5110,5112,5114,5116,5118],{"class":399,"line":509},[397,5095,5096],{"class":1101},"        process",[397,5098,994],{"class":410},[397,5100,1133],{"class":819},[397,5102,823],{"class":459},[397,5104,2996],{"class":819},[397,5106,1561],{"class":459},[397,5108,5109],{"class":1101}," observation",[397,5111,994],{"class":410},[397,5113,5016],{"class":819},[397,5115,823],{"class":459},[397,5117,2996],{"class":819},[397,5119,3503],{"class":459},[397,5121,5122,5125,5127,5129,5131,5133],{"class":399,"line":517},[397,5123,5124],{"class":1101},"        init",[397,5126,994],{"class":410},[397,5128,5019],{"class":819},[397,5130,823],{"class":459},[397,5132,2996],{"class":819},[397,5134,2030],{"class":459},[397,5136,5137],{"class":399,"line":522},[397,5138,470],{"emptyLinePlaceholder":469},[397,5140,5141,5144,5146],{"class":399,"line":536},[397,5142,5143],{"class":1905},"STATES",[397,5145,856],{"class":410},[397,5147,1786],{"class":459},[397,5149,5150,5153,5155,5157,5159,5161,5163,5165,5167,5169,5171,5173,5175,5178,5180,5182,5185],{"class":399,"line":566},[397,5151,5152],{"class":424},"    \"",[397,5154,914],{"class":428},[397,5156,425],{"class":424},[397,5158,1798],{"class":459},[397,5160,5031],{"class":819},[397,5162,823],{"class":459},[397,5164,425],{"class":424},[397,5166,914],{"class":428},[397,5168,425],{"class":424},[397,5170,555],{"class":459},[397,5172,859],{"class":459},[397,5174,2576],{"class":1541},[397,5176,5177],{"class":459},",),",[397,5179,1123],{"class":819},[397,5181,460],{"class":459},[397,5183,5184],{"class":463},"float32",[397,5186,3503],{"class":459},[397,5188,5189,5191,5193,5195,5197,5199,5201,5203,5205,5207,5209,5211,5214,5216,5218,5220,5222],{"class":399,"line":588},[397,5190,5152],{"class":424},[397,5192,291],{"class":428},[397,5194,425],{"class":424},[397,5196,1798],{"class":459},[397,5198,5031],{"class":819},[397,5200,823],{"class":459},[397,5202,425],{"class":424},[397,5204,291],{"class":428},[397,5206,425],{"class":424},[397,5208,555],{"class":459},[397,5210,859],{"class":459},[397,5212,5213],{"class":826},"4",[397,5215,5177],{"class":459},[397,5217,1123],{"class":819},[397,5219,460],{"class":459},[397,5221,5184],{"class":463},[397,5223,3503],{"class":459},[397,5225,5226,5228,5230,5232,5234,5236,5238,5240,5242,5244,5246,5248,5250,5252,5254,5256,5258],{"class":399,"line":605},[397,5227,5152],{"class":424},[397,5229,294],{"class":428},[397,5231,425],{"class":424},[397,5233,1798],{"class":459},[397,5235,5031],{"class":819},[397,5237,823],{"class":459},[397,5239,425],{"class":424},[397,5241,294],{"class":428},[397,5243,425],{"class":424},[397,5245,555],{"class":459},[397,5247,859],{"class":459},[397,5249,2690],{"class":826},[397,5251,5177],{"class":459},[397,5253,1123],{"class":819},[397,5255,460],{"class":459},[397,5257,5184],{"class":463},[397,5259,3503],{"class":459},[397,5261,5262,5264,5266,5268,5270,5272,5274,5276,5278,5280,5282,5285,5287,5289,5291],{"class":399,"line":629},[397,5263,5152],{"class":424},[397,5265,907],{"class":428},[397,5267,425],{"class":424},[397,5269,1798],{"class":459},[397,5271,5031],{"class":819},[397,5273,823],{"class":459},[397,5275,425],{"class":424},[397,5277,907],{"class":428},[397,5279,425],{"class":424},[397,5281,555],{"class":459},[397,5283,5284],{"class":459}," (),",[397,5286,1123],{"class":819},[397,5288,460],{"class":459},[397,5290,3500],{"class":463},[397,5292,3503],{"class":459},[397,5294,5295,5297,5299,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321,5323],{"class":399,"line":635},[397,5296,5152],{"class":424},[397,5298,910],{"class":428},[397,5300,425],{"class":424},[397,5302,1798],{"class":459},[397,5304,5031],{"class":819},[397,5306,823],{"class":459},[397,5308,425],{"class":424},[397,5310,910],{"class":428},[397,5312,425],{"class":424},[397,5314,555],{"class":459},[397,5316,5284],{"class":459},[397,5318,1123],{"class":819},[397,5320,460],{"class":459},[397,5322,5184],{"class":463},[397,5324,3503],{"class":459},[397,5326,5327],{"class":399,"line":657},[397,5328,5329],{"class":459},"}\n",[397,5331,5332],{"class":399,"line":673},[397,5333,470],{"emptyLinePlaceholder":469},[397,5335,5336,5338,5341,5343,5346,5348,5350,5352,5354,5356,5359,5361,5364,5366,5368],{"class":399,"line":696},[397,5337,925],{"class":924},[397,5339,5340],{"class":928}," make_tracker",[397,5342,823],{"class":459},[397,5344,5345],{"class":1214},"root",[397,5347,555],{"class":459},[397,5349,1225],{"class":410},[397,5351,904],{"class":414},[397,5353,239],{"class":1214},[397,5355,994],{"class":410},[397,5357,5358],{"class":2273},"None",[397,5360,555],{"class":459},[397,5362,5363],{"class":1214}," visibility",[397,5365,994],{"class":410},[397,5367,5358],{"class":2273},[397,5369,1238],{"class":459},[397,5371,5372,5374,5376,5378,5380],{"class":399,"line":704},[397,5373,1154],{"class":452},[397,5375,4642],{"class":414},[397,5377,460],{"class":459},[397,5379,5005],{"class":819},[397,5381,1028],{"class":459},[397,5383,5384,5387,5389,5391,5393,5396,5398,5400,5402,5404],{"class":399,"line":709},[397,5385,5386],{"class":1101},"        root",[397,5388,994],{"class":410},[397,5390,5345],{"class":819},[397,5392,555],{"class":459},[397,5394,5395],{"class":1101}," states",[397,5397,994],{"class":410},[397,5399,3048],{"class":1757},[397,5401,823],{"class":459},[397,5403,5143],{"class":1541},[397,5405,3503],{"class":459},[397,5407,5408,5411,5413,5415,5418,5420],{"class":399,"line":741},[397,5409,5410],{"class":1101},"        lifecycle",[397,5412,994],{"class":410},[397,5414,666],{"class":819},[397,5416,5417],{"class":452},"or",[397,5419,686],{"class":819},[397,5421,1827],{"class":459},[397,5423,5424,5427,5429,5432,5434,5436],{"class":399,"line":762},[397,5425,5426],{"class":1101},"        visibility",[397,5428,994],{"class":410},[397,5430,5431],{"class":819},"visibility ",[397,5433,5417],{"class":452},[397,5435,681],{"class":819},[397,5437,5438],{"class":459},"())\n",[397,5440,5441],{"class":399,"line":778},[397,5442,470],{"emptyLinePlaceholder":469},[397,5444,5445,5447,5450,5452,5454,5456,5459],{"class":399,"line":801},[397,5446,925],{"class":924},[397,5448,5449],{"class":928}," run_clip",[397,5451,823],{"class":459},[397,5453,173],{"class":1214},[397,5455,555],{"class":459},[397,5457,5458],{"class":1214}," clip",[397,5460,1238],{"class":459},[397,5462,5463,5466,5468,5470,5472,5475,5477,5479],{"class":399,"line":806},[397,5464,5465],{"class":414},"    ms ",[397,5467,994],{"class":410},[397,5469,4642],{"class":414},[397,5471,460],{"class":459},[397,5473,5474],{"class":819},"MultiStream",[397,5476,823],{"class":459},[397,5478,173],{"class":819},[397,5480,632],{"class":459},[397,5482,5483,5485,5487,5490,5492,5495,5497,5499,5501,5504,5506,5508,5510,5513,5515,5518,5520,5523,5525,5527,5529,5532,5534,5536],{"class":399,"line":811},[397,5484,1154],{"class":452},[397,5486,1739],{"class":459},[397,5488,5489],{"class":414},"ms",[397,5491,460],{"class":459},[397,5493,5494],{"class":819},"step",[397,5496,823],{"class":459},[397,5498,827],{"class":826},[397,5500,555],{"class":459},[397,5502,5503],{"class":819}," d",[397,5505,555],{"class":459},[397,5507,613],{"class":819},[397,5509,460],{"class":459},[397,5511,5512],{"class":819},"make",[397,5514,823],{"class":459},[397,5516,5517],{"class":819},"k",[397,5519,555],{"class":459},[397,5521,5522],{"class":1101}," fps",[397,5524,994],{"class":410},[397,5526,3300],{"class":826},[397,5528,555],{"class":459},[397,5530,5531],{"class":1101}," stream_key",[397,5533,994],{"class":410},[397,5535,827],{"class":826},[397,5537,2030],{"class":459},[397,5539,5540,5543,5546,5548,5551,5553,5556,5558,5560],{"class":399,"line":832},[397,5541,5542],{"class":452},"            for",[397,5544,5545],{"class":414}," k",[397,5547,555],{"class":459},[397,5549,5550],{"class":414}," d ",[397,5552,1516],{"class":452},[397,5554,5555],{"class":1541}," enumerate",[397,5557,823],{"class":459},[397,5559,200],{"class":819},[397,5561,5562],{"class":459},")]\n",[397,5564,5565],{"class":399,"line":1326},[397,5566,470],{"emptyLinePlaceholder":469},[397,5568,5569,5571,5574,5576,5579],{"class":399,"line":1364},[397,5570,925],{"class":924},[397,5572,5573],{"class":928}," distinct_ids",[397,5575,823],{"class":459},[397,5577,5578],{"class":1214},"results",[397,5580,1238],{"class":459},[397,5582,5583,5586,5588,5591],{"class":399,"line":1381},[397,5584,5585],{"class":414},"    ids ",[397,5587,994],{"class":410},[397,5589,5590],{"class":1757}," set",[397,5592,1049],{"class":459},[397,5594,5595,5597,5600,5602,5605],{"class":399,"line":1406},[397,5596,1495],{"class":452},[397,5598,5599],{"class":414}," r ",[397,5601,1516],{"class":452},[397,5603,5604],{"class":414}," results",[397,5606,2282],{"class":459},[397,5608,5609,5612,5614,5616,5618,5621,5623,5626,5628,5631,5633,5635],{"class":399,"line":1417},[397,5610,5611],{"class":414},"        ids",[397,5613,460],{"class":459},[397,5615,306],{"class":819},[397,5617,823],{"class":459},[397,5619,5620],{"class":819},"r",[397,5622,460],{"class":459},[397,5624,5625],{"class":463},"snapshot",[397,5627,460],{"class":459},[397,5629,5630],{"class":463},"id",[397,5632,460],{"class":459},[397,5634,1524],{"class":819},[397,5636,5438],{"class":459},[397,5638,5639,5641,5644,5646,5649],{"class":399,"line":1476},[397,5640,1154],{"class":452},[397,5642,5643],{"class":1541}," sorted",[397,5645,823],{"class":459},[397,5647,5648],{"class":819},"ids",[397,5650,632],{"class":459},[388,5652,5654],{"className":390,"code":5653,"language":392,"meta":393,"style":393},"appearance_tracker = make_tracker(\n    Gated(\n        gate=Sequential([\n            ClassGate(\"category\"),          # cat can't match remote\n            ScoreGate(\"score\", threshold=0.1),\n        ]),\n        then=Pipe(cost=Cosine(\"reid\"),\n                  assoc=Associate(Jonker(threshold=0.3))),\n    )\n)\napp_results = run_clip(appearance_tracker, clip)\nprint(f\"appearance tracker -> stable ids: {distinct_ids(app_results)}\")\n\n",[371,5655,5656,5667,5674,5686,5704,5728,5733,5760,5786,5790,5794,5814],{"__ignoreMap":393},[397,5657,5658,5661,5663,5665],{"class":399,"line":400},[397,5659,5660],{"class":414},"appearance_tracker ",[397,5662,994],{"class":410},[397,5664,5340],{"class":819},[397,5666,1028],{"class":459},[397,5668,5669,5672],{"class":399,"line":407},[397,5670,5671],{"class":819},"    Gated",[397,5673,1028],{"class":459},[397,5675,5676,5679,5681,5683],{"class":399,"line":473},[397,5677,5678],{"class":1101},"        gate",[397,5680,994],{"class":410},[397,5682,4990],{"class":819},[397,5684,5685],{"class":459},"([\n",[397,5687,5688,5691,5693,5695,5697,5699,5701],{"class":399,"line":492},[397,5689,5690],{"class":819},"            ClassGate",[397,5692,823],{"class":459},[397,5694,425],{"class":424},[397,5696,907],{"class":428},[397,5698,425],{"class":424},[397,5700,1561],{"class":459},[397,5702,5703],{"class":403},"          # cat can't match remote\n",[397,5705,5706,5709,5711,5713,5715,5717,5719,5721,5723,5726],{"class":399,"line":509},[397,5707,5708],{"class":819},"            ScoreGate",[397,5710,823],{"class":459},[397,5712,425],{"class":424},[397,5714,910],{"class":428},[397,5716,425],{"class":424},[397,5718,555],{"class":459},[397,5720,1389],{"class":1101},[397,5722,994],{"class":410},[397,5724,5725],{"class":826},"0.1",[397,5727,3503],{"class":459},[397,5729,5730],{"class":399,"line":517},[397,5731,5732],{"class":459},"        ]),\n",[397,5734,5735,5738,5740,5742,5744,5746,5748,5750,5752,5754,5756,5758],{"class":399,"line":522},[397,5736,5737],{"class":1101},"        then",[397,5739,994],{"class":410},[397,5741,4998],{"class":819},[397,5743,823],{"class":459},[397,5745,203],{"class":1101},[397,5747,994],{"class":410},[397,5749,4651],{"class":819},[397,5751,823],{"class":459},[397,5753,425],{"class":424},[397,5755,914],{"class":428},[397,5757,425],{"class":424},[397,5759,3503],{"class":459},[397,5761,5762,5765,5767,5770,5772,5774,5776,5778,5780,5783],{"class":399,"line":536},[397,5763,5764],{"class":1101},"                  assoc",[397,5766,994],{"class":410},[397,5768,5769],{"class":819},"Associate",[397,5771,823],{"class":459},[397,5773,4874],{"class":819},[397,5775,823],{"class":459},[397,5777,4879],{"class":1101},[397,5779,994],{"class":410},[397,5781,5782],{"class":826},"0.3",[397,5784,5785],{"class":459},"))),\n",[397,5787,5788],{"class":399,"line":566},[397,5789,982],{"class":459},[397,5791,5792],{"class":399,"line":588},[397,5793,632],{"class":459},[397,5795,5796,5799,5801,5803,5805,5808,5810,5812],{"class":399,"line":605},[397,5797,5798],{"class":414},"app_results ",[397,5800,994],{"class":410},[397,5802,5449],{"class":819},[397,5804,823],{"class":459},[397,5806,5807],{"class":819},"appearance_tracker",[397,5809,555],{"class":459},[397,5811,5458],{"class":819},[397,5813,632],{"class":459},[397,5815,5816,5818,5820,5822,5825,5827,5830,5832,5835,5837,5839,5841],{"class":399,"line":629},[397,5817,2603],{"class":1541},[397,5819,823],{"class":459},[397,5821,2501],{"class":924},[397,5823,5824],{"class":428},"\"appearance tracker -> stable ids: ",[397,5826,2447],{"class":826},[397,5828,5829],{"class":819},"distinct_ids",[397,5831,823],{"class":459},[397,5833,5834],{"class":819},"app_results",[397,5836,1580],{"class":459},[397,5838,2470],{"class":826},[397,5840,425],{"class":428},[397,5842,632],{"class":459},[436,5844],{"data":5845,"kind":439},"YXBwZWFyYW5jZSB0cmFja2VyIC0+IHN0YWJsZSBpZHM6IFsxLCAyLCAzXQo=",[388,5847,5849],{"className":390,"code":5848,"language":392,"meta":393,"style":393},"def plot_tracks(results, title, ax):\n    cmap = plt.get_cmap(\"tab10\")\n    n_frames = max(1, len(results) - 1)\n    for k, r in enumerate(results):\n        snap = r.snapshot\n        for n in range(snap.batch_size[0]):\n            c = snap.centroid[n]\n            ax.scatter(c[0].item(), c[1].item(),\n                       color=cmap(int(snap.id[n]) % 10), s=45,\n                       edgecolor=\"black\", linewidth=0.4,\n                       alpha=0.35 + 0.65 * k \u002F n_frames)\n    ax.set_title(title)\n    ax.set_xlabel(\"x\"); ax.set_ylabel(\"y\"); ax.grid(alpha=0.3)\n    ax.invert_yaxis()  # image coordinates: y grows downward\n\nfig, ax = plt.subplots()\nplot_tracks(app_results,\n            \"Migrated appearance tracker (color = track id)\", ax)\nplt.show()\n\n",[371,5850,5851,5873,5898,5928,5948,5963,5992,6012,6050,6094,6118,6144,6159,6215,6229,6233,6251,6262,6278],{"__ignoreMap":393},[397,5852,5853,5855,5858,5860,5862,5864,5867,5869,5871],{"class":399,"line":400},[397,5854,925],{"class":924},[397,5856,5857],{"class":928}," plot_tracks",[397,5859,823],{"class":459},[397,5861,5578],{"class":1214},[397,5863,555],{"class":459},[397,5865,5866],{"class":1214}," title",[397,5868,555],{"class":459},[397,5870,4198],{"class":1214},[397,5872,1238],{"class":459},[397,5874,5875,5878,5880,5882,5884,5887,5889,5891,5894,5896],{"class":399,"line":407},[397,5876,5877],{"class":414},"    cmap ",[397,5879,994],{"class":410},[397,5881,2749],{"class":414},[397,5883,460],{"class":459},[397,5885,5886],{"class":819},"get_cmap",[397,5888,823],{"class":459},[397,5890,425],{"class":424},[397,5892,5893],{"class":428},"tab10",[397,5895,425],{"class":424},[397,5897,632],{"class":459},[397,5899,5900,5903,5905,5907,5909,5911,5913,5915,5917,5919,5921,5924,5926],{"class":399,"line":473},[397,5901,5902],{"class":414},"    n_frames ",[397,5904,994],{"class":410},[397,5906,1542],{"class":1541},[397,5908,823],{"class":459},[397,5910,1691],{"class":826},[397,5912,555],{"class":459},[397,5914,4276],{"class":1541},[397,5916,823],{"class":459},[397,5918,5578],{"class":819},[397,5920,1580],{"class":459},[397,5922,5923],{"class":410}," -",[397,5925,1558],{"class":826},[397,5927,632],{"class":459},[397,5929,5930,5932,5934,5936,5938,5940,5942,5944,5946],{"class":399,"line":492},[397,5931,1495],{"class":452},[397,5933,5545],{"class":414},[397,5935,555],{"class":459},[397,5937,5599],{"class":414},[397,5939,1516],{"class":452},[397,5941,5555],{"class":1541},[397,5943,823],{"class":459},[397,5945,5578],{"class":819},[397,5947,1238],{"class":459},[397,5949,5950,5953,5955,5958,5960],{"class":399,"line":509},[397,5951,5952],{"class":414},"        snap ",[397,5954,994],{"class":410},[397,5956,5957],{"class":414}," r",[397,5959,460],{"class":459},[397,5961,5962],{"class":463},"snapshot\n",[397,5964,5965,5968,5971,5973,5975,5977,5980,5982,5985,5987,5989],{"class":399,"line":517},[397,5966,5967],{"class":452},"        for",[397,5969,5970],{"class":414}," n ",[397,5972,1516],{"class":452},[397,5974,3432],{"class":1541},[397,5976,823],{"class":459},[397,5978,5979],{"class":819},"snap",[397,5981,460],{"class":459},[397,5983,5984],{"class":463},"batch_size",[397,5986,843],{"class":459},[397,5988,827],{"class":826},[397,5990,5991],{"class":459},"]):\n",[397,5993,5994,5997,5999,6002,6004,6006,6008,6010],{"class":399,"line":522},[397,5995,5996],{"class":414},"            c ",[397,5998,994],{"class":410},[397,6000,6001],{"class":414}," snap",[397,6003,460],{"class":459},[397,6005,294],{"class":463},[397,6007,843],{"class":459},[397,6009,4310],{"class":463},[397,6011,1414],{"class":459},[397,6013,6014,6017,6019,6022,6024,6026,6028,6030,6032,6035,6037,6040,6042,6044,6046,6048],{"class":399,"line":536},[397,6015,6016],{"class":414},"            ax",[397,6018,460],{"class":459},[397,6020,6021],{"class":819},"scatter",[397,6023,823],{"class":459},[397,6025,1763],{"class":819},[397,6027,843],{"class":459},[397,6029,827],{"class":826},[397,6031,2395],{"class":459},[397,6033,6034],{"class":819},"item",[397,6036,1808],{"class":459},[397,6038,6039],{"class":819}," c",[397,6041,843],{"class":459},[397,6043,1691],{"class":826},[397,6045,2395],{"class":459},[397,6047,6034],{"class":819},[397,6049,1827],{"class":459},[397,6051,6052,6055,6057,6060,6062,6064,6066,6068,6070,6072,6074,6076,6078,6081,6083,6085,6088,6090,6092],{"class":399,"line":566},[397,6053,6054],{"class":1101},"                       color",[397,6056,994],{"class":410},[397,6058,6059],{"class":819},"cmap",[397,6061,823],{"class":459},[397,6063,1758],{"class":1757},[397,6065,823],{"class":459},[397,6067,5979],{"class":819},[397,6069,460],{"class":459},[397,6071,5630],{"class":463},[397,6073,843],{"class":459},[397,6075,4310],{"class":463},[397,6077,2467],{"class":459},[397,6079,6080],{"class":410}," %",[397,6082,2063],{"class":826},[397,6084,1561],{"class":459},[397,6086,6087],{"class":1101}," s",[397,6089,994],{"class":410},[397,6091,4362],{"class":826},[397,6093,626],{"class":459},[397,6095,6096,6099,6101,6103,6105,6107,6109,6111,6113,6116],{"class":399,"line":588},[397,6097,6098],{"class":1101},"                       edgecolor",[397,6100,994],{"class":410},[397,6102,425],{"class":424},[397,6104,3060],{"class":428},[397,6106,425],{"class":424},[397,6108,555],{"class":459},[397,6110,2958],{"class":1101},[397,6112,994],{"class":410},[397,6114,6115],{"class":826},"0.4",[397,6117,626],{"class":459},[397,6119,6120,6123,6125,6128,6130,6133,6135,6137,6139,6142],{"class":399,"line":605},[397,6121,6122],{"class":1101},"                       alpha",[397,6124,994],{"class":410},[397,6126,6127],{"class":826},"0.35",[397,6129,3660],{"class":410},[397,6131,6132],{"class":826}," 0.65",[397,6134,1225],{"class":410},[397,6136,3427],{"class":819},[397,6138,124],{"class":410},[397,6140,6141],{"class":819}," n_frames",[397,6143,632],{"class":459},[397,6145,6146,6148,6150,6152,6154,6157],{"class":399,"line":629},[397,6147,2777],{"class":414},[397,6149,460],{"class":459},[397,6151,3103],{"class":819},[397,6153,823],{"class":459},[397,6155,6156],{"class":819},"title",[397,6158,632],{"class":459},[397,6160,6161,6163,6165,6168,6170,6172,6175,6177,6179,6181,6183,6186,6188,6190,6193,6195,6197,6199,6201,6204,6206,6209,6211,6213],{"class":399,"line":635},[397,6162,2777],{"class":414},[397,6164,460],{"class":459},[397,6166,6167],{"class":819},"set_xlabel",[397,6169,823],{"class":459},[397,6171,425],{"class":424},[397,6173,6174],{"class":428},"x",[397,6176,425],{"class":424},[397,6178,1580],{"class":459},[397,6180,4316],{"class":414},[397,6182,460],{"class":459},[397,6184,6185],{"class":819},"set_ylabel",[397,6187,823],{"class":459},[397,6189,425],{"class":424},[397,6191,6192],{"class":428},"y",[397,6194,425],{"class":424},[397,6196,1580],{"class":459},[397,6198,4316],{"class":414},[397,6200,460],{"class":459},[397,6202,6203],{"class":819},"grid",[397,6205,823],{"class":459},[397,6207,6208],{"class":1101},"alpha",[397,6210,994],{"class":410},[397,6212,5782],{"class":826},[397,6214,632],{"class":459},[397,6216,6217,6219,6221,6224,6226],{"class":399,"line":657},[397,6218,2777],{"class":414},[397,6220,460],{"class":459},[397,6222,6223],{"class":819},"invert_yaxis",[397,6225,1136],{"class":459},[397,6227,6228],{"class":403},"  # image coordinates: y grows downward\n",[397,6230,6231],{"class":399,"line":673},[397,6232,470],{"emptyLinePlaceholder":469},[397,6234,6235,6237,6239,6241,6243,6245,6247,6249],{"class":399,"line":696},[397,6236,4158],{"class":414},[397,6238,555],{"class":459},[397,6240,2744],{"class":414},[397,6242,994],{"class":410},[397,6244,2749],{"class":414},[397,6246,460],{"class":459},[397,6248,2754],{"class":819},[397,6250,1049],{"class":459},[397,6252,6253,6256,6258,6260],{"class":399,"line":704},[397,6254,6255],{"class":819},"plot_tracks",[397,6257,823],{"class":459},[397,6259,5834],{"class":819},[397,6261,626],{"class":459},[397,6263,6264,6267,6270,6272,6274,6276],{"class":399,"line":709},[397,6265,6266],{"class":424},"            \"",[397,6268,6269],{"class":428},"Migrated appearance tracker (color = track id)",[397,6271,425],{"class":424},[397,6273,555],{"class":459},[397,6275,4198],{"class":819},[397,6277,632],{"class":459},[397,6279,6280,6282,6284,6286],{"class":399,"line":741},[397,6281,835],{"class":414},[397,6283,460],{"class":459},[397,6285,3130],{"class":819},[397,6287,1049],{"class":459},[338,6289,6290],{},[4610,6291],{"alt":393,"src":6292},"\u002F_nb\u002F72f47ab14eedeee8.png",[338,6294,6295],{},"One coherent trajectory per color: the cosine cost re-associates\nevery shuffled detection to the right identity, exactly as the 1.x\ntracker did — but the 2.0 construction is the springboard for\neverything below.",[376,6297,6299],{"id":6298},"why-one-cue-isnt-enough","Why one cue isn't enough",[338,6301,6302,6303,6305],{},"The migrated tracker matches on appearance alone. A pure\n",[348,6304,227],{}," tracker (IoU between boxes, à la SORT) is the classic\nalternative — but it breaks under fast camera motion: when the pan\nbetween frames exceeds the box size, consecutive boxes don't\noverlap, IoU is zero everywhere, and every object spawns a fresh ID\neach frame. We size a pan past the box width to force exactly that.",[388,6307,6309],{"className":390,"code":6308,"language":392,"meta":393,"style":393},"box_w = (seed[\"boxes\"][:, 2] - seed[\"boxes\"][:, 0]).median().item()\nclip_fast = make_clip(seed, pan=(1.5 * box_w, 0.0))  # pan > box width\n\niou_tracker = make_tracker(\n    Pipe(cost=BoxIoU(\"bbox\"), assoc=Associate(Jonker(threshold=0.7))))\n\nn_obj = seed[\"boxes\"].shape[0]\niou_ids = distinct_ids(run_clip(iou_tracker, clip_fast))\napp_ids = distinct_ids(run_clip(appearance_tracker, clip_fast))\nprint(f\"objects in scene:                 {n_obj}\")\nprint(f\"IoU-only ids under a fast pan:    {len(iou_ids)}  (id explosion)\")\nprint(f\"appearance ids under a fast pan:  {len(app_ids)}  (stable)\")\n\n",[371,6310,6311,6365,6404,6408,6419,6464,6468,6495,6521,6544,6566,6595],{"__ignoreMap":393},[397,6312,6313,6316,6318,6320,6322,6324,6326,6328,6330,6333,6335,6337,6339,6341,6343,6345,6347,6349,6351,6353,6356,6359,6361,6363],{"class":399,"line":400},[397,6314,6315],{"class":414},"box_w ",[397,6317,994],{"class":410},[397,6319,859],{"class":459},[397,6321,2455],{"class":414},[397,6323,843],{"class":459},[397,6325,425],{"class":424},[397,6327,1442],{"class":428},[397,6329,425],{"class":424},[397,6331,6332],{"class":459},"][:,",[397,6334,2156],{"class":826},[397,6336,853],{"class":459},[397,6338,5923],{"class":410},[397,6340,2384],{"class":414},[397,6342,843],{"class":459},[397,6344,425],{"class":424},[397,6346,1442],{"class":428},[397,6348,425],{"class":424},[397,6350,6332],{"class":459},[397,6352,2410],{"class":826},[397,6354,6355],{"class":459},"]).",[397,6357,6358],{"class":819},"median",[397,6360,1967],{"class":459},[397,6362,6034],{"class":819},[397,6364,1049],{"class":459},[397,6366,6367,6370,6372,6374,6376,6378,6380,6382,6384,6386,6389,6391,6394,6396,6399,6401],{"class":399,"line":407},[397,6368,6369],{"class":414},"clip_fast ",[397,6371,994],{"class":410},[397,6373,3270],{"class":819},[397,6375,823],{"class":459},[397,6377,2455],{"class":819},[397,6379,555],{"class":459},[397,6381,3293],{"class":1101},[397,6383,994],{"class":410},[397,6385,823],{"class":459},[397,6387,6388],{"class":826},"1.5",[397,6390,1225],{"class":410},[397,6392,6393],{"class":819}," box_w",[397,6395,555],{"class":459},[397,6397,6398],{"class":826}," 0.0",[397,6400,4313],{"class":459},[397,6402,6403],{"class":403},"  # pan > box width\n",[397,6405,6406],{"class":399,"line":473},[397,6407,470],{"emptyLinePlaceholder":469},[397,6409,6410,6413,6415,6417],{"class":399,"line":492},[397,6411,6412],{"class":414},"iou_tracker ",[397,6414,994],{"class":410},[397,6416,5340],{"class":819},[397,6418,1028],{"class":459},[397,6420,6421,6424,6426,6428,6430,6433,6435,6437,6439,6441,6443,6446,6448,6450,6452,6454,6456,6458,6460,6462],{"class":399,"line":509},[397,6422,6423],{"class":819},"    Pipe",[397,6425,823],{"class":459},[397,6427,203],{"class":1101},[397,6429,994],{"class":410},[397,6431,6432],{"class":819},"BoxIoU",[397,6434,823],{"class":459},[397,6436,425],{"class":424},[397,6438,291],{"class":428},[397,6440,425],{"class":424},[397,6442,1561],{"class":459},[397,6444,6445],{"class":1101}," assoc",[397,6447,994],{"class":410},[397,6449,5769],{"class":819},[397,6451,823],{"class":459},[397,6453,4874],{"class":819},[397,6455,823],{"class":459},[397,6457,4879],{"class":1101},[397,6459,994],{"class":410},[397,6461,1235],{"class":826},[397,6463,1630],{"class":459},[397,6465,6466],{"class":399,"line":517},[397,6467,470],{"emptyLinePlaceholder":469},[397,6469,6470,6473,6475,6477,6479,6481,6483,6485,6487,6489,6491,6493],{"class":399,"line":522},[397,6471,6472],{"class":414},"n_obj ",[397,6474,994],{"class":410},[397,6476,2384],{"class":414},[397,6478,843],{"class":459},[397,6480,425],{"class":424},[397,6482,1442],{"class":428},[397,6484,425],{"class":424},[397,6486,2395],{"class":459},[397,6488,2398],{"class":463},[397,6490,843],{"class":459},[397,6492,827],{"class":826},[397,6494,1414],{"class":459},[397,6496,6497,6500,6502,6504,6506,6509,6511,6514,6516,6519],{"class":399,"line":536},[397,6498,6499],{"class":414},"iou_ids ",[397,6501,994],{"class":410},[397,6503,5573],{"class":819},[397,6505,823],{"class":459},[397,6507,6508],{"class":819},"run_clip",[397,6510,823],{"class":459},[397,6512,6513],{"class":819},"iou_tracker",[397,6515,555],{"class":459},[397,6517,6518],{"class":819}," clip_fast",[397,6520,2030],{"class":459},[397,6522,6523,6526,6528,6530,6532,6534,6536,6538,6540,6542],{"class":399,"line":566},[397,6524,6525],{"class":414},"app_ids ",[397,6527,994],{"class":410},[397,6529,5573],{"class":819},[397,6531,823],{"class":459},[397,6533,6508],{"class":819},[397,6535,823],{"class":459},[397,6537,5807],{"class":819},[397,6539,555],{"class":459},[397,6541,6518],{"class":819},[397,6543,2030],{"class":459},[397,6545,6546,6548,6550,6552,6555,6557,6560,6562,6564],{"class":399,"line":588},[397,6547,2603],{"class":1541},[397,6549,823],{"class":459},[397,6551,2501],{"class":924},[397,6553,6554],{"class":428},"\"objects in scene:                 ",[397,6556,2447],{"class":826},[397,6558,6559],{"class":819},"n_obj",[397,6561,2470],{"class":826},[397,6563,425],{"class":428},[397,6565,632],{"class":459},[397,6567,6568,6570,6572,6574,6577,6579,6581,6583,6586,6588,6590,6593],{"class":399,"line":605},[397,6569,2603],{"class":1541},[397,6571,823],{"class":459},[397,6573,2501],{"class":924},[397,6575,6576],{"class":428},"\"IoU-only ids under a fast pan:    ",[397,6578,2447],{"class":826},[397,6580,2450],{"class":1541},[397,6582,823],{"class":459},[397,6584,6585],{"class":819},"iou_ids",[397,6587,1580],{"class":459},[397,6589,2470],{"class":826},[397,6591,6592],{"class":428},"  (id explosion)\"",[397,6594,632],{"class":459},[397,6596,6597,6599,6601,6603,6606,6608,6610,6612,6615,6617,6619,6622],{"class":399,"line":629},[397,6598,2603],{"class":1541},[397,6600,823],{"class":459},[397,6602,2501],{"class":924},[397,6604,6605],{"class":428},"\"appearance ids under a fast pan:  ",[397,6607,2447],{"class":826},[397,6609,2450],{"class":1541},[397,6611,823],{"class":459},[397,6613,6614],{"class":819},"app_ids",[397,6616,1580],{"class":459},[397,6618,2470],{"class":826},[397,6620,6621],{"class":428},"  (stable)\"",[397,6623,632],{"class":459},[436,6625],{"data":6626,"kind":439},"b2JqZWN0cyBpbiBzY2VuZTogICAgICAgICAgICAgICAgIDMKSW9VLW9ubHkgaWRzIHVuZGVyIGEgZmFzdCBwYW46ICAgIDE4ICAoaWQgZXhwbG9zaW9uKQphcHBlYXJhbmNlIGlkcyB1bmRlciBhIGZhc3QgcGFuOiAgMyAgKHN0YWJsZSkK",[338,6628,6629,6630,6633],{},"Appearance survives the pan; IoU collapses. But appearance alone is\nfragile the other way — two similar-looking objects that cross\npaths can swap IDs, where IoU would have held them apart. Real\ntrackers want ",[348,6631,6632],{},"both"," cues. In 1.x, combining them meant a bespoke\ncost subclass or an awkward multi-stage hack. 2.0 makes it a\none-liner — two ways.",[376,6635,6637],{"id":6636},"new-in-20-1-parallel-cost-fusion","New in 2.0 #1 — parallel cost fusion",[338,6639,6640,6643,6644,6647,6648,6651,6652,460],{},[371,6641,6642],{},"Parallel([...], merge=...)"," runs several cost producers on the\nsame snapshot and merges their matrices. ",[371,6645,6646],{},"WeightedSum"," lets you dial\nthe appearance\u002Fmotion balance. The whole fused cost is still a\nsingle ",[371,6649,6650],{},"CostProducer",", so it drops straight into a ",[371,6653,4998],{},[388,6655,6657],{"className":390,"code":6656,"language":392,"meta":393,"style":393},"fused_tracker = make_tracker(\n    Pipe(\n        cost=Parallel(\n            children=[Cosine(\"reid\"), BoxIoU(\"bbox\")],\n            merge=WeightedSum([1.0, 0.5]),   # appearance + 0.5 * motion\n        ),\n        assoc=Associate(Jonker(threshold=1.0)),\n    )\n)\nfused_results = run_clip(fused_tracker, clip_fast)\nprint(f\"parallel fusion (appearance + IoU) -> ids: \"\n      f\"{distinct_ids(fused_results)}\")\nprint(\"Stable under the same fast pan that broke IoU-only — \"\n      \"appearance carries it, IoU sharpens it when boxes do overlap.\")\n\n",[371,6658,6659,6670,6676,6688,6722,6747,6752,6776,6780,6784,6804,6815,6839,6852],{"__ignoreMap":393},[397,6660,6661,6664,6666,6668],{"class":399,"line":400},[397,6662,6663],{"class":414},"fused_tracker ",[397,6665,994],{"class":410},[397,6667,5340],{"class":819},[397,6669,1028],{"class":459},[397,6671,6672,6674],{"class":399,"line":407},[397,6673,6423],{"class":819},[397,6675,1028],{"class":459},[397,6677,6678,6681,6683,6686],{"class":399,"line":473},[397,6679,6680],{"class":1101},"        cost",[397,6682,994],{"class":410},[397,6684,6685],{"class":819},"Parallel",[397,6687,1028],{"class":459},[397,6689,6690,6693,6695,6697,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717,6719],{"class":399,"line":492},[397,6691,6692],{"class":1101},"            children",[397,6694,994],{"class":410},[397,6696,843],{"class":459},[397,6698,4651],{"class":819},[397,6700,823],{"class":459},[397,6702,425],{"class":424},[397,6704,914],{"class":428},[397,6706,425],{"class":424},[397,6708,1561],{"class":459},[397,6710,580],{"class":819},[397,6712,823],{"class":459},[397,6714,425],{"class":424},[397,6716,291],{"class":428},[397,6718,425],{"class":424},[397,6720,6721],{"class":459},")],\n",[397,6723,6724,6727,6729,6731,6733,6736,6738,6741,6744],{"class":399,"line":509},[397,6725,6726],{"class":1101},"            merge",[397,6728,994],{"class":410},[397,6730,6646],{"class":819},[397,6732,2145],{"class":459},[397,6734,6735],{"class":826},"1.0",[397,6737,555],{"class":459},[397,6739,6740],{"class":826}," 0.5",[397,6742,6743],{"class":459},"]),",[397,6745,6746],{"class":403},"   # appearance + 0.5 * motion\n",[397,6748,6749],{"class":399,"line":517},[397,6750,6751],{"class":459},"        ),\n",[397,6753,6754,6757,6759,6761,6763,6765,6767,6769,6771,6773],{"class":399,"line":522},[397,6755,6756],{"class":1101},"        assoc",[397,6758,994],{"class":410},[397,6760,5769],{"class":819},[397,6762,823],{"class":459},[397,6764,4874],{"class":819},[397,6766,823],{"class":459},[397,6768,4879],{"class":1101},[397,6770,994],{"class":410},[397,6772,6735],{"class":826},[397,6774,6775],{"class":459},")),\n",[397,6777,6778],{"class":399,"line":536},[397,6779,982],{"class":459},[397,6781,6782],{"class":399,"line":566},[397,6783,632],{"class":459},[397,6785,6786,6789,6791,6793,6795,6798,6800,6802],{"class":399,"line":588},[397,6787,6788],{"class":414},"fused_results ",[397,6790,994],{"class":410},[397,6792,5449],{"class":819},[397,6794,823],{"class":459},[397,6796,6797],{"class":819},"fused_tracker",[397,6799,555],{"class":459},[397,6801,6518],{"class":819},[397,6803,632],{"class":459},[397,6805,6806,6808,6810,6812],{"class":399,"line":605},[397,6807,2603],{"class":1541},[397,6809,823],{"class":459},[397,6811,2501],{"class":924},[397,6813,6814],{"class":428},"\"parallel fusion (appearance + IoU) -> ids: \"\n",[397,6816,6817,6820,6822,6824,6826,6828,6831,6833,6835,6837],{"class":399,"line":629},[397,6818,6819],{"class":924},"      f",[397,6821,425],{"class":428},[397,6823,2447],{"class":826},[397,6825,5829],{"class":819},[397,6827,823],{"class":459},[397,6829,6830],{"class":819},"fused_results",[397,6832,1580],{"class":459},[397,6834,2470],{"class":826},[397,6836,425],{"class":428},[397,6838,632],{"class":459},[397,6840,6841,6843,6845,6847,6850],{"class":399,"line":635},[397,6842,2603],{"class":1541},[397,6844,823],{"class":459},[397,6846,425],{"class":424},[397,6848,6849],{"class":428},"Stable under the same fast pan that broke IoU-only — ",[397,6851,1038],{"class":424},[397,6853,6854,6857,6860,6862],{"class":399,"line":657},[397,6855,6856],{"class":424},"      \"",[397,6858,6859],{"class":428},"appearance carries it, IoU sharpens it when boxes do overlap.",[397,6861,425],{"class":424},[397,6863,632],{"class":459},[436,6865],{"data":6866,"kind":439},"cGFyYWxsZWwgZnVzaW9uIChhcHBlYXJhbmNlICsgSW9VKSAtPiBpZHM6IFsxLCAyLCAzXQpTdGFibGUgdW5kZXIgdGhlIHNhbWUgZmFzdCBwYW4gdGhhdCBicm9rZSBJb1Utb25seSDigJQgYXBwZWFyYW5jZSBjYXJyaWVzIGl0LCBJb1Ugc2hhcnBlbnMgaXQgd2hlbiBib3hlcyBkbyBvdmVybGFwLgo=",[376,6868,6870],{"id":6869},"new-in-20-2-cascaded-matching-bytetrack-style","New in 2.0 #2 — cascaded matching (ByteTrack-style)",[338,6872,6873,6876,6877,6880],{},[371,6874,6875],{},"Sequential([stage1, stage2, ...])"," over match-producing stages\nchains ",[3255,6878,6879],{},"residuals",": stage 1 matches what it can, and only the\nleftover tracklets and detections flow into stage 2. A strict\nappearance pass followed by an IoU fallback is the canonical\ntwo-stage cascade — and it's just a list.",[388,6882,6884],{"className":390,"code":6883,"language":392,"meta":393,"style":393},"cascaded_tracker = make_tracker(\n    Sequential([\n        # Stage 1: confident appearance matches only.\n        Pipe(cost=Cosine(\"reid\"),\n             assoc=Associate(Jonker(threshold=0.2))),\n        # Stage 2: IoU fallback on whoever is left.\n        Pipe(cost=BoxIoU(\"bbox\"),\n             assoc=Associate(Jonker(threshold=0.7))),\n    ])\n)\ncascaded_results = run_clip(cascaded_tracker, clip)\nprint(f\"cascaded (appearance -> IoU) -> ids: \"\n      f\"{distinct_ids(cascaded_results)}\")\n\n",[371,6885,6886,6897,6904,6909,6932,6956,6961,6983,7005,7010,7014,7034,7045],{"__ignoreMap":393},[397,6887,6888,6891,6893,6895],{"class":399,"line":400},[397,6889,6890],{"class":414},"cascaded_tracker ",[397,6892,994],{"class":410},[397,6894,5340],{"class":819},[397,6896,1028],{"class":459},[397,6898,6899,6902],{"class":399,"line":407},[397,6900,6901],{"class":819},"    Sequential",[397,6903,5685],{"class":459},[397,6905,6906],{"class":399,"line":473},[397,6907,6908],{"class":403},"        # Stage 1: confident appearance matches only.\n",[397,6910,6911,6914,6916,6918,6920,6922,6924,6926,6928,6930],{"class":399,"line":492},[397,6912,6913],{"class":819},"        Pipe",[397,6915,823],{"class":459},[397,6917,203],{"class":1101},[397,6919,994],{"class":410},[397,6921,4651],{"class":819},[397,6923,823],{"class":459},[397,6925,425],{"class":424},[397,6927,914],{"class":428},[397,6929,425],{"class":424},[397,6931,3503],{"class":459},[397,6933,6934,6937,6939,6941,6943,6945,6947,6949,6951,6954],{"class":399,"line":509},[397,6935,6936],{"class":1101},"             assoc",[397,6938,994],{"class":410},[397,6940,5769],{"class":819},[397,6942,823],{"class":459},[397,6944,4874],{"class":819},[397,6946,823],{"class":459},[397,6948,4879],{"class":1101},[397,6950,994],{"class":410},[397,6952,6953],{"class":826},"0.2",[397,6955,5785],{"class":459},[397,6957,6958],{"class":399,"line":517},[397,6959,6960],{"class":403},"        # Stage 2: IoU fallback on whoever is left.\n",[397,6962,6963,6965,6967,6969,6971,6973,6975,6977,6979,6981],{"class":399,"line":522},[397,6964,6913],{"class":819},[397,6966,823],{"class":459},[397,6968,203],{"class":1101},[397,6970,994],{"class":410},[397,6972,6432],{"class":819},[397,6974,823],{"class":459},[397,6976,425],{"class":424},[397,6978,291],{"class":428},[397,6980,425],{"class":424},[397,6982,3503],{"class":459},[397,6984,6985,6987,6989,6991,6993,6995,6997,6999,7001,7003],{"class":399,"line":536},[397,6986,6936],{"class":1101},[397,6988,994],{"class":410},[397,6990,5769],{"class":819},[397,6992,823],{"class":459},[397,6994,4874],{"class":819},[397,6996,823],{"class":459},[397,6998,4879],{"class":1101},[397,7000,994],{"class":410},[397,7002,1235],{"class":826},[397,7004,5785],{"class":459},[397,7006,7007],{"class":399,"line":566},[397,7008,7009],{"class":459},"    ])\n",[397,7011,7012],{"class":399,"line":588},[397,7013,632],{"class":459},[397,7015,7016,7019,7021,7023,7025,7028,7030,7032],{"class":399,"line":605},[397,7017,7018],{"class":414},"cascaded_results ",[397,7020,994],{"class":410},[397,7022,5449],{"class":819},[397,7024,823],{"class":459},[397,7026,7027],{"class":819},"cascaded_tracker",[397,7029,555],{"class":459},[397,7031,5458],{"class":819},[397,7033,632],{"class":459},[397,7035,7036,7038,7040,7042],{"class":399,"line":629},[397,7037,2603],{"class":1541},[397,7039,823],{"class":459},[397,7041,2501],{"class":924},[397,7043,7044],{"class":428},"\"cascaded (appearance -> IoU) -> ids: \"\n",[397,7046,7047,7049,7051,7053,7055,7057,7060,7062,7064,7066],{"class":399,"line":635},[397,7048,6819],{"class":924},[397,7050,425],{"class":428},[397,7052,2447],{"class":826},[397,7054,5829],{"class":819},[397,7056,823],{"class":459},[397,7058,7059],{"class":819},"cascaded_results",[397,7061,1580],{"class":459},[397,7063,2470],{"class":826},[397,7065,425],{"class":428},[397,7067,632],{"class":459},[436,7069],{"data":7070,"kind":439},"Y2FzY2FkZWQgKGFwcGVhcmFuY2UgLT4gSW9VKSAtPiBpZHM6IFsxLCAyLCAzXQo=",[376,7072,7074],{"id":7073},"new-in-20-3-lifecycle-gating","New in 2.0 #3 — lifecycle & gating",[338,7076,7077,7078,2533,7080,7083,7084,7087,7088,7090,7091,7094,7095,7098,7099,7102],{},"The 1.x embedding tracker had no notion of track birth or death —\nevery detection was a track, immediately. 2.0 adds a first-class\n",[348,7079,239],{},[371,7081,7082],{},"StandardLifecycle"," runs the\n",[371,7085,7086],{},"Tentative → Active → Lost → Removed"," state machine, and a\n",[348,7089,253],{}," policy (",[371,7092,7093],{},"ConfirmedOnly",") hides flickering unconfirmed\ntracks from the caller. Below, three frames of detections go missing\n(an occlusion); a confirmed track goes ",[371,7096,7097],{},"Lost",", then re-acquires its\noriginal ID when it reappears — within the ",[371,7100,7101],{},"allow_reid"," window.",[388,7104,7106],{"className":390,"code":7105,"language":392,"meta":393,"style":393},"clip_gap = make_clip(seed, n_frames=10, pan=(4.0, 1.0), drop={4, 5, 6})\nlifecycle_tracker = make_tracker(\n    Gated(gate=ClassGate(\"category\"),\n          then=Pipe(cost=Cosine(\"reid\"),\n                    assoc=Associate(Jonker(threshold=0.3)))),\n    lifecycle=StandardLifecycle(min_hits=2, max_age=2, allow_reid=4),\n    visibility=ConfirmedOnly(),\n)\nms = ut.MultiStream(lifecycle_tracker)\nnames = [\"Tentative\", \"Active\", \"Lost\", \"Removed\"]\nrows = []\nfor k in range(len(clip_gap)):\n    res = ms.step(0, clip_gap[k], FrameContext.make(k, fps=15.0))\n    snap = res.snapshot\n    counts = [int((snap.status == s).sum()) for s in range(4)]\n    rows.append(counts)\n    present = clip_gap[k].batch_size[0] > 0\n    tally = \", \".join(f\"{names[s]}={counts[s]}\" for s in range(4)\n                      if counts[s])\n    print(f\"frame {k:2d}  {'det ' if present else 'MISS'}  {tally}\")\n\n",[371,7107,7108,7167,7178,7200,7227,7251,7289,7300,7304,7324,7368,7377,7399,7448,7462,7508,7524,7553,7620,7634],{"__ignoreMap":393},[397,7109,7110,7113,7115,7117,7119,7121,7123,7125,7127,7129,7131,7133,7135,7137,7140,7142,7145,7147,7149,7151,7153,7155,7157,7159,7161,7164],{"class":399,"line":400},[397,7111,7112],{"class":414},"clip_gap ",[397,7114,994],{"class":410},[397,7116,3270],{"class":819},[397,7118,823],{"class":459},[397,7120,2455],{"class":819},[397,7122,555],{"class":459},[397,7124,6141],{"class":1101},[397,7126,994],{"class":410},[397,7128,2057],{"class":826},[397,7130,555],{"class":459},[397,7132,3293],{"class":1101},[397,7134,994],{"class":410},[397,7136,823],{"class":459},[397,7138,7139],{"class":826},"4.0",[397,7141,555],{"class":459},[397,7143,7144],{"class":826}," 1.0",[397,7146,1561],{"class":459},[397,7148,3310],{"class":1101},[397,7150,994],{"class":410},[397,7152,2447],{"class":459},[397,7154,5213],{"class":826},[397,7156,555],{"class":459},[397,7158,2770],{"class":826},[397,7160,555],{"class":459},[397,7162,7163],{"class":826}," 6",[397,7165,7166],{"class":459},"})\n",[397,7168,7169,7172,7174,7176],{"class":399,"line":407},[397,7170,7171],{"class":414},"lifecycle_tracker ",[397,7173,994],{"class":410},[397,7175,5340],{"class":819},[397,7177,1028],{"class":459},[397,7179,7180,7182,7184,7186,7188,7190,7192,7194,7196,7198],{"class":399,"line":473},[397,7181,5671],{"class":819},[397,7183,823],{"class":459},[397,7185,212],{"class":1101},[397,7187,994],{"class":410},[397,7189,4983],{"class":819},[397,7191,823],{"class":459},[397,7193,425],{"class":424},[397,7195,907],{"class":428},[397,7197,425],{"class":424},[397,7199,3503],{"class":459},[397,7201,7202,7205,7207,7209,7211,7213,7215,7217,7219,7221,7223,7225],{"class":399,"line":492},[397,7203,7204],{"class":1101},"          then",[397,7206,994],{"class":410},[397,7208,4998],{"class":819},[397,7210,823],{"class":459},[397,7212,203],{"class":1101},[397,7214,994],{"class":410},[397,7216,4651],{"class":819},[397,7218,823],{"class":459},[397,7220,425],{"class":424},[397,7222,914],{"class":428},[397,7224,425],{"class":424},[397,7226,3503],{"class":459},[397,7228,7229,7232,7234,7236,7238,7240,7242,7244,7246,7248],{"class":399,"line":509},[397,7230,7231],{"class":1101},"                    assoc",[397,7233,994],{"class":410},[397,7235,5769],{"class":819},[397,7237,823],{"class":459},[397,7239,4874],{"class":819},[397,7241,823],{"class":459},[397,7243,4879],{"class":1101},[397,7245,994],{"class":410},[397,7247,5782],{"class":826},[397,7249,7250],{"class":459},")))),\n",[397,7252,7253,7256,7258,7260,7262,7265,7267,7269,7271,7274,7276,7278,7280,7283,7285,7287],{"class":399,"line":517},[397,7254,7255],{"class":1101},"    lifecycle",[397,7257,994],{"class":410},[397,7259,7082],{"class":819},[397,7261,823],{"class":459},[397,7263,7264],{"class":1101},"min_hits",[397,7266,994],{"class":410},[397,7268,2690],{"class":826},[397,7270,555],{"class":459},[397,7272,7273],{"class":1101}," max_age",[397,7275,994],{"class":410},[397,7277,2690],{"class":826},[397,7279,555],{"class":459},[397,7281,7282],{"class":1101}," allow_reid",[397,7284,994],{"class":410},[397,7286,5213],{"class":826},[397,7288,3503],{"class":459},[397,7290,7291,7294,7296,7298],{"class":399,"line":522},[397,7292,7293],{"class":1101},"    visibility",[397,7295,994],{"class":410},[397,7297,7093],{"class":819},[397,7299,1827],{"class":459},[397,7301,7302],{"class":399,"line":536},[397,7303,632],{"class":459},[397,7305,7306,7309,7311,7313,7315,7317,7319,7322],{"class":399,"line":566},[397,7307,7308],{"class":414},"ms ",[397,7310,994],{"class":410},[397,7312,4642],{"class":414},[397,7314,460],{"class":459},[397,7316,5474],{"class":819},[397,7318,823],{"class":459},[397,7320,7321],{"class":819},"lifecycle_tracker",[397,7323,632],{"class":459},[397,7325,7326,7329,7331,7333,7335,7338,7340,7342,7344,7347,7349,7351,7353,7355,7357,7359,7361,7364,7366],{"class":399,"line":588},[397,7327,7328],{"class":414},"names ",[397,7330,994],{"class":410},[397,7332,1739],{"class":459},[397,7334,425],{"class":424},[397,7336,7337],{"class":428},"Tentative",[397,7339,425],{"class":424},[397,7341,555],{"class":459},[397,7343,1811],{"class":424},[397,7345,7346],{"class":428},"Active",[397,7348,425],{"class":424},[397,7350,555],{"class":459},[397,7352,1811],{"class":424},[397,7354,7097],{"class":428},[397,7356,425],{"class":424},[397,7358,555],{"class":459},[397,7360,1811],{"class":424},[397,7362,7363],{"class":428},"Removed",[397,7365,425],{"class":424},[397,7367,1414],{"class":459},[397,7369,7370,7373,7375],{"class":399,"line":605},[397,7371,7372],{"class":414},"rows ",[397,7374,994],{"class":410},[397,7376,1489],{"class":459},[397,7378,7379,7381,7383,7385,7387,7389,7391,7393,7396],{"class":399,"line":629},[397,7380,4423],{"class":452},[397,7382,3427],{"class":414},[397,7384,1516],{"class":452},[397,7386,3432],{"class":1541},[397,7388,823],{"class":459},[397,7390,2450],{"class":1541},[397,7392,823],{"class":459},[397,7394,7395],{"class":819},"clip_gap",[397,7397,7398],{"class":459},")):\n",[397,7400,7401,7404,7406,7409,7411,7413,7415,7417,7419,7422,7424,7426,7428,7430,7432,7434,7436,7438,7440,7442,7444,7446],{"class":399,"line":635},[397,7402,7403],{"class":414},"    res ",[397,7405,994],{"class":410},[397,7407,7408],{"class":414}," ms",[397,7410,460],{"class":459},[397,7412,5494],{"class":819},[397,7414,823],{"class":459},[397,7416,827],{"class":826},[397,7418,555],{"class":459},[397,7420,7421],{"class":819}," clip_gap",[397,7423,843],{"class":459},[397,7425,5517],{"class":819},[397,7427,1447],{"class":459},[397,7429,613],{"class":819},[397,7431,460],{"class":459},[397,7433,5512],{"class":819},[397,7435,823],{"class":459},[397,7437,5517],{"class":819},[397,7439,555],{"class":459},[397,7441,5522],{"class":1101},[397,7443,994],{"class":410},[397,7445,3300],{"class":826},[397,7447,2030],{"class":459},[397,7449,7450,7453,7455,7458,7460],{"class":399,"line":657},[397,7451,7452],{"class":414},"    snap ",[397,7454,994],{"class":410},[397,7456,7457],{"class":414}," res",[397,7459,460],{"class":459},[397,7461,5962],{"class":463},[397,7463,7464,7467,7469,7471,7473,7475,7477,7479,7481,7483,7485,7487,7490,7493,7495,7498,7500,7502,7504,7506],{"class":399,"line":673},[397,7465,7466],{"class":414},"    counts ",[397,7468,994],{"class":410},[397,7470,1739],{"class":459},[397,7472,1758],{"class":1757},[397,7474,1611],{"class":459},[397,7476,5979],{"class":819},[397,7478,460],{"class":459},[397,7480,250],{"class":463},[397,7482,2407],{"class":410},[397,7484,6087],{"class":819},[397,7486,2525],{"class":459},[397,7488,7489],{"class":819},"sum",[397,7491,7492],{"class":459},"())",[397,7494,1769],{"class":452},[397,7496,7497],{"class":414}," s ",[397,7499,1516],{"class":452},[397,7501,3432],{"class":1541},[397,7503,823],{"class":459},[397,7505,5213],{"class":826},[397,7507,5562],{"class":459},[397,7509,7510,7513,7515,7517,7519,7522],{"class":399,"line":696},[397,7511,7512],{"class":414},"    rows",[397,7514,460],{"class":459},[397,7516,1594],{"class":819},[397,7518,823],{"class":459},[397,7520,7521],{"class":819},"counts",[397,7523,632],{"class":459},[397,7525,7526,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7550],{"class":399,"line":704},[397,7527,7528],{"class":414},"    present ",[397,7530,994],{"class":410},[397,7532,7421],{"class":414},[397,7534,843],{"class":459},[397,7536,5517],{"class":414},[397,7538,2395],{"class":459},[397,7540,5984],{"class":463},[397,7542,843],{"class":459},[397,7544,827],{"class":826},[397,7546,853],{"class":459},[397,7548,7549],{"class":410}," >",[397,7551,7552],{"class":826}," 0\n",[397,7554,7555,7558,7560,7562,7564,7566,7568,7571,7573,7575,7577,7579,7581,7583,7586,7588,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610,7612,7614,7616,7618],{"class":399,"line":709},[397,7556,7557],{"class":414},"    tally ",[397,7559,994],{"class":410},[397,7561,1811],{"class":424},[397,7563,904],{"class":428},[397,7565,425],{"class":424},[397,7567,460],{"class":459},[397,7569,7570],{"class":819},"join",[397,7572,823],{"class":459},[397,7574,2501],{"class":924},[397,7576,425],{"class":428},[397,7578,2447],{"class":826},[397,7580,1869],{"class":819},[397,7582,843],{"class":459},[397,7584,7585],{"class":819},"s",[397,7587,853],{"class":459},[397,7589,2470],{"class":826},[397,7591,994],{"class":428},[397,7593,2447],{"class":826},[397,7595,7521],{"class":819},[397,7597,843],{"class":459},[397,7599,7585],{"class":819},[397,7601,853],{"class":459},[397,7603,2470],{"class":826},[397,7605,425],{"class":428},[397,7607,1769],{"class":452},[397,7609,7497],{"class":819},[397,7611,1516],{"class":452},[397,7613,3432],{"class":1541},[397,7615,823],{"class":459},[397,7617,5213],{"class":826},[397,7619,632],{"class":459},[397,7621,7622,7625,7628,7630,7632],{"class":399,"line":741},[397,7623,7624],{"class":452},"                      if",[397,7626,7627],{"class":819}," counts",[397,7629,843],{"class":459},[397,7631,7585],{"class":819},[397,7633,4291],{"class":459},[397,7635,7636,7638,7640,7642,7645,7647,7649,7652,7654,7657,7659,7662,7664,7667,7670,7672,7675,7678,7680,7682,7684,7687,7689,7691],{"class":399,"line":762},[397,7637,2496],{"class":1541},[397,7639,823],{"class":459},[397,7641,2501],{"class":924},[397,7643,7644],{"class":428},"\"frame ",[397,7646,2447],{"class":826},[397,7648,5517],{"class":819},[397,7650,7651],{"class":924},":2d",[397,7653,2470],{"class":826},[397,7655,7656],{"class":826},"  {",[397,7658,2460],{"class":424},[397,7660,7661],{"class":428},"det ",[397,7663,2460],{"class":424},[397,7665,7666],{"class":452}," if",[397,7668,7669],{"class":819}," present ",[397,7671,1705],{"class":452},[397,7673,7674],{"class":424}," '",[397,7676,7677],{"class":428},"MISS",[397,7679,2460],{"class":424},[397,7681,2470],{"class":826},[397,7683,7656],{"class":826},[397,7685,7686],{"class":819},"tally",[397,7688,2470],{"class":826},[397,7690,425],{"class":428},[397,7692,632],{"class":459},[436,7694],{"data":7695,"kind":439},"ZnJhbWUgIDAgIGRldCAgIFRlbnRhdGl2ZT0zCmZyYW1lICAxICBkZXQgICBBY3RpdmU9MwpmcmFtZSAgMiAgZGV0ICAgQWN0aXZlPTMKZnJhbWUgIDMgIGRldCAgIEFjdGl2ZT0zCmZyYW1lICA0ICBNSVNTICBBY3RpdmU9MwpmcmFtZSAgNSAgTUlTUyAgQWN0aXZlPTMKZnJhbWUgIDYgIE1JU1MgIExvc3Q9MwpmcmFtZSAgNyAgZGV0ICAgQWN0aXZlPTMKZnJhbWUgIDggIGRldCAgIEFjdGl2ZT0zCmZyYW1lICA5ICBkZXQgICBBY3RpdmU9Mwo=",[388,7697,7699],{"className":390,"code":7698,"language":392,"meta":393,"style":393},"rows_t = torch.tensor(rows)\nfig, ax = plt.subplots(figsize=(8, 3))\ncolors = [\"#ffcc66\", \"#66cc66\", \"#aabbff\", \"#cccccc\"]\nbottom = torch.zeros(len(rows))\nfor s in range(4):\n    ax.bar(range(len(rows)), rows_t[:, s].numpy(), bottom=bottom.numpy(),\n           color=colors[s], label=names[s], edgecolor=\"white\")\n    bottom = bottom + rows_t[:, s]\nfor k in range(len(clip_gap)):\n    if clip_gap[k].batch_size[0] == 0:\n        ax.text(k, -0.4, \"miss\", ha=\"center\", color=\"#aa0000\", fontsize=7)\nax.set_xlabel(\"frame\"); ax.set_ylabel(\"tracklets\")\nax.set_title(\"Lifecycle through a 3-frame occlusion \"\n             \"(min_hits=2, max_age=2, allow_reid=4)\")\nax.legend(fontsize=8, ncol=4, loc=\"upper center\")\nplt.tight_layout(); plt.show()\n\n",[371,7700,7701,7721,7753,7798,7821,7837,7887,7928,7948,7968,7994,8056,8090,8107,8119,8162],{"__ignoreMap":393},[397,7702,7703,7706,7708,7710,7712,7714,7716,7719],{"class":399,"line":400},[397,7704,7705],{"class":414},"rows_t ",[397,7707,994],{"class":410},[397,7709,1123],{"class":414},[397,7711,460],{"class":459},[397,7713,1338],{"class":819},[397,7715,823],{"class":459},[397,7717,7718],{"class":819},"rows",[397,7720,632],{"class":459},[397,7722,7723,7725,7727,7729,7731,7733,7735,7737,7739,7741,7743,7745,7747,7749,7751],{"class":399,"line":407},[397,7724,4158],{"class":414},[397,7726,555],{"class":459},[397,7728,2744],{"class":414},[397,7730,994],{"class":410},[397,7732,2749],{"class":414},[397,7734,460],{"class":459},[397,7736,2754],{"class":819},[397,7738,823],{"class":459},[397,7740,2759],{"class":1101},[397,7742,994],{"class":410},[397,7744,823],{"class":459},[397,7746,3288],{"class":826},[397,7748,555],{"class":459},[397,7750,3736],{"class":826},[397,7752,2030],{"class":459},[397,7754,7755,7758,7760,7762,7764,7767,7769,7771,7773,7776,7778,7780,7782,7785,7787,7789,7791,7794,7796],{"class":399,"line":473},[397,7756,7757],{"class":414},"colors ",[397,7759,994],{"class":410},[397,7761,1739],{"class":459},[397,7763,425],{"class":424},[397,7765,7766],{"class":428},"#ffcc66",[397,7768,425],{"class":424},[397,7770,555],{"class":459},[397,7772,1811],{"class":424},[397,7774,7775],{"class":428},"#66cc66",[397,7777,425],{"class":424},[397,7779,555],{"class":459},[397,7781,1811],{"class":424},[397,7783,7784],{"class":428},"#aabbff",[397,7786,425],{"class":424},[397,7788,555],{"class":459},[397,7790,1811],{"class":424},[397,7792,7793],{"class":428},"#cccccc",[397,7795,425],{"class":424},[397,7797,1414],{"class":459},[397,7799,7800,7803,7805,7807,7809,7811,7813,7815,7817,7819],{"class":399,"line":492},[397,7801,7802],{"class":414},"bottom ",[397,7804,994],{"class":410},[397,7806,1123],{"class":414},[397,7808,460],{"class":459},[397,7810,1712],{"class":819},[397,7812,823],{"class":459},[397,7814,2450],{"class":1541},[397,7816,823],{"class":459},[397,7818,7718],{"class":819},[397,7820,2030],{"class":459},[397,7822,7823,7825,7827,7829,7831,7833,7835],{"class":399,"line":509},[397,7824,4423],{"class":452},[397,7826,7497],{"class":414},[397,7828,1516],{"class":452},[397,7830,3432],{"class":1541},[397,7832,823],{"class":459},[397,7834,5213],{"class":826},[397,7836,1238],{"class":459},[397,7838,7839,7841,7843,7846,7848,7850,7852,7854,7856,7858,7860,7863,7865,7867,7869,7871,7873,7876,7878,7881,7883,7885],{"class":399,"line":517},[397,7840,2777],{"class":414},[397,7842,460],{"class":459},[397,7844,7845],{"class":819},"bar",[397,7847,823],{"class":459},[397,7849,4305],{"class":1541},[397,7851,823],{"class":459},[397,7853,2450],{"class":1541},[397,7855,823],{"class":459},[397,7857,7718],{"class":819},[397,7859,1682],{"class":459},[397,7861,7862],{"class":819}," rows_t",[397,7864,3693],{"class":459},[397,7866,6087],{"class":819},[397,7868,2395],{"class":459},[397,7870,4212],{"class":819},[397,7872,1808],{"class":459},[397,7874,7875],{"class":1101}," bottom",[397,7877,994],{"class":410},[397,7879,7880],{"class":819},"bottom",[397,7882,460],{"class":459},[397,7884,4212],{"class":819},[397,7886,1827],{"class":459},[397,7888,7889,7892,7894,7897,7899,7901,7903,7906,7908,7910,7912,7914,7916,7918,7920,7922,7924,7926],{"class":399,"line":522},[397,7890,7891],{"class":1101},"           color",[397,7893,994],{"class":410},[397,7895,7896],{"class":819},"colors",[397,7898,843],{"class":459},[397,7900,7585],{"class":819},[397,7902,1447],{"class":459},[397,7904,7905],{"class":1101}," label",[397,7907,994],{"class":410},[397,7909,1869],{"class":819},[397,7911,843],{"class":459},[397,7913,7585],{"class":819},[397,7915,1447],{"class":459},[397,7917,2944],{"class":1101},[397,7919,994],{"class":410},[397,7921,425],{"class":424},[397,7923,4539],{"class":428},[397,7925,425],{"class":424},[397,7927,632],{"class":459},[397,7929,7930,7933,7935,7938,7940,7942,7944,7946],{"class":399,"line":536},[397,7931,7932],{"class":414},"    bottom ",[397,7934,994],{"class":410},[397,7936,7937],{"class":414}," bottom ",[397,7939,1555],{"class":410},[397,7941,7862],{"class":414},[397,7943,3693],{"class":459},[397,7945,6087],{"class":414},[397,7947,1414],{"class":459},[397,7949,7950,7952,7954,7956,7958,7960,7962,7964,7966],{"class":399,"line":566},[397,7951,4423],{"class":452},[397,7953,3427],{"class":414},[397,7955,1516],{"class":452},[397,7957,3432],{"class":1541},[397,7959,823],{"class":459},[397,7961,2450],{"class":1541},[397,7963,823],{"class":459},[397,7965,7395],{"class":819},[397,7967,7398],{"class":459},[397,7969,7970,7972,7974,7976,7978,7980,7982,7984,7986,7988,7990,7992],{"class":399,"line":588},[397,7971,2381],{"class":452},[397,7973,7421],{"class":414},[397,7975,843],{"class":459},[397,7977,5517],{"class":414},[397,7979,2395],{"class":459},[397,7981,5984],{"class":463},[397,7983,843],{"class":459},[397,7985,827],{"class":826},[397,7987,853],{"class":459},[397,7989,2407],{"class":410},[397,7991,2410],{"class":826},[397,7993,2282],{"class":459},[397,7995,7996,7998,8000,8002,8004,8006,8008,8010,8012,8014,8016,8019,8021,8023,8025,8027,8029,8031,8033,8035,8037,8039,8041,8044,8046,8048,8050,8052,8054],{"class":399,"line":605},[397,7997,2882],{"class":414},[397,7999,460],{"class":459},[397,8001,2973],{"class":819},[397,8003,823],{"class":459},[397,8005,5517],{"class":819},[397,8007,555],{"class":459},[397,8009,5923],{"class":410},[397,8011,6115],{"class":826},[397,8013,555],{"class":459},[397,8015,1811],{"class":424},[397,8017,8018],{"class":428},"miss",[397,8020,425],{"class":424},[397,8022,555],{"class":459},[397,8024,4367],{"class":1101},[397,8026,994],{"class":410},[397,8028,425],{"class":424},[397,8030,4510],{"class":428},[397,8032,425],{"class":424},[397,8034,555],{"class":459},[397,8036,3016],{"class":1101},[397,8038,994],{"class":410},[397,8040,425],{"class":424},[397,8042,8043],{"class":428},"#aa0000",[397,8045,425],{"class":424},[397,8047,555],{"class":459},[397,8049,4381],{"class":1101},[397,8051,994],{"class":410},[397,8053,862],{"class":826},[397,8055,632],{"class":459},[397,8057,8058,8060,8062,8064,8066,8068,8070,8072,8074,8076,8078,8080,8082,8084,8086,8088],{"class":399,"line":629},[397,8059,4251],{"class":414},[397,8061,460],{"class":459},[397,8063,6167],{"class":819},[397,8065,823],{"class":459},[397,8067,425],{"class":424},[397,8069,209],{"class":428},[397,8071,425],{"class":424},[397,8073,1580],{"class":459},[397,8075,4316],{"class":414},[397,8077,460],{"class":459},[397,8079,6185],{"class":819},[397,8081,823],{"class":459},[397,8083,425],{"class":424},[397,8085,221],{"class":428},[397,8087,425],{"class":424},[397,8089,632],{"class":459},[397,8091,8092,8094,8096,8098,8100,8102,8105],{"class":399,"line":635},[397,8093,4251],{"class":414},[397,8095,460],{"class":459},[397,8097,3103],{"class":819},[397,8099,823],{"class":459},[397,8101,425],{"class":424},[397,8103,8104],{"class":428},"Lifecycle through a 3-frame occlusion ",[397,8106,1038],{"class":424},[397,8108,8109,8112,8115,8117],{"class":399,"line":657},[397,8110,8111],{"class":424},"             \"",[397,8113,8114],{"class":428},"(min_hits=2, max_age=2, allow_reid=4)",[397,8116,425],{"class":424},[397,8118,632],{"class":459},[397,8120,8121,8123,8125,8128,8130,8133,8135,8137,8139,8142,8144,8146,8148,8151,8153,8155,8158,8160],{"class":399,"line":673},[397,8122,4251],{"class":414},[397,8124,460],{"class":459},[397,8126,8127],{"class":819},"legend",[397,8129,823],{"class":459},[397,8131,8132],{"class":1101},"fontsize",[397,8134,994],{"class":410},[397,8136,3288],{"class":826},[397,8138,555],{"class":459},[397,8140,8141],{"class":1101}," ncol",[397,8143,994],{"class":410},[397,8145,5213],{"class":826},[397,8147,555],{"class":459},[397,8149,8150],{"class":1101}," loc",[397,8152,994],{"class":410},[397,8154,425],{"class":424},[397,8156,8157],{"class":428},"upper center",[397,8159,425],{"class":424},[397,8161,632],{"class":459},[397,8163,8164,8166,8168,8170,8172,8175,8177,8179],{"class":399,"line":696},[397,8165,835],{"class":414},[397,8167,460],{"class":459},[397,8169,4594],{"class":819},[397,8171,1136],{"class":459},[397,8173,8174],{"class":414},"; plt",[397,8176,460],{"class":459},[397,8178,3130],{"class":819},[397,8180,1049],{"class":459},[338,8182,8183],{},[4610,8184],{"alt":393,"src":8185},"\u002F_nb\u002F89564d8ff45bdbf9.png",[376,8187,8189],{"id":8188},"new-in-20-4-differentiable-matching","New in 2.0 #4 — differentiable matching",[338,8191,8192,8193,8195],{},"The headline capability: with a ",[348,8194,233],{}," assignment, the matching\nis differentiable, so a tracking loss can backpropagate into the\nembeddings (and through them, the detector backbone). 1.x had no\npath to this — the Hungarian solve is a hard, non-differentiable\nargmax.",[338,8197,8198,8201,8202,8205],{},[371,8199,8200],{},"SoftAssignment"," solves an entropy-regularised optimal-transport\nproblem (Sinkhorn) and exposes the transport plan on\n",[371,8203,8204],{},"MatchOutcome.soft_plan",". We build a single soft matching stage,\nrun it, and backprop a \"match the right pairs\" loss to the\ndetection embeddings.",[388,8207,8209],{"className":390,"code":8208,"language":392,"meta":393,"style":393},"def tracklets_from_reid(reid):\n    n = reid.shape[0]\n    return Tracklets(\n        id=torch.arange(n, dtype=torch.int64),\n        status=torch.full((n,), int(TrackletStatus.Active),\n                          dtype=torch.int8),\n        hits=torch.ones(n, dtype=torch.int32),\n        time_since_update=torch.zeros(n, dtype=torch.int32),\n        age=torch.ones(n, dtype=torch.int32),\n        frame_started=torch.zeros(n, dtype=torch.int32),\n        frame_last_seen=torch.zeros(n, dtype=torch.int32),\n        reid=reid, batch_size=[n])\n\ncs = tracklets_from_reid(seed[\"reid\"].clone())\ntorch.manual_seed(7)\ndet_emb = (seed[\"reid\"] + 0.05 * torch.randn_like(seed[\"reid\"]))\ndet_emb = det_emb.requires_grad_(True)         # the learnable input\nds = Detections(index=torch.arange(det_emb.shape[0], dtype=torch.int64),\n                reid=det_emb, batch_size=[det_emb.shape[0]])\n\nsoft_stage = Pipe(cost=Cosine(\"reid\"),\n                  assoc=Associate(SoftAssignment(epsilon=0.1)))\nmatch = soft_stage(cs, ds, FrameContext.make(0))\nplan = match.soft_plan                          # (N, M), differentiable\n\nloss = -plan.diagonal().sum()                   # reward correct matches\nloss.backward()\nprint(f\"soft transport plan shape: {tuple(plan.shape)}\")\nprint(f\"plan total mass: {plan.detach().sum().item():.2f}  \"\n      f\"(uniform OT marginals; mass concentrates on the diagonal)\")\nprint(f\"gradient norm on detection embeddings: \"\n      f\"{det_emb.grad.norm().item():.4f}  (non-zero -> it learns)\")\n\n",[371,8210,8211,8224,8243,8251,8282,8316,8332,8365,8396,8427,8458,8489,8510,8514,8542,8556,8605,8629,8678,8706,8710,8737,8761,8795,8813,8817,8843,8855,8887,8924,8933,8944],{"__ignoreMap":393},[397,8212,8213,8215,8218,8220,8222],{"class":399,"line":400},[397,8214,925],{"class":924},[397,8216,8217],{"class":928}," tracklets_from_reid",[397,8219,823],{"class":459},[397,8221,914],{"class":1214},[397,8223,1238],{"class":459},[397,8225,8226,8229,8231,8233,8235,8237,8239,8241],{"class":399,"line":407},[397,8227,8228],{"class":414},"    n ",[397,8230,994],{"class":410},[397,8232,1858],{"class":414},[397,8234,460],{"class":459},[397,8236,2398],{"class":463},[397,8238,843],{"class":459},[397,8240,827],{"class":826},[397,8242,1414],{"class":459},[397,8244,8245,8247,8249],{"class":399,"line":473},[397,8246,1154],{"class":452},[397,8248,623],{"class":819},[397,8250,1028],{"class":459},[397,8252,8253,8256,8258,8260,8262,8264,8266,8268,8270,8272,8274,8276,8278,8280],{"class":399,"line":492},[397,8254,8255],{"class":1101},"        id",[397,8257,994],{"class":410},[397,8259,814],{"class":819},[397,8261,460],{"class":459},[397,8263,3897],{"class":819},[397,8265,823],{"class":459},[397,8267,4310],{"class":819},[397,8269,555],{"class":459},[397,8271,3491],{"class":1101},[397,8273,994],{"class":410},[397,8275,814],{"class":819},[397,8277,460],{"class":459},[397,8279,3500],{"class":463},[397,8281,3503],{"class":459},[397,8283,8284,8287,8289,8291,8293,8296,8298,8300,8302,8305,8307,8310,8312,8314],{"class":399,"line":509},[397,8285,8286],{"class":1101},"        status",[397,8288,994],{"class":410},[397,8290,814],{"class":819},[397,8292,460],{"class":459},[397,8294,8295],{"class":819},"full",[397,8297,1611],{"class":459},[397,8299,4310],{"class":819},[397,8301,5177],{"class":459},[397,8303,8304],{"class":1757}," int",[397,8306,823],{"class":459},[397,8308,8309],{"class":819},"TrackletStatus",[397,8311,460],{"class":459},[397,8313,7346],{"class":463},[397,8315,3503],{"class":459},[397,8317,8318,8321,8323,8325,8327,8330],{"class":399,"line":517},[397,8319,8320],{"class":1101},"                          dtype",[397,8322,994],{"class":410},[397,8324,814],{"class":819},[397,8326,460],{"class":459},[397,8328,8329],{"class":463},"int8",[397,8331,3503],{"class":459},[397,8333,8334,8337,8339,8341,8343,8346,8348,8350,8352,8354,8356,8358,8360,8363],{"class":399,"line":522},[397,8335,8336],{"class":1101},"        hits",[397,8338,994],{"class":410},[397,8340,814],{"class":819},[397,8342,460],{"class":459},[397,8344,8345],{"class":819},"ones",[397,8347,823],{"class":459},[397,8349,4310],{"class":819},[397,8351,555],{"class":459},[397,8353,3491],{"class":1101},[397,8355,994],{"class":410},[397,8357,814],{"class":819},[397,8359,460],{"class":459},[397,8361,8362],{"class":463},"int32",[397,8364,3503],{"class":459},[397,8366,8367,8370,8372,8374,8376,8378,8380,8382,8384,8386,8388,8390,8392,8394],{"class":399,"line":536},[397,8368,8369],{"class":1101},"        time_since_update",[397,8371,994],{"class":410},[397,8373,814],{"class":819},[397,8375,460],{"class":459},[397,8377,1712],{"class":819},[397,8379,823],{"class":459},[397,8381,4310],{"class":819},[397,8383,555],{"class":459},[397,8385,3491],{"class":1101},[397,8387,994],{"class":410},[397,8389,814],{"class":819},[397,8391,460],{"class":459},[397,8393,8362],{"class":463},[397,8395,3503],{"class":459},[397,8397,8398,8401,8403,8405,8407,8409,8411,8413,8415,8417,8419,8421,8423,8425],{"class":399,"line":566},[397,8399,8400],{"class":1101},"        age",[397,8402,994],{"class":410},[397,8404,814],{"class":819},[397,8406,460],{"class":459},[397,8408,8345],{"class":819},[397,8410,823],{"class":459},[397,8412,4310],{"class":819},[397,8414,555],{"class":459},[397,8416,3491],{"class":1101},[397,8418,994],{"class":410},[397,8420,814],{"class":819},[397,8422,460],{"class":459},[397,8424,8362],{"class":463},[397,8426,3503],{"class":459},[397,8428,8429,8432,8434,8436,8438,8440,8442,8444,8446,8448,8450,8452,8454,8456],{"class":399,"line":588},[397,8430,8431],{"class":1101},"        frame_started",[397,8433,994],{"class":410},[397,8435,814],{"class":819},[397,8437,460],{"class":459},[397,8439,1712],{"class":819},[397,8441,823],{"class":459},[397,8443,4310],{"class":819},[397,8445,555],{"class":459},[397,8447,3491],{"class":1101},[397,8449,994],{"class":410},[397,8451,814],{"class":819},[397,8453,460],{"class":459},[397,8455,8362],{"class":463},[397,8457,3503],{"class":459},[397,8459,8460,8463,8465,8467,8469,8471,8473,8475,8477,8479,8481,8483,8485,8487],{"class":399,"line":605},[397,8461,8462],{"class":1101},"        frame_last_seen",[397,8464,994],{"class":410},[397,8466,814],{"class":819},[397,8468,460],{"class":459},[397,8470,1712],{"class":819},[397,8472,823],{"class":459},[397,8474,4310],{"class":819},[397,8476,555],{"class":459},[397,8478,3491],{"class":1101},[397,8480,994],{"class":410},[397,8482,814],{"class":819},[397,8484,460],{"class":459},[397,8486,8362],{"class":463},[397,8488,3503],{"class":459},[397,8490,8491,8494,8496,8498,8500,8502,8504,8506,8508],{"class":399,"line":629},[397,8492,8493],{"class":1101},"        reid",[397,8495,994],{"class":410},[397,8497,914],{"class":819},[397,8499,555],{"class":459},[397,8501,3624],{"class":1101},[397,8503,994],{"class":410},[397,8505,843],{"class":459},[397,8507,4310],{"class":819},[397,8509,4291],{"class":459},[397,8511,8512],{"class":399,"line":635},[397,8513,470],{"emptyLinePlaceholder":469},[397,8515,8516,8519,8521,8523,8525,8527,8529,8531,8533,8535,8537,8540],{"class":399,"line":657},[397,8517,8518],{"class":414},"cs ",[397,8520,994],{"class":410},[397,8522,8217],{"class":819},[397,8524,823],{"class":459},[397,8526,2455],{"class":819},[397,8528,843],{"class":459},[397,8530,425],{"class":424},[397,8532,914],{"class":428},[397,8534,425],{"class":424},[397,8536,2395],{"class":459},[397,8538,8539],{"class":819},"clone",[397,8541,5438],{"class":459},[397,8543,8544,8546,8548,8550,8552,8554],{"class":399,"line":673},[397,8545,814],{"class":414},[397,8547,460],{"class":459},[397,8549,820],{"class":819},[397,8551,823],{"class":459},[397,8553,862],{"class":826},[397,8555,632],{"class":459},[397,8557,8558,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579,8582,8584,8586,8588,8591,8593,8595,8597,8599,8601,8603],{"class":399,"line":696},[397,8559,8560],{"class":414},"det_emb ",[397,8562,994],{"class":410},[397,8564,859],{"class":459},[397,8566,2455],{"class":414},[397,8568,843],{"class":459},[397,8570,425],{"class":424},[397,8572,914],{"class":428},[397,8574,425],{"class":424},[397,8576,853],{"class":459},[397,8578,3660],{"class":410},[397,8580,8581],{"class":826}," 0.05",[397,8583,1225],{"class":410},[397,8585,1123],{"class":414},[397,8587,460],{"class":459},[397,8589,8590],{"class":819},"randn_like",[397,8592,823],{"class":459},[397,8594,2455],{"class":819},[397,8596,843],{"class":459},[397,8598,425],{"class":424},[397,8600,914],{"class":428},[397,8602,425],{"class":424},[397,8604,3633],{"class":459},[397,8606,8607,8609,8611,8614,8616,8619,8621,8624,8626],{"class":399,"line":704},[397,8608,8560],{"class":414},[397,8610,994],{"class":410},[397,8612,8613],{"class":414}," det_emb",[397,8615,460],{"class":459},[397,8617,8618],{"class":819},"requires_grad_",[397,8620,823],{"class":459},[397,8622,8623],{"class":2273},"True",[397,8625,1580],{"class":459},[397,8627,8628],{"class":403},"         # the learnable input\n",[397,8630,8631,8634,8636,8639,8641,8643,8645,8647,8649,8651,8653,8656,8658,8660,8662,8664,8666,8668,8670,8672,8674,8676],{"class":399,"line":709},[397,8632,8633],{"class":414},"ds ",[397,8635,994],{"class":410},[397,8637,8638],{"class":819}," Detections",[397,8640,823],{"class":459},[397,8642,125],{"class":1101},[397,8644,994],{"class":410},[397,8646,814],{"class":819},[397,8648,460],{"class":459},[397,8650,3897],{"class":819},[397,8652,823],{"class":459},[397,8654,8655],{"class":819},"det_emb",[397,8657,460],{"class":459},[397,8659,2398],{"class":463},[397,8661,843],{"class":459},[397,8663,827],{"class":826},[397,8665,1447],{"class":459},[397,8667,3491],{"class":1101},[397,8669,994],{"class":410},[397,8671,814],{"class":819},[397,8673,460],{"class":459},[397,8675,3500],{"class":463},[397,8677,3503],{"class":459},[397,8679,8680,8682,8684,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704],{"class":399,"line":741},[397,8681,3508],{"class":1101},[397,8683,994],{"class":410},[397,8685,8655],{"class":819},[397,8687,555],{"class":459},[397,8689,3624],{"class":1101},[397,8691,994],{"class":410},[397,8693,843],{"class":459},[397,8695,8655],{"class":819},[397,8697,460],{"class":459},[397,8699,2398],{"class":463},[397,8701,843],{"class":459},[397,8703,827],{"class":826},[397,8705,1361],{"class":459},[397,8707,8708],{"class":399,"line":762},[397,8709,470],{"emptyLinePlaceholder":469},[397,8711,8712,8715,8717,8719,8721,8723,8725,8727,8729,8731,8733,8735],{"class":399,"line":778},[397,8713,8714],{"class":414},"soft_stage ",[397,8716,994],{"class":410},[397,8718,733],{"class":819},[397,8720,823],{"class":459},[397,8722,203],{"class":1101},[397,8724,994],{"class":410},[397,8726,4651],{"class":819},[397,8728,823],{"class":459},[397,8730,425],{"class":424},[397,8732,914],{"class":428},[397,8734,425],{"class":424},[397,8736,3503],{"class":459},[397,8738,8739,8741,8743,8745,8747,8749,8751,8754,8756,8758],{"class":399,"line":801},[397,8740,5764],{"class":1101},[397,8742,994],{"class":410},[397,8744,5769],{"class":819},[397,8746,823],{"class":459},[397,8748,8200],{"class":819},[397,8750,823],{"class":459},[397,8752,8753],{"class":1101},"epsilon",[397,8755,994],{"class":410},[397,8757,5725],{"class":826},[397,8759,8760],{"class":459},")))\n",[397,8762,8763,8766,8768,8771,8773,8776,8778,8781,8783,8785,8787,8789,8791,8793],{"class":399,"line":806},[397,8764,8765],{"class":414},"match ",[397,8767,994],{"class":410},[397,8769,8770],{"class":819}," soft_stage",[397,8772,823],{"class":459},[397,8774,8775],{"class":819},"cs",[397,8777,555],{"class":459},[397,8779,8780],{"class":819}," ds",[397,8782,555],{"class":459},[397,8784,613],{"class":819},[397,8786,460],{"class":459},[397,8788,5512],{"class":819},[397,8790,823],{"class":459},[397,8792,827],{"class":826},[397,8794,2030],{"class":459},[397,8796,8797,8800,8802,8805,8807,8810],{"class":399,"line":811},[397,8798,8799],{"class":414},"plan ",[397,8801,994],{"class":410},[397,8803,8804],{"class":414}," match",[397,8806,460],{"class":459},[397,8808,8809],{"class":463},"soft_plan",[397,8811,8812],{"class":403},"                          # (N, M), differentiable\n",[397,8814,8815],{"class":399,"line":832},[397,8816,470],{"emptyLinePlaceholder":469},[397,8818,8819,8822,8824,8826,8829,8831,8834,8836,8838,8840],{"class":399,"line":1326},[397,8820,8821],{"class":414},"loss ",[397,8823,994],{"class":410},[397,8825,5923],{"class":410},[397,8827,8828],{"class":414},"plan",[397,8830,460],{"class":459},[397,8832,8833],{"class":819},"diagonal",[397,8835,1967],{"class":459},[397,8837,7489],{"class":819},[397,8839,1136],{"class":459},[397,8841,8842],{"class":403},"                   # reward correct matches\n",[397,8844,8845,8848,8850,8853],{"class":399,"line":1364},[397,8846,8847],{"class":414},"loss",[397,8849,460],{"class":459},[397,8851,8852],{"class":819},"backward",[397,8854,1049],{"class":459},[397,8856,8857,8859,8861,8863,8866,8868,8871,8873,8875,8877,8879,8881,8883,8885],{"class":399,"line":1381},[397,8858,2603],{"class":1541},[397,8860,823],{"class":459},[397,8862,2501],{"class":924},[397,8864,8865],{"class":428},"\"soft transport plan shape: ",[397,8867,2447],{"class":826},[397,8869,8870],{"class":1757},"tuple",[397,8872,823],{"class":459},[397,8874,8828],{"class":819},[397,8876,460],{"class":459},[397,8878,2398],{"class":463},[397,8880,1580],{"class":459},[397,8882,2470],{"class":826},[397,8884,425],{"class":428},[397,8886,632],{"class":459},[397,8888,8889,8891,8893,8895,8898,8900,8902,8904,8907,8909,8911,8913,8915,8917,8919,8921],{"class":399,"line":1406},[397,8890,2603],{"class":1541},[397,8892,823],{"class":459},[397,8894,2501],{"class":924},[397,8896,8897],{"class":428},"\"plan total mass: ",[397,8899,2447],{"class":826},[397,8901,8828],{"class":819},[397,8903,460],{"class":459},[397,8905,8906],{"class":819},"detach",[397,8908,1967],{"class":459},[397,8910,7489],{"class":819},[397,8912,1967],{"class":459},[397,8914,6034],{"class":819},[397,8916,1136],{"class":459},[397,8918,3007],{"class":924},[397,8920,2470],{"class":826},[397,8922,8923],{"class":428},"  \"\n",[397,8925,8926,8928,8931],{"class":399,"line":1417},[397,8927,6819],{"class":924},[397,8929,8930],{"class":428},"\"(uniform OT marginals; mass concentrates on the diagonal)\"",[397,8932,632],{"class":459},[397,8934,8935,8937,8939,8941],{"class":399,"line":1476},[397,8936,2603],{"class":1541},[397,8938,823],{"class":459},[397,8940,2501],{"class":924},[397,8942,8943],{"class":428},"\"gradient norm on detection embeddings: \"\n",[397,8945,8946,8948,8950,8952,8954,8956,8959,8961,8964,8966,8968,8970,8973,8975,8978],{"class":399,"line":1481},[397,8947,6819],{"class":924},[397,8949,425],{"class":428},[397,8951,2447],{"class":826},[397,8953,8655],{"class":819},[397,8955,460],{"class":459},[397,8957,8958],{"class":463},"grad",[397,8960,460],{"class":459},[397,8962,8963],{"class":819},"norm",[397,8965,1967],{"class":459},[397,8967,6034],{"class":819},[397,8969,1136],{"class":459},[397,8971,8972],{"class":924},":.4f",[397,8974,2470],{"class":826},[397,8976,8977],{"class":428},"  (non-zero -> it learns)\"",[397,8979,632],{"class":459},[436,8981],{"data":8982,"kind":439},"c29mdCB0cmFuc3BvcnQgcGxhbiBzaGFwZTogKDMsIDMpCnBsYW4gdG90YWwgbWFzczogMS4wMCAgKHVuaWZvcm0gT1QgbWFyZ2luYWxzOyBtYXNzIGNvbmNlbnRyYXRlcyBvbiB0aGUgZGlhZ29uYWwpCmdyYWRpZW50IG5vcm0gb24gZGV0ZWN0aW9uIGVtYmVkZGluZ3M6IDAuMDE0NiAgKG5vbi16ZXJvIC0+IGl0IGxlYXJucykK",[388,8984,8986],{"className":390,"code":8985,"language":392,"meta":393,"style":393},"fig, ax = plt.subplots(figsize=(4.5, 3.5))\nim = ax.imshow(plan.detach().numpy(), cmap=\"magma\", vmin=0)\nax.set_title(\"Sinkhorn soft-assignment plan\\n(differentiable)\")\nax.set_xlabel(\"detection\"); ax.set_ylabel(\"tracklet\")\nfor i in range(plan.shape[0]):\n    for j in range(plan.shape[1]):\n        ax.text(j, i, f\"{plan[i, j]:.2f}\", ha=\"center\", va=\"center\",\n                color=\"white\", fontsize=8)\nplt.colorbar(im, ax=ax, label=\"transport mass\")\nplt.tight_layout(); plt.show()\n\n",[371,8987,8988,9022,9069,9094,9130,9154,9178,9246,9268,9303],{"__ignoreMap":393},[397,8989,8990,8992,8994,8996,8998,9000,9002,9004,9006,9008,9010,9012,9015,9017,9020],{"class":399,"line":400},[397,8991,4158],{"class":414},[397,8993,555],{"class":459},[397,8995,2744],{"class":414},[397,8997,994],{"class":410},[397,8999,2749],{"class":414},[397,9001,460],{"class":459},[397,9003,2754],{"class":819},[397,9005,823],{"class":459},[397,9007,2759],{"class":1101},[397,9009,994],{"class":410},[397,9011,823],{"class":459},[397,9013,9014],{"class":826},"4.5",[397,9016,555],{"class":459},[397,9018,9019],{"class":826}," 3.5",[397,9021,2030],{"class":459},[397,9023,9024,9026,9028,9030,9032,9034,9036,9038,9040,9042,9044,9046,9048,9050,9052,9054,9057,9059,9061,9063,9065,9067],{"class":399,"line":407},[397,9025,4193],{"class":414},[397,9027,994],{"class":410},[397,9029,4198],{"class":414},[397,9031,460],{"class":459},[397,9033,2782],{"class":819},[397,9035,823],{"class":459},[397,9037,8828],{"class":819},[397,9039,460],{"class":459},[397,9041,8906],{"class":819},[397,9043,1967],{"class":459},[397,9045,4212],{"class":819},[397,9047,1808],{"class":459},[397,9049,4217],{"class":1101},[397,9051,994],{"class":410},[397,9053,425],{"class":424},[397,9055,9056],{"class":428},"magma",[397,9058,425],{"class":424},[397,9060,555],{"class":459},[397,9062,4231],{"class":1101},[397,9064,994],{"class":410},[397,9066,827],{"class":826},[397,9068,632],{"class":459},[397,9070,9071,9073,9075,9077,9079,9081,9084,9087,9090,9092],{"class":399,"line":473},[397,9072,4251],{"class":414},[397,9074,460],{"class":459},[397,9076,3103],{"class":819},[397,9078,823],{"class":459},[397,9080,425],{"class":424},[397,9082,9083],{"class":428},"Sinkhorn soft-assignment plan",[397,9085,9086],{"class":1905},"\\n",[397,9088,9089],{"class":428},"(differentiable)",[397,9091,425],{"class":424},[397,9093,632],{"class":459},[397,9095,9096,9098,9100,9102,9104,9106,9109,9111,9113,9115,9117,9119,9121,9123,9126,9128],{"class":399,"line":492},[397,9097,4251],{"class":414},[397,9099,460],{"class":459},[397,9101,6167],{"class":819},[397,9103,823],{"class":459},[397,9105,425],{"class":424},[397,9107,9108],{"class":428},"detection",[397,9110,425],{"class":424},[397,9112,1580],{"class":459},[397,9114,4316],{"class":414},[397,9116,460],{"class":459},[397,9118,6185],{"class":819},[397,9120,823],{"class":459},[397,9122,425],{"class":424},[397,9124,9125],{"class":428},"tracklet",[397,9127,425],{"class":424},[397,9129,632],{"class":459},[397,9131,9132,9134,9136,9138,9140,9142,9144,9146,9148,9150,9152],{"class":399,"line":509},[397,9133,4423],{"class":452},[397,9135,4426],{"class":414},[397,9137,1516],{"class":452},[397,9139,3432],{"class":1541},[397,9141,823],{"class":459},[397,9143,8828],{"class":819},[397,9145,460],{"class":459},[397,9147,2398],{"class":463},[397,9149,843],{"class":459},[397,9151,827],{"class":826},[397,9153,5991],{"class":459},[397,9155,9156,9158,9160,9162,9164,9166,9168,9170,9172,9174,9176],{"class":399,"line":517},[397,9157,1495],{"class":452},[397,9159,4443],{"class":414},[397,9161,1516],{"class":452},[397,9163,3432],{"class":1541},[397,9165,823],{"class":459},[397,9167,8828],{"class":819},[397,9169,460],{"class":459},[397,9171,2398],{"class":463},[397,9173,843],{"class":459},[397,9175,1691],{"class":826},[397,9177,5991],{"class":459},[397,9179,9180,9182,9184,9186,9188,9190,9192,9194,9196,9198,9200,9202,9204,9206,9208,9210,9212,9214,9216,9218,9220,9222,9224,9226,9228,9230,9232,9234,9236,9238,9240,9242,9244],{"class":399,"line":522},[397,9181,2882],{"class":414},[397,9183,460],{"class":459},[397,9185,2973],{"class":819},[397,9187,823],{"class":459},[397,9189,4466],{"class":819},[397,9191,555],{"class":459},[397,9193,4471],{"class":819},[397,9195,555],{"class":459},[397,9197,2441],{"class":924},[397,9199,425],{"class":428},[397,9201,2447],{"class":826},[397,9203,8828],{"class":819},[397,9205,843],{"class":459},[397,9207,4486],{"class":819},[397,9209,555],{"class":459},[397,9211,4491],{"class":819},[397,9213,853],{"class":459},[397,9215,3007],{"class":924},[397,9217,2470],{"class":826},[397,9219,425],{"class":428},[397,9221,555],{"class":459},[397,9223,4367],{"class":1101},[397,9225,994],{"class":410},[397,9227,425],{"class":424},[397,9229,4510],{"class":428},[397,9231,425],{"class":424},[397,9233,555],{"class":459},[397,9235,4517],{"class":1101},[397,9237,994],{"class":410},[397,9239,425],{"class":424},[397,9241,4510],{"class":428},[397,9243,425],{"class":424},[397,9245,626],{"class":459},[397,9247,9248,9250,9252,9254,9256,9258,9260,9262,9264,9266],{"class":399,"line":536},[397,9249,4532],{"class":1101},[397,9251,994],{"class":410},[397,9253,425],{"class":424},[397,9255,4539],{"class":428},[397,9257,425],{"class":424},[397,9259,555],{"class":459},[397,9261,4381],{"class":1101},[397,9263,994],{"class":410},[397,9265,3288],{"class":826},[397,9267,632],{"class":459},[397,9269,9270,9272,9274,9276,9278,9280,9282,9284,9286,9288,9290,9292,9294,9296,9299,9301],{"class":399,"line":566},[397,9271,835],{"class":414},[397,9273,460],{"class":459},[397,9275,4560],{"class":819},[397,9277,823],{"class":459},[397,9279,4565],{"class":819},[397,9281,555],{"class":459},[397,9283,4198],{"class":1101},[397,9285,994],{"class":410},[397,9287,4251],{"class":819},[397,9289,555],{"class":459},[397,9291,7905],{"class":1101},[397,9293,994],{"class":410},[397,9295,425],{"class":424},[397,9297,9298],{"class":428},"transport mass",[397,9300,425],{"class":424},[397,9302,632],{"class":459},[397,9304,9305,9307,9309,9311,9313,9315,9317,9319],{"class":399,"line":588},[397,9306,835],{"class":414},[397,9308,460],{"class":459},[397,9310,4594],{"class":819},[397,9312,1136],{"class":459},[397,9314,8174],{"class":414},[397,9316,460],{"class":459},[397,9318,3130],{"class":819},[397,9320,1049],{"class":459},[338,9322,9323],{},[4610,9324],{"alt":393,"src":9325},"\u002F_nb\u002Ffd0826fe9402fa53.png",[338,9327,9328,9329,9332,9333,9336,9337,904,9339,904,9341,9343,9344,9347],{},"The plan is sharp on the diagonal and the gradient is non-zero, so\nthe embeddings receive a learning signal ",[3255,9330,9331],{},"through the matcher",". To\nget the same behavior inside a full tracker, build it with a single\nflag — ",[371,9334,9335],{},"ut.Tracker(..., differentiable=True)"," — and unitrack swaps\nevery hard node (",[371,9338,5769],{},[371,9340,5016],{},[371,9342,7082],{},", …) for\nits soft companion automatically. Combined with ",[371,9345,9346],{},"ClipTracker",", that\nis enough to train end-to-end across a clip.",[376,9349,9351],{"id":9350},"where-to-go-next","Where to go next",[878,9353,9354,9362,9368,9381],{},[345,9355,9356,9361],{},[348,9357,9358],{},[353,9359,9360],{"href":46},"Migration guide"," — the full\n1.x → 2.0 symbol map and a line-by-line port of this tracker.",[345,9363,9364,9367],{},[348,9365,9366],{},"Notebooks 1–6"," — the library from the ground up: data model,\ncost & gate zoos, the pipeline tree, states & lifecycle.",[345,9369,9370,9375,9376,9380],{},[348,9371,9372],{},[371,9373,9374],{},"unitrack.tracker.BatchTracker"," — vmap-batched multi-stream\ninference. ",[348,9377,9378],{},[371,9379,9346],{}," — clip-based methods (MinVIS,\nDVIS++).",[345,9382,9383,859,9385,9388],{},[348,9384,9],{},[371,9386,9387],{},"docs\u002Frecipes\u002F",") — SORT and the overlap-IoU tracker\nas compact, self-contained builders.",[9390,9391,9392],"style",{},"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 .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .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 .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 .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 .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 .swQdS, html code.shiki .swQdS{--shiki-light:#E53935;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .stp6e, html code.shiki .stp6e{--shiki-light:#39ADB5;--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 .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":393,"searchDepth":473,"depth":473,"links":9394},[9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406],{"id":378,"depth":407,"text":379},{"id":872,"depth":407,"text":873},{"id":3249,"depth":407,"text":3250},{"id":4101,"depth":407,"text":4102},{"id":4615,"depth":407,"text":4616},{"id":4976,"depth":407,"text":4977},{"id":6298,"depth":407,"text":6299},{"id":6636,"depth":407,"text":6637},{"id":6869,"depth":407,"text":6870},{"id":7073,"depth":407,"text":7074},{"id":8188,"depth":407,"text":8189},{"id":9350,"depth":407,"text":9351},"md",{"notebook":469},{"icon":63},{"title":119,"description":340},"ztZ62rbuN1J2Sqsp5zfclp3DlvAF0W7MutOnNgH4W2o",{},1785139889872]