[{"data":1,"prerenderedAt":1714},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Frecipes\u002Fcascade_tracker":328,"docyard:crossref-index":1713},[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":14,"body":330,"description":340,"extension":1709,"meta":1710,"navigation":402,"path":15,"seo":1711,"stem":16,"__hash__":1712},"content\u002F2.recipes\u002Fcascade_tracker.md",{"type":331,"value":332,"toc":1707},"minimark",[333,337,341,375,1658,1661,1703],[334,335,14],"h1",{"id":336},"recipe-two-stage-cascade-tracker",[338,339,340],"p",{},"A cascade tracker matches high-confidence detections by one cue and the\nremainder by another. This recipe matches high-score instances by\nappearance (cosine over embeddings) first, then matches the residual plus\nlow-score instances by mask-IoU — the appearance cue is trusted where the\ndetector is confident, with overlap as the fallback.",[338,342,343,344,348,349,352,353,355,356,359,360,363,364,366,367,370,371,374],{},"It maps onto 2.0 as a ",[345,346,347],"code",{},"Sequential"," of two ",[345,350,351],{},"Filter"," stages. Each ",[345,354,351],{},"\nsplits the detections on a score predicate (",[345,357,358],{},"on=\"ds\"",") and routes its slice\ninto a class-gated ",[345,361,362],{},"Pipe","; ",[345,365,347],{}," threads the residual of the first\nstage into the second. ",[345,368,369],{},"hi"," is the cascade's internal score split,\nindependent of any ",[345,372,373],{},"min_score"," floor applied upstream.",[376,377,382],"pre",{"className":378,"code":379,"language":380,"meta":381,"style":381},"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, MaskIoU\nfrom unitrack.data import TensorSpec\nfrom unitrack.gates import ClassGate\nfrom unitrack.lifecycle import IncludeAll, NoLifecycle\nfrom unitrack.pipeline import Filter, Gated, Pipe, Sequential\nfrom unitrack.states import FromDetectionField, Identity, Replace, State\n\nEMBED_DIM = 256\n\n\ndef build_cascade_tracker(\n    *,\n    height: int,\n    width: int,\n    hi: float = 0.5,\n    cos_threshold: float = 0.5,\n    iou_threshold: float = 0.5,\n    embed_dim: int = EMBED_DIM,\n) -> unitrack.Tracker:\n    # The class gate wraps each stage's Pipe (a per-pair gate biases a cost,\n    # so it must sit on the Pipe, not on the Sequential cascade).\n    hi_stage = Filter(\n        predicate=lambda ds: ds.score >= hi,\n        then=Gated(\n            gate=ClassGate(\"category\"),\n            then=Pipe(\n                cost=Cosine(\"embedding\"),\n                assoc=Associate(Jonker(threshold=cos_threshold)),\n            ),\n        ),\n        on=\"ds\",\n    )\n    lo_stage = Filter(\n        predicate=lambda ds: ds.score \u003C hi,\n        then=Gated(\n            gate=ClassGate(\"category\"),\n            then=Pipe(\n                cost=MaskIoU(\"mask\"),\n                assoc=Associate(Jonker(threshold=iou_threshold)),\n            ),\n        ),\n        on=\"ds\",\n    )\n    pipeline = Sequential([hi_stage, lo_stage])\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            \"mask\": State(\n                schema=TensorSpec(shape=(height, width), dtype=torch.bool),\n                process=Identity(\"mask\"),\n                observation=Replace(\"mask\"),\n                init=FromDetectionField(\"mask\"),\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            \"score\": State(\n                schema=TensorSpec(shape=(), dtype=torch.float32),\n                process=Identity(\"score\"),\n                observation=Replace(\"score\"),\n                init=FromDetectionField(\"score\"),\n            ),\n        },\n        lifecycle=NoLifecycle(),\n        visibility=IncludeAll(),\n    )\n","python","",[345,383,384,397,404,412,439,461,478,495,517,549,581,586,601,606,611,625,634,650,662,680,696,712,729,749,756,762,776,808,821,848,860,882,911,917,923,940,946,958,984,995,1014,1025,1046,1070,1075,1080,1095,1100,1125,1139,1151,1162,1179,1220,1241,1262,1283,1288,1303,1344,1363,1382,1401,1406,1421,1452,1471,1490,1509,1514,1529,1558,1577,1596,1615,1620,1626,1640,1653],{"__ignoreMap":381},[385,386,389,393],"span",{"class":387,"line":388},"line",1,[385,390,392],{"class":391},"sVHd0","import",[385,394,396],{"class":395},"su5hD"," torch\n",[385,398,400],{"class":387,"line":399},2,[385,401,403],{"emptyLinePlaceholder":402},true,"\n",[385,405,407,409],{"class":387,"line":406},3,[385,408,392],{"class":391},[385,410,411],{"class":395}," unitrack\n",[385,413,415,418,421,425,428,430,433,436],{"class":387,"line":414},4,[385,416,417],{"class":391},"from",[385,419,420],{"class":395}," unitrack",[385,422,424],{"class":423},"sP7_E",".",[385,426,427],{"class":395},"assignment ",[385,429,392],{"class":391},[385,431,432],{"class":395}," Associate",[385,434,435],{"class":423},",",[385,437,438],{"class":395}," Jonker\n",[385,440,442,444,446,448,451,453,456,458],{"class":387,"line":441},5,[385,443,417],{"class":391},[385,445,420],{"class":395},[385,447,424],{"class":423},[385,449,450],{"class":395},"costs ",[385,452,392],{"class":391},[385,454,455],{"class":395}," Cosine",[385,457,435],{"class":423},[385,459,460],{"class":395}," MaskIoU\n",[385,462,464,466,468,470,473,475],{"class":387,"line":463},6,[385,465,417],{"class":391},[385,467,420],{"class":395},[385,469,424],{"class":423},[385,471,472],{"class":395},"data ",[385,474,392],{"class":391},[385,476,477],{"class":395}," TensorSpec\n",[385,479,481,483,485,487,490,492],{"class":387,"line":480},7,[385,482,417],{"class":391},[385,484,420],{"class":395},[385,486,424],{"class":423},[385,488,489],{"class":395},"gates ",[385,491,392],{"class":391},[385,493,494],{"class":395}," ClassGate\n",[385,496,498,500,502,504,507,509,512,514],{"class":387,"line":497},8,[385,499,417],{"class":391},[385,501,420],{"class":395},[385,503,424],{"class":423},[385,505,506],{"class":395},"lifecycle ",[385,508,392],{"class":391},[385,510,511],{"class":395}," IncludeAll",[385,513,435],{"class":423},[385,515,516],{"class":395}," NoLifecycle\n",[385,518,520,522,524,526,529,531,534,536,539,541,544,546],{"class":387,"line":519},9,[385,521,417],{"class":391},[385,523,420],{"class":395},[385,525,424],{"class":423},[385,527,528],{"class":395},"pipeline ",[385,530,392],{"class":391},[385,532,533],{"class":395}," Filter",[385,535,435],{"class":423},[385,537,538],{"class":395}," Gated",[385,540,435],{"class":423},[385,542,543],{"class":395}," Pipe",[385,545,435],{"class":423},[385,547,548],{"class":395}," Sequential\n",[385,550,552,554,556,558,561,563,566,568,571,573,576,578],{"class":387,"line":551},10,[385,553,417],{"class":391},[385,555,420],{"class":395},[385,557,424],{"class":423},[385,559,560],{"class":395},"states ",[385,562,392],{"class":391},[385,564,565],{"class":395}," FromDetectionField",[385,567,435],{"class":423},[385,569,570],{"class":395}," Identity",[385,572,435],{"class":423},[385,574,575],{"class":395}," Replace",[385,577,435],{"class":423},[385,579,580],{"class":395}," State\n",[385,582,584],{"class":387,"line":583},11,[385,585,403],{"emptyLinePlaceholder":402},[385,587,589,593,597],{"class":387,"line":588},12,[385,590,592],{"class":591},"s_hVV","EMBED_DIM",[385,594,596],{"class":595},"smGrS"," =",[385,598,600],{"class":599},"srdBf"," 256\n",[385,602,604],{"class":387,"line":603},13,[385,605,403],{"emptyLinePlaceholder":402},[385,607,609],{"class":387,"line":608},14,[385,610,403],{"emptyLinePlaceholder":402},[385,612,614,618,622],{"class":387,"line":613},15,[385,615,617],{"class":616},"sbsja","def",[385,619,621],{"class":620},"sGLFI"," build_cascade_tracker",[385,623,624],{"class":423},"(\n",[385,626,628,631],{"class":387,"line":627},16,[385,629,630],{"class":595},"    *",[385,632,633],{"class":395},",\n",[385,635,637,641,644,648],{"class":387,"line":636},17,[385,638,640],{"class":639},"sFwrP","    height",[385,642,643],{"class":423},":",[385,645,647],{"class":646},"sZMiF"," int",[385,649,633],{"class":423},[385,651,653,656,658,660],{"class":387,"line":652},18,[385,654,655],{"class":639},"    width",[385,657,643],{"class":423},[385,659,647],{"class":646},[385,661,633],{"class":423},[385,663,665,668,670,673,675,678],{"class":387,"line":664},19,[385,666,667],{"class":639},"    hi",[385,669,643],{"class":423},[385,671,672],{"class":646}," float",[385,674,596],{"class":595},[385,676,677],{"class":599}," 0.5",[385,679,633],{"class":423},[385,681,683,686,688,690,692,694],{"class":387,"line":682},20,[385,684,685],{"class":639},"    cos_threshold",[385,687,643],{"class":423},[385,689,672],{"class":646},[385,691,596],{"class":595},[385,693,677],{"class":599},[385,695,633],{"class":423},[385,697,699,702,704,706,708,710],{"class":387,"line":698},21,[385,700,701],{"class":639},"    iou_threshold",[385,703,643],{"class":423},[385,705,672],{"class":646},[385,707,596],{"class":595},[385,709,677],{"class":599},[385,711,633],{"class":423},[385,713,715,718,720,722,724,727],{"class":387,"line":714},22,[385,716,717],{"class":639},"    embed_dim",[385,719,643],{"class":423},[385,721,647],{"class":646},[385,723,596],{"class":595},[385,725,726],{"class":591}," EMBED_DIM",[385,728,633],{"class":423},[385,730,732,735,738,740,742,746],{"class":387,"line":731},23,[385,733,734],{"class":423},")",[385,736,737],{"class":423}," ->",[385,739,420],{"class":395},[385,741,424],{"class":423},[385,743,745],{"class":744},"skxfh","Tracker",[385,747,748],{"class":423},":\n",[385,750,752],{"class":387,"line":751},24,[385,753,755],{"class":754},"sutJx","    # The class gate wraps each stage's Pipe (a per-pair gate biases a cost,\n",[385,757,759],{"class":387,"line":758},25,[385,760,761],{"class":754},"    # so it must sit on the Pipe, not on the Sequential cascade).\n",[385,763,765,768,771,774],{"class":387,"line":764},26,[385,766,767],{"class":395},"    hi_stage ",[385,769,770],{"class":595},"=",[385,772,533],{"class":773},"slqww",[385,775,624],{"class":423},[385,777,779,783,785,788,791,793,795,797,800,803,806],{"class":387,"line":778},27,[385,780,782],{"class":781},"s99_P","        predicate",[385,784,770],{"class":595},[385,786,787],{"class":616},"lambda",[385,789,790],{"class":639}," ds",[385,792,643],{"class":423},[385,794,790],{"class":773},[385,796,424],{"class":423},[385,798,799],{"class":744},"score",[385,801,802],{"class":595}," >=",[385,804,805],{"class":773}," hi",[385,807,633],{"class":423},[385,809,811,814,816,819],{"class":387,"line":810},28,[385,812,813],{"class":781},"        then",[385,815,770],{"class":595},[385,817,818],{"class":773},"Gated",[385,820,624],{"class":423},[385,822,824,827,829,832,835,839,843,845],{"class":387,"line":823},29,[385,825,826],{"class":781},"            gate",[385,828,770],{"class":595},[385,830,831],{"class":773},"ClassGate",[385,833,834],{"class":423},"(",[385,836,838],{"class":837},"sjJ54","\"",[385,840,842],{"class":841},"s_sjI","category",[385,844,838],{"class":837},[385,846,847],{"class":423},"),\n",[385,849,851,854,856,858],{"class":387,"line":850},30,[385,852,853],{"class":781},"            then",[385,855,770],{"class":595},[385,857,362],{"class":773},[385,859,624],{"class":423},[385,861,863,866,868,871,873,875,878,880],{"class":387,"line":862},31,[385,864,865],{"class":781},"                cost",[385,867,770],{"class":595},[385,869,870],{"class":773},"Cosine",[385,872,834],{"class":423},[385,874,838],{"class":837},[385,876,877],{"class":841},"embedding",[385,879,838],{"class":837},[385,881,847],{"class":423},[385,883,885,888,890,893,895,898,900,903,905,908],{"class":387,"line":884},32,[385,886,887],{"class":781},"                assoc",[385,889,770],{"class":595},[385,891,892],{"class":773},"Associate",[385,894,834],{"class":423},[385,896,897],{"class":773},"Jonker",[385,899,834],{"class":423},[385,901,902],{"class":781},"threshold",[385,904,770],{"class":595},[385,906,907],{"class":773},"cos_threshold",[385,909,910],{"class":423},")),\n",[385,912,914],{"class":387,"line":913},33,[385,915,916],{"class":423},"            ),\n",[385,918,920],{"class":387,"line":919},34,[385,921,922],{"class":423},"        ),\n",[385,924,926,929,931,933,936,938],{"class":387,"line":925},35,[385,927,928],{"class":781},"        on",[385,930,770],{"class":595},[385,932,838],{"class":837},[385,934,935],{"class":841},"ds",[385,937,838],{"class":837},[385,939,633],{"class":423},[385,941,943],{"class":387,"line":942},36,[385,944,945],{"class":423},"    )\n",[385,947,949,952,954,956],{"class":387,"line":948},37,[385,950,951],{"class":395},"    lo_stage ",[385,953,770],{"class":595},[385,955,533],{"class":773},[385,957,624],{"class":423},[385,959,961,963,965,967,969,971,973,975,977,980,982],{"class":387,"line":960},38,[385,962,782],{"class":781},[385,964,770],{"class":595},[385,966,787],{"class":616},[385,968,790],{"class":639},[385,970,643],{"class":423},[385,972,790],{"class":773},[385,974,424],{"class":423},[385,976,799],{"class":744},[385,978,979],{"class":595}," \u003C",[385,981,805],{"class":773},[385,983,633],{"class":423},[385,985,987,989,991,993],{"class":387,"line":986},39,[385,988,813],{"class":781},[385,990,770],{"class":595},[385,992,818],{"class":773},[385,994,624],{"class":423},[385,996,998,1000,1002,1004,1006,1008,1010,1012],{"class":387,"line":997},40,[385,999,826],{"class":781},[385,1001,770],{"class":595},[385,1003,831],{"class":773},[385,1005,834],{"class":423},[385,1007,838],{"class":837},[385,1009,842],{"class":841},[385,1011,838],{"class":837},[385,1013,847],{"class":423},[385,1015,1017,1019,1021,1023],{"class":387,"line":1016},41,[385,1018,853],{"class":781},[385,1020,770],{"class":595},[385,1022,362],{"class":773},[385,1024,624],{"class":423},[385,1026,1028,1030,1032,1035,1037,1039,1042,1044],{"class":387,"line":1027},42,[385,1029,865],{"class":781},[385,1031,770],{"class":595},[385,1033,1034],{"class":773},"MaskIoU",[385,1036,834],{"class":423},[385,1038,838],{"class":837},[385,1040,1041],{"class":841},"mask",[385,1043,838],{"class":837},[385,1045,847],{"class":423},[385,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1068],{"class":387,"line":1048},43,[385,1050,887],{"class":781},[385,1052,770],{"class":595},[385,1054,892],{"class":773},[385,1056,834],{"class":423},[385,1058,897],{"class":773},[385,1060,834],{"class":423},[385,1062,902],{"class":781},[385,1064,770],{"class":595},[385,1066,1067],{"class":773},"iou_threshold",[385,1069,910],{"class":423},[385,1071,1073],{"class":387,"line":1072},44,[385,1074,916],{"class":423},[385,1076,1078],{"class":387,"line":1077},45,[385,1079,922],{"class":423},[385,1081,1083,1085,1087,1089,1091,1093],{"class":387,"line":1082},46,[385,1084,928],{"class":781},[385,1086,770],{"class":595},[385,1088,838],{"class":837},[385,1090,935],{"class":841},[385,1092,838],{"class":837},[385,1094,633],{"class":423},[385,1096,1098],{"class":387,"line":1097},47,[385,1099,945],{"class":423},[385,1101,1103,1106,1108,1111,1114,1117,1119,1122],{"class":387,"line":1102},48,[385,1104,1105],{"class":395},"    pipeline ",[385,1107,770],{"class":595},[385,1109,1110],{"class":773}," Sequential",[385,1112,1113],{"class":423},"([",[385,1115,1116],{"class":773},"hi_stage",[385,1118,435],{"class":423},[385,1120,1121],{"class":773}," lo_stage",[385,1123,1124],{"class":423},"])\n",[385,1126,1128,1131,1133,1135,1137],{"class":387,"line":1127},49,[385,1129,1130],{"class":391},"    return",[385,1132,420],{"class":395},[385,1134,424],{"class":423},[385,1136,745],{"class":773},[385,1138,624],{"class":423},[385,1140,1142,1145,1147,1149],{"class":387,"line":1141},50,[385,1143,1144],{"class":781},"        root",[385,1146,770],{"class":595},[385,1148,256],{"class":773},[385,1150,633],{"class":423},[385,1152,1154,1157,1159],{"class":387,"line":1153},51,[385,1155,1156],{"class":781},"        states",[385,1158,770],{"class":595},[385,1160,1161],{"class":423},"{\n",[385,1163,1165,1168,1170,1172,1174,1177],{"class":387,"line":1164},52,[385,1166,1167],{"class":837},"            \"",[385,1169,877],{"class":841},[385,1171,838],{"class":837},[385,1173,643],{"class":423},[385,1175,1176],{"class":773}," State",[385,1178,624],{"class":423},[385,1180,1182,1185,1187,1190,1192,1195,1197,1199,1202,1205,1208,1210,1213,1215,1218],{"class":387,"line":1181},53,[385,1183,1184],{"class":781},"                schema",[385,1186,770],{"class":595},[385,1188,1189],{"class":773},"TensorSpec",[385,1191,834],{"class":423},[385,1193,1194],{"class":781},"shape",[385,1196,770],{"class":595},[385,1198,834],{"class":423},[385,1200,1201],{"class":773},"embed_dim",[385,1203,1204],{"class":423},",),",[385,1206,1207],{"class":781}," dtype",[385,1209,770],{"class":595},[385,1211,1212],{"class":773},"torch",[385,1214,424],{"class":423},[385,1216,1217],{"class":744},"float32",[385,1219,847],{"class":423},[385,1221,1223,1226,1228,1231,1233,1235,1237,1239],{"class":387,"line":1222},54,[385,1224,1225],{"class":781},"                process",[385,1227,770],{"class":595},[385,1229,1230],{"class":773},"Identity",[385,1232,834],{"class":423},[385,1234,838],{"class":837},[385,1236,877],{"class":841},[385,1238,838],{"class":837},[385,1240,847],{"class":423},[385,1242,1244,1247,1249,1252,1254,1256,1258,1260],{"class":387,"line":1243},55,[385,1245,1246],{"class":781},"                observation",[385,1248,770],{"class":595},[385,1250,1251],{"class":773},"Replace",[385,1253,834],{"class":423},[385,1255,838],{"class":837},[385,1257,877],{"class":841},[385,1259,838],{"class":837},[385,1261,847],{"class":423},[385,1263,1265,1268,1270,1273,1275,1277,1279,1281],{"class":387,"line":1264},56,[385,1266,1267],{"class":781},"                init",[385,1269,770],{"class":595},[385,1271,1272],{"class":773},"FromDetectionField",[385,1274,834],{"class":423},[385,1276,838],{"class":837},[385,1278,877],{"class":841},[385,1280,838],{"class":837},[385,1282,847],{"class":423},[385,1284,1286],{"class":387,"line":1285},57,[385,1287,916],{"class":423},[385,1289,1291,1293,1295,1297,1299,1301],{"class":387,"line":1290},58,[385,1292,1167],{"class":837},[385,1294,1041],{"class":841},[385,1296,838],{"class":837},[385,1298,643],{"class":423},[385,1300,1176],{"class":773},[385,1302,624],{"class":423},[385,1304,1306,1308,1310,1312,1314,1316,1318,1320,1323,1325,1328,1331,1333,1335,1337,1339,1342],{"class":387,"line":1305},59,[385,1307,1184],{"class":781},[385,1309,770],{"class":595},[385,1311,1189],{"class":773},[385,1313,834],{"class":423},[385,1315,1194],{"class":781},[385,1317,770],{"class":595},[385,1319,834],{"class":423},[385,1321,1322],{"class":773},"height",[385,1324,435],{"class":423},[385,1326,1327],{"class":773}," width",[385,1329,1330],{"class":423},"),",[385,1332,1207],{"class":781},[385,1334,770],{"class":595},[385,1336,1212],{"class":773},[385,1338,424],{"class":423},[385,1340,1341],{"class":744},"bool",[385,1343,847],{"class":423},[385,1345,1347,1349,1351,1353,1355,1357,1359,1361],{"class":387,"line":1346},60,[385,1348,1225],{"class":781},[385,1350,770],{"class":595},[385,1352,1230],{"class":773},[385,1354,834],{"class":423},[385,1356,838],{"class":837},[385,1358,1041],{"class":841},[385,1360,838],{"class":837},[385,1362,847],{"class":423},[385,1364,1366,1368,1370,1372,1374,1376,1378,1380],{"class":387,"line":1365},61,[385,1367,1246],{"class":781},[385,1369,770],{"class":595},[385,1371,1251],{"class":773},[385,1373,834],{"class":423},[385,1375,838],{"class":837},[385,1377,1041],{"class":841},[385,1379,838],{"class":837},[385,1381,847],{"class":423},[385,1383,1385,1387,1389,1391,1393,1395,1397,1399],{"class":387,"line":1384},62,[385,1386,1267],{"class":781},[385,1388,770],{"class":595},[385,1390,1272],{"class":773},[385,1392,834],{"class":423},[385,1394,838],{"class":837},[385,1396,1041],{"class":841},[385,1398,838],{"class":837},[385,1400,847],{"class":423},[385,1402,1404],{"class":387,"line":1403},63,[385,1405,916],{"class":423},[385,1407,1409,1411,1413,1415,1417,1419],{"class":387,"line":1408},64,[385,1410,1167],{"class":837},[385,1412,842],{"class":841},[385,1414,838],{"class":837},[385,1416,643],{"class":423},[385,1418,1176],{"class":773},[385,1420,624],{"class":423},[385,1422,1424,1426,1428,1430,1432,1434,1436,1439,1441,1443,1445,1447,1450],{"class":387,"line":1423},65,[385,1425,1184],{"class":781},[385,1427,770],{"class":595},[385,1429,1189],{"class":773},[385,1431,834],{"class":423},[385,1433,1194],{"class":781},[385,1435,770],{"class":595},[385,1437,1438],{"class":423},"(),",[385,1440,1207],{"class":781},[385,1442,770],{"class":595},[385,1444,1212],{"class":773},[385,1446,424],{"class":423},[385,1448,1449],{"class":744},"int64",[385,1451,847],{"class":423},[385,1453,1455,1457,1459,1461,1463,1465,1467,1469],{"class":387,"line":1454},66,[385,1456,1225],{"class":781},[385,1458,770],{"class":595},[385,1460,1230],{"class":773},[385,1462,834],{"class":423},[385,1464,838],{"class":837},[385,1466,842],{"class":841},[385,1468,838],{"class":837},[385,1470,847],{"class":423},[385,1472,1474,1476,1478,1480,1482,1484,1486,1488],{"class":387,"line":1473},67,[385,1475,1246],{"class":781},[385,1477,770],{"class":595},[385,1479,1251],{"class":773},[385,1481,834],{"class":423},[385,1483,838],{"class":837},[385,1485,842],{"class":841},[385,1487,838],{"class":837},[385,1489,847],{"class":423},[385,1491,1493,1495,1497,1499,1501,1503,1505,1507],{"class":387,"line":1492},68,[385,1494,1267],{"class":781},[385,1496,770],{"class":595},[385,1498,1272],{"class":773},[385,1500,834],{"class":423},[385,1502,838],{"class":837},[385,1504,842],{"class":841},[385,1506,838],{"class":837},[385,1508,847],{"class":423},[385,1510,1512],{"class":387,"line":1511},69,[385,1513,916],{"class":423},[385,1515,1517,1519,1521,1523,1525,1527],{"class":387,"line":1516},70,[385,1518,1167],{"class":837},[385,1520,799],{"class":841},[385,1522,838],{"class":837},[385,1524,643],{"class":423},[385,1526,1176],{"class":773},[385,1528,624],{"class":423},[385,1530,1532,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554,1556],{"class":387,"line":1531},71,[385,1533,1184],{"class":781},[385,1535,770],{"class":595},[385,1537,1189],{"class":773},[385,1539,834],{"class":423},[385,1541,1194],{"class":781},[385,1543,770],{"class":595},[385,1545,1438],{"class":423},[385,1547,1207],{"class":781},[385,1549,770],{"class":595},[385,1551,1212],{"class":773},[385,1553,424],{"class":423},[385,1555,1217],{"class":744},[385,1557,847],{"class":423},[385,1559,1561,1563,1565,1567,1569,1571,1573,1575],{"class":387,"line":1560},72,[385,1562,1225],{"class":781},[385,1564,770],{"class":595},[385,1566,1230],{"class":773},[385,1568,834],{"class":423},[385,1570,838],{"class":837},[385,1572,799],{"class":841},[385,1574,838],{"class":837},[385,1576,847],{"class":423},[385,1578,1580,1582,1584,1586,1588,1590,1592,1594],{"class":387,"line":1579},73,[385,1581,1246],{"class":781},[385,1583,770],{"class":595},[385,1585,1251],{"class":773},[385,1587,834],{"class":423},[385,1589,838],{"class":837},[385,1591,799],{"class":841},[385,1593,838],{"class":837},[385,1595,847],{"class":423},[385,1597,1599,1601,1603,1605,1607,1609,1611,1613],{"class":387,"line":1598},74,[385,1600,1267],{"class":781},[385,1602,770],{"class":595},[385,1604,1272],{"class":773},[385,1606,834],{"class":423},[385,1608,838],{"class":837},[385,1610,799],{"class":841},[385,1612,838],{"class":837},[385,1614,847],{"class":423},[385,1616,1618],{"class":387,"line":1617},75,[385,1619,916],{"class":423},[385,1621,1623],{"class":387,"line":1622},76,[385,1624,1625],{"class":423},"        },\n",[385,1627,1629,1632,1634,1637],{"class":387,"line":1628},77,[385,1630,1631],{"class":781},"        lifecycle",[385,1633,770],{"class":595},[385,1635,1636],{"class":773},"NoLifecycle",[385,1638,1639],{"class":423},"(),\n",[385,1641,1643,1646,1648,1651],{"class":387,"line":1642},78,[385,1644,1645],{"class":781},"        visibility",[385,1647,770],{"class":595},[385,1649,1650],{"class":773},"IncludeAll",[385,1652,1639],{"class":423},[385,1654,1656],{"class":387,"line":1655},79,[385,1657,945],{"class":423},[338,1659,1660],{},"Detection requirements:",[1662,1663,1664,1674,1682,1693],"ul",{},[1665,1666,1667,1669,1670,1673],"li",{},[345,1668,877],{}," — ",[345,1671,1672],{},"(M, embed_dim)"," appearance vectors for the high-score stage.",[1665,1675,1676,1669,1678,1681],{},[345,1677,1041],{},[345,1679,1680],{},"(M, height, width)"," boolean instance masks for the low-score stage.",[1665,1683,1684,1669,1686,1689,1690,1692],{},[345,1685,842],{},[345,1687,1688],{},"(M,)"," int64 semantic class, for the ",[345,1691,831],{}," in each stage.",[1665,1694,1695,1669,1697,1699,1700,1702],{},[345,1696,799],{},[345,1698,1688],{}," float32 confidence, used by the ",[345,1701,351],{}," split predicates.",[1704,1705,1706],"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 .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 .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":381,"searchDepth":406,"depth":406,"links":1708},[],"md",{},{"title":14,"description":340},"KIr6v-T9LO8tjoTKx3vE33YGsAmFS55Hbyj1AaTvSkc",{},1785139881971]