手把手安装PaddleDetection的RT-DETR并实现PCB缺陷精确检测



先看效果:

这是检测电路板断路的情况,整体图如下:
在这里插入图片描述
局部检测结果,放大如下:
在这里插入图片描述

前言

这篇记录如何在Linux环境上通过anaconda来安装飞浆的RT-DETR,并实现PCB板表面缺陷检测,性能刚刚的。

一、RT-DETR算法

最近PaddleDetection的develop分支中新出了RT-DETR的实时端到端目标检测框架,RT-DETR是第一个实时端到端目标检测器。通过高效的混合编码器,解耦尺度内交互和跨尺度融合来高效处理多尺度特征。此外,RT-DETR支持通过使用不同的解码器层来灵活调整推理速度,而不需要重新训练,这有助于实时目标检测器的实际应用。
在这里插入图片描述

二、安装步骤

1.安装PaddlePaddle

本文按照以下cmd文档来安装的:

https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.7/docs/tutorials/INSTALL_cn.md

代码如下(示例):

conda create -n paddle python=3.10
conda activate paddle
conda install paddlepaddle-gpu==2.6.1 cudatoolkit=11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge

cuda版本选择,可以从以下网址找到:
paddlepaddle+cuda

请确保您的PaddlePaddle安装成功并且版本不低于需求版本。使用以下命令进行验证。

#在您的Python解释器中确认PaddlePaddle安装成功

python
Python 3.10.14 (main, May  6 2024, 19:42:50) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle
>>> paddle.utils.run_check()
Running verify PaddlePaddle program ... 
I0520 10:31:50.053882  6689 program_interpreter.cc:212] New Executor is Running.
……
W0520 10:31:50.056286  6689 gpu_resources.cc:164] device: 0, cuDNN Version: 8.4.
I0520 10:31:50.895520  6689 interpreter_util.cc:624] Standalone Executor is Used.
PaddlePaddle works well on 1 GPU.


# 确认PaddlePaddle版本
python -c "import paddle; print(paddle.__version__)"

2.安装PaddleDetection

操作流程如下:

# 克隆PaddleDetection仓库
cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git

# 安装其他依赖
cd PaddleDetection
pip install -r requirements.txt

# 编译安装paddledet
python setup.py install

# install完毕,会显示如下:
Using /home/wqt/anaconda3/envs/paddle/lib/python3.10/site-packages
Finished processing dependencies for paddledet==0.0.0


#验证paddledetection是否安装成功:
python ppdet/modeling/tests/test_architectures.py
测试通过后会提示如下信息:
.......
Ran 7 tests in 12.816s
OK

3.数据准备

本次数据集采用PKU-Market-PCB,该数据集用于印刷电路板(PCB)的瑕疵检测,提供了6种常见的PCB缺陷(漏孔、鼠咬、开路、短路、杂散、杂铜)。 同时,该数据集提供了train_shots10,train_shots30用于小样本缺陷检测,感兴趣的可以通过更换数据集路径进行尝试。

数据集来源:https://robotics.pkusz.edu.cn/resources/dataset/

数据处理:

# 解压数据集(仅运行一次)
tar -xvf data/data185667/pcb.tar -C ./data/

# 组织数据目录
mkdir MyDataset
mkdir MyDataset/JPEGImages

#移动,可以改为cp
!mv data/pcb/images/* MyDataset/JPEGImages/
!mv data/pcb/pcb_cocoanno/* MyDataset/

4.模型选型

RT-DETR提供了四种模型进行选择,具体的模型选型可以根据自己数据集的情况选取精度与速度相适应的模型,本次采用RT-DETR-R101

3.1 找到配置文件
配置文件在PaddleDetection/configs/rtdetr/rtdetr_r101vd_6x_coco.yml,主要包含五个部分~~,为了方便更改,将其copy到根目录下~~
在这里插入图片描述
学习率训练轮数等超参数,因为官方是在4卡进行训练,因此在单卡情况下修改base_lr=0.0001/4 = 0.000025
在这里插入图片描述
此外,单步模型的保存太占空间,可以在/PaddleDetection/configs/runtime.yml中设置snapshot_epoch: 10,这样每10个循环就保存一次迭代的模型;

5.模型训练

训练100轮map为0.46,average FPS: 40

#运行命令行
python tools/train.py \
-c configs/rtdetr/rtdetr_r101vd_6x_coco.yml \
--use_vdl=True \
--vdl_log_dir=../work/ \
--eval 

#运行过程显示,会先下载模型如下:
download INFO: Downloading ResNet101_vd_ssld_pretrained.pdparams from https://paddledet.bj.bcebos.com/models/pretrained/ResNet101_vd_ssld_pretrained.pdparams

#训练结果
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.460
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.908
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.387
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.367
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.467
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.412
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.135
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.546
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.600
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.367
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.606
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.563
[05/20 21:31:49] ppdet.engine INFO: Total sample number: 138, average FPS: 40.07899776115584
[05/20 21:31:49] ppdet.engine INFO: Best test bbox ap is 0.460.
[05/20 21:31:51] ppdet.utils.checkpoint INFO: Save checkpoint: output

总结下来,在该数据集上训练的时间为:大概1.5h不到。

6.模型测试

#运行命令行
python tools/infer.py \
-c configs/rtdetr/rtdetr_r101vd_6x_coco.yml \
-o weights=output/best_model \
--infer_img=MyDataset/JPEGImages/01_missing_hole_15.jpg \
--save_results=True

#结果显示:
W0520 22:16:06.763641 274477 gpu_resources.cc:119] Please NOTE: device: 0, GPU Compute Capability: 8.9, Driver API Version: 12.2, Runtime API Version: 11.7
W0520 22:16:06.766463 274477 gpu_resources.cc:164] device: 0, cuDNN Version: 8.4.
[05/20 22:16:07] ppdet.utils.checkpoint INFO: Finish loading model weights: output/best_model.pdparams
loading annotations into memory...
Done (t=0.00s)
creating index...
index created!
loading annotations into memory...
Done (t=0.00s)
creating index...
index created!
[05/20 22:16:08] ppdet.metrics.metrics INFO: The bbox result is saved to bbox.json.
[05/20 22:16:08] ppdet.metrics.metrics INFO: The bbox result is saved to output/bbox.json and do not evaluate the mAP.
[05/20 22:16:08] ppdet.utils.download INFO: Downloading simfang.ttf from https://paddledet.bj.bcebos.com/simfang.ttf
[05/20 22:16:16] ppdet.engine INFO: Detection bbox results save in output/01_missing_hole_15.jpg

这是大图:
在这里插入图片描述

这是局部放大的图
在这里插入图片描述


总结

自此,基于Real-Time DETR的PCB板表面缺陷检测任务调试完成,但有关RT-DETR算法为什么如此流畅,里面的技巧在哪里,我们将进一步读原文,以了解内部原理。

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烧技湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值