当前位置: 首页 > news >正文

`pred_by_img.setdefault(img, [ ]).append({...})`

pred_by_img.setdefault(img, [ ]).append({...})
这一句的核心目的是 把同一张图片的全部预测框归档到同一个列表里,后面做 IoU 匹配就能 O(1) 取出。


为啥要这样分组?

  1. 遍历标签时,只关心当前这张图的预测

    PR = pred_by_img.get(img_name, [])
    

    如果不用字典分组,得在几万条预测里反复筛选,效率极低。

  2. 字典键 = 图片名

    • 一张图只会出现一次键
    • setdefault:第一次遇到这张图时自动建空列表;以后直接追加

存进去的两项字段

{"cls": p["category_id"] - 1,   # ① 预测类别(1‑12) → 0‑11 与 GT 对齐"box": [x1, y1, x2, y2]        # ② bbox 从 (x, y, w, h) → (x1, y1, x2, y2)
}
字段为什么要转?
clsGT 的类别是 0‑11,而 predictions.json 给的是 1‑12;减 1 才能写进同一个混淆矩阵行/列。
boxIoU 计算函数用 左上+右下 格式 (x1,y1,x2,y2);YOLO 预测给的是 (x,y,w,h)。所以提前转换,后面直接算 IoU。

小示例

假设 predictions.json 里有三条记录:

image_idcategory_idbbox (xywh)score
imgA11[100,200,50,80]0.8
imgA12[300,100,40,40]0.7
imgB10[120,220,60,70]0.9

执行循环后,pred_by_img 结构:

{"imgA.jpg": [{"cls": 10, "box": [100,200,150,280]},   # 11‑1 → 10{"cls": 11, "box": [300,100,340,140]}],"imgB.jpg": [{"cls": 9,  "box": [120,220,180,290]}]
}
  • pred_by_img["imgA.jpg"] 就直接拿到 imgA 的 2 个预测框
  • 后面做 一对一匹配 时非常高效

一句话总结

pred_by_img “按图索引” 所有预测框,
 同时把 类别编号和坐标格式预处理好
 这样在主循环里对每张图做 IoU 匹配时既快又少出错。

相关文章:

  • @EnableAsync+@Async源码学习笔记之五
  • springboot景区民宿网上预约系统(源码+lw+部署文档+讲解),源码可白嫖!
  • Kaamel分析报告:苹果ATT隐私保护与市场公平竞争的平衡挑战
  • U-Boot(Universal Bootloader)简介
  • 小样本学习和元学习
  • 集合框架(详解)
  • ARINC818协议(六)
  • 内积(Inner Product)
  • 国产SMT贴片机自主技术突破解析
  • 群晖威联通飞牛等nas如何把宿主机硬盘挂接到可道云docker容器中
  • [Java · 初窥门径] Java 注释符
  • vue3 中 iframe 多页面切换导致资源刷新的问题解决
  • 学习笔记: Mach-O 文件
  • 数据库表设计
  • Cribl 通过字段regex 来过滤filter
  • Java:使用Maven构建项目无src解决方案
  • 【HDFS入门】HDFS性能调优实战:小文件问题优化方案
  • 抽屉原理1
  • GraphRAG与RAG的区别和原理简介
  • fastlio用mid360录制的bag包离线建图,提示消息类型错误
  • 云南昭通一公园发现毒饵,多只宠物狗疑中毒致死
  • 中国政府援缅第七批抗震救灾物资运抵交付
  • 马拉松夺冠机器人将小批量量产:价格与一台入门级小轿车差不多
  • 体坛联播|中国U16女足击败墨西哥,王星昊首获世界冠军
  • 汕头22岁女子手术成功却意外脑死亡,家属称缺氧30分钟医生未发觉
  • 两部门通报18个破坏耕地、毁林毁草典型问题