用PaddleDetection套件訓練自己的數據集,PP-YOLO-SOD訓練全流程

文章目錄

  • 官方資料
  • ppyoloe+ 訓練全流程
    • 環境配置與套件準備
    • 數據集準備與VOC格式ppdet的要求
    • 標簽列表txt文件生成腳本
    • 數據集配置
    • 預訓練權重
    • 模型配置
    • ppyoloe訓練命令
    • ppyoloe評估命令
    • ppyoloe推理命令與可視化結果
  • ppyoloe-SOD 訓練全流程
    • 預訓練權重
    • 模型配置
    • ppyoloe訓練命令

官方資料

PaddlePaddle框架官方文檔:https://www.paddlepaddle.org.cn/
在這里插入圖片描述

論文:PP-YOLOE: An evolved version of YOLO
PaddleDection套件:pp-yoloe-sod-高精度小目標檢測模型
在這里插入圖片描述
小目標檢測模型說明:PP-YOLOE-SOD 小目標檢測模型(PP-YOLOE Small Object Detection)
在這里插入圖片描述

PP-YOLOE-SOD預訓練權重:模型庫
在這里插入圖片描述

ppyoloe+ 訓練全流程

環境配置與套件準備

pip install paddlepaddle-gpu==3.0.0b1 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
# 進入套件
cd PaddleDetection-release-2.8.1# 初始化
python setup.py install# 安裝依賴
pip install -r requirements.txt
pip install visualdl -i https://mirror.baidu.com/pypi/simple

直接運行以下命令安裝 libgomp1

apt-get update && apt-get install -y libgomp1

數據集準備與VOC格式ppdet的要求

VOC格式數據集,訓練集、驗證集、測試集劃分好,本別一個文件夾。
在這里插入圖片描述
以訓練集為例,需要含這四個:
在這里插入圖片描述

  • 圖片文件夾:JPEGImages
    在這里插入圖片描述

  • 標簽文件夾:Annotations
    在這里插入圖片描述

  • 類別列表文件:label_list.txt
    在這里插入圖片描述

  • 標簽列表文件:train_list.txt
    在這里插入圖片描述

標簽列表txt文件生成腳本

import osdef generate_list_file(voc_root, output_list_path):"""生成VOC數據集的列表文件,每行格式為:JPEGImages/圖像名 Annotations/標注名參數:voc_root: VOC數據集根目錄(包含JPEGImages和Annotations文件夾)output_list_path: 輸出的列表文件路徑(如train_list.txt)"""# 檢查輸入目錄是否存在jpeg_dir = os.path.join(voc_root, "JPEGImages")anno_dir = os.path.join(voc_root, "Annotations")if not os.path.exists(jpeg_dir):raise ValueError(f"JPEGImages目錄不存在:{jpeg_dir}")if not os.path.exists(anno_dir):raise ValueError(f"Annotations目錄不存在:{anno_dir}")# 獲取所有圖像文件(僅保留常見圖像格式)image_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.JPG', '.JPEG', '.PNG', '.BMP')image_files = [f for f in os.listdir(jpeg_dir) if f.endswith(image_extensions)]if not image_files:print(f"警告:在 {jpeg_dir} 中未找到任何圖像文件")return# 寫入列表文件with open(output_list_path, 'w') as f:count = 0for img_file in image_files:# 圖像文件名(不含擴展名)img_name = os.path.splitext(img_file)[0]# 對應的標注文件名稱anno_file = f"{img_name}.xml"# 檢查標注文件是否存在anno_path = os.path.join(anno_dir, anno_file)if not os.path.exists(anno_path):print(f"警告:未找到 {img_file} 對應的標注文件 {anno_file},已跳過")continue# 按要求格式寫入(相對路徑)line = f"JPEGImages/{img_file} Annotations/{anno_file}\n"f.write(line)count += 1print(f"已生成 {output_list_path},包含 {count} 對有效圖像和標注")if __name__ == "__main__":# 配置你的數據集路徑train_voc_root = "/mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-train-VOC"val_voc_root = "/mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-val-VOC"# 輸出列表文件路徑(可根據需要修改,建議放在數據集根目錄)train_list_path = os.path.join(train_voc_root, "train_list.txt")val_list_path = os.path.join(val_voc_root, "val_list.txt")# 生成訓練集列表print("開始處理訓練集...")generate_list_file(train_voc_root, train_list_path)# 生成驗證集列表print("\n開始處理驗證集...")generate_list_file(val_voc_root, val_list_path)

數據集配置

PaddleDetection套件的所有配置文件都在PaddleDetection-release-2.8.1/configs目錄下,數據集的配置文件在PaddleDetection-release-2.8.1/configs/datasets
在這里插入圖片描述voc.yml是官方的VOC數據集的配置文件,自己新建一個DUT-drone_voc.yaml配置文件

后面的模型配置文件中需要修改為../datasets/DUT-drone_voc.yaml

metric: VOC
map_type: 11point
num_classes: 1TrainDataset:name: VOCDataSet  # 使用框架默認的VOC數據集類dataset_dir: /mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-train-VOC  # 絕對路徑anno_path: train_list.txtlabel_list: label_list.txtdata_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']EvalDataset:name: VOCDataSetdataset_dir: /mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-val-VOCanno_path: val_list.txtlabel_list: label_list.txtdata_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']TestDataset:name: ImageFolderimage_dir: /mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-val-VOC/JPEGImagesanno_path: /mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-val-VOC/label_list.txt

預訓練權重

模型庫地址:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.8.1/configs/smalldet
模型庫含有的:

  • VisDrone模型
  • COCO模型
  • 切圖模型
  • 拼圖模型

我下載的是PP-YOLOE+_l的模型
在這里插入圖片描述

隨后在模型配置文件中指定路徑

pretrain_weights: /mnt/Virgil/PaddleDetetion/ppyoloe_plus_crn_l_80e_coco.pdparams

模型配置

模型的配置文件在PaddleDetection-release-2.8.1/configs/ppyoloe

在這里插入圖片描述PaddleDetection-release-2.8.1/configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml是官方的模型配置文件,自己新建一個DUT_ppyoloe_plus_crn_l_80e_coco.yml

_BASE_: ['../datasets/DUT-drone_voc.yaml','../runtime.yml','./_base_/optimizer_80e.yml','./_base_/ppyoloe_plus_crn.yml','./_base_/ppyoloe_plus_reader.yml',
]log_iter: 100
epoch: 100
snapshot_epoch: 5weights: output/ppyoloe_plus_crn_l_80e_coco/model_final
#pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/pretrained/ppyoloe_crn_l_obj365_pretrained.pdparams
pretrain_weights: /mnt/Virgil/PaddleDetetion/ppyoloe_plus_crn_l_80e_coco.pdparamsdepth_mult: 1.0
width_mult: 1.0TrainReader:batch_size: 8

ppyoloe訓練命令

參考飛漿官方乒乓球識別比賽的命令:

python tools/train.py -c configs/picodet/ppq.yml \--use_vdl=true \--vdl_log_dir=/home/aistudio/work/vdl_dir \--eval \-o save_dir=/home/aistudio/work/model
cd /mnt/Virgil/PaddleDetetion/PaddleDetection-release-2.8.1
python -u tools/train.py -c configs/ppyoloe/DUT_ppyoloe_plus_crn_l_80e_coco.yml \--use_vdl=true \--vdl_log_dir=vdl_dir/scalar \--eval

ppyoloe評估命令

參考飛漿官方乒乓球識別比賽的命令:

python tools/eval.py -c configs/picodet/ppq.yml \-o weights=/home/aistudio/work/model/ppq/best_model.pdparams \# --classwise \

ppyoloe推理命令與可視化結果

參考飛漿官方乒乓球識別比賽的命令:

cd PaddleDetection-2.5.0
!python tools/infer.py -c configs/picodet/ppq.yml \--infer_img=/home/aistudio/work/dataset/val/JPEGImages/game_1_frame_012375.png \-o weights=/home/aistudio/work/model/ppq/best_model.pdopt \--output_dir=/home/aistudio/work/img

參考飛漿官方乒乓球識別比賽的可視化:

import matplotlib.pyplot as plt
import cv2# 讀取圖像
image_path = "/home/aistudio/work/img/game_1_frame_012375.png"
image = cv2.imread(image_path)# 檢查圖像是否成功加載
if image is None:print(f"Failed to load image: {image_path}")
else:# 轉換 BGR 到 RGBimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 顯示圖像plt.imshow(image)plt.axis("off")  # 關閉坐標軸plt.show()

ppyoloe-SOD 訓練全流程

預訓練權重

模型庫地址:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.8.1/configs/smalldet

我下載的是PP-YOLOE+_SOD-l的模型
在這里插入圖片描述

隨后在模型配置文件中指定路徑

pretrain_weights: /mnt/Virgil/PaddleDetetion/ppyoloe_plus_sod_crn_l_80e_visdrone.pdparams

模型配置

模型的配置文件在PaddleDetection-release-2.8.1/configs/smalldet

在這里插入圖片描述

PaddleDetection-release-2.8.1/configs/smalldet/ppyoloe_plus_sod_crn_l_80e_coco.yml是官方的模型配置文件,自己新建一個DUT_ppyoloe_plus_sod_crn_l_80e_coco.yml

修改數據集目錄為:../datasets/DUT-drone_voc.yaml

_BASE_: ['../datasets/DUT-drone_voc.yaml','../runtime.yml','../ppyoloe/_base_/optimizer_80e.yml','../ppyoloe/_base_/ppyoloe_plus_crn.yml','../ppyoloe/_base_/ppyoloe_plus_reader.yml',
]log_iter: 100
epoch: 100
snapshot_epoch: 5
weights: output/ppyoloe_plus_sod_crn_l_80e_coco/model_final#pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/pretrained/ppyoloe_crn_l_obj365_pretrained.pdparams
pretrain_weights: /mnt/Virgil/PaddleDetetion/ppyoloe_plus_sod_crn_l_80e_visdrone.pdparamsdepth_mult: 1.0
width_mult: 1.0CustomCSPPAN:num_layers: 4use_trans: TruePPYOLOEHead:reg_range: [-2, 17]static_assigner_epoch: -1assigner:name: TaskAlignedAssigner_CRcenter_radius: 1nms:name: MultiClassNMSnms_top_k: 1000keep_top_k: 300score_threshold: 0.01nms_threshold: 0.7TrainReader:batch_size: 2

ppyoloe訓練命令

cd /mnt/Virgil/PaddleDetetion/PaddleDetection-release-2.8.1
python -u tools/train.py -c configs/smalldet/DUT_ppyoloe_plus_sod_crn_l_80e_coco.yml \--use_vdl=true \--vdl_log_dir=vdl_dir/scalar \--eval

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

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

相關文章

Candle用 Rust 打造“小而快”的機器學習棧

1. 為什么是 Candle?(三條硬理由)Serverless & 輕量部署 傳統 Python 生態在函數冷啟動/GIL/體積上常見掣肘。Candle 是純 Rust 二進制,可將推理程序打包成一個小體積可執行文件,非常適合邊緣側 & Serverless。…

小波卷積YYDS!小波變換+CNN創新結合

2025深度學習發論文&模型漲點之——小波卷積小波卷積通過先將輸入信號或圖像進行小波分解,得到不同尺度的子帶信號,然后在每個子帶信號上應用卷積操作來提取局部特征,最后通過逆小波變換將經過卷積處理的子帶信號重構為最終的輸出信號或圖…

高性價比的5G專網設備,助力企業降本增效

在數字化轉型的浪潮中,企業亟需兼顧先進技術與投入成本的平衡。作為全球領先的核心網供應商,IPLOOK始終堅持以客戶為中心,推出高性價比的5G行業專網設備,幫助企業在保障性能的同時,有效降低網絡建設與運維成本。 高性…

可編輯150頁PPT | 某制造集團產業數字化轉型規劃方案

推薦摘要:某制造集團產業數字化轉型規劃方案,直擊傳統制造向智能智造躍遷的核心命題。該集團作為裝備制造領域龍頭,業務橫跨工程機械、農業機械、能源裝備三大板塊,擁有12個生產基地、400余家供應鏈企業,但面臨設備聯網…

Kafka 面試題及詳細答案100道(11-22)-- 核心機制1

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 11. 什么是Kafka的分區(P…

PHP反序列化的CTF題目環境和做題復現第1集

1 通過post參數提交反序列信息 2 題目 http://192.168.1.8/fxl1/fxl1.php <?php highlight_file(__FILE__);class ezUnserialize{public $key;public function __destruct(){if($this->key "FLAG"){include(flag.php);echo $flag;}} } unserialize($_POST[a…

[論文閱讀] 軟件工程工具 | EVOSCAT可視化工具如何重塑軟件演化研究

EVOSCAT可視化工具如何重塑軟件演化研究 論文信息 原標題&#xff1a;EVOSCAT: Exploring Software Change Dynamics in Large-Scale Historical Datasets主要作者及機構&#xff1a; Souhaila Serbout&#xff08;University of Zurich, Zurich, Switzerland&#xff09;Diana…

【入門級-算法-6、排序算法:排序的基本概念冒泡排序】

一、排序概念&#xff1a;是將一組數據按照特定規則重新排列的過程&#xff0c;是計算機科學中最基礎且重要的算法之一。 二、排序的基本要素 排序鍵(Key)&#xff1a;是排序過程中用于比較和確定元素順序的特定數據項或數據屬性。 穩定性&#xff1a;排序過程中&#xff0c;相…

搭建私有Claude體驗平臺:Open WebUI + Anthropic API + Trojan完整部署指南

言簡意賅的講解Open WebUI Anthropic API Trojan解決的痛點 身邊的小伙伴們都想體驗Claude&#xff0c;但直接訪問Anthropic API存在網絡連接問題。本文記錄了我如何通過Docker部署Open WebUI&#xff0c;結合網絡代理和Anthropic Manifold Pipe&#xff0c;為團隊搭建了一個…

Hadoop技術棧(一)hadoop搭建與HDFS常用命令

概念 hadoop是一個大數據的分布式存儲&#xff0c;調度&#xff0c;計算框架。也可以說是一個生態圈&#xff0c;包含很多技術&#xff1a;Hive、Hbase、Flume、Kafka... Hadoop的優點 Hadoop具有存儲和處理數據能力的高可靠性。 Hadoop通過可用的計算機集群分配數據&#xf…

electron之win/mac通知免打擾

目錄 系統區別 win&#xff1a;不支持桌面通知&#xff0c;使用氣泡顯示 mac&#xff1a;有鏡像/共享屏幕時 通知免打擾設置 代碼 Vuex&#xff1a;免打擾狀態 src/store/App/mutations.ts src/store/App/state.ts src/views/miracast/index.vue Util 【可選】src/ut…

為什么Integer緩存-128 ~ 127

背景 面試題, 相關問題的考察. 題目大概是, 包裝類型Integer 比較的時候 : -127 ~ 128 是否相等. 其他是否相等? 原理比較的是地址. 如果是不同的對象, 那么就不相等. 實踐 下面是幾個簡單實踐. 全部新建對象 解釋: 新建對象后, 地址不同, 所以都是false不新建對象 暫時的理解…

微軟Wasm學習-創建一個最簡單的c#WebAssembly測試工程

要創建一個最簡單的微軟 WebAssembly&#xff08;Wasm&#xff09;測試工程&#xff0c;最直接的方式是使用 Blazor WebAssembly&#xff0c;這是微軟官方推薦的 WebAssembly 開發框架。下面是創建和運行最簡單 Blazor WebAssembly 項目的步驟&#xff1a; 相關&#xff1a;微…

通過 GitHub520 項目自動獲取最新 Hosts 配置,無需手動查詢 IP。

操作步驟&#xff1a;打開終端Command 空格 聚焦搜索“終端”&#xff0c;打開應用。執行一鍵腳本復制以下命令粘貼到終端運行&#xff08;需輸入密碼授權&#xff09;&#xff1a;bashsed -i "" "/# GitHub520 Host Start/,/# Github520 Host End/d" /et…

C# 目錄與文件操作筆記

一、基本概念1. 數據存儲方式對比存儲方式適用場景特點數據庫存儲大量、關系復雜、有序的數據結構化強&#xff0c;支持復雜查詢和事務文件存儲少量、關系簡單的數據&#xff08;如日志&#xff09;操作簡便&#xff0c;可存儲于任意介質2. 文件與流文件&#xff1a;存儲在磁盤…

docker部署flask并遷移至內網

需要直接使用的可以使用下面的鏈接&#xff1a; 通過網盤分享的文件&#xff1a;docker_flask.tar 鏈接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwdqxqm 提取碼: qxqm 來自百度網盤超級會員v6的分享 外網部署docker版flask 目錄結構 ./miniconda-docker/ ├── d…

161. Java Lambda 表達式 - 使用工廠方法創建 Predicates

文章目錄161. Java Lambda 表達式 - 使用工廠方法創建 Predicates&#x1f3af; Predicate 工廠方法概覽&#x1f9ea; 示例一&#xff1a;Predicate.isEqual() 工廠方法&#x1f9ea; 示例二&#xff1a;Predicate.not() 工廠方法&#xff08;Java 11&#xff09;&#x1f3af…

c#Blazor WebAssembly在網頁中多線程計算1000萬次求余

在 Blazor WebAssembly 中實現多線程計算并獲取線程 ID 是可行的&#xff0c;但需要正確配置多線程環境并處理線程安全和 UI 更新邏輯。以下是完整示例和檢測方法&#xff1a;一、準備工作&#xff1a;啟用多線程支持首先需確保項目已啟用 WebAssembly 多線程&#xff0c;修改項…

鼠標右鍵沒有“通過VSCode打開文件夾”

1, WinR 打開運行&#xff0c;輸入regedit&#xff0c;打開注冊表&#xff0c;找到HKEY_CLASSES_ROOT\*\shell分支&#xff0c;如果沒有shell分支&#xff0c;則在*下點擊右鍵&#xff0c;選擇“新建&#xff0d;項”&#xff0c;建立shell分支。 2, 在shell下新建“VisualCod…

[ Spring 框架 ] 框架搭建和屬性賦值

目錄 1. Spring定義: (1). IOC( Inversion of Control): (2). AOP (Aspect Oriented Programming): (3)一站式: 2. spring搭建: (1). 創建一個Maven項目 (2). 導入核心 jar包 (3). 編寫 spring 配置文件 (4). 編寫實體類,并生成set方法 (5). 在resource中加入spring核…