[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"solution-scenes-menu":3,"tech-detail-2558":4},true,{"id":5,"title":6,"content":7,"picUrl":8,"tagIds":9,"keyWords":10,"htmlDescribe":11,"htmlUrl":12,"gmtCreate":13,"gmtModified":13,"articleInfoId":14},"2558","畅联云平台丨02-Tile滑窗与NMS去重","\u003Ch1 style=\"line-height:2\">Tile 滑窗与 NMS 去重：高分辨率人体检测的几何与抑制\u003C\u002Fh1>\u003Cp style=\"line-height:2\">本文讲透一件事：当原图远大于检测网络固定输入（如 640×640）时，本项目如何用 Tile 滑窗 保住远处小目标的像素密度，再用 核心区归属 + NMS \u002F prefer-face NMS + 形态过滤 把重叠报告压回「一人一框」。重点不是「切块很常见」，而是网格如何选、正方形 tile 为何强制、中心落在重叠带为何丢弃、IoU 阈值与有脸偏好如何改写淘汰规则。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">一、问题定义：整帧缩放为何会「看不见人」\u003C\u002Fh1>\u003Cp style=\"line-height:2\">检测网络对目标在输入张量上的像素高度有下限。监控源常见 1920×1080、2560×1440、3840×2160，而 YOLO 输入边长常固定为 640。若整帧 letterbox：\u003C\u002Fp>\u003Cp style=\"line-height:2\">scale_full ≈ 640 \u002F max(W, H)\u003C\u002Fp>\u003Cp style=\"line-height:2\">人身高_in_net ≈ 人身高_原图 × scale_full\u003C\u002Fp>\u003Cp style=\"line-height:2\">数值例子（3840×2160，人身高 80 px）：\u003C\u002Fp>\u003Cp style=\"line-height:2\">scale_full = 640\u002F3840 ≈ 0.1667\u003C\u002Fp>\u003Cp style=\"line-height:2\">人在网络上 ≈ 80 × 0.1667 ≈ 13.3 px\u003C\u002Fp>\u003Cp style=\"line-height:2\">13 像素高的人，特征几乎塌成噪声；召回断崖。若把同一人切进约 1280 边长的 tile 再 letterbox 到 640：\u003C\u002Fp>\u003Cp style=\"line-height:2\">scale_tile ≈ 640\u002F1280 = 0.5\u003C\u002Fp>\u003Cp style=\"line-height:2\">人在网络上 ≈ 80 × 0.5 = 40 px\u003C\u002Fp>\u003Cp style=\"line-height:2\">同样的人，像素密度大约翻了三倍。Tile 的本质不是「多画几条网格线」，而是用多次局部推理换取「人物在网络输入里仍有足够像素」。\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002F4acd44a6-b1f9-4e7c-8053-ea804d48782b.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cspan style=\"font-size:12px\">图：高分辨率帧划成 G×G 网格；tile 边长大于步长，相邻块形成重叠带，跨缝的人至少能完整落入一块。\u003C\u002Fspan>\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">二、何时启用 Tile：分辨率门槛\u003C\u002Fh1>\u003Cp style=\"line-height:2\">按帧规划 Tile 的第一道闸：\u003C\u002Fp>\u003Cp style=\"line-height:2\">含义：\u003C\u002Fp>\u003Cul>\u003Cli style=\"line-height:2\">宽 &lt; 1280 且 高 &lt; 720：返回空 plan（grid&lt;=0），不做滑窗，整帧一次检测足够；\u003C\u002Fli>\u003Cli style=\"line-height:2\">否则进入网格规划。\u003C\u002Fli>\u003C\u002Ful>\u003Cp style=\"line-height:2\">注意是 AND 不是 OR：一张 1920×600 的超宽条（高不足 720）仍会触发 Tile，因为宽 ≥1280。一张 800×900 的竖图（宽不足 1280）若高 ≥720 也会触发。只有「两边都偏小」才跳过。\u003C\u002Fp>\u003Cp style=\"line-height:2\">失败模式： 若把条件误写成 ||，大量 720p 竖拍会无意义地跑 9～16 次推理；若误写成只看宽，竖屏 1080×1920 可能永远不 Tile，远人永久漏检。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1>三、网格密度：4K 用 4，其余用 3\u003C\u002Fh1>\u003Cp>\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002F1b5d7abc-6266-46a3-9684-54644229b73a.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"line-height:2\">「误检更少」来自：同一物理噪声（衣架、海报人形）在更大 tile 里相对更小，分数不易过阈；网格过密时噪声也更容易被「放大」成候选。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">四、重叠率、base 与正方形 tile_side\u003C\u002Fh1>\u003Cp style=\"line-height:2\">核心公式由按帧规划 Tile 给出：\u003C\u002Fp>\u003Cp style=\"line-height:2\">拆开：\u003C\u002Fp>\u003Col>\u003Cli style=\"line-height:2\">overlap = 0.25：相对 base 放大 25%，制造重叠带；\u003C\u002Fli>\u003Cli style=\"line-height:2\">base_w\u002Fh = frame \u002F grid（下限 320）：无重叠时的「格子」尺寸，也是 步长 step；\u003C\u002Fli>\u003Cli style=\"line-height:2\">tile_side = max(640, max(base_w, base_h)×1.25)：强制 正方形 tile；\u003C\u002Fli>\u003Cli style=\"line-height:2\">step = base：滑窗步进等于 base，不是 tile。\u003C\u002Fli>\u003C\u002Fol>\u003Cp style=\"line-height:2\">网格与 tile 边长规划：\u003C\u002Fp>\u003Cpre>\u003Ccode>PersonFocusYoloTilePlan person_focus_yolo_tile_plan_for_frame(int frame_w, int frame_h) {\n PersonFocusYoloTilePlan plan;\n if (frame_w &lt; 1280 &amp;&amp; frame_h &lt; 720) return plan; \u002F\u002F 不切块\n plan.grid = (frame_w &gt;= 3840 || frame_h &gt;= 2160) ? 4 : 3;\n const double overlap = 0.25;\n const int base_w = std::max(320, (int)std::lround((double)frame_w \u002F plan.grid));\n const int base_h = std::max(320, (int)std::lround((double)frame_h \u002F plan.grid));\n const int tile_side = std::max(640, (int)std::lround(std::max(base_w, base_h) * (1.0 + overlap)));\n plan.tile_w = std::min(frame_w, tile_side);\n plan.tile_h = std::min(frame_h, tile_side);\n plan.step_x = std::max(320, base_w);\n plan.step_y = std::max(320, base_h);\n return plan;\n}\r\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp style=\"line-height:2\">\u003Cstrong>为何强制正方形？\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp style=\"line-height:2\">注释写得很直白：避免 2K 下出现类似 800×450 的扁条。扁条 letterbox 到 640 时，纵向有效像素被压得很矮，站立人体在网络里「又矮又糊」。取 max(base_w, base_h) 再 ×1.25，保证短边方向也有足够视野与像素。\u003C\u002Fp>\u003Cp style=\"line-height:2\">\u003Cstrong>数值例子 A：1920×1080，grid =3\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp style=\"line-height:2\">base_w = round(1920\u002F3) = 640\u003C\u002Fp>\u003Cp style=\"line-height:2\">base_h = round(1080\u002F3) = 360\u003C\u002Fp>\u003Cp style=\"line-height:2\">tile_side = max(640, max(640,360)×1.25) = max(640, 800) = 800\u003C\u002Fp>\u003Cp style=\"line-height:2\">tile_w = tile_h = 800\u003C\u002Fp>\u003Cp style=\"line-height:2\">step_x = 640, step_y = 360\u003C\u002Fp>\u003Cp style=\"line-height:2\">水平方向：tile 800、步长 640 → 重叠宽度约 (800-640)=160，即每侧约 80 像素的归属争议带。\u003C\u002Fp>\u003Cp style=\"line-height:2\">垂直方向：tile 800、步长 360 → 重叠更大（正方形相对扁格子「探」得更远）。\u003C\u002Fp>\u003Cp style=\"line-height:2\">\u003Cstrong>数值例子 B：3840×2160，grid=4\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp style=\"line-height:2\">base_w = 960, base_h = 540\u003C\u002Fp>\u003Cp style=\"line-height:2\">tile_side = max(640, 960×1.25) = 1200\u003C\u002Fp>\u003Cp style=\"line-height:2\">step_x = 960, step_y = 540\u003C\u002Fp>\u003Cp style=\"line-height:2\">人站在两块水平缝上时，只要身体水平跨度不超过重叠量级，至少一块能包住完整躯干。\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002Ff59252a4-03c1-4c21-8a15-7b1eafa01229.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cspan style=\"font-size:12px\">图：每个 tile 的边缘重叠带不「认领」框；只有中心落在非重叠核心区（core）的检测框才保留，从源头减少跨块重复。\u003C\u002Fspan>\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">五、 ROI 起点如何摆：居中回退\u003C\u002Fh1>\u003Cp style=\"line-height:2\">直觉：\u003C\u002Fp>\u003Cul>\u003Cli style=\"line-height:2\">理想起点 = g×step - (tile-step)\u002F2，让重叠关于格子对称；\u003C\u002Fli>\u003Cli style=\"line-height:2\">再夹到 [0, W-tile]，避免右下角越界；\u003C\u002Fli>\u003Cli style=\"line-height:2\">roi.width &lt; 320 || roi.height &lt; 320 的残片直接跳过。\u003C\u002Fli>\u003C\u002Ful>\u003Cp style=\"line-height:2\">失败模式： 若起点只写 gx*step 且不回退，最后一列可能只剩很窄的条；若回退公式用错符号，整行网格会整体错位，框呈「周期性平移」。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">六、核心区过滤：中心不在 core 就丢\u003C\u002Fh1>\u003Cp style=\"line-height:2\">重叠带来的副作用是：同一人会在相邻 tile 各报一次。本项目不只靠事后 NMS，还在合并 前做 中心归属：\u003C\u002Fp>\u003Cp style=\"line-height:2\">要点：\u003C\u002Fp>\u003Cul>\u003Cli style=\"line-height:2\">用框中心，不用整框 IoU；半身残框若中心仍落在 core，仍可保留；\u003C\u002Fli>\u003Cli style=\"line-height:2\">画幅边缘的 tile：贴边一侧 margin=0，否则靠边的人中心永远进不了 core；\u003C\u002Fli>\u003Cli style=\"line-height:2\">margin = (tile - step)\u002F2 正是重叠带的一半宽度。\u003C\u002Fli>\u003C\u002Ful>\u003Cp style=\"line-height:2\">中心是否落在非重叠 core：\u003C\u002Fp>\u003Cpre>\u003Ccode>bool person_focus_yolo_box_center_in_tile_core(int frame_w, int frame_h, const cv::Rect &amp;tile_roi,\n const PersonFocusYoloTilePlan &amp;plan,\n const PersonFocusPersonBox &amp;box) {\n const float cx = box.x + box.w * 0.5f;\n const float cy = box.y + box.h * 0.5f;\n const int margin_x = std::max(0, (plan.tile_w - plan.step_x) \u002F 2);\n const int margin_y = std::max(0, (plan.tile_h - plan.step_y) \u002F 2);\n const int left = tile_roi.x + (tile_roi.x &gt; 0 ? margin_x : 0);\n const int top = tile_roi.y + (tile_roi.y &gt; 0 ? margin_y : 0);\n const int right = tile_roi.x + tile_roi.width - (tile_roi.x + tile_roi.width &lt; frame_w ? margin_x : 0);\n const int bottom = tile_roi.y + tile_roi.height - (tile_roi.y + tile_roi.height &lt; frame_h ? margin_y : 0);\n return cx &gt;= (float)left &amp;&amp; cx &lt; (float)right &amp;&amp; cy &gt;= (float)top &amp;&amp; cy &lt; (float)bottom;\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp style=\"line-height:2\">\u003Cstrong>数值例子（接 1920×1080）\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp style=\"line-height:2\">某内陆 tile：x0=560, y0=180, w=800, h=800（示意），margin_x=(800-640)\u002F2=80，margin_y=(800-360)\u002F2=220。\u003C\u002Fp>\u003Cp style=\"line-height:2\">core: left=560+80=640, right=560+800-80=1280\u003C\u002Fp>\u003Cp style=\"line-height:2\">top=180+220=400, bottom=180+800-220=760\u003C\u002Fp>\u003Cp style=\"line-height:2\">若人中心 (cx,cy)=(620,500)：落在左重叠带 → 本 tile 丢弃（应归左侧邻居）。\u003C\u002Fp>\u003Cp style=\"line-height:2\">若中心 (700,500)：在 core → 保留。\u003C\u002Fp>\u003Cp style=\"line-height:2\">失败模式：\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002F4e77246e-c7aa-4e51-9d2e-5b30bd6ab523.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"line-height:2\">Core 过滤是 硬几何先验：先减少候选，再让 NMS 收拾残余。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">七、坐标映射：tile 局部 → 全图\u003C\u002Fh1>\u003Cp style=\"line-height:2\">每个 tile 裁切后再 letterbox 进网络。框还原顺序必须是：\u003C\u002Fp>\u003Col>\u003Cli style=\"line-height:2\">letterbox 坐标 → 去 pad、除 scale → tile 图像坐标；\u003C\u002Fli>\u003Cli style=\"line-height:2\">加上 (tile_x0, tile_y0) → 全图坐标；\u003C\u002Fli>\u003Cli style=\"line-height:2\">与全图边界求交。\u003C\u002Fli>\u003C\u002Fol>\u003Cp style=\"line-height:2\">写成：\u003C\u002Fp>\u003Cp style=\"line-height:2\">x_full = (x_lb - pad_x) \u002F scale + tile_x0\u003C\u002Fp>\u003Cp style=\"line-height:2\">y_full = (y_lb - pad_y) \u002F scale + tile_y0\u003C\u002Fp>\u003Cp style=\"line-height:2\">w_full = w_lb \u002F scale\u003C\u002Fp>\u003Cp style=\"line-height:2\">h_full = h_lb \u002F scale\u003C\u002Fp>\u003Cp style=\"line-height:2\">调试口诀：\u003C\u002Fp>\u003Col>\u003Cli style=\"line-height:2\">在单 tile 图上画框 → 已偏：解码\u002Fletterbox；\u003C\u002Fli>\u003Cli style=\"line-height:2\">tile 对、全图挤左上：忘加 tile_x0\u002Fy0；\u003C\u002Fli>\u003Cli style=\"line-height:2\">整片平移：pad 符号反了；\u003C\u002Fli>\u003Cli style=\"line-height:2\">网格状周期错位：某一行\u002F列的 ROI 原点算错。\u003C\u002Fli>\u003C\u002Fol>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">八、标准 NMS：分数排序 + IoU 淘汰\u003C\u002Fh1>\u003Cp style=\"line-height:2\">块内解码后，以及全图合并后，都会走 OpenCV cv::dnn::NMSBoxes。\u003C\u002Fp>\u003Cp style=\"line-height:2\">全局人体框合并使用同一套 IoU 阈值逻辑。\u003C\u002Fp>\u003Cp style=\"line-height:2\">这里 score 下界写成 0.01f：进入该函数的框通常已过检测阈，NMS 阶段不再二次狠滤分数，专注 IoU 去重。\u003C\u002Fp>\u003Cp style=\"line-height:2\">\u003Cstrong>IoU 定义与手算\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp style=\"line-height:2\">IoU = 交集面积 \u002F 并集面积\u003C\u002Fp>\u003Cp style=\"line-height:2\">= inter \u002F (area_a + area_b - inter)\u003C\u002Fp>\u003Cp style=\"line-height:2\">prefer-face 路径会自实现 IoU 计算（与 OpenCV 语义一致）：\u003C\u002Fp>\u003Cp style=\"line-height:2\">手算例子：\u003C\u002Fp>\u003Cp style=\"line-height:2\">框 A：(100,100,80,200)，框 B：(120,120,80,200)\u003C\u002Fp>\u003Cp style=\"line-height:2\">inter = 60 × 180 = 10800\u003C\u002Fp>\u003Cp style=\"line-height:2\">ua = 16000 + 16000 - 10800 = 21200\u003C\u002Fp>\u003Cp style=\"line-height:2\">IoU ≈ 0.509\u003C\u002Fp>\u003Cp style=\"line-height:2\">\u003Cbr \u002F>\u003C\u002Fp>\u003Cp style=\"line-height:2\">若 nms_iou=0.45，B 会被抑制；若阈值升到 0.55，B 幸存——并肩两人更安全，但跨 tile 重复也可能留下。\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002Fe7b3c3fc-c9a7-456d-aeb3-9dbc9b168031.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cspan style=\"font-size:12px\">图：按分数排序后，与最高分框 IoU 超过阈值的候选被抑制；阈值过高留重复，过低误伤贴靠两人。\u003C\u002Fspan>\u003C\u002Fp>\u003Cp>\u003Cbr \u002F>\u003C\u002Fp>\u003Cp style=\"line-height:2\">\u003Cstrong>Soft-NMS 一句话\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp style=\"line-height:2\">标准 NMS「超阈即删」；Soft-NMS「超阈即降分」。本项目路径用经典硬 NMS（及下面的 prefer-face 变体），监控人体通常够用。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">九、 prefer-face NMS：有脸的框优先留下\u003C\u002Fh1>\u003Cp style=\"line-height:2\">纯分数 NMS 的痛点：跨缝时 半身残框分数偶发更高，完整框反而被删；或 无脸噪声框 压过 有脸真人框。因此有优先有脸的人体框 NMS：\u003C\u002Fp>\u003Cp style=\"line-height:2\">关键机制：\u003C\u002Fp>\u003Col>\u003Cli style=\"line-height:2\">按人体 score 降序扫描；\u003C\u002Fli>\u003Cli style=\"line-height:2\">IoU ≤ NMS IoU：不冲突，继续；\u003C\u002Fli>\u003Cli style=\"line-height:2\">IoU &gt; NMS IoU：看两边脸集合是否「互不相同」：\u003C\u002Fli>\u003C\u002Fol>\u003Cul>\u003Cli style=\"line-height:2\">一侧有对方没有的脸 → 保留有独特脸的一侧；\u003C\u002Fli>\u003Cli style=\"line-height:2\">两侧都有独特脸 → 两边都留（避免两人贴靠被合成一个）；\u003C\u002Fli>\u003Cli style=\"line-height:2\">都无独特脸但都有脸且 IoU 很高（重复 IoU）→ 重复框决胜 决胜；\u003C\u002Fli>\u003Cli style=\"line-height:2\">一侧有脸一侧无脸 → 倾向留有脸，无脸仅在高度重叠时被删。\u003C\u002Fli>\u003C\u002Ful>\u003Cp style=\"line-height:2\">若 nms_iou=0.45，则 dup_iou=max(0.57,0.58)=0.58（再与 0.92 取 min）。也就是说：「有脸 vs 无脸」的删除门槛比普通 NMS 更严，避免 ROI 扫脸失败时误删真人。\u003C\u002Fp>\u003Cp style=\"line-height:2\">决胜函数 重复框决胜 还看面积比与更靠上的框（站立人头部更靠上）：\u003C\u002Fp>\u003Cp style=\"line-height:2\">最后还有：被抑制但带有 保留集里没有的脸 的框可以复活——防止「大框吞小框」丢掉旁边另一张脸。\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002F71828de9-ca16-46f6-8056-8ef0b233df95.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp>\u003Cbr \u002F>\u003C\u002Fp>\u003Cp>\u003Cbr \u002F>\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cspan style=\"font-size:12px\">图：IoU 冲突时，优先保留框内有脸（或有独特脸）的人体框；两侧都有独特脸则并存，避免贴靠两人被压成一个。\u003C\u002Fspan>\u003C\u002Fp>\u003Cp>\u003Cbr \u002F>\u003C\u002Fp>\u003Cp style=\"line-height:2\">失败模式：\u003C\u002Fp>\u003Cul>\u003Cli style=\"line-height:2\">face_scores 与 boxes 长度不一致 → 函数退回普通 NMSBoxes，有脸偏好失效；\u003C\u002Fli>\u003Cli style=\"line-height:2\">扫脸阈值过高 → 真人都「无脸」，prefer-face 退化成面积\u002F分数战；\u003C\u002Fli>\u003Cli style=\"line-height:2\">重复 IoU 过低 → 有脸框过于强势，贴靠路人被误删。\u003C\u002Fli>\u003C\u002Ful>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">十、形态过滤：长宽比与最大占比\u003C\u002Fh1>\u003Cp style=\"line-height:2\">NMS 之后（或前后配合）还有人体框几何过滤：\u003C\u002Fp>\u003Cp style=\"line-height:2\">规则表：\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002Fa3492efd-be0b-4c3a-84e0-6bae85fe2a8e.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"line-height:2\">直觉：\u003C\u002Fp>\u003Cul>\u003Cli style=\"line-height:2\">无脸 时比例要像站立人体，挡广告牌横条、细杆；\u003C\u002Fli>\u003Cli style=\"line-height:2\">有脸 时放宽：蹲姿、侧躺、被裁切的半身仍可能是真人；\u003C\u002Fli>\u003Cli style=\"line-height:2\">0.85 帧：接近整幅的「人」多半是误检或场景分割错误，直接丢。\u003C\u002Fli>\u003C\u002Ful>\u003Cp style=\"line-height:2\">\u003Cstrong>数值例子\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp style=\"line-height:2\">1920×1080 帧：max_w=1632, max_h=918。\u003C\u002Fp>\u003Cp style=\"line-height:2\">框 1800×1000：超限 → 丢。\u003C\u002Fp>\u003Cp style=\"line-height:2\">框 40×200，ar=5.0，无脸 → 丢；若有脸且 ar=4.2 → 可留。\u003C\u002Fp>\u003Cp style=\"line-height:2\">失败模式： 夜间低分导致大量「无脸」，比例过滤偏严，蹲着的人被杀光；或 max 比例放宽到 1.0，过曝光斑整幅框涌进跟踪。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">十一、算力账本：Tile 不是免费的\u003C\u002Fh1>\u003Cp style=\"line-height:2\">粗算（忽略重叠与 batch  效率）：\u003C\u002Fp>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002Fcc85771f-1f9a-4a51-b914-4d5c24ec2eb2.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp>\u003Cbr \u002F>\u003C\u002Fp>\u003Cp style=\"line-height:2\">重叠使实际裁切面积更大，但 GPU batch 可摊薄 kernel 启动。工程上常配合：隔帧检测、分数阈、动态是否 Tile。选型不是「网格越大越好」，而是「人物在 640 输入上是否 ≥ 约 30～40 px」与时延预算的交点。\u003C\u002Fp>\u003Cp style=\"line-height:2\">与「整帧改用 1280 输入」对比：\u003C\u002Fp>\u003Cul>\u003Cli style=\"line-height:2\">中心少数人、算力紧：先试更大输入边长；\u003C\u002Fli>\u003Cli style=\"line-height:2\">人散布四角、4K 远景：倾向 Tile；\u003C\u002Fli>\u003Cli style=\"line-height:2\">两者可折中：Tile 内仍用 640，而不是 Tile 后再拉到过大边长。\u003C\u002Fli>\u003C\u002Ful>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">十二、端到端故事线（带数字）\u003C\u002Fh1>\u003Col>\u003Cli style=\"line-height:2\">3840×2160 帧进入，w≥3840 → grid=4，overlap=0.25，tile_side=1200，step=(960,540)；\u003C\u002Fli>\u003Cli style=\"line-height:2\">收集至多 16 个 ROI，每块 letterbox→YOLO→逆变换到全图；\u003C\u002Fli>\u003Cli style=\"line-height:2\">对每条框问：中心是否在该 tile 的 core？否 → 丢；\u003C\u002Fli>\u003Cli style=\"line-height:2\">全图框列表做 NMSBoxes 或 prefer-face NMS；\u003C\u002Fli>\u003Cli style=\"line-height:2\">过滤：无脸 ar∈[0.55,3.5]，有脸放宽；边长 ≤0.85 帧；\u003C\u002Fli>\u003Cli style=\"line-height:2\">输出给后续模块：原图像素系、尽量一人一框。\u003C\u002Fli>\u003C\u002Fol>\u003Cp style=\"line-height:2\">任一步偷懒（无重叠、无 core、无 NMS、比例过滤关掉）都会在跟踪里以「闪烁双人」「ID 乱跳」爆发。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1>十三、参数耦合怎么拧\u003C\u002Fh1>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002F36dc82ca-1e39-4c47-ad77-3a2c9711b361.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Cp style=\"line-height:2\">一次只改一个旋钮，并在「远广场」「门口近景」「两人并肩」三类片段回归。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">十四、常见故障对照表\u003C\u002Fh1>\u003Cp style=\"text-align:center\">\u003Cimg src=\"https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002Fdd3295a5-1b7c-4d9e-a1d1-bb2f5012af22.png\" alt=\"\" loading=\"lazy\" \u002F>\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">十五、与「只靠全局 NMS」的本质差别\u003C\u002Fh1>\u003Cp style=\"line-height:2\">许多教程只写「切块 + NMS」。本项目多了两层：\u003C\u002Fp>\u003Col>\u003Cli style=\"line-height:2\">几何归属（core）：重叠带不认领，从源头减候选；\u003C\u002Fli>\u003Cli style=\"line-height:2\">语义偏好（face）：同样重叠时，有脸\u002F独特脸说了算，而不是裸分数。\u003C\u002Fli>\u003C\u002Fol>\u003Cp style=\"line-height:2\">这使 Tile 在商场、展厅等人脸可检场景更稳：残缺高分框更难打败完整有脸框。\u003C\u002Fp>\u003Chr \u002F>\u003Ch1 style=\"line-height:2\">十六、重叠率的定量直觉\u003C\u002Fh1>\u003Cp style=\"line-height:2\">无重叠时，人中心恰好在 x=base_w 的缝上，左右各只看到约半身。若人体宽 W_person，每侧可见宽约 W_person\u002F2。检测器对「半身」分数常系统性偏低。\u003C\u002Fp>\u003Cp style=\"line-height:2\">设需要「至少一侧看到完整人」，则重叠宽度应 ≳ W_person。对本项目：\u003C\u002Fp>\u003Cp style=\"line-height:2\">overlap_width ≈ tile_side - step ≈ 0.25 × max(base_w, base_h) （正方形情形下还受 max 影响）\u003C\u002Fp>\u003Cp style=\"line-height:2\">1080p 例子中水平重叠约 160 px：对肩宽 ~80–120 的远人对付得了；对近景大肩宽 ~300 的人，仍可能双边残缺——此时依赖 prefer-face 与更大面积框决胜，或接受近景本可用整帧检测（但 1080p 已过 Tile 门槛时仍会切）。overlap=0.25 是召回与算力的工程折中，不是数学最优解。\u003C\u002Fp>\u003Cp>\u003Cbr \u002F>\u003C\u002Fp>","https:\u002F\u002Fqu-link.oss-cn-hangzhou.aliyuncs.com\u002F2026\u002F08\u002F17\u002F4148e995-f2b4-4c20-83f9-3eac61332a27.jpg","84,85","美畅，美畅物联，畅联，畅联云平台，视频监控云平台，云视频监控，视频云平台，视频开放平台，视频感知云，视频接入网关，AIoT综合接入网关，视频中台，物联网中台，视频上云网关，Ehome，I连锁行业，智慧交通，AI算法","原创技术分享丨美畅物联向工","https:\u002F\u002Fwww.24hlink.cn\u002Ftech\u002F2558","2026-08-17 14:03:14","858"]