COCO 数据集 - Ultralytics YOLO 文档

比如我只想从数据集中取手机的图像,来用于我的训练,懒得自己一张一张标注,方法如下

# -*- coding: utf-8 -*-
import json
import os
import shutil
from pathlib import Path
from tqdm import tqdm
import cv2
from collections import defaultdictDEBUG = True  # 调试阶段先开着# cap
kind = "val"
if kind == "val":ann_file = r"F:\coco_pictures\annotations_trainval2017\annotations\instances_val2017.json"img_dir = r"F:\coco_pictures\cocoval2017\val2017"out_dir = r"E:\picture\coco\cellphone_val2017"out_dir_result = r"E:\picture\coco\cellphone_val2017_box"out_dir_result_txt = r"E:\picture\coco\cellphone_val2017_box_txt"
elif kind == "train":# ===== 按需修改 =====ann_file = r"F:\coco_pictures\annotations_trainval2017\annotations\instances_train2017.json"img_dir = r"F:\coco_pictures\coco_train2017\train2017"out_dir = r"E:\picture\coco\cellphone_train2017"             # 原图复制到这里out_dir_result = r"E:\picture\coco\cellphone_train2017_box"  # 画框后的结果图out_dir_result_txt = r"E:\picture\coco\cellphone_train2017_box_txt"  # <- 修正为 train# ===================Path(out_dir).mkdir(parents=True, exist_ok=True)
Path(out_dir_result).mkdir(parents=True, exist_ok=True)
Path(out_dir_result_txt).mkdir(parents=True, exist_ok=True)# 1) 读取标注文件
with open(ann_file, "r", encoding="utf-8") as f:coco = json.load(f)# 2) 找到 cell phone 类别 id
cellphone_id = None
for cat in coco["categories"]:if cat["name"].lower() == "cell phone":cellphone_id = int(cat["id"])break
if cellphone_id is None:raise RuntimeError("未在 categories 中找到 'cell phone'")print("cell phone category_id =", cellphone_id)# 3) 建立 image_id -> 元信息
id2img = {int(img["id"]): img for img in coco["images"]}# 4) 收集每张图的所有手机标注
imgid_to_bboxes = defaultdict(list)
for ann in coco["annotations"]:if int(ann.get("category_id", -1)) == cellphone_id:imgid_to_bboxes[int(ann["image_id"])].append(ann["bbox"])  # COCO [x,y,w,h] (float)# 5) 遍历含手机的图像:复制原图 + 画框另存 + 写坐标txt
cellphone_img_ids = list(imgid_to_bboxes.keys())
print(f"共 {len(cellphone_img_ids)} 张图含有手机标注。")for img_id in tqdm(cellphone_img_ids):meta = id2img.get(img_id)if not meta:continuefile_name = meta["file_name"]src = os.path.join(img_dir, file_name)dst_img_copy = os.path.join(out_dir, file_name)dst_boxed = os.path.join(out_dir_result, file_name)dst_txt = os.path.join(out_dir_result_txt, Path(file_name).stem + ".txt")# 复制原图if not os.path.exists(src):continueif not os.path.exists(dst_img_copy):Path(os.path.dirname(dst_img_copy)).mkdir(parents=True, exist_ok=True)shutil.copy(src, dst_img_copy)# 读图并绘制所有 bbox,同时收集裁边后的框用于写txtim = cv2.imread(src)if im is None:continueH, W = im.shape[:2]clipped_boxes_xyxy = []  # 用于写 txt:x1 y1 x2 y2(int)for bbox in imgid_to_bboxes[img_id]:x, y, w, h = bbox  # COCO: [x,y,w,h]# 裁剪到图像边界并转为 intx1 = max(0, min(int(round(x)), W - 1))y1 = max(0, min(int(round(y)), H - 1))x2 = max(0, min(int(round(x + w)), W - 1))y2 = max(0, min(int(round(y + h)), H - 1))if x2 <= x1 or y2 <= y1:continueclipped_boxes_xyxy.append((x1, y1, x2, y2))# 画矩形框 & 标签cv2.rectangle(im, (x1, y1), (x2, y2), (0, 255, 0), thickness=2)label = "cell phone"(tw, th), baseline = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.6, 2)ty1 = max(0, y1 - th - 6)cv2.rectangle(im, (x1, ty1), (x1 + tw + 6, ty1 + th + 4), (0, 255, 0), thickness=-1)cv2.putText(im, label, (x1 + 3, ty1 + th + 1),cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 0), thickness=2, lineType=cv2.LINE_AA)# 保存带框图Path(os.path.dirname(dst_boxed)).mkdir(parents=True, exist_ok=True)cv2.imwrite(dst_boxed, im, [cv2.IMWRITE_JPEG_QUALITY, 95])# 保存坐标 txt:每行一个框:x1 y1 x2 y2# 若没有有效框,写空文件或跳过均可;这里选择写空文件便于对齐清单with open(dst_txt, "w", encoding="utf-8") as ftxt:for (x1, y1, x2, y2) in clipped_boxes_xyxy:ftxt.write(f"{x1} {y1} {x2} {y2}\n")print(f"完成!原图复制到:{out_dir}")
print(f"完成!带框结果图输出到:{out_dir_result}")
print(f"完成!坐标TXT输出到:{out_dir_result_txt}(每行:x1 y1 x2 y2)")

如何降低误报(提升精确率)的实操建议

  1. 门限分级

    • 提高 cell phone 类的专属 conf_thr(类特异阈值);或对小目标额外提高阈值(面积/长宽<阈值时+Δ)。

  2. 后处理约束

    • 最小/最大面积过滤(相对图像面积),去除远处噪点或过大异常框。

    • 纵横比过滤:手机通常纵横比在一定范围(含壳/角度会变化,可设宽松区间)。

    • 类别共现/上下文:要求与手、人桌面/键盘/屏幕等场景共现;否则降权或拒绝(用多任务检测或语义分割、场景分类辅助)。

  3. 两段式判别(Cascade)

    • 检测器先召回,再用一个轻量分类器Patch 质量判别器二筛(比如 MobileNet/RepVGG 小模型),对候选框裁剪后复判,显著减少FP。

  4. 困难负样本挖掘(Hard Negative Mining)

    • 用本脚本导出的误报图集做“负样本再训练”:将误报区域打负标签或加“非手机”对比样本,继续微调。

  5. 数据增强针对性

    • 加入反手机相似物(遥控器、移动电源、充电器、书本边角、黑色矩形图案、广告牌等)的负样本;

    • 光照/模糊/噪声/尺度/角度增强,降低模型将“黑色高对比矩形”错当手机的概率。

  6. NMS与多尺度

    • 合理调 iou(NMS)与 conf;对于密集小目标,试 diou-nms / soft-nms

    • 多尺度测试(或训练)以稳住不同距离下的外观差异。

  7. 模型层面

    • 选择更合适的输入分辨率(手机通常小目标,略提分辨率会降FP/漏检);

    • 若部署在 OpenVINO/RKNN 等,注意量化误差:用代表性数据做校准,并检查感兴趣类上的 mAP 变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94995.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94995.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94995.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WPF】WPF 自定义控件实战:从零打造一个可复用的 StatusIconTextButton (含避坑指南)

&#x1f527; WPF 自定义控件实战&#xff1a;从零打造一个可复用的 StatusIconTextButton&#xff08;含避坑指南&#xff09;发布于&#xff1a;2025年8月29日 标签&#xff1a;WPF、C#、自定义控件、MVVM、Generic.xaml、属性绑定、TemplateBinding&#x1f4cc; 引言 在 W…

中国国际商会副秘书长徐梁一行到访国联股份

2025年08月27日&#xff0c;中国国际商会副秘书长徐梁等一行到访国联股份&#xff0c;国联股份创始人、CEO/总裁钱晓钧&#xff0c;国联股份副总裁、卫多多/纸多多CEO黄莎莎等热情招待来访一行&#xff0c;并展开深入交流。来访一行首先参观了国联股份数字经济展厅&#xff0c;…

换公司如何快速切入软件项目工程

一、前言 作为程序员&#xff0c;根据自身职业发展&#xff0c;会通过跳槽谋求更进一步的发展&#xff0c;这时进入新公司&#xff0c;接触全新的项目工程和业务&#xff0c;如何快速的切入&#xff0c;形成认识呢&#xff1f;就算不跳槽&#xff0c;公司业务调整&#xff0c;也…

Linux系统——EXT2 文件系统

磁盘文件 文件属性 文件内容文件内容 —— 数据块&#xff0c;文件属性 —— inodeLinux 文件在磁盘中的存储&#xff0c;是将 属性 与 内容 分开存储的内存&#xff1a;掉电易失&#xff0c;磁盘&#xff1a;永久性存储介质图片来自百度磁盘访问的基本单元&#xff1a;扇区 …

Qt中的锁(1)

Qt中的锁&#xff08;1&#xff09; 加锁&#xff0c;把多个要访问的公共资源通过锁保护起来&#xff0c;把并行执行变成串行执行&#xff0c; 多个线程执行加锁的对象得是同一个对象&#xff0c;不同对象不会互斥 代码&#xff1a;//添加一个static成员static int num;//创建锁…

数据结构 02(线性:顺序表)

目录 线性表 顺序表 概念与结构 动态顺序表的实现 头文件的创建 顺序表初始化 顺序表的扩容 尾插功能 头插功能 尾删功能 头删功能 查找功能 任意位置前插入 任意位置前删除 销毁 动态顺序表整体呈现 SeqList.h SeqList.c 线性表 线性表是n个具有相同特性的数…

自助餐厅:自主取餐的平衡术

自助餐厅&#xff0c;本质是通过 “固定客单价 自主取餐” 的模式&#xff0c;把 “吃什么、吃多少” 的选择权还给用户&#xff0c;同时用运营设计平衡 “用户体验” 与 “餐厅成本”—— 它不是 “让用户吃垮餐厅” 的游戏&#xff0c;而是餐饮行业里 “效率与体验结合” 的…

TypeScript: Reflect.ownKeys 操作(针对 Symbol)

Reflect.ownKeys 是 JavaScript ES6 引入的 Reflect API 中的一个方法&#xff0c;用于获取目标对象的所有自身属性键&#xff08;包括字符串键和 Symbol 键&#xff09;。1.基本概念&#xff1a;Reflect.ownKeys(target)&#xff1a;接受一个对象 target 作为参数&#xff0c;…

一般纳税人

目录 一文详解&#xff1a;什么是一般纳税人&#xff1f; 一、核心定义&#xff1a;什么是一般纳税人&#xff1f; 二、成为一般纳税人的两种途径 三、一般纳税人的关键特点与运作机制 四、一般纳税人的优点与缺点 五、与小规模纳税人的核心区别 六、企业应如何选择&…

@HAProxy 介绍部署使用

文章目录**1. HAProxy 简介****1.1 什么是 HAProxy&#xff1f;****1.2 核心特性****1.3 关键术语****2. 安装 HAProxy****2.1 在 Ubuntu/Debian 上安装****2.2 在 CentOS/RHEL/Rocky Linux/AlmaLinux 上安装****3. 配置与使用****3.1 核心配置文件结构****3.2 基础配置示例&am…

Two-Twer模型做歌曲智能推荐与规则算法对比的优缺点分析

基于规则与机器学习驱动的音乐推荐&#xff1a;核心差异分析1.推荐精度2. 个性化能力3. 模型适应性&#xff08;潜在特征关联发现&#xff09;4. 可扩展性与复杂性成本5. 冷启动/数据稀疏阶段表现6. 听感匹配与主观反馈1.推荐精度 规则推荐&#xff1a; 依赖预设的 if-then 逻…

【完整源码+数据集+部署教程】停车位状态检测系统源码和数据集:改进yolo11-DCNV2-Dynamic

背景意义 随着城市化进程的加快&#xff0c;城市交通拥堵问题日益严重&#xff0c;停车难成为了许多城市居民面临的普遍问题。有效的停车管理不仅可以提高城市交通的流动性&#xff0c;还能减少因寻找停车位而造成的时间浪费和环境污染。因此&#xff0c;开发一个高效的停车位状…

《Password Guessing Using Random Forest》论文解读

论文填补了传统统计方法&#xff08;如 PCFG、Markov&#xff09;与深度学习方法&#xff08;如 LSTM、GAN&#xff09;之间的研究空白&#xff0c;提出基于随机森林的口令猜测框架 RFGuess&#xff0c;覆盖三种核心猜测场景&#xff0c;为口令安全研究提供了全新技术路线。一、…

项目一系列-第9章 集成AI千帆大模型

第9章 集成AI千帆大模型 学习目标 能够说清楚健康评估模块在项目中的作用能够掌握千帆大模型的开通和对接能够掌握健康评估模块中的prompt提示词编写能够自主完成健康评估模块的接口开发 分析设计 需求说明 健康评估是指老人办理入住前需上传体检报告&#xff0c;由AI自动…

vben admin5组件文档(豆包版)---VbenTree

VbenTree 用法说明 VbenTree 是 Vben5 中基于 radix-vue 实现的树形组件&#xff0c;支持单选、多选、展开/折叠、权限控制等功能。以下是其核心用法说明&#xff1a; 1. 基础引入 import { VbenTree } from vben-core/shadcn-ui;2. 核心属性&#xff08;Props&#xff09;属性…

postman常用快捷键

作为一名IT程序猿&#xff0c;不懂一些工具的快捷方式&#xff0c;应该会被鄙视的吧。收集了一些Postman的快捷方式&#xff0c;大家一起动手操作~ 1小时postman接口测试从入门到精通教程简单操作 操作mac系统windows系统 打开新标签 ⌘TCtrl T关闭标签⌘WCtrl W强制关闭标签…

【物联网】什么是 DHT11(数字温湿度传感器)?

正面照片&#xff08;蓝色传感器朝上&#xff0c;针脚朝下&#xff09; 丝印标注非常清晰&#xff1a; 左边 → S &#x1f449; 信号 (DATA) 中间 → &#x1f449; VCC (电源&#xff0c;3.3V 或 5V) 右边 → - &#x1f449; GND (地) ✅ 正确接法&#xff08;Arduino Nano…

光谱相机在雾霾监测中有何优势?

光谱相机在雾霾监测中的优势主要体现在多维度数据采集和环境适应性方面&#xff0c;结合最新技术进展分析如下&#xff1a;一、核心优势‌穿透性监测能力‌ 短波红外&#xff08;SWIR&#xff09;波段可穿透雾霾颗粒&#xff0c;结合可见光成像实现雾霾浓度与能见度的同步监测&…

【c++】超好玩游戏

#include <iostream> #include <vector> #include <conio.h> #include <windows.h> #include <time.h>using namespace std;// 游戏常量 const int WIDTH 40; const int HEIGHT 20; const int PADDLE_WIDTH 5;// 方向枚举 enum Direction { S…

GitHub 热榜项目 - 日榜(2025-08-27)

GitHub 热榜项目 - 日榜(2025-08-27) 生成于&#xff1a;2025-08-27 统计摘要 共发现热门项目&#xff1a;15 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜呈现出三大技术趋势&#xff1a;1. AI生产力工具持续升温&#xff1a;系统提示词泄露库、DeepCode…