基于paddleDetect的半監督目標檢測實戰

基于paddleDetect的半監督目標檢測實戰

  • 前言
  • 相關介紹
  • 前提條件
  • 實驗環境
  • 安裝環境
  • 項目地址
  • 使用paddleDetect的半監督方法訓練自己的數據集
    • 準備數據
    • 分割數據集
    • 配置參數文件
      • PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml
      • PaddleDetection-2.7.0/configs/semi_det/\_base_/coco_detection_percent_10.yml
    • 訓練
    • 預測
    • 導出
    • 推理
  • 參考文獻

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

前言

  • 由于本人水平有限,難免出現錯漏,敬請批評改正。
  • 更多精彩內容,可點擊進入Python日常小操作專欄、OpenCV-Python小應用專欄、YOLO系列專欄、自然語言處理專欄、人工智能混合編程實踐專欄或我的個人主頁查看
  • 人工智能混合編程實踐:C++調用Python ONNX進行YOLOv8推理
  • 人工智能混合編程實踐:C++調用封裝好的DLL進行YOLOv8實例分割
  • 人工智能混合編程實踐:C++調用Python ONNX進行圖像超分重建
  • 人工智能混合編程實踐:C++調用Python AgentOCR進行文本識別
  • 通過計算實例簡單地理解PatchCore異常檢測
  • Python將YOLO格式實例分割數據集轉換為COCO格式實例分割數據集
  • YOLOv8 Ultralytics:使用Ultralytics框架訓練RT-DETR實時目標檢測模型
  • 基于DETR的人臉偽裝檢測
  • YOLOv7訓練自己的數據集(口罩檢測)
  • YOLOv8訓練自己的數據集(足球檢測)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩轉Jetson Nano(五):TensorRT加速YOLOv5目標檢測
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力機制
  • YOLOv5:yolov5s.yaml配置文件解讀、增加小目標檢測層
  • Python將COCO格式實例分割數據集轉換為YOLO格式實例分割數據集
  • YOLOv5:使用7.0版本訓練自己的實例分割模型(車輛、行人、路標、車道線等實例分割)
  • 使用Kaggle GPU資源免費體驗Stable Diffusion開源項目

相關介紹

PaddleDetection是一個基于PaddlePaddle的目標檢測端到端開發套件,在提供豐富的模型組件和測試基準的同時,注重端到端的產業落地應用,通過打造產業級特色模型|工具、建設產業應用范例等手段,幫助開發者實現數據準備、模型選型、模型訓練、模型部署的全流程打通,快速進行落地應用。

主要模型效果示例如下(點擊標題可快速跳轉):

通用目標檢測小目標檢測旋轉框檢測3D目標物檢測
人臉檢測2D關鍵點檢測多目標追蹤實例分割
車輛分析——車牌識別車輛分析——車流統計車輛分析——違章檢測車輛分析——屬性分析
行人分析——闖入分析行人分析——行為分析行人分析——屬性分析行人分析——人流統計

同時,PaddleDetection提供了模型的在線體驗功能,用戶可以選擇自己的數據進行在線推理。

前提條件

  • 熟悉Python

實驗環境

Package                Version       Editable project location
---------------------- ------------- -----------------------------------------------
albumentations         1.3.1
matplotlib             3.7.1
numba                  0.56.4
numpy                  1.23.5
onnx                   1.14.0
opencv-python          4.5.5.64
opencv-python-headless 4.11.0.86
packaging              23.1
paddle-bfloat          0.1.7
paddle2onnx            1.0.6
paddleclas             2.5.1
paddledet              0.0.0
paddlepaddle-gpu       2.4.2.post116
paddleseg              2.8.0         
paddleslim             1.1.1
paddlex                1.3.7
pandas                 2.0.1
Pillow                 9.5.0
pip                    23.0.1
protobuf               3.20.0
pycocotools            2.0.7
scikit-image           0.22.0
scikit-learn           1.2.2
scipy                  1.10.1
setuptools             66.0.0
torch                  1.10.1
torchvision            0.11.2

安裝環境

  • 具體安裝步驟,請查閱官方安裝文檔:https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.8.1/docs/tutorials/INSTALL_cn.md

項目地址

  • PaddleDetection 源代碼地址:https://github.com/PaddlePaddle/PaddleDetection.git
git clone --branch v2.7.0 https://github.com/PaddlePaddle/PaddleDetection.git
cd PaddleDetection-2.7.0

在這里插入圖片描述

使用paddleDetect的半監督方法訓練自己的數據集

準備數據

準備一個所需要訓練的coco格式數據集。

在這里插入圖片描述

分割數據集

paddlex --split_dataset --format COCO --dataset_dir ./trainning_dataset/coco/ --val_value 0.05 --test_value 0.05
  • –dataset_dir:coco數據集所在的文件夾路徑。

在這里插入圖片描述

配置參數文件

PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml

可根據實際情況修改參數,一般不需要修改,直接使用默認參數即可。

_BASE_: ['../../ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml','../_base_/coco_detection_percent_10.yml',
]
log_iter: 50
snapshot_epoch: 5
# weights: output/denseteacher_ppyoloe_plus_crn_l_coco_semi010/model_final
weights: output/best_modelepochs: &epochs 200
cosine_epochs: &cosine_epochs 240### pretrain and warmup config, choose one and comment another
pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/ppyoloe_plus_crn_l_80e_coco_sup010.pdparams # mAP=45.7
semi_start_iters: 0
ema_start_iters: 0
use_warmup: &use_warmup False# pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/pretrained/ppyoloe_crn_l_obj365_pretrained.pdparams
# semi_start_iters: 5000
# ema_start_iters: 3000
# use_warmup: &use_warmup True### global config
use_simple_ema: True
ema_decay: 0.9996
ssod_method: DenseTeacher
DenseTeacher:train_cfg:sup_weight: 1.0unsup_weight: 1.0loss_weight: {distill_loss_cls: 1.0, distill_loss_iou: 2.5, distill_loss_dfl: 0., distill_loss_contrast: 0.1}contrast_loss:temperature: 0.2alpha: 0.9smooth_iter: 100concat_sup_data: Truesuppress: linearratio: 0.01test_cfg:inference_on: teacher### reader config
batch_size: &batch_size 8
worker_num: 2
SemiTrainReader:sample_transforms:- Decode: {}- RandomDistort: {}- RandomExpand: {fill_value: [123.675, 116.28, 103.53]}- RandomFlip: {}- RandomCrop: {} # unsup will be fake gt_boxesweak_aug:- NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], is_scale: true, norm_type: none}strong_aug:- StrongAugImage: {transforms: [RandomColorJitter: {prob: 0.8, brightness: 0.4, contrast: 0.4, saturation: 0.4, hue: 0.1},RandomErasingCrop: {},RandomGaussianBlur: {prob: 0.5, sigma: [0.1, 2.0]},RandomGrayscale: {prob: 0.2},]}- NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], is_scale: true, norm_type: none}sup_batch_transforms:- BatchRandomResize: {target_size: [640], random_size: True, random_interp: True, keep_ratio: False}- Permute: {}- PadGT: {}unsup_batch_transforms:- BatchRandomResize: {target_size: [640], random_size: True, random_interp: True, keep_ratio: False}- Permute: {}sup_batch_size: *batch_sizeunsup_batch_size: *batch_sizeshuffle: Truedrop_last: Truecollate_batch: TrueEvalReader:sample_transforms:- Decode: {}- Resize: {target_size: [640, 640], keep_ratio: False, interp: 2}- NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], norm_type: none}- Permute: {}batch_size: 2TestReader:inputs_def:image_shape: [3, 640, 640]sample_transforms:- Decode: {}- Resize: {target_size: [640, 640], keep_ratio: False, interp: 2}- NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], norm_type: none}- Permute: {}batch_size: 1### model config
architecture: PPYOLOE
norm_type: sync_bn
ema_black_list: ['proj_conv.weight']
custom_black_list: ['reduce_mean']
PPYOLOE:backbone: CSPResNetneck: CustomCSPPANyolo_head: PPYOLOEHeadpost_process: ~eval_size: ~ # means None, but not str 'None'
PPYOLOEHead:fpn_strides: [32, 16, 8]grid_cell_scale: 5.0grid_cell_offset: 0.5static_assigner_epoch: -1 #use_varifocal_loss: Trueloss_weight: {class: 1.0, iou: 2.5, dfl: 0.5}static_assigner:name: ATSSAssignertopk: 9assigner:name: TaskAlignedAssignertopk: 13alpha: 1.0beta: 6.0nms:name: MultiClassNMSnms_top_k: 1000keep_top_k: 300score_threshold: 0.01nms_threshold: 0.7### other config
epoch: *epochs
LearningRate:base_lr: 0.01schedulers:- !CosineDecaymax_epochs: *cosine_epochsuse_warmup: *use_warmup- !LinearWarmupstart_factor: 0.001epochs: 3OptimizerBuilder:optimizer:momentum: 0.9type: Momentumregularizer:factor: 0.0005 # dt-fcos 0.0001type: L2clip_grad_by_norm: 1.0 # dt-fcos clip_grad_by_value

PaddleDetection-2.7.0/configs/semi_det/_base_/coco_detection_percent_10.yml

這里要修改對應數據集的路徑,以及數據集的類別數

  • num_classes: 1(數據集的類別數)
  • image_dir: JPEGImages
  • anno_path: train.json
  • dataset_dir: ./trainning_dataset/coco/
metric: COCO
num_classes: 1# partial labeled COCO, use `SemiCOCODataSet` rather than `COCODataSet`
TrainDataset:!SemiCOCODataSetimage_dir: JPEGImagesanno_path: train.jsondataset_dir: ./trainning_dataset/coco/data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']# partial unlabeled COCO, use `SemiCOCODataSet` rather than `COCODataSet`
UnsupTrainDataset:!SemiCOCODataSetimage_dir: JPEGImagesanno_path: test.jsondataset_dir: ./trainning_dataset/coco/data_fields: ['image']supervised: FalseEvalDataset:!COCODataSetimage_dir: JPEGImagesanno_path: val.jsondataset_dir: ./trainning_dataset/coco/allow_empty: trueTestDataset:!ImageFolderanno_path: annotations/instances_val2017.json # also support txt (like VOC's label_list.txt)dataset_dir: dataset/coco # if set, anno_path will be 'dataset_dir/anno_path'

訓練

conda activate paddleDetectexport CUDA_VISIBLE_DEVICES=0 # 設置1張可用的卡nohup python PaddleDetection-2.7.0/tools/train.py -c PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml -o use_gpu=true --eval --amp &

訓練的權重會保存在./output文件夾里。

在這里插入圖片描述

預測

conda activate paddleDetectexport CUDA_VISIBLE_DEVICES=0 # 設置1張可用的卡python PaddleDetection-2.7.0/tools/infer.py -c PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml -o weights=output/best_model.pdparams --infer_dir=test_imgs/ --output_dir infer_output

預測出來的圖片會保存在./infer_output文件夾里。

在這里插入圖片描述

導出

conda activate paddleDetectpython PaddleDetection-2.7.0/tools/export_model.py -c PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml -o weights=output/best_model.pdparams -o trt=True

導出的權重會保存在./output_inference文件夾里。

在這里插入圖片描述

推理

conda activate paddleDetectexport CUDA_VISIBLE_DEVICES=0 # 設置1張可用的卡python PaddleDetection-2.7.0/deploy/python/infer.py --model_dir=./output_inference/denseteacher_ppyoloe_plus_crn_l_coco_semi010/ --image_dir=test_imgs/ --output_dir=infer_output_pdimodel --device=GPU

推理出來的圖片會保存在./infer_output_pdimodel文件夾里。
在這里插入圖片描述

參考文獻

[1] PaddleDetection 源代碼地址:https://github.com/PaddlePaddle/PaddleDetection.git
[2] https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.8.1/configs/ppyoloe/README_cn.md
[3] https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.8.1/configs/semi_det
[4] https://github.com/Megvii-BaseDetection/DenseTeacher
[5] https://arxiv.org/abs/2207.02541v2

  • 由于本人水平有限,難免出現錯漏,敬請批評改正。
  • 更多精彩內容,可點擊進入Python日常小操作專欄、OpenCV-Python小應用專欄、YOLO系列專欄、自然語言處理專欄、人工智能混合編程實踐專欄或我的個人主頁查看
  • 人工智能混合編程實踐:C++調用Python ONNX進行YOLOv8推理
  • 人工智能混合編程實踐:C++調用封裝好的DLL進行YOLOv8實例分割
  • 人工智能混合編程實踐:C++調用Python ONNX進行圖像超分重建
  • 人工智能混合編程實踐:C++調用Python AgentOCR進行文本識別
  • 通過計算實例簡單地理解PatchCore異常檢測
  • Python將YOLO格式實例分割數據集轉換為COCO格式實例分割數據集
  • YOLOv8 Ultralytics:使用Ultralytics框架訓練RT-DETR實時目標檢測模型
  • 基于DETR的人臉偽裝檢測
  • YOLOv7訓練自己的數據集(口罩檢測)
  • YOLOv8訓練自己的數據集(足球檢測)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩轉Jetson Nano(五):TensorRT加速YOLOv5目標檢測
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力機制
  • YOLOv5:yolov5s.yaml配置文件解讀、增加小目標檢測層
  • Python將COCO格式實例分割數據集轉換為YOLO格式實例分割數據集
  • YOLOv5:使用7.0版本訓練自己的實例分割模型(車輛、行人、路標、車道線等實例分割)
  • 使用Kaggle GPU資源免費體驗Stable Diffusion開源項目

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

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

相關文章

計算機網絡:(十)虛擬專用網 VPN 和網絡地址轉換 NAT

計算機網絡:(十)虛擬專用網 VPN 和網絡地址轉換 NAT前言一、虛擬專用網 VPN1. 基礎概念與作用2. 工作原理3. 常見類型4. 協議對比二、NAT:網絡地址轉換1. 基礎概念與作用2. 工作原理與類型3. 優缺點與問題4. 進階類型三、VPN 與 N…

數位 dp

數位dp 特點 問題大多是指“在 [l,r][l,r][l,r] 的區間內,滿足……的數字的個數、種類,等等。” 但是顯然,出題人想要卡你,rrr 肯定是非常大的,暴力枚舉一定超時。 于是就有了數位 dp。 基本思路 數位 dp 說白了…

Selector的用法

Selector的用法 Selector是基于lxml構建的支持XPath選擇器、CSS選擇器&#xff0c;以及正則表達式&#xff0c;功能全面&#xff0c;解析速度和準確度非常高 from scrapy import Selectorbody <html><head><title>HelloWorld</title></head>&…

Netty封裝Websocket并實現動態路由

引言 關于Netty和Websocket的介紹我就不多講了,網上一搜一大片。現如今AI的趨勢發展很熱門,長連接對話也是會經常接觸到的,使用Websocket實現長連接,那么很多人為了快速開發快速集成就會使用spring-boot-starter-websocket依賴快速實現,但是注意該實現是基于tomcat的,有…

行為型設計模式:解釋器模式

解釋器模式 解釋器模式介紹 解釋器模式使用頻率不算高&#xff0c;通常用來描述如何構建一個簡單“語言”的語法解釋器。它只在一些非常特定的領域被用到&#xff0c;比如編譯器、規則引擎、正則表達式、SQL 解析等。不過&#xff0c;了解它的實現原理同樣很重要&#xff0c;能…

SaTokenException: 未能獲取對應StpLogic 問題解決

&#x1f4dd; Sa-Token 異常處&#xff1a;未能獲取對應StpLogic&#xff0c;typeuser&#x1f9e8; 異常信息 cn.dev33.satoken.exception.SaTokenException: 未能獲取對應StpLogic&#xff0c;typeuser拋出位置&#xff1a; throw new SaTokenException("未能獲取對應S…

Web前端性能優化原理與方法

一、概述 1.1 性能對業務的影響 大部分網站的作用是&#xff1a;產品信息載體、用戶交互工具或商品流通渠道。這就要求網站與更多用戶建立聯系&#xff0c;同時還要保持良好的用戶黏性&#xff0c;所以網站就不能只關注自我表達&#xff0c;而不顧及用戶是否喜歡。看看網站性…

第十八節:第六部分:java高級:注解、自定義注解、元注解

認識注解自定義注解注解的原理元注解常用的兩個元注解代碼&#xff1a; MyTest1&#xff08;注解類&#xff09; package com.itheima.day10_annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Retent…

北京科技企業在軟文推廣發稿平臺發布文章,如何精準觸達客戶?

大家好&#xff01;我是你們的老朋友&#xff0c;今天咱們聊聊北京科技企業如何通過軟文推廣發稿平臺精準觸達目標客戶這個話題。作為企業營銷的老司機&#xff0c;我深知在這個信息爆炸的時代&#xff0c;如何讓你的品牌聲音被目標客戶聽到是多么重要。下面就讓我來分享一些實…

UE蒙太奇和動畫序列有什么區別?

在 UE5 中&#xff0c;Animation Sequence&#xff08;動畫序列&#xff09;和 Animation Montage&#xff08;動畫蒙太奇&#xff09;雖然都能播放骨骼動畫&#xff0c;但它們的定位、功能和使用場景有較大區別&#xff1a;1. 概念定位Animation Sequence&#xff08;動畫序列…

Nordic打印RTT[屏蔽打印中的<info> app]

屏蔽打印中的 app Nordic原裝的程序答應是這樣的,這個有" app"打印,因為習慣問題,有時候也不想打印太多造成RTT VIEW顯示被沖點,所以要把" app"去掉:這里把prefix_process函數調用屏蔽到,主要涉及到nrf_log_hexdump_entry_process和nrf_log_std_entry_proc…

Python基礎和高級【抽取復習】

1.Python 的深拷貝和淺拷貝有什么區別&#xff1f; 淺拷貝【ls.copy()】&#xff1a; 將列表的不可變對象【值】復制一份&#xff0c;同時引用其中的可變對象【列表】&#xff0c;共用一個內存地址 深拷貝【lscopy.deepcopy(list)】&#xff1a; 完全的復制原可變對象&#xff…

TinyPiXOS組件開發(一):開發規范、組件開發方法介紹,快速上手組件開發,創造各種有趣的UI組件!

本文將通過實現一個點擊切換進度的電量指示燈組件和exampleGUI組件庫介紹如何基于TinyPiXOS開發新組件。主要內容包括組件開發規范、自定義組件開發和組件庫開發三部分。 組件開發規范 命名規范 采用tp開頭命名組件類&#xff0c;名稱具備易讀性。 目錄規范 頭文件放置 in…

主流熔斷方案選型指南

主流熔斷方案選型1. Netflix Hystrix (經典但已停止維護)適用場景&#xff1a;傳統Spring Cloud項目&#xff0c;需要快速集成熔斷功能優點&#xff1a;成熟穩定&#xff0c;社區資源豐富與Spring Cloud Netflix套件無縫集成提供熔斷、降級、隔離等完整功能缺點&#xff1a;已停…

Django中get()與filter()對比

在 Django 中&#xff0c;get() 和 filter() 是 QuerySet API 中用于檢索數據的兩個核心方法&#xff0c;它們的功能和使用場景有明顯區別。以下是詳細對比&#xff1a; 1. 核心區別特性get()filter()返回值單個對象&#xff08;模型實例&#xff09;查詢集&#xff08;QuerySe…

MySQL鎖(一) 概述與分類

1.1 MySQL鎖的由來 客戶端發往 MySQL 的一條條 SQL 語句&#xff0c;實際上都可以理解成一個個單獨的事務&#xff08;一條sql語句默認就是一個事務&#xff09;。而事務是基于數據庫連接的&#xff0c;每個數據庫連接在 MySQL 中&#xff0c;又會用一條工作線程來維護&#x…

PyTorch里的張量及張量的操作

張量的簡介 張量是多重線性映射在給定基下的坐標表示&#xff0c;可視為向量和矩陣的泛化。 0 維張量&#xff1a;標量&#xff08;如 5&#xff09;1 維張量&#xff1a;向量&#xff08;如 [1, 2, 3]&#xff09;2 維張量&#xff1a;矩陣&#xff08;如 [[1, 2], [3, 4]]&…

向量數據庫Faiss vs Qdrant全面對比

Faiss vs Qdrant 全面對比表 向量數據庫是一種相對較新的方式,用于與來自不透明機器學習模型(如深度學習架構)派生的抽象數據表示進行交互。這些表示通常被稱為向量或嵌入(embeddings),它們是用于訓練機器學習模型完成諸如情感分析、語音識別、目標檢測等任務的數據的壓…

2025年AIR SCI1區TOP,縮減因子分數階蜣螂優化算法FORDBO,深度解析+性能實測

目錄1.摘要2.蜣螂優化算法DBO原理3.改進策略4.結果展示5.參考文獻6.代碼獲取7.算法輔導應用定制讀者交流1.摘要 傳統DBO存在探索與開發能力失衡、求解精度低以及易陷入局部最優等問題。因此&#xff0c;本文提出了帶有縮減因子分數階蜣螂優化算法&#xff08;FORDBO&#xff0…

爬蟲逆向之JS混淆案例(全國招標公告公示搜索引擎 type__1017逆向)

案例https://ctbpsp.com/#/ 截至2025.07.19可用 定位加密位置 加密位置&#xff1a; 定位方式&#xff0c;XHR&#xff0c;跟棧 跟棧 QL打斷點&#xff0c;重新斷住 分析為&#xff0c;一個函數傳入四個參數 var QL QI[d9(Nv.mQ)](QJ, Qh, Qv, this[d9(Nv.m9)][0xa1a * …