[{"data":1,"prerenderedAt":1142},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Frecipes\u002Fcosine_tracker":328,"docyard:crossref-index":1141},[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":18,"body":330,"description":1136,"extension":1137,"meta":1138,"navigation":396,"path":19,"seo":1139,"stem":20,"__hash__":1140},"content\u002F2.recipes\u002Fcosine_tracker.md",{"type":331,"value":332,"toc":1134},"minimark",[333,337,354,369,1098,1101,1127,1130],[334,335,18],"h1",{"id":336},"recipe-cosine-appearance-tracker",[338,339,340,341,345,346,349,350,353],"p",{},"An appearance tracker matches instances frame-to-frame by the cosine\ndistance between per-instance embeddings, rather than by spatial overlap.\nIt maps onto 2.0 as a single ",[342,343,344],"code",{},"Pipe"," whose cost is ",[342,347,348],{},"Cosine"," over an\n",[342,351,352],{},"embedding"," field, gated by class so only same-class detections compete.",[338,355,356,357,360,361,364,365,368],{},"Each detection must carry an L2-comparable embedding (here 256-d, the\ndimensionality of a Mask2Former decoder query); the tracklet keeps the\nlast observed embedding (",[342,358,359],{},"Identity"," predict, ",[342,362,363],{},"Replace"," on match). A match\nrequires ",[342,366,367],{},"1 - cosine_similarity \u003C= cost_threshold"," within the same class.",[370,371,376],"pre",{"className":372,"code":373,"language":374,"meta":375,"style":375},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import torch\n\nimport unitrack\nfrom unitrack.assignment import Associate, Jonker\nfrom unitrack.costs import Cosine\nfrom unitrack.data import TensorSpec\nfrom unitrack.gates import ClassGate\nfrom unitrack.lifecycle import IncludeAll, NoLifecycle\nfrom unitrack.pipeline import Gated, Pipe\nfrom unitrack.states import FromDetectionField, Identity, Replace, State\n\nEMBED_DIM = 256\n\n\ndef build_cosine_tracker(\n    *,\n    cost_threshold: float = 0.5,\n    embed_dim: int = EMBED_DIM,\n) -> unitrack.Tracker:\n    inner = Pipe(\n        cost=Cosine(\"embedding\"),\n        assoc=Associate(Jonker(threshold=cost_threshold)),\n    )\n    pipeline = Gated(gate=ClassGate(\"category\"), then=inner)\n    return unitrack.Tracker(\n        root=pipeline,\n        states={\n            \"embedding\": State(\n                schema=TensorSpec(shape=(embed_dim,), dtype=torch.float32),\n                process=Identity(\"embedding\"),\n                observation=Replace(\"embedding\"),\n                init=FromDetectionField(\"embedding\"),\n            ),\n            \"category\": State(\n                schema=TensorSpec(shape=(), dtype=torch.int64),\n                process=Identity(\"category\"),\n                observation=Replace(\"category\"),\n                init=FromDetectionField(\"category\"),\n            ),\n        },\n        lifecycle=NoLifecycle(),\n        visibility=IncludeAll(),\n    )\n","python","",[342,377,378,391,398,406,433,450,467,484,506,528,560,565,580,585,590,604,613,634,652,672,687,713,742,748,790,804,816,827,844,885,905,925,946,952,967,998,1017,1036,1055,1060,1066,1080,1093],{"__ignoreMap":375},[379,380,383,387],"span",{"class":381,"line":382},"line",1,[379,384,386],{"class":385},"sVHd0","import",[379,388,390],{"class":389},"su5hD"," torch\n",[379,392,394],{"class":381,"line":393},2,[379,395,397],{"emptyLinePlaceholder":396},true,"\n",[379,399,401,403],{"class":381,"line":400},3,[379,402,386],{"class":385},[379,404,405],{"class":389}," unitrack\n",[379,407,409,412,415,419,422,424,427,430],{"class":381,"line":408},4,[379,410,411],{"class":385},"from",[379,413,414],{"class":389}," unitrack",[379,416,418],{"class":417},"sP7_E",".",[379,420,421],{"class":389},"assignment ",[379,423,386],{"class":385},[379,425,426],{"class":389}," Associate",[379,428,429],{"class":417},",",[379,431,432],{"class":389}," Jonker\n",[379,434,436,438,440,442,445,447],{"class":381,"line":435},5,[379,437,411],{"class":385},[379,439,414],{"class":389},[379,441,418],{"class":417},[379,443,444],{"class":389},"costs ",[379,446,386],{"class":385},[379,448,449],{"class":389}," Cosine\n",[379,451,453,455,457,459,462,464],{"class":381,"line":452},6,[379,454,411],{"class":385},[379,456,414],{"class":389},[379,458,418],{"class":417},[379,460,461],{"class":389},"data ",[379,463,386],{"class":385},[379,465,466],{"class":389}," TensorSpec\n",[379,468,470,472,474,476,479,481],{"class":381,"line":469},7,[379,471,411],{"class":385},[379,473,414],{"class":389},[379,475,418],{"class":417},[379,477,478],{"class":389},"gates ",[379,480,386],{"class":385},[379,482,483],{"class":389}," ClassGate\n",[379,485,487,489,491,493,496,498,501,503],{"class":381,"line":486},8,[379,488,411],{"class":385},[379,490,414],{"class":389},[379,492,418],{"class":417},[379,494,495],{"class":389},"lifecycle ",[379,497,386],{"class":385},[379,499,500],{"class":389}," IncludeAll",[379,502,429],{"class":417},[379,504,505],{"class":389}," NoLifecycle\n",[379,507,509,511,513,515,518,520,523,525],{"class":381,"line":508},9,[379,510,411],{"class":385},[379,512,414],{"class":389},[379,514,418],{"class":417},[379,516,517],{"class":389},"pipeline ",[379,519,386],{"class":385},[379,521,522],{"class":389}," Gated",[379,524,429],{"class":417},[379,526,527],{"class":389}," Pipe\n",[379,529,531,533,535,537,540,542,545,547,550,552,555,557],{"class":381,"line":530},10,[379,532,411],{"class":385},[379,534,414],{"class":389},[379,536,418],{"class":417},[379,538,539],{"class":389},"states ",[379,541,386],{"class":385},[379,543,544],{"class":389}," FromDetectionField",[379,546,429],{"class":417},[379,548,549],{"class":389}," Identity",[379,551,429],{"class":417},[379,553,554],{"class":389}," Replace",[379,556,429],{"class":417},[379,558,559],{"class":389}," State\n",[379,561,563],{"class":381,"line":562},11,[379,564,397],{"emptyLinePlaceholder":396},[379,566,568,572,576],{"class":381,"line":567},12,[379,569,571],{"class":570},"s_hVV","EMBED_DIM",[379,573,575],{"class":574},"smGrS"," =",[379,577,579],{"class":578},"srdBf"," 256\n",[379,581,583],{"class":381,"line":582},13,[379,584,397],{"emptyLinePlaceholder":396},[379,586,588],{"class":381,"line":587},14,[379,589,397],{"emptyLinePlaceholder":396},[379,591,593,597,601],{"class":381,"line":592},15,[379,594,596],{"class":595},"sbsja","def",[379,598,600],{"class":599},"sGLFI"," build_cosine_tracker",[379,602,603],{"class":417},"(\n",[379,605,607,610],{"class":381,"line":606},16,[379,608,609],{"class":574},"    *",[379,611,612],{"class":389},",\n",[379,614,616,620,623,627,629,632],{"class":381,"line":615},17,[379,617,619],{"class":618},"sFwrP","    cost_threshold",[379,621,622],{"class":417},":",[379,624,626],{"class":625},"sZMiF"," float",[379,628,575],{"class":574},[379,630,631],{"class":578}," 0.5",[379,633,612],{"class":417},[379,635,637,640,642,645,647,650],{"class":381,"line":636},18,[379,638,639],{"class":618},"    embed_dim",[379,641,622],{"class":417},[379,643,644],{"class":625}," int",[379,646,575],{"class":574},[379,648,649],{"class":570}," EMBED_DIM",[379,651,612],{"class":417},[379,653,655,658,661,663,665,669],{"class":381,"line":654},19,[379,656,657],{"class":417},")",[379,659,660],{"class":417}," ->",[379,662,414],{"class":389},[379,664,418],{"class":417},[379,666,668],{"class":667},"skxfh","Tracker",[379,670,671],{"class":417},":\n",[379,673,675,678,681,685],{"class":381,"line":674},20,[379,676,677],{"class":389},"    inner ",[379,679,680],{"class":574},"=",[379,682,684],{"class":683},"slqww"," Pipe",[379,686,603],{"class":417},[379,688,690,694,696,698,701,705,708,710],{"class":381,"line":689},21,[379,691,693],{"class":692},"s99_P","        cost",[379,695,680],{"class":574},[379,697,348],{"class":683},[379,699,700],{"class":417},"(",[379,702,704],{"class":703},"sjJ54","\"",[379,706,352],{"class":707},"s_sjI",[379,709,704],{"class":703},[379,711,712],{"class":417},"),\n",[379,714,716,719,721,724,726,729,731,734,736,739],{"class":381,"line":715},22,[379,717,718],{"class":692},"        assoc",[379,720,680],{"class":574},[379,722,723],{"class":683},"Associate",[379,725,700],{"class":417},[379,727,728],{"class":683},"Jonker",[379,730,700],{"class":417},[379,732,733],{"class":692},"threshold",[379,735,680],{"class":574},[379,737,738],{"class":683},"cost_threshold",[379,740,741],{"class":417},")),\n",[379,743,745],{"class":381,"line":744},23,[379,746,747],{"class":417},"    )\n",[379,749,751,754,756,758,760,762,764,767,769,771,774,776,779,782,784,787],{"class":381,"line":750},24,[379,752,753],{"class":389},"    pipeline ",[379,755,680],{"class":574},[379,757,522],{"class":683},[379,759,700],{"class":417},[379,761,212],{"class":692},[379,763,680],{"class":574},[379,765,766],{"class":683},"ClassGate",[379,768,700],{"class":417},[379,770,704],{"class":703},[379,772,773],{"class":707},"category",[379,775,704],{"class":703},[379,777,778],{"class":417},"),",[379,780,781],{"class":692}," then",[379,783,680],{"class":574},[379,785,786],{"class":683},"inner",[379,788,789],{"class":417},")\n",[379,791,793,796,798,800,802],{"class":381,"line":792},25,[379,794,795],{"class":385},"    return",[379,797,414],{"class":389},[379,799,418],{"class":417},[379,801,668],{"class":683},[379,803,603],{"class":417},[379,805,807,810,812,814],{"class":381,"line":806},26,[379,808,809],{"class":692},"        root",[379,811,680],{"class":574},[379,813,256],{"class":683},[379,815,612],{"class":417},[379,817,819,822,824],{"class":381,"line":818},27,[379,820,821],{"class":692},"        states",[379,823,680],{"class":574},[379,825,826],{"class":417},"{\n",[379,828,830,833,835,837,839,842],{"class":381,"line":829},28,[379,831,832],{"class":703},"            \"",[379,834,352],{"class":707},[379,836,704],{"class":703},[379,838,622],{"class":417},[379,840,841],{"class":683}," State",[379,843,603],{"class":417},[379,845,847,850,852,855,857,860,862,864,867,870,873,875,878,880,883],{"class":381,"line":846},29,[379,848,849],{"class":692},"                schema",[379,851,680],{"class":574},[379,853,854],{"class":683},"TensorSpec",[379,856,700],{"class":417},[379,858,859],{"class":692},"shape",[379,861,680],{"class":574},[379,863,700],{"class":417},[379,865,866],{"class":683},"embed_dim",[379,868,869],{"class":417},",),",[379,871,872],{"class":692}," dtype",[379,874,680],{"class":574},[379,876,877],{"class":683},"torch",[379,879,418],{"class":417},[379,881,882],{"class":667},"float32",[379,884,712],{"class":417},[379,886,888,891,893,895,897,899,901,903],{"class":381,"line":887},30,[379,889,890],{"class":692},"                process",[379,892,680],{"class":574},[379,894,359],{"class":683},[379,896,700],{"class":417},[379,898,704],{"class":703},[379,900,352],{"class":707},[379,902,704],{"class":703},[379,904,712],{"class":417},[379,906,908,911,913,915,917,919,921,923],{"class":381,"line":907},31,[379,909,910],{"class":692},"                observation",[379,912,680],{"class":574},[379,914,363],{"class":683},[379,916,700],{"class":417},[379,918,704],{"class":703},[379,920,352],{"class":707},[379,922,704],{"class":703},[379,924,712],{"class":417},[379,926,928,931,933,936,938,940,942,944],{"class":381,"line":927},32,[379,929,930],{"class":692},"                init",[379,932,680],{"class":574},[379,934,935],{"class":683},"FromDetectionField",[379,937,700],{"class":417},[379,939,704],{"class":703},[379,941,352],{"class":707},[379,943,704],{"class":703},[379,945,712],{"class":417},[379,947,949],{"class":381,"line":948},33,[379,950,951],{"class":417},"            ),\n",[379,953,955,957,959,961,963,965],{"class":381,"line":954},34,[379,956,832],{"class":703},[379,958,773],{"class":707},[379,960,704],{"class":703},[379,962,622],{"class":417},[379,964,841],{"class":683},[379,966,603],{"class":417},[379,968,970,972,974,976,978,980,982,985,987,989,991,993,996],{"class":381,"line":969},35,[379,971,849],{"class":692},[379,973,680],{"class":574},[379,975,854],{"class":683},[379,977,700],{"class":417},[379,979,859],{"class":692},[379,981,680],{"class":574},[379,983,984],{"class":417},"(),",[379,986,872],{"class":692},[379,988,680],{"class":574},[379,990,877],{"class":683},[379,992,418],{"class":417},[379,994,995],{"class":667},"int64",[379,997,712],{"class":417},[379,999,1001,1003,1005,1007,1009,1011,1013,1015],{"class":381,"line":1000},36,[379,1002,890],{"class":692},[379,1004,680],{"class":574},[379,1006,359],{"class":683},[379,1008,700],{"class":417},[379,1010,704],{"class":703},[379,1012,773],{"class":707},[379,1014,704],{"class":703},[379,1016,712],{"class":417},[379,1018,1020,1022,1024,1026,1028,1030,1032,1034],{"class":381,"line":1019},37,[379,1021,910],{"class":692},[379,1023,680],{"class":574},[379,1025,363],{"class":683},[379,1027,700],{"class":417},[379,1029,704],{"class":703},[379,1031,773],{"class":707},[379,1033,704],{"class":703},[379,1035,712],{"class":417},[379,1037,1039,1041,1043,1045,1047,1049,1051,1053],{"class":381,"line":1038},38,[379,1040,930],{"class":692},[379,1042,680],{"class":574},[379,1044,935],{"class":683},[379,1046,700],{"class":417},[379,1048,704],{"class":703},[379,1050,773],{"class":707},[379,1052,704],{"class":703},[379,1054,712],{"class":417},[379,1056,1058],{"class":381,"line":1057},39,[379,1059,951],{"class":417},[379,1061,1063],{"class":381,"line":1062},40,[379,1064,1065],{"class":417},"        },\n",[379,1067,1069,1072,1074,1077],{"class":381,"line":1068},41,[379,1070,1071],{"class":692},"        lifecycle",[379,1073,680],{"class":574},[379,1075,1076],{"class":683},"NoLifecycle",[379,1078,1079],{"class":417},"(),\n",[379,1081,1083,1086,1088,1091],{"class":381,"line":1082},42,[379,1084,1085],{"class":692},"        visibility",[379,1087,680],{"class":574},[379,1089,1090],{"class":683},"IncludeAll",[379,1092,1079],{"class":417},[379,1094,1096],{"class":381,"line":1095},43,[379,1097,747],{"class":417},[338,1099,1100],{},"Detection requirements:",[1102,1103,1104,1117],"ul",{},[1105,1106,1107,1109,1110,1113,1114,1116],"li",{},[342,1108,352],{}," — ",[342,1111,1112],{},"(M, embed_dim)"," per-instance appearance vectors. ",[342,1115,348],{},"\nL2-normalizes internally, so the raw decoder-query rows are fine.",[1105,1118,1119,1109,1121,1124,1125,418],{},[342,1120,773],{},[342,1122,1123],{},"(M,)"," int64 semantic class, for the ",[342,1126,766],{},[338,1128,1129],{},"An instance that lacks an embedding on a frame (e.g. a heavily-occluded\nmask dropped by the model's post-processing) simply is not matched that\nframe, like any other miss.",[1131,1132,1133],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .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 .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 .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .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 .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":375,"searchDepth":400,"depth":400,"links":1135},[],"An appearance tracker matches instances frame-to-frame by the cosine\ndistance between per-instance embeddings, rather than by spatial overlap.\nIt maps onto 2.0 as a single Pipe whose cost is Cosine over an\nembedding field, gated by class so only same-class detections compete.","md",{},{"title":18,"description":1136},"OlfPMeGIDBFnGqGdQf2rcKHKjFuDTHpkaLxFJUHypTQ",{},1785139889116]