測試ppyoloe的小樣本few-shot能力,10張圖片精度達到69.8%

近期公司有個項目,需要解決長尾樣本的問題,所以測試了一下paddlepaddle小樣本的能力。

環境::T4? 、ubuntu 、cuda-11.6 、py3.9、? ?paddlepaddle-gpu==2.6.0、pip install opencv-python==4.5.5.64 -i https://pypi.tuna.tsinghua.edu.cn/simple? ? 、?pip install ?numpy==1.23.0

預訓練模型:ppyoloe_crn_s_obj365_pretrained.pdparams

數據集下載地址:五種水果目標檢測數據集coco格式_數據集-飛槳AI Studio星河社區


1、數據集準備五種水果:蕃茄、核桃、桔子、龍眼、青棗。共300張圖像,640*480.COCO格式

2、先正常訓練一波
數據如下:165步0.735的%表現

3、用腳本每個coco類別從原train.json提取10張圖片,代碼:
?

import json
from collections import defaultdict
import argparse
import osdef create_small_sample_coco(original_json, output_json, samples_per_class=10):"""從COCO格式的標注文件中,為每個類別提取指定數量的樣本,并生成新的COCO標注文件參數:original_json (str): 原始COCO標注文件路徑output_json (str): 輸出的小樣本COCO標注文件路徑samples_per_class (int): 每個類別提取的樣本數量"""# 加載原始標注數據with open(original_json, 'r', encoding='utf-8') as f:coco_data = json.load(f)# 確保必要的字段存在,不存在則添加默認值required_fields = {'info': {'description': 'Small sample dataset'},'licenses': [{'id': 0, 'name': 'Unknown'}],'categories': [],'images': [],'annotations': []}for field, default in required_fields.items():if field not in coco_data:print(f"警告: 標注文件缺少 '{field}' 字段,將使用默認值")coco_data[field] = default# 1. 統計每個類別的標注數量category_counts = defaultdict(int)for ann in coco_data['annotations']:cat_id = ann['category_id']category_counts[cat_id] += 1# 檢查是否有類別if not category_counts:print("錯誤: 標注文件中未找到任何類別或標注")return# 2. 為每個類別選擇指定數量的樣本selected_images = set()  # 存儲被選中的image_idcategory_samples = defaultdict(int)  # 記錄每個類別已選擇的樣本數for ann in coco_data['annotations']:cat_id = ann['category_id']img_id = ann['image_id']# 如果該類別已選樣本數不足,且該圖片尚未被選中if category_samples[cat_id] < samples_per_class and img_id not in selected_images:selected_images.add(img_id)category_samples[cat_id] += 1# 檢查是否所有類別都已選夠樣本if all(count >= samples_per_class for count in category_samples.values()):break# 3. 篩選出被選中的圖片及其標注filtered_images = [img for img in coco_data['images'] if img['id'] in selected_images]filtered_annotations = [ann for ann in coco_data['annotations'] if ann['image_id'] in selected_images]# 4. 構建新的COCO數據集small_coco = {'info': coco_data['info'],'licenses': coco_data['licenses'],'categories': coco_data['categories'],'images': filtered_images,'annotations': filtered_annotations}# 5. 保存新的標注文件with open(output_json, 'w', encoding='utf-8') as f:json.dump(small_coco, f, indent=2)# 打印統計信息print(f"成功創建小樣本數據集!")print(f"原始圖片數量: {len(coco_data['images'])}")print(f"篩選后圖片數量: {len(filtered_images)}")print(f"每個類別樣本數: {samples_per_class}")print(f"保存路徑: {output_json}")# 檢查每個類別的實際樣本數actual_counts = defaultdict(int)for ann in filtered_annotations:actual_counts[ann['category_id']] += 1# 映射類別ID到類別名稱id_to_name = {cat['id']: cat['name'] for cat in coco_data['categories']}print("\n每個類別的實際樣本數:")for cat_id, count in actual_counts.items():cat_name = id_to_name.get(cat_id, f"類別_{cat_id}")print(f"  {cat_name} (ID:{cat_id}): {count}個樣本")if __name__ == "__main__":parser = argparse.ArgumentParser(description='從COCO數據集中創建小樣本數據集')parser.add_argument('--input', '-i', required=True, help='原始COCO標注文件路徑')parser.add_argument('--output', '-o', required=True, help='輸出的小樣本COCO標注文件路徑')parser.add_argument('--samples', '-s', type=int, default=10, help='每個類別提取的樣本數,默認為10')args = parser.parse_args()# 檢查輸入文件是否存在if not os.path.exists(args.input):print(f"錯誤: 輸入文件 '{args.input}' 不存在")exit(1)# 檢查輸出目錄是否存在,不存在則創建output_dir = os.path.dirname(args.output)if output_dir and not os.path.exists(output_dir):os.makedirs(output_dir)create_small_sample_coco(args.input, args.output, args.samples)

4、再次訓練

python tools/train.py -c configs/few-shot/ppyoloe_plus_crn_s_80e_contrast_pcb.yml  --amp  --eval --use_vdl=True --vdl_log_dir=./visdrone/

在39步精度達到0.69%

5、預測一下

python tools/infer.py -c configs/few-shot/ppyoloe_plus_crn_s_80e_contrast_pcb.yml -o weights=output1/best_model.pdparams --infer_img=/home/PaddleDetection/dataset/coco/fruit5_coco/images/106.jpg

6、訓練配置

_BASE_: ['../datasets/coco_detection.yml','../runtime.yml','./_base_/optimizer_80e.yml','./_base_/ppyoloe_plus_crn.yml','./_base_/ppyoloe_plus_reader.yml',
]log_iter: 100
snapshot_epoch: 5
weights: output/ppyoloe_plus_crn_s_80e_contrast_pcb/model_finalpretrain_weights: ./ppyoloe_crn_s_obj365_pretrained.pdparams
depth_mult: 0.33
width_mult: 0.50epoch: 190LearningRate:base_lr: 0.0001schedulers:- !CosineDecaymax_epochs: 596- !LinearWarmupstart_factor: 0.epochs: 5YOLOv3:backbone: CSPResNetneck: CustomCSPPANyolo_head: PPYOLOEContrastHeadpost_process: ~PPYOLOEContrastHead:fpn_strides: [32, 16, 8]grid_cell_scale: 5.0grid_cell_offset: 0.5static_assigner_epoch: 100use_varifocal_loss: Trueloss_weight: {class: 1.0, iou: 2.5, dfl: 0.5, contrast: 0.2}static_assigner:name: ATSSAssignertopk: 9assigner:name: TaskAlignedAssignertopk: 13alpha: 1.0beta: 6.0contrast_loss:name: SupContrasttemperature: 100sample_num: 2048thresh: 0.75nms:name: MultiClassNMSnms_top_k: 1000keep_top_k: 300score_threshold: 0.01nms_threshold: 0.7num_classes: 5
metric: COCO
map_type: integralTrainDataset:!COCODataSetimage_dir: imagesanno_path: /home/PaddleDetection/dataset/small.jsondataset_dir: /home/PaddleDetection/dataset/coco/fruit5_coco/data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']EvalDataset:!COCODataSetimage_dir: imagesanno_path: /home/PaddleDetection/dataset/coco/fruit5_coco/annotations/instance_val.jsondataset_dir: /home/PaddleDetection/dataset/coco/fruit5_coco/TestDataset:!ImageFolderanno_path: /home/PaddleDetection/dataset/coco/fruit5_coco/annotations/instance_val.jsondataset_dir: /home/PaddleDetection/dataset/coco/fruit5_coco/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90486.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90486.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90486.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

結構化布線系統詳解

1. 結構化布線系統概述 結構化布線系統(Structured Cabling System, SCS)是一種標準化、模塊化的建筑物或建筑群內信息傳輸基礎設施&#xff0c;它為語音、數據、圖像等多媒體業務提供了統一的物理傳輸介質。與傳統的點對點布線方式不同&#xff0c;結構化布線采用層次化、標準…

【Java學習】匿名內部類的向外訪問機制

目錄 一、方法局部變量的訪問 1.生命周期 1.1方法生命周期 1.2匿名實例生命周期 1.3生命超時性 2.變量捕獲 2.1按值捕獲 2.1.1值捕獲優勢 2.1.1.1生命及時訪問 2.1.1.2線程安全 2.1.2常量值捕獲優勢 2.2按引用捕獲 引用捕獲風險 (1)生命超時訪問 (2)線程不安全 …

LinkedList的模擬實現+LinkedList和ArrayList的區別

目錄 LinkedList的模擬實現 什么是雙向鏈表 增加數據 頭插法&#xff1a; 尾插法&#xff1a; 指定的下標插入&#xff1a; 刪除數據 刪除雙向鏈表中出現的第一個key 置空所有數據 LinkedList和ArrayList的區別 順序表對應的集合類是ArrayList&#xff1b;鏈表對應的集…

Vue + WebSocket 實時數據可視化實戰:多源融合與模擬數據雙模式設計

在現代交通大屏項目中&#xff0c;實時數據的采集和可視化尤為重要。本文結合 Vue3 和 ECharts&#xff0c;分享一個支持多 WebSocket 數據源實時合并、模擬數據調試、自動重連的完整設計方案&#xff0c;幫助你快速搭建健壯的數據可視化組件。一、項目背景與核心需求實時接收多…

C#索引器、接口、泛型

以下是對提供的 C# 代碼中涉及的核心知識點的梳理和總結&#xff0c;涵蓋索引器、接口、泛型三大核心內容&#xff0c;以及相關實踐要點&#xff1a;一、索引器&#xff08;Indexer&#xff09;索引器是一種允許類或結構體像數組一樣通過[]語法訪問成員的特殊成員&#xff0c;本…

界面組件DevExpress WPF中文教程:Grid - 如何過濾節點?

DevExpress WPF擁有120個控件和庫&#xff0c;將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序&#xff0c;這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

Excel——INDEX和MATCH傻傻分不清?

核心邏輯?先用 MATCH 找到目標姓名在表格中的 ?行號&#xff0c;再用 INDEX 根據行號 ?提取對應信息。就像查字典&#xff1a;先用拼音找到字的頁碼&#xff08;MATCH 找行號&#xff09;再翻到該頁看具體解釋&#xff08;INDEX 取數據&#xff09;?分步拆解&#xff08;以…

制造業低代碼平臺實戰評測:簡道云、釘釘宜搭、華為云Astro、金蝶云·蒼穹、斑斑低代碼,誰更值得選?

上回聊了斑斑和簡道云&#xff0c;不少同行私信問我其他幾個低代碼平臺怎么樣&#xff0c;今天就給大家來個"五大門派"終極對決&#xff01; 一、先說痛點 制造業搞數字化最怕三件事&#xff1a; 1.錢花了沒效果&#xff08;大平臺用不起&#xff0c;小工具不夠用&…

Jenkins中HTML文件顯示樣式問題解決方案

Jenkins中HTML文件顯示樣式問題解決方案 問題描述 在Jenkins中歸檔的HTML文件顯示格式失效&#xff0c;樣式無法正常顯示&#xff0c;但在本地瀏覽器中打開卻能正常顯示。 問題原因 Jenkins為了安全考慮&#xff0c;默認設置了嚴格的內容安全策略(Content Security Policy, CSP…

四、配置文件

文章目錄1. 文件類型1.1 properties1.2 yaml1.2.1 簡介1.2.2 基本語法1.2.3 數據類型1.2.4 示例2. 配置提示1. 文件類型 1.1 properties 同以前的properties的用法 1.2 yaml 1.2.1 簡介 YAML 是 “YAML Ain’t Markup Language”&#xff08;YAML 不是一種標記語言&#x…

Python常用醫療AI庫以及案例解析(場景化進階版)

?? 框架應用拓撲圖用例 #mermaid-svg-lZ1J5KCaVWBV2kAu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-icon{fill:#552222;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-text{fill:#552222;st…

Python高效操作Kafka實戰指南

Python操作Kafka的高效 以下是使用Python操作Kafka的高效消息發送實例,涵蓋基礎發送、批量處理、異步回調等場景。示例基于confluent-kafka庫(推薦)和kafka-python庫,代碼均經過實測。 流程圖 基礎消息發送(同步) from confluent_kafka import Producerproducer = Pro…

離線快速處理PDF格式轉化的方案

日常辦公中&#xff0c;PDF 幾乎成了我們離不開的文件格式。然而像 WPS 這樣的工具&#xff0c;不少實用功能都需要額外付費才能解鎖。它的打開方式很簡單&#xff0c;雙擊桌面圖標即可運行。它不會彈出主界面&#xff0c;而是默默駐留在系統托盤區&#xff0c;需要時雙擊圖標就…

SpringMVC注解與SpringCloudOpenFeign注解對比

1. 背景知識 梳理SpringMVC和SpringCloudOpenFeign常用注解后&#xff1a; Spring MVC中常用注解_筆記-CSDN博客Spring Cloud OpenFeign 常用注解_筆記-CSDN博客 這里對兩類注解做個對比。理解兩者定位&#xff08;服務端 vs 客戶端&#xff09;是掌握注解使用的關鍵&#x…

Linux 時間同步的流程

一、問題時間RTC時間、系統時間(UTC)和本地時間的關系如下&#xff1a;?RTC時間?&#xff08;硬件時鐘&#xff09;&#xff1a;顯示為UTC時間格式&#xff1a;02:50:35/02:51:28由主板電池供電&#xff0c;獨立于系統運行?12通常存儲UTC時間&#xff08;Linux默認配置&…

VSCode——python選擇解釋器消失的解決辦法

VSCode軟件的左下角 設置——檢查更新&#xff1a;

笛卡爾積規避:JOIN條件完整性檢查要點

笛卡爾積是數據庫查詢中的高風險操作&#xff0c;多表JOIN時缺失有效關聯條件會導致結果集指數級膨脹&#xff0c;引發?性能塌方?甚至系統崩潰?。以下是核心檢查策略及防御方案&#xff1a;一、笛卡爾積的致命影響??性能塌方?百萬級訂單表與千萬級用戶表缺失ON條件時&…

Vimba相機二次開發教程,基于Python

文章目錄安裝獲取圖像輔助數據Vimba 是由 Allied Vision 開發的一套軟件開發套件&#xff08;SDK&#xff09;&#xff0c;主要用于控制和操作其工業相機產品。它提供了一套完整的 API 和工具&#xff0c;支持多種操作系統和編程語言&#xff0c;便于開發者快速集成相機功能到應…

電子測試行業軟件ATECLOUD與ETEST對比分析-納米軟件

在當今科技飛速發展的時代&#xff0c;電測行業對于自動化測試平臺的依賴程度日益加深。高效、精準的自動化測試平臺不僅能夠提升測試效率&#xff0c;還能確保產品質量。ATECLOUD 與 ETEST 作為電測行業中頗受矚目的自動化測試平臺&#xff0c;各自展現出獨特的優勢與特點。下…

自動化測試中的常見測試方法

自動化測試中的常見測試方法在自動化測試中&#xff0c;除了數據驅動&#xff08;Data-Driven Testing&#xff09;&#xff0c;還有多種主流方法&#xff0c;每種方法適用于不同場景和需求。以下是常見的自動化測試方法分類及詳解&#xff1a;一、關鍵字驅動測試&#xff08;K…