0

0

【校园AI Day-AI workshop】交通信号标志图像分类

P粉084495128

P粉084495128

发布时间:2025-07-16 15:12:44

|

894人浏览过

|

来源于php中文网

原创

本文介绍基于PP-PicoDet_LCNet的中国交通标志分类检测项目。通过安装相关环境,处理数据集为COCO格式,用PP-PicoDet模型训练,验证集和测试集mAP(0.5)约98.9%,还进行了模型预测、导出及量化训练等,量化模型精度略有下降。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

【校园ai day-ai workshop】交通信号标志图像分类 - php中文网

基于PicoDet_LCNet的中国交通标志图像的分类检测

1. 项目说明

对于交通标志识别系统,其核心作用就是可以准确并及时的识别道路交通标志信息获取当前路况以及行车环境,从而起到提醒和辅助驾驶员对道路信息的把控以及纠正错误交通行为的作用。传统的目标检测算法容易受到多种因素影响导致算法实现困难、识别精度低、识别速率慢等问题。

为解决以上问题,最终选用飞桨目标检测开发套件PaddleDetection中的全新的轻量级系列模型PP-PicoDet,该模型在移动端具有卓越的性能,成为全新SOTA轻量级模型。详细的技术细节可以参考arXiv技术报告。模型效果如 图1 所示。

【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网
图1 交通标志识别效果图

2. 安装说明

2.1 运行环境

  • PaddlePaddle >= 2.2.2
  • Python >= 3.5
  • PaddleSlim >= 2.2.2
  • PaddleLite >= 2.10

2.2 解压安装

提供了修改配置文件的PaddleDetection代码以及训练好的模型,解压即可。

In [1]
!unzip -q PaddleDetection.zip

2.3克隆安装

如果想下载PaddleDetection源码,执行如下命令

In [1]
# !git clone https://github.com/PaddlePaddle/PaddleDetection.git -b develop --depth 1# 可使用国内gitee镜像!git clone https://gitee.com/paddlepaddle/PaddleDetection.git
正克隆到 'PaddleDetection'...
remote: Enumerating objects: 23983, done.
remote: Counting objects: 100% (4453/4453), done.
remote: Compressing objects: 100% (2058/2058), done.
remote: Total 23983 (delta 3212), reused 3376 (delta 2387), pack-reused 19530
接收对象中: 100% (23983/23983), 264.01 MiB | 8.81 MiB/s, 完成.
处理 delta 中: 100% (17761/17761), 完成.
检查连接... 完成。
In [ ]
# 安装其他依赖%cd /home/aistudio/PaddleDetection/
!pip install -r requirements.txt 

# 编译安装paddledet!python setup.py install# 安装模型压缩的工具库,提供剪裁、量化、蒸馏、和模型结构搜索等模型压缩策略!pip install paddleslim
  • 注:更多安装教程请参考安装文档

3. 数据准备

3.1 数据集介绍

本案例使用数据集来源于 中国交通标志数据集的PascalVOC版本。该数据集数据分为三类:warning,prohibitory,mandatory,共13,829张图片。这里按7:1:2 分割训练集、验证集和测试集,其中包含9,680张训练集图片,1,382张验证集图片,2,767张测试集图片,部分图片如 图2 所示:

@@##@@ @@##@@
@@##@@ @@##@@
图2 数据集示例(可点击放大)

源数据格式为VOC格式,存储格式如下:

dataset
    ├── Annotations
    │   ├── 000000.xml
    │   ├── 000001.xml
    │   ├── 000002.xml
    │   |   ...
    ├── Images
    │   ├── 000000.jpg
    │   ├── 000001.jpg
    │   ├── 000002.jpg
    │   |   ...
├── label_list.txt (必须提供)
├── train.txt (训练数据集文件列表, ./Images/000000.jpg ./Annotations/xxx1.xml)
├── valid.txt (测试数据集文件列表)

通过如下命令将图片格式处理为COCO格式,执行一次即可。

In [3]
# 首先解压数据集%cd /home/aistudio# 创建解压目录!mkdir dataset# 解压数据集!unzip -d dataset -q /home/aistudio/data/data51578/CCTSDB_VOC.zip# -d: 指定解压目录# -q: 不输出解压详情
/home/aistudio

3.2 数据集转为COCO格式

In [4]
# 训练集%cd PaddleDetection/'''
params
    dataset_type: 原数据格式
    voc_anno_dir: xml标注文件夹
    voc_anno_list: 训练集列表
    voc_label_list: 类别标签
    voc_out_name: 输出json文件
'''!python tools/x2coco.py \
        --dataset_type voc \
        --voc_anno_dir /home/aistudio/dataset/ \
        --voc_anno_list /home/aistudio/dataset/train_list.txt \
        --voc_label_list /home/aistudio/dataset/labels.txt \
        --voc_out_name /home/aistudio/dataset/coco_train.json
/home/aistudio/PaddleDetection
Start converting !
100%|████████████████████████████████████| 9680/9680 [00:00<00:00, 16720.55it/s]
In [5]
# 验证集!python tools/x2coco.py \
       --dataset_type voc \
       --voc_anno_dir /home/aistudio/dataset/ \
       --voc_anno_list /home/aistudio/dataset/val_list.txt \
       --voc_label_list /home/aistudio/dataset/labels.txt \
       --voc_out_name /home/aistudio/dataset/coco_val.json
Start converting !
100%|████████████████████████████████████| 1382/1382 [00:00<00:00, 18472.52it/s]
In [6]
# 测试集!python tools/x2coco.py \
       --dataset_type voc \
       --voc_anno_dir /home/aistudio/dataset/ \
       --voc_anno_list /home/aistudio/dataset/test_list.txt \
       --voc_label_list /home/aistudio/dataset/labels.txt \
       --voc_out_name /home/aistudio/dataset/coco_test.json
Start converting !
100%|████████████████████████████████████| 2767/2767 [00:00<00:00, 18793.01it/s]

代码执行完成后数据集文件组织结构为:

    ├── coco_train.json    ├── coco_val.json    ├── coco_test.json    │    ...
    ├── Images
    │   ├── 000000.jpg    │   ├── 000001.jpg    │   ├── 000002.jpg    │   ├── ...

4. 模型选择

4.1 PP-PicoDet介绍

本次任务要求速度快和精度高,因此我们选择PaddleDetection提出的全新轻量级系列模型PP-PicoDet,模型有如下特点:

  • 更高的mAP: 第一个在1M参数量之内mAP(0.5:0.95)超越30+(输入416像素时)。
  • 更快的预测速度: 网络预测在ARM CPU下可达150FPS。
  • 部署友好: 支持PaddleLite/MNN/NCNN/OpenVINO等预测库,支持转出ONNX,提供了C++/Python/Android的demo。
  • 先进的算法: 我们在现有SOTA算法中进行了创新, 包括:ESNet, CSP-PAN, SimOTA等等。
【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网
图3 PP-PicoDet与其他模型比较

4.2 PP-PicoDet预训练模型

PP-PicoDet提供了多种在COCO数据上的预训练模型,如下表所示:

模型 输入尺寸 mAPval
0.5:0.95
mAPval
0.5
参数量
(M)
FLOPS
(G)
预测时延CPU
(ms)
预测时延Lite
(ms)
权重下载 配置文件 导出模型
PicoDet-XS 320*320 23.5 36.1 0.70 0.67 3.9ms 7.81ms model | log config w/ 后处理 | w/o 后处理
PicoDet-XS 416*416 26.2 39.3 0.70 1.13 6.1ms 12.38ms model | log config w/ 后处理 | w/o 后处理
PicoDet-S 320*320 29.1 43.4 1.18 0.97 4.8ms 9.56ms model | log config w/ 后处理 | w/o 后处理
PicoDet-S 416*416 32.5 47.6 1.18 1.65 6.6ms 15.20ms model | log config w/ 后处理 | w/o 后处理
PicoDet-M 320*320 34.4 50.0 3.46 2.57 8.2ms 17.68ms model | log config w/ 后处理 | w/o 后处理
PicoDet-M 416*416 37.5 53.4 3.46 4.34 12.7ms 28.39ms model | log config w/ 后处理 | w/o 后处理
PicoDet-L 320*320 36.1 52.0 5.80 4.20 11.5ms 25.21ms model | log config w/ 后处理 | w/o 后处理
PicoDet-L 416*416 39.4 55.7 5.80 7.10 20.7ms 42.23ms model | log config w/ 后处理 | w/o 后处理
PicoDet-L 640*640 42.6 59.2 5.80 16.81 62.5ms 108.1ms model | log config w/ 后处理 | w/o 后处理
表1 PP-PicoDet预训练模型

5. 模型训练

5.1 修改训练配置文件

本项目采用PP-PicoDet作为交通标志识别的模型,模型训练需要经过几个步骤:

  1. 首先修改configs/datasets/coco_detection.yml

    • 数据集包含的类别数:num_classes
    • 包含训练集、验证集、测试集的图片路径image_dir、标注json文件路径anno_path、数据集路径dataset_dir
metric: COCOnum_classes: 3TrainDataset:
  !COCODataSet
    image_dir: JPEGImages
    anno_path: coco_train.json
    dataset_dir: /home/aistudio/dataset
    data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']EvalDataset:
  !COCODataSet
    image_dir: JPEGImages
    anno_path: coco_val.json
    dataset_dir: /home/aistudio/datasetTestDataset:
  !ImageFolder
    anno_path: coco_test.json #labels.txt # also support txt (like VOC's label_list.txt)
    dataset_dir: /home/aistudio/dataset # if set, anno_path will be 'dataset_dir/anno_path'
  1. 然后修改configs/picodet/picodet_l_640_coco_lcnet.yml
    • 预训练模型:pretrain_weights

    • 训练超参数:epoch、batch_size、base_lr

      详细配置文件改动和说明。

学习率换算方法: lr_new = lr_default * (batch_size_new * gpu_number_new) / (batch_size_default * gpu_number_default)

_BASE_: [  '../datasets/coco_detection.yml',  '../runtime.yml',  '_base_/picodet_v2.yml',  '_base_/optimizer_300e.yml',  '_base_/picodet_640_reader.yml',
]pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_0_pretrained.pdparamsweights: output/picodet_l_640_coco/best_modelfind_unused_parameters: Trueuse_ema: trueepoch: 200snapshot_epoch: 10LCNet:
  scale: 2.0
  feature_maps: [3, 4, 5]LCPAN:
  out_channels: 160PicoHeadV2:
  conv_feat:
    name: PicoFeat
    feat_in: 160
    feat_out: 160
    num_convs: 4
    num_fpn_stride: 4
    norm_type: bn
    share_cls_reg: True
    use_se: True
  feat_in_chan: 160LearningRate:
  base_lr: 0.015   #0.06
  schedulers:
  - !CosineDecay
    max_epochs: 300
  - !LinearWarmup
    start_factor: 0.1
    steps: 300TrainReader:
  batch_size: 12
  1. 最后启动训练

    知鹿匠
    知鹿匠

    知鹿匠教师AI工具,新课标教案_AI课件PPT_作业批改

    下载

    PaddleDetection提供了单卡/多卡训练模型,满足用户多种训练需求,具体代码如下:

5.2 开始训练

In [ ]
# 单卡GPU上训练!export CUDA_VISIBLE_DEVICES=0 !python tools/train.py -c configs/picodet/picodet_l_640_coco_lcnet.yml \
                       --use_vdl True --eval#中断后可使用 -r 继续训练# !export CUDA_VISIBLE_DEVICES=0 # !python tools/train.py -c configs/picodet/picodet_l_640_coco_lcnet.yml \#                        -r output/picodet_l_640_coco_lcnet/75.pdparams \#                        --use_vdl True --eval

5.3 数据可视化

@@##@@
loss图
@@##@@
bbox-mAP图
@@##@@
loss_bbox图

5.4 训练轮次对比

在不区分图片大小的情况下(area=all):

训练轮次 mAP(.50:0.95) mAP(.50) mAR(.50:0.95) averge FPS
49轮 0.804 0.991 0.834 24.06
59轮 0.805 0.990 0.836 25.05
69轮 0.806 0.989 0.836 25.09
best_model 0.809 0.989 0.839 25.85

6. 模型评估

使用训练好的模型在验证集上进行评估,具体代码如下:

In [3]
# 评估!export CUDA_VISIBLE_DEVICES=0!python tools/eval.py -c configs/picodet/picodet_l_640_coco_lcnet.yml \
              -o weights=output/picodet_l_640_coco_lcnet/best_model.pdparams
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/creation.py:130: DeprecationWarning: `np.object` is a deprecated alias for the builtin `object`. To silence this warning, use `object` by itself. Doing this will not modify any behavior and is safe. 
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  if data.dtype == np.object:
W0523 21:37:33.806679   663 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0523 21:37:33.811025   663 device_context.cc:465] device: 0, cuDNN Version: 7.6.
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
[05/23 21:37:37] ppdet.utils.checkpoint INFO: Finish loading model weights: output/picodet_l_640_coco_lcnet/best_model.pdparams
[05/23 21:37:39] ppdet.engine INFO: Eval iter: 0
[05/23 21:38:10] ppdet.engine INFO: Eval iter: 100
[05/23 21:38:32] ppdet.metrics.metrics INFO: The bbox result is saved to bbox.json.
loading annotations into memory...
Done (t=0.59s)
creating index...
index created!
[05/23 21:38:32] ppdet.metrics.coco_utils INFO: Start evaluate...
Loading and preparing results...
DONE (t=0.49s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=2.98s).
Accumulating evaluation results...
DONE (t=0.53s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.809
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.989
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.961
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.769
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.861
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.934
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.649
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.839
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.839
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.807
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.887
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.944
[05/23 21:38:37] ppdet.engine INFO: Total sample number: 1382, averge FPS: 25.858773913913232

使用数据集中9,680张图片(整个数据集的70%)训练的模型,在包含1,382张图片的验证集上评估,效果如下,mAP(0.5)=98.9%,mAR(0.5:0.95)=83.9%

【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网
图5 模型在验证集上评估结果

在包含2,677张图片的测试集上评估,效果如下,mAP(0.5)=98.9%,mAR(0.5:0.95)=84.8%

更换评估数据集可修改configs/datasets/coco_detection.yml中EvalDataset下anno_path的值,如coco_test.json

【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网
图6 模型在测试集上评估结果

7. 模型预测

加载训练好的模型,置信度阈值设置为0.5,执行下行命令对验证集或测试集图片进行预测:

In [5]
!export CUDA_VISIBLE_DEVICES=0'''
    -c:指定模型配置文件
    --infer_img:测试图片
    --output_dir:结果输出位置
    --draw_threshold:置信度阈值
    -o weights:加载训练好的模型
'''!python tools/infer.py -c configs/picodet/picodet_l_640_coco_lcnet.yml \
                    --infer_img=/home/aistudio/dataset/JPEGImages/008839.jpg \
                    --output_dir=infer_output/ \
                    --draw_threshold=0.5 \
                    -o weights=output/picodet_l_640_coco_lcnet/best_model.pdparams
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/creation.py:130: DeprecationWarning: `np.object` is a deprecated alias for the builtin `object`. To silence this warning, use `object` by itself. Doing this will not modify any behavior and is safe. 
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  if data.dtype == np.object:
W0523 22:12:12.803400  3736 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0523 22:12:12.807762  3736 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[05/23 22:12:14] ppdet.utils.checkpoint INFO: Finish loading model weights: output/picodet_l_640_coco_lcnet/best_model.pdparams
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
100%|█████████████████████████████████████████████| 1/1 [00:00<00:00,  3.99it/s]
[05/23 22:12:15] ppdet.engine INFO: Detection bbox results save in infer_output/008839.jpg

7.1 预测效果

原图
结果图
@@##@@ @@##@@
@@##@@ @@##@@
@@##@@ @@##@@
@@##@@ @@##@@
表2 交通标记识别效果图(点图放大)

8. 模型导出

在模型训练过程中保存的模型文件是包含前向预测和反向传播的过程,在实际的工业部署则不需要反向传播,因此需要将模型进行导成部署需要的模型格式。 执行下面命令,即可导出模型

In [6]
!export CUDA_VISIBLE_DEVICES=0!python tools/export_model.py \
      -c configs/picodet/picodet_l_640_coco_lcnet.yml \
      -o weights=output/picodet_l_640_coco_lcnet/best_model.pdparams \
      --output_dir=inference_model
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/creation.py:130: DeprecationWarning: `np.object` is a deprecated alias for the builtin `object`. To silence this warning, use `object` by itself. Doing this will not modify any behavior and is safe. 
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  if data.dtype == np.object:
[05/23 22:13:23] ppdet.utils.checkpoint INFO: Finish loading model weights: output/picodet_l_640_coco_lcnet/best_model.pdparams
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
[05/23 22:13:23] ppdet.engine INFO: Export inference config file to inference_model/picodet_l_640_coco_lcnet/infer_cfg.yml
W0523 22:13:27.917946  3852 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0523 22:13:27.918013  3852 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[05/23 22:13:30] ppdet.engine INFO: Export model and saved in inference_model/picodet_l_640_coco_lcnet

预测模型会导出到inference_model/目录下,包括model.pdmodel、model.pdiparams、model.pdiparams.info和infer_cfg.yml四个文件,分别表示模型的网络结构、模型权重、模型权重名称和模型的配置文件(包括数据预处理参数等)的流程配置文件。

  • 更多关于模型导出的文档,请参考模型导出文档

9. 模型推理

使用以下命令对导出的推理模型进行预测,详细教程请参考Python端预测部署:

In [29]
!export CUDA_VISIBLE_DEVICES=0'''
    --model_dir: 上述导出的模型路径
    --image_file:需要测试的图片
    --image_dir:也可以指定要测试的文件夹路径
    --device:运行时的设备,可选择CPU/GPU/XPU,默认为CPU
    --output_dir:可视化结果保存的根目录,默认为output/
'''!python deploy/python/infer.py \
        --model_dir=./inference_model/picodet_l_640_coco_lcnet \
        --image_file=/home/aistudio/dataset/JPEGImages/008327.jpg \
        --device=GPU
-----------  Running Arguments -----------
action_file: None
batch_size: 1
camera_id: -1
cpu_threads: 1
device: GPU
enable_mkldnn: False
enable_mkldnn_bfloat16: False
image_dir: None
image_file: /home/aistudio/dataset/JPEGImages/008327.jpg
model_dir: ./inference_model/picodet_l_640_coco_lcnet
output_dir: output
random_pad: False
reid_batch_size: 50
reid_model_dir: None
run_benchmark: False
run_mode: paddle
save_images: False
save_mot_txt_per_img: False
save_mot_txts: False
scaled: False
threshold: 0.5
tracker_config: None
trt_calib_mode: False
trt_max_shape: 1280
trt_min_shape: 1
trt_opt_shape: 640
use_dark: True
use_gpu: False
video_file: None
window_size: 50
------------------------------------------
-----------  Model Configuration -----------
Model Arch: GFL
Transform Order: 
--transform op: Resize
--transform op: NormalizeImage
--transform op: Permute
--------------------------------------------
class_id:0, confidence:0.9360, left_top:[716.70,76.82],right_bottom:[761.55,118.69]
class_id:0, confidence:0.9119, left_top:[649.82,103.49],right_bottom:[678.15,139.18]
class_id:0, confidence:0.6749, left_top:[572.66,129.77],right_bottom:[588.33,145.87]
save result to: output/008327.jpg
Test iter 0
------------------ Inference Time Info ----------------------
total_time(ms): 1701.7, img_num: 1
average latency time(ms): 1701.70, QPS: 0.587648
preprocess_time(ms): 1690.10, inference_time(ms): 11.50, postprocess_time(ms): 0.10

10. 模型量化训练

10.1 修改量化训练配置文件

通过模型量化可以提升模型速度。

我们在之前训练好的模型基础上进行量化训练,执行如下代码开始量化训练:

  • 1)我们需要修改'configs/slim/quant/picodet_s_quant.yml'量化配置文件,将pretrain_weights参数改为量化前训练好的模型。

  • 2)如果模型报错,调小picodet_s_quant.yml文件中的batch_size,并同时根据batch_size调整学习率lr。

#pretrain_weights: https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparamspretrain_weights: /home/aistudio/PaddleDetection/output/picodet_l_640_coco_lcnet/best_model.pdparamsslim: QATQAT:
  quant_config: {    'activation_preprocess_type': 'PACT',    'weight_quantize_type': 'channel_wise_abs_max', 
    'activation_quantize_type': 'moving_average_abs_max',    'weight_bits': 8, 'activation_bits':8, 'dtype': 'int8', 'window_size': 10000, 'moving_rate': 0.9,    'quantizable_layer_type': ['Conv2D', 'Linear']}  print_model: Falseepoch: 50LearningRate:
  base_lr: 0.000025 #0.001
  schedulers:
  - !PiecewiseDecay
    gamma: 0.1
    milestones:
    - 30
    - 40
  - !LinearWarmup
    start_factor: 0.
    steps: 100TrainReader:
  batch_size:  12 #96

10.2 开始量化训练

In [ ]
# 动态量化训练,单卡训练'''
    -c: 指定模型配置文件
    --slim_config: 量化配置文件
'''!export CUDA_VISIBLE_DEVICES=0!python tools/train.py \
            -c configs/picodet/picodet_l_640_coco_lcnet.yml \
            --slim_config configs/slim/quant/picodet_s_quant.yml --eval# 如中断 可用-r参数继续量化训练# !python tools/train.py \#             -c configs/picodet/picodet_l_640_coco_lcnet.yml \#             --slim_config configs/slim/quant/picodet_s_quant.yml \#             -r output/picodet_s_quant/34.pdparams --eval

10.3 模型评估及效果对比

In [21]
# 量化训练结束,同上可进行模型评估,只是需要增加slim_config!export CUDA_VISIBLE_DEVICES=0!python tools/eval.py -c configs/picodet/picodet_l_640_coco_lcnet.yml \
             --slim_config configs/slim/quant/picodet_s_quant.yml \
             -o weights=output/picodet_s_quant/best_model
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/creation.py:130: DeprecationWarning: `np.object` is a deprecated alias for the builtin `object`. To silence this warning, use `object` by itself. Doing this will not modify any behavior and is safe. 
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  if data.dtype == np.object:
W0523 22:59:59.601784  7220 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0523 22:59:59.606324  7220 device_context.cc:465] device: 0, cuDNN Version: 7.6.[05-23 23:00:01 MainThread @logger.py:242] Argv: tools/eval.py -c configs/picodet/picodet_l_640_coco_lcnet.yml --slim_config configs/slim/quant/picodet_s_quant.yml -o weights=output/picodet_s_quant/best_model[05-23 23:00:01 MainThread @utils.py:79] WRN paddlepaddle version: 2.2.2. The dynamic graph version of PARL is under development, not fully tested and supported
[05/23 23:00:04] ppdet.utils.checkpoint INFO: Finish loading model weights: output/picodet_s_quant/best_model.pdparams
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
[05/23 23:00:09] ppdet.engine INFO: Eval iter: 0
[05/23 23:00:41] ppdet.engine INFO: Eval iter: 100
[05/23 23:01:06] ppdet.metrics.metrics INFO: The bbox result is saved to bbox.json.
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
[05/23 23:01:06] ppdet.metrics.coco_utils INFO: Start evaluate...
Loading and preparing results...
DONE (t=0.66s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=3.38s).
Accumulating evaluation results...
DONE (t=0.64s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.773
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.984
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.935
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.732
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.821
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.920
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.624
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.805
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.805
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.772
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.852
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.932
[05/23 23:01:10] ppdet.engine INFO: Total sample number: 1382, averge FPS: 23.959119777169736

训练的量化模型,在 area=all 的情况下不同轮次的效果:

训练轮次 mAP(.50:0.95) mAP(.50) mAR(.50:0.95) averge FPS
10轮 0.757 0.981 0.793 25.098
20轮 0.767 0.981 0.800 22.039
30轮 0.771 0.984 0.805 25.154
40轮 0.772 0.984 0.805 21.953
best_model 0.773 0.984 0.805 23.959

10.4 使用量化模型预测

In [ ]
!export CUDA_VISIBLE_DEVICES=0# 使用量化模型预测!python tools/infer.py -c configs/picodet/picodet_l_640_coco_lcnet.yml \
                      --slim_config configs/slim/quant/picodet_s_quant.yml \
                      --infer_img=/home/aistudio/dataset/JPEGImages/008839.jpg \
                      --output_dir=slim_infer_output \
                      --draw_threshold=0.5 \
                      -o weights=output/picodet_s_quant/best_model.pdparams
In [19]
import cv2import matplotlib.pyplot as pltimport numpy as np

image = cv2.imread('slim_infer_output/008839.jpg')
plt.figure(figsize=(7,7))
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.show()

10.5 量化模型导出

In [ ]
# 模型导出!export CUDA_VISIBLE_DEVICES=0!python tools/export_model.py \
      -c configs/picodet/picodet_l_640_coco_lcnet.yml \
      --slim_config configs/slim/quant/picodet_s_quant.yml \
      -o weights=output/picodet_s_quant/best_model.pdparams \
      --output_dir=inference_model# 将inference模型配置转化为json格式#!python deploy/lite/convert_yml_to_json.py inference_model/picodet_s_quant/infer_cfg.yml
In [25]
# 量化后的模型导出!ls -lh inference_model/picodet_s_quant/
总用量 29M
-rw-r--r-- 1 aistudio aistudio 1.1K 5月  23 22:43 infer_cfg.json
-rw-r--r-- 1 aistudio aistudio  509 5月  23 23:02 infer_cfg.yml
-rw-r--r-- 1 aistudio aistudio  23M 5月  23 23:02 model.pdiparams
-rw-r--r-- 1 aistudio aistudio 193K 5月  23 23:02 model.pdiparams.info
-rw-r--r-- 1 aistudio aistudio 6.1M 5月  23 23:02 model.pdmodel

10.6 量化模型推理

In [30]
!export CUDA_VISIBLE_DEVICES=0# 量化后模型推理!python deploy/python/infer.py \
        --model_dir=./inference_model/picodet_s_quant \
        --image_file=/home/aistudio/dataset/JPEGImages/008327.jpg \
        --device=GPU
-----------  Running Arguments -----------
action_file: None
batch_size: 1
camera_id: -1
cpu_threads: 1
device: GPU
enable_mkldnn: False
enable_mkldnn_bfloat16: False
image_dir: None
image_file: /home/aistudio/dataset/JPEGImages/008327.jpg
model_dir: ./inference_model/picodet_s_quant
output_dir: output
random_pad: False
reid_batch_size: 50
reid_model_dir: None
run_benchmark: False
run_mode: paddle
save_images: False
save_mot_txt_per_img: False
save_mot_txts: False
scaled: False
threshold: 0.5
tracker_config: None
trt_calib_mode: False
trt_max_shape: 1280
trt_min_shape: 1
trt_opt_shape: 640
use_dark: True
use_gpu: False
video_file: None
window_size: 50
------------------------------------------
-----------  Model Configuration -----------
Model Arch: GFL
Transform Order: 
--transform op: Resize
--transform op: NormalizeImage
--transform op: Permute
--------------------------------------------
class_id:0, confidence:0.9245, left_top:[716.23,76.58],right_bottom:[762.66,119.49]
class_id:0, confidence:0.9099, left_top:[648.96,104.52],right_bottom:[678.67,139.30]
class_id:0, confidence:0.6850, left_top:[572.70,129.55],right_bottom:[589.45,146.79]
save result to: output/008327.jpg
Test iter 0
------------------ Inference Time Info ----------------------
total_time(ms): 1740.3, img_num: 1
average latency time(ms): 1740.30, QPS: 0.574614
preprocess_time(ms): 1724.70, inference_time(ms): 15.50, postprocess_time(ms): 0.10
【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网【校园AI Day-AI workshop】交通信号标志图像分类 - php中文网

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

420

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

536

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

312

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

61

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.11.27

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号