PaddlePaddle / PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.
Apache License 2.0
12.66k stars 2.87k forks source link

(ppvehicle)通过export_model导出的模型配置文件与开源的模型配置文件不符 #7289

Closed Luna2199 closed 1 year ago

Luna2199 commented 1 year ago

问题确认 Search before asking

Bug组件 Bug Component

No response

Bug描述 Describe the Bug

1667914571764

ppvehicle提供的mot_ppyoloe_l_36e_ppvehicle.pdparams为例:虽然文档声称类别数为1,但通过python tools/export_model.py方式导出的模型配置文件infer_cfg.yml如下:

mode: paddle
draw_threshold: 0.5
metric: COCO
use_dynamic_shape: false
arch: YOLO
min_subgraph_size: 3
Preprocess:
- interp: 2
  keep_ratio: false
  target_size:
  - 640
  - 640
  type: Resize
- is_scale: true
  mean:
  - 0.485
  - 0.456
  - 0.406
  std:
  - 0.229
  - 0.224
  - 0.225
  type: NormalizeImage
- type: Permute
label_list:
- person
- bicycle
- car
- motorcycle
- airplane
- bus
- train
- truck
- boat
- traffic light
- fire hydrant
- stop sign
- parking meter
- bench
- bird
- cat
- dog
- horse
- sheep
- cow
- elephant
- bear
- zebra
- giraffe
- backpack
- umbrella
- handbag
- tie
- suitcase
- frisbee
- skis
- snowboard
- sports ball
- kite
- baseball bat
- baseball glove
- skateboard
- surfboard
- tennis racket
- bottle
- wine glass
- cup
- fork
- knife
- spoon
- bowl
- banana
- apple
- sandwich
- orange
- broccoli
- carrot
- hot dog
- pizza
- donut
- cake
- chair
- couch
- potted plant
- bed
- dining table
- toilet
- tv
- laptop
- mouse
- remote
- keyboard
- cell phone
- microwave
- oven
- toaster
- sink
- refrigerator
- book
- clock
- vase
- scissors
- teddy bear
- hair drier
- toothbrush

========

而官方在PPVehicle_QUICK_STARTED提供的车辆检测(高精度)中的模型配置文件infer_cfg.yml

mode: paddle
draw_threshold: 0.5
metric: COCO
use_dynamic_shape: false
arch: YOLO
min_subgraph_size: 3
Preprocess:
- interp: 2
  keep_ratio: false
  target_size:
  - 640
  - 640
  type: Resize
- type: Permute
label_list:
- vehicle

======== 二者除类别数不一致外,还存在图像归一化操作的区别,请确认该问题,是否模型上传错误?

复现环境 Environment

-OS: Linux -Python: 3.7 -PaddleDetection: release/2.5 -PaddlePaddle: '2.3.2'

Bug描述确认 Bug description confirmation

是否愿意提交PR? Are you willing to submit a PR?

nemonameless commented 1 year ago

注意看导出的时候会有log warnning告诉你找不到TestDataset的anno_path从而加载默认coco80类作为类别。你可以对导出的模型文件里的infer_cfg.yml的label_list手动改为1类,只要你导出的时候num_classes是1。 正常导出,你需要自行修改和添加对应的anno_path,没有json文件用label_list.txt文件也可以的(一行记录一个对应种类),TestDataset中的anno_path为绝对路径,如:

TestDataset:
  !ImageFolder
    anno_path: label_list.txt # 如不使用dataset_dir,则anno_path即为相对于PaddleDetection主目录的相对路径
    # dataset_dir: dataset/ppvehicle # 如使用dataset_dir,则dataset_dir/anno_path作为新的anno_path

label_list.txt里的一行记录一个对应种类,如下所示:

vehicle

导出和预测都是使用的TestDataset。验证是使用的EvalDataset。

关于NormalizeImage,导出命令最后加上-o TestReader.fuse_normalize=true表示把NormalizeImage放在网络中,是为了部署的时候减少数据预处理的一部分耗时,无论怎么导出对部署结果都是没有影响的。

Luna2199 commented 1 year ago

OK,已解决