{"version":2,"relationshipURLBase":"https://codingai-lec03.pages.dev/course/notebook-blocks/ef7e83a286ba4b14912267d87243dc13.html","relationshipResolution":"Resolve relative relationship URLs against relationshipURLBase; complete records and absolute URLs are in blocks.","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/ef7e83a286ba4b14912267d87243dc13.html","markdown":"https://codingai-lec03.pages.dev/course/notebook-blocks/ef7e83a286ba4b14912267d87243dc13.md","pages":[{"id":"reading-opening","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","unit":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","unitId":"notebook-blocks/ef7e83a286ba4b14912267d87243dc13","chapter":"course","number":1}],"aliases":[{"oldId":"b-490b74e1a033d107532c9ea8","targetId":"b-490b74e1a033d107532c9ea8","page":"reading-opening","operation":"move","beforeSHA256":"9027342eb8430f11699811edb871aeb2e37b28e9f874a2aa48778e6bac2818b7","afterSHA256":"9027342eb8430f11699811edb871aeb2e37b28e9f874a2aa48778e6bac2818b7","reason":"Same source body in authored semantic page"},{"oldId":"b-b11f1731c43a0584f5cff2a1","targetId":"b-b11f1731c43a0584f5cff2a1","page":"reading-opening","operation":"move","beforeSHA256":"76ff715cad09332c28a44d7921074331c1f89e94729be61e7858cf7f9692f782","afterSHA256":"76ff715cad09332c28a44d7921074331c1f89e94729be61e7858cf7f9692f782","reason":"Same source body in authored semantic page"},{"oldId":"b-23e6bdaf12c762c688be5552","targetId":"b-23e6bdaf12c762c688be5552","page":"reading-opening","operation":"move","beforeSHA256":"dc06c1e728a4b5740ba634b145bc9a1da6323031626734cb4555db5a744df806","afterSHA256":"dc06c1e728a4b5740ba634b145bc9a1da6323031626734cb4555db5a744df806","reason":"Same source body in authored semantic page"},{"oldId":"b-efaedfbbb18293683723899c","targetId":"b-efaedfbbb18293683723899c","page":"reading-opening","operation":"move","beforeSHA256":"4e0de6d032a3765c60907de32f28cd988b659299663e842d319bdb0426243d78","afterSHA256":"4e0de6d032a3765c60907de32f28cd988b659299663e842d319bdb0426243d78","reason":"Same source body in authored semantic page"},{"oldId":"b-aba79d11a19b0e39e511fa0d","targetId":"b-aba79d11a19b0e39e511fa0d","page":"reading-opening","operation":"move","beforeSHA256":"2255662c7f11f30dc784b35f6dbd86c8f8eb4e4be25419eb2f70503c20798c9b","afterSHA256":"2255662c7f11f30dc784b35f6dbd86c8f8eb4e4be25419eb2f70503c20798c9b","reason":"Same source body in authored semantic page"}],"blocks":[{"id":"b-490b74e1a033d107532c9ea8","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/ef7e83a286ba4b14912267d87243dc13.html#b-490b74e1a033d107532c9ea8","content":"[LAB 09 · 检测几何：框、匹配、NMS 与 AP](/course/notebooks/90d213b4e1e04c7e889ee6fc042b2358.html)","sha256":"9027342eb8430f11699811edb871aeb2e37b28e9f874a2aa48778e6bac2818b7","chapter":{"id":"course","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"unit":{"id":"notebook-blocks/ef7e83a286ba4b14912267d87243dc13","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"page":{"id":"reading-opening","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","number":1},"sectionTitle":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","currentQuestion":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-b11f1731c43a0584f5cff2a1","prerequisites":[],"relatedBlocks":[]},{"id":"b-b11f1731c43a0584f5cff2a1","type":"h1","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/ef7e83a286ba4b14912267d87243dc13.html#b-b11f1731c43a0584f5cff2a1","content":"# 2 · 训练分配和评价匹配解决两个问题 · 实现代码","sha256":"76ff715cad09332c28a44d7921074331c1f89e94729be61e7858cf7f9692f782","chapter":{"id":"course","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"unit":{"id":"notebook-blocks/ef7e83a286ba4b14912267d87243dc13","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"page":{"id":"reading-opening","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","number":1},"sectionTitle":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","currentQuestion":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-490b74e1a033d107532c9ea8","nextBlock":"b-23e6bdaf12c762c688be5552","prerequisites":[{"id":"b-490b74e1a033d107532c9ea8","url":"#b-490b74e1a033d107532c9ea8","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-23e6bdaf12c762c688be5552","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/ef7e83a286ba4b14912267d87243dc13.html#b-23e6bdaf12c762c688be5552","content":"并入相关学习路径","sha256":"dc06c1e728a4b5740ba634b145bc9a1da6323031626734cb4555db5a744df806","chapter":{"id":"course","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"unit":{"id":"notebook-blocks/ef7e83a286ba4b14912267d87243dc13","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"page":{"id":"reading-opening","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","number":1},"sectionTitle":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","currentQuestion":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-b11f1731c43a0584f5cff2a1","nextBlock":"b-efaedfbbb18293683723899c","prerequisites":[{"id":"b-b11f1731c43a0584f5cff2a1","url":"#b-b11f1731c43a0584f5cff2a1","role":"section-title"},{"id":"b-490b74e1a033d107532c9ea8","url":"#b-490b74e1a033d107532c9ea8","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-efaedfbbb18293683723899c","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/ef7e83a286ba4b14912267d87243dc13.html#b-efaedfbbb18293683723899c","content":"固定框匹配、PR/AP、NMS误删相邻对象反例","sha256":"4e0de6d032a3765c60907de32f28cd988b659299663e842d319bdb0426243d78","chapter":{"id":"course","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"unit":{"id":"notebook-blocks/ef7e83a286ba4b14912267d87243dc13","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"page":{"id":"reading-opening","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","number":1},"sectionTitle":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","currentQuestion":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-23e6bdaf12c762c688be5552","nextBlock":"b-aba79d11a19b0e39e511fa0d","prerequisites":[{"id":"b-b11f1731c43a0584f5cff2a1","url":"#b-b11f1731c43a0584f5cff2a1","role":"section-title"},{"id":"b-490b74e1a033d107532c9ea8","url":"#b-490b74e1a033d107532c9ea8","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-aba79d11a19b0e39e511fa0d","type":"pre","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/ef7e83a286ba4b14912267d87243dc13.html#b-aba79d11a19b0e39e511fa0d","content":"```\ndef assign_training_anchors(anchors, gt_boxes, positive_iou=0.50):\n    \"\"\"D2L-style target assignment: threshold positives + forced GT coverage.\n\n    One anchor has at most one GT, but several anchors may target the same GT.\n    Returns GT index per anchor (-1 means background in this simplified lab).\n    Scores and predicted classes are intentionally absent from the inputs.\n    \"\"\"\n    if not 0 <= positive_iou <= 1:\n        raise ValueError(\"positive_iou must be in [0,1]\")\n    ious = box_iou(anchors, gt_boxes)\n    n_anchor, n_gt = ious.shape\n    assigned = np.full(n_anchor, -1, dtype=int)\n    forced = np.zeros(n_anchor, dtype=bool)\n    if n_gt == 0:\n        return assigned, forced\n    if n_anchor < n_gt:\n        raise ValueError(\"Forced GT coverage requires anchors >= GTs\")\n    best_gt = ious.argmax(axis=1)\n    best_iou = ious[np.arange(n_anchor), best_gt]\n    positive = best_iou >= positive_iou\n    assigned[positive] = best_gt[positive]\n    remaining = ious.copy()\n    for _ in range(n_gt):\n        anchor_i, gt_i = np.unravel_index(np.argmax(remaining), remaining.shape)\n        assigned[anchor_i] = gt_i\n        forced[anchor_i] = True\n        remaining[anchor_i, :] = -1.0\n        remaining[:, gt_i] = -1.0\n    return assigned, forced\n\nprint(\"0-based GT targets (-1=background):\", assign_training_anchors(PRED, GT)[0])\n```","sha256":"2255662c7f11f30dc784b35f6dbd86c8f8eb4e4be25419eb2f70503c20798c9b","chapter":{"id":"course","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"unit":{"id":"notebook-blocks/ef7e83a286ba4b14912267d87243dc13","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码"},"page":{"id":"reading-opening","title":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","number":1},"sectionTitle":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","currentQuestion":"2 · 训练分配和评价匹配解决两个问题 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-efaedfbbb18293683723899c","nextBlock":null,"prerequisites":[{"id":"b-b11f1731c43a0584f5cff2a1","url":"#b-b11f1731c43a0584f5cff2a1","role":"section-title"},{"id":"b-490b74e1a033d107532c9ea8","url":"#b-490b74e1a033d107532c9ea8","role":"problem-context"}],"relatedBlocks":[]}]}
