如何將yolo訓練圖像數據庫的某個分類的圖像取出來

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…