【Paddle打比赛】基于PaddleDetection未知工作服识别

P粉084495128
发布: 2025-07-24 17:51:19
原创
969人浏览过
随着科技的发展,监控视频已被广泛应用于日常生活中。但是在实际的使用中,标注的训练数据往往需要花费大量的人力物力才可以获得,严重阻碍了视觉算法的应用和落地。在工作服属性检测中,不同的场地工作服样式基本相同,但是颜色却千差万别。所以要通过对已有数据的训练,对未知颜色和样式的工作服进行检测。

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

【paddle打比赛】基于paddledetection未知工作服识别 - php中文网

一、山东第三届数据应用创新创业大赛未知工作服属性识别简介

1.竞赛背景

随着科技的发展,监控视频已被广泛应用于日常生活中。但是在实际的使用中,标注的训练数据往往需要花费大量的人力物力才可以获得,严重阻碍了视觉算法的应用和落地。在工作服属性检测中,不同的场地工作服样式基本相同,但是颜色却千差万别。所以要通过对已有数据的训练,对未知颜色和样式的工作服进行检测。

2.任务

工作服属性检测会提供白色厨师服训练数据和少量的工厂工作服训练数据。训练数据包括是否穿着工作服已经工作服的区域坐标。要求识别出是否穿着工作服。比赛分为初赛和复赛,初赛和复赛分别为不同的任务。

初赛任务:初赛将提供白色厨师服标注数据,需要选手建立迁移学习模型,去识别出测试集中不同颜色的厨师服属性。

3.数据

提供带有标注的白色厨师服训练数据900多张,其中标注文件为voc格式的xml文件。测试数据集白色厨师图片若干张,其他颜色厨师图片若干张。 *训练集标注准确率约97%。

初赛提供的训练数据集标注字段如下:

二、环境准备

此次比赛使用PaddleDetection端到端目标检测套件进行。

PaddleDetection提供了目标检测、实例分割、多目标跟踪、关键点检测等多种能力,具有以下特性

  • 模型丰富: 包含目标检测、实例分割、人脸检测等100+个预训练模型,涵盖多种全球竞赛冠军方案
  • 使用简洁:模块化设计,解耦各个网络组件,开发者轻松搭建、试用各种检测模型及优化策略,快速得到高性能、定制化的算法。
  • 端到端打通: 从数据增强、组网、训练、压缩、部署端到端打通,并完备支持云端/边缘端多架构、多设备部署。
  • 高性能: 基于飞桨的高性能内核,模型训练速度及显存占用优势明显。支持FP16训练, 支持多机训练。
In [ ]
# 下载PaddleDetection,当前版本为realse/2.3版本!git clone https://gitee.com/paddlepaddle/PaddleDetection.git --depth=1
登录后复制
In [ ]
# 安装%cd ~/PaddleDetection# 安装依赖!pip install -r requirements.txt# 本地安装!pip install -e ./
登录后复制
In [ ]
# 查看版本!pip list|grep paddledet
登录后复制
paddledet              2.3.0           /home/aistudio/PaddleDetection
登录后复制
In [ ]
# 切换至尊版GPU环境32Gb显卡运行!nvidia-smi
登录后复制
Mon Jan  3 12:20:32 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla V100-SXM2...  Off  | 00000000:05:00.0 Off |                    0 |
| N/A   34C    P0    39W / 300W |      0MiB / 32480MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
登录后复制

三、数据处理

1.数据基本情况

  • 训练集:提供带有标注的白色厨师服训练数据900多张,其中标注文件为voc格式的xml文件
  • 测试集:测试数据集白色厨师图片35张,其他颜色厨师图片49张

2.数据处理任务

  • 解压缩数据并重命名目录
  • 利用PaddleX套件把原始训练集按 8:2 分隔为 train 以及 val 数据集
In [ ]
# 解压缩数据集到data目录# 此处建议解压到data目录,关闭时不保存,启动时速度较快,强烈推荐%cd ~
!unzip -qoa data/data124244/省厅-未知工作服属性识别-算法赛-A榜数据.zip -d data
登录后复制
In [ ]
# 重命名数据集!mv data/省厅-工服识别-算法赛-A榜数据 data/data_a
登录后复制
In [ ]
# 安装PaddleX!pip install paddlex
登录后复制
In [ ]
# 按照PaddleX要求规范目录命名!mv data/data_a/train/images data/data_a/train/JPEGImages
登录后复制
In [ ]
# 利用PaddleX对数据集进行分隔!paddlex --split_dataset --format VOC --dataset_dir data/data_a/train/ --val_value 0.2
登录后复制
2022-01-03 12:27:08 [INFO]	Dataset split starts...
2022-01-03 12:27:08 [INFO]	Dataset split done.
2022-01-03 12:27:08 [INFO]	Train samples: 736
2022-01-03 12:27:08 [INFO]	Eval samples: 183
2022-01-03 12:27:08 [INFO]	Test samples: 0
2022-01-03 12:27:08 [INFO]	Split files saved in data/data_a/train/
登录后复制

四、模型训练

此次计划选择 ** YOLOv3**

以 configs/yolov3/yolov3_darknet53_270e_voc.yml 配置为基础进行配置

1.总体配置

configs/yolov3/yolov3_darknet53_270e_voc.yml,该配置文件由5部分组成,可以极大方便切换其他网络。

_BASE_: [  '../datasets/voc.yml',
  '../runtime.yml',
  '_base_/optimizer_270e.yml',
  '_base_/yolov3_darknet53.yml',
  '_base_/yolov3_reader.yml',]snapshot_epoch: 5weights: output/yolov3_darknet53_270e_voc/model_final

# set collate_batch to false because ground-truth info is needed
# on voc dataset and should not collate data in batch when batch size
# is larger than 1.EvalReader:
  collate_batch: false
登录后复制

2.数据集配置

重点配置数据集类型的 num_classes、数据路径等PaddleDetection/configs/datasets/voc.yml

metric: VOC
map_type: 11point
num_classes: 2# 训练集TrainDataset:
  !VOCDataSet
    dataset_dir: /home/aistudio/data/data_a/train/
    anno_path: /home/aistudio/data/data_a/train/train_list.txt
    label_list: /home/aistudio/data/data_a/train/labels.txt
    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']# 测试集EvalDataset:
  !VOCDataSet
    dataset_dir: /home/aistudio/data/data_a/train/
    anno_path: /home/aistudio/data/data_a/train/val_list.txt
    label_list: /home/aistudio/data/data_a/train/labels.txt
    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']# 预测集TestDataset:
  !ImageFolder  	 # 预测标签配置
    anno_path: /home/aistudio/data/data_a/train/labels.txt
登录后复制

3.运行配置

运行配置PaddleDetection/configs/runtime.yml

#GPU模式use_gpu: true# 日志打印间隔log_iter: 20# 保存目录save_dir: outputsnapshot_epoch: 500print_flops: false
登录后复制

4.学习率等超参配置

重点配置epoch、 LR等

无涯·问知
无涯·问知

无涯·问知,是一款基于星环大模型底座,结合个人知识库、企业知识库、法律法规、财经等多种知识源的企业级垂直领域问答产品

无涯·问知 40
查看详情 无涯·问知

PaddleDetection/configs/yolov3/base/optimizer_270e.yml

# 训练轮次配置epoch: 270# 学习率配置LearningRate:
  base_lr: 0.001
  schedulers:
  - !PiecewiseDecay
    gamma: 0.1
    milestones:
    - 216
    - 243
  - !LinearWarmup
    start_factor: 0.
    steps: 4000OptimizerBuilder:
  optimizer:
    momentum: 0.9
    type: Momentum
  regularizer:
    factor: 0.0005
    type: L2
登录后复制

5.网络配置

网络配置,此次配置骨干网为DarkNet PaddleDetection/configs/yolov3/_base_/yolov3_darknet53.yml

architecture: YOLOv3pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/DarkNet53_pretrained.pdparamsnorm_type: sync_bnYOLOv3:
  backbone: DarkNet
  neck: YOLOv3FPN
  yolo_head: YOLOv3Head
  post_process: BBoxPostProcessDarkNet:
  depth: 53
  return_idx: [2, 3, 4]# use default config# YOLOv3FPN:YOLOv3Head:
  anchors: [[10, 13], [16, 30], [33, 23],
            [30, 61], [62, 45], [59, 119],
            [116, 90], [156, 198], [373, 326]]  anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]]  loss: YOLOv3LossYOLOv3Loss:
  ignore_thresh: 0.7
  downsample: [32, 16, 8]  label_smooth: falseBBoxPostProcess:
  decode:
    name: YOLOBox
    conf_thresh: 0.005
    downsample_ratio: 32
    clip_bbox: true
  nms:
    name: MultiClassNMS
    keep_top_k: 100
    score_threshold: 0.01
    nms_threshold: 0.45
    nms_top_k: 1000
登录后复制

6.Reader配置

重点关注 batch_size、image_shape等 PaddleDetection/configs/yolov3/_base_/yolov3_reader.yml

worker_num: 2TrainReader:
  inputs_def:
    num_max_boxes: 50
  sample_transforms:
    - Decode: {}    - Mixup: {alpha: 1.5, beta: 1.5}    - RandomDistort: {}    - RandomExpand: {fill_value: [123.675, 116.28, 103.53]}    - RandomCrop: {}    - RandomFlip: {}  batch_transforms:
    - BatchRandomResize: {target_size: [320, 352, 384, 416, 448, 480, 512, 544, 576, 608], random_size: True, random_interp: True, keep_ratio: False}    - RandomDistort: {}    - NormalizeBox: {}    - PadBox: {num_max_boxes: 50}    - BboxXYXY2XYWH: {}    - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}    - Permute: {}    - Gt2YoloTarget: {anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]], anchors: [[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326]], downsample_ratios: [32, 16, 8]}  batch_size: 20
  shuffle: true
  drop_last: true
  mixup_epoch: 250
  use_shared_memory: trueEvalReader:
  inputs_def:
    num_max_boxes: 50
  sample_transforms:
    - Decode: {}    - Resize: {target_size: [608, 608], keep_ratio: False, interp: 2}    - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}    - Permute: {}  batch_size: 20TestReader:
  inputs_def:
    image_shape: [3, 608, 608]  sample_transforms:
    - Decode: {}    - Resize: {target_size: [608, 608], keep_ratio: False, interp: 2}    - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}    - Permute: {}  batch_size: 1
登录后复制

7.开始训练

In [5]
# 数据集配置,其他可采取默认!cp -f  ~/voc.yml ~/PaddleDetection/configs/datasets/voc.yml
登录后复制
In [ ]
# 训练%cd ~/PaddleDetection/

!python tools/train.py -c ./configs/yolov3/yolov3_darknet53_270e_voc.yml 
     --use_vdl=true 
    --vdl_log_dir=vdl_dir/scalar 
    --eval -o use_gpu=true
登录后复制

8.输出日志

训练日志

[01/03 23:08:05] ppdet.engine INFO: Epoch: [10] [ 0/36] learning_rate: 0.000090 loss_xy: 5.516527 loss_wh: 3.053876 loss_obj: 12.486687 loss_cls: 1.317490 loss: 22.319881 eta: 8:48:30 batch_cost: 3.1413 data_cost: 2.6554 ips: 6.3668 images/s
[01/03 23:09:07] ppdet.engine INFO: Epoch: [10] [20/36] learning_rate: 0.000095 loss_xy: 6.114716 loss_wh: 3.206046 loss_obj: 13.324018 loss_cls: 1.355693 loss: 24.122631 eta: 8:44:56 batch_cost: 3.0901 data_cost: 2.5885 ips: 6.4723 images/s
[01/03 23:10:03] ppdet.engine INFO: Epoch: [11] [ 0/36] learning_rate: 0.000099 loss_xy: 5.409023 loss_wh: 2.845924 loss_obj: 12.471905 loss_cls: 1.237947 loss: 21.803427 eta: 8:44:45 batch_cost: 3.4201 data_cost: 2.8799 ips: 5.8477 images/s
[01/03 23:11:06] ppdet.engine INFO: Epoch: [11] [20/36] learning_rate: 0.000104 loss_xy: 5.595372 loss_wh: 2.837581 loss_obj: 12.333159 loss_cls: 1.263098 loss: 22.268236 eta: 8:41:59 batch_cost: 3.1570 data_cost: 2.5889 ips: 6.3351 images/s
[01/03 23:12:03] ppdet.engine INFO: Epoch: [12] [ 0/36] learning_rate: 0.000108 loss_xy: 5.279551 loss_wh: 2.735991 loss_obj: 11.844409 loss_cls: 1.155111 loss: 21.146755 eta: 8:41:51 batch_cost: 3.4755 data_cost: 3.0134 ips: 5.7545 images/s
[01/03 23:13:10] ppdet.engine INFO: Epoch: [12] [20/36] learning_rate: 0.000113 loss_xy: 5.620305 loss_wh: 2.650487 loss_obj: 11.757578 loss_cls: 1.057634 loss: 21.237453 eta: 8:40:36 batch_cost: 3.3526 data_cost: 2.9166 ips: 5.9655 images/s
[01/03 23:14:04] ppdet.engine INFO: Epoch: [13] [ 0/36] learning_rate: 0.000117 loss_xy: 5.811560 loss_wh: 2.833800 loss_obj: 12.568821 loss_cls: 1.326491 loss: 21.987259 eta: 8:39:42 batch_cost: 3.3750 data_cost: 2.8388 ips: 5.9260 images/s
[01/03 23:15:10] ppdet.engine INFO: Epoch: [13] [20/36] learning_rate: 0.000122 loss_xy: 5.573336 loss_wh: 2.614874 loss_obj: 11.848093 loss_cls: 1.017949 loss: 20.871216 eta: 8:37:56 batch_cost: 3.2704 data_cost: 2.7479 ips: 6.1155 images/s
[01/03 23:16:04] ppdet.engine INFO: Epoch: [14] [ 0/36] learning_rate: 0.000126 loss_xy: 5.268225 loss_wh: 2.517870 loss_obj: 10.861967 loss_cls: 1.058530 loss: 19.757854 eta: 8:37:08 batch_cost: 3.3716 data_cost: 2.8755 ips: 5.9318 images/s
[01/03 23:17:06] ppdet.engine INFO: Epoch: [14] [20/36] learning_rate: 0.000131 loss_xy: 5.842254 loss_wh: 2.545744 loss_obj: 12.144636 loss_cls: 1.203430 loss: 21.758163 eta: 8:34:32 batch_cost: 3.1135 data_cost: 2.5847 ips: 6.4237 images/s
[01/03 23:17:52] ppdet.utils.checkpoint INFO: Save checkpoint: output/yolov3_darknet53_270e_voc
[01/03 23:17:53] ppdet.engine INFO: Eval iter: 0[01/03 23:17:57] ppdet.metrics.metrics INFO: Accumulating evaluatation results...
[01/03 23:17:57] ppdet.metrics.metrics INFO: mAP(0.50, 11point) = 18.91%
[01/03 23:17:57] ppdet.engine INFO: Total sample number: 183, averge FPS: 37.56547376000298[01/03 23:17:57] ppdet.engine INFO: Best test bbox ap is 0.189.
[01/03 23:18:01] ppdet.utils.checkpoint INFO: Save checkpoint: output/yolov3_darknet53_270e_voc
登录后复制

visualdl可视化

【Paddle打比赛】基于PaddleDetection未知工作服识别 - php中文网

五、模型预测

1.单个预测

  • -c 参数表示指定使用哪个配置文件
  • -o 参数表示指定配置文件中的全局变量(覆盖配置文件中的设置)
  • --infer_img 参数指定预测图像路径
  • 预测结束后会在output文件夹中生成一张画有预测结果的同名图像
In [64]
# 单个预测%cd ~/PaddleDetection/

!python tools/infer.py -c ./configs/yolov3/yolov3_darknet53_270e_voc.yml   
    -o use_gpu=true --infer_img=../data/data_a/train/JPEGImages/chef910-0000.jpg
登录后复制
/home/aistudio/PaddleDetection
/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:
W0104 08:04:54.116544 22620 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W0104 08:04:54.121711 22620 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[01/04 08:04:57] ppdet.utils.checkpoint INFO: Finish loading model weights: output/yolov3_darknet53_270e_voc/model_final.pdparams
[01/04 08:04:57] ppdet.engine INFO: Detection bbox results save in output/chef910-0000.jpg
登录后复制
In [66]
# 打印预测结果from PIL import Image

img=Image.open('output/chef910-0000.jpg')
img
登录后复制
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x7F9CFC09FAD0>
登录后复制

2.批量预测

重点关注参数有:

  • --save_txt=True
  • --draw_threshold=0.5

通过 --save_txt=True 保存预测结果为文本

In [71]
%cd ~/PaddleDetection/# 其他颜色工作服预测!python tools/infer.py -c./configs/yolov3/yolov3_darknet53_270e_voc.yml    
    -o use_gpu=true --infer_dir=../data/data_a/test-A/othercolor/images/ 
    --save_txt=True 
    --draw_threshold=0.5# 白色工作服预测!python tools/infer.py -c./configs/yolov3/yolov3_darknet53_270e_voc.yml    
    -o use_gpu=true --infer_dir=../data/data_a/test-A/whitecolor/images/ 
    --save_txt=True 
    --draw_threshold=0.5
登录后复制
/home/aistudio/PaddleDetection
/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:
W0104 08:10:57.304265 23501 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W0104 08:10:57.309389 23501 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[01/04 08:11:00] ppdet.utils.checkpoint INFO: Finish loading model weights: output/yolov3_darknet53_270e_voc/model_final.pdparams
[01/04 08:11:00] train INFO: Found 35 inference images in total.
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef910-0598.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1351.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1349.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1352.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1632.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1625.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef910-0595.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--0452.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef910-0298.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--0453.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef910-0596.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1622.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1348.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--0455.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1628.jpg
[01/04 08:11:02] ppdet.engine INFO: Detection bbox results save in output/chef911--1627.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef910-0594.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--2049.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--0454.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--1353.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--2048.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--0451.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef910-0597.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--1629.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--1626.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef910-0592.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--0456.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--1630.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--1635.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--0457.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--1633.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef910-0069.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--1634.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef911--1631.jpg
[01/04 08:11:03] ppdet.engine INFO: Detection bbox results save in output/chef910-0593.jpg
登录后复制

3.后处理及提交

主要步骤如下:

  • 拷贝预测结果 txt文件到指定目录
  • 把预测txt文件处理为比赛需要的格式
In [67]
# 可视化预测结果from PIL import Image

img=Image.open('output/chef910-0298.jpg')
img
登录后复制
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x7F9CFC057A90>
登录后复制
In [ ]
%cd ~# 新建result_dir!mkdir result_dir# 拷贝txt预测结果文件到result_dir!cp -r PaddleDetection/output/*.txt result_dir
登录后复制
In [ ]
#!/usr/bin/python# -*- coding: UTF-8 -*-"""
@author:livingbody
@file:test.py
@time:2022/01/04
"""import pandas as pdimport os# 修改标签# chefclothes为1# otherclothes为0def fix_clothes(data):
    print(data)    if data == 'chefclothes':        return 1
    else:        return 0# 坐标格式化数据,保留小数点后1位def fix_pint(data):
    data1 = float('%.1f' % data)    return data1# 概率格式化,保留小数点后2位def fix_pint2(data):
    data1 = float('%.2f' % data)    return data1# 获取预测结果def get_data(file_name):
    data = pd.read_csv(file_name, index_col=None, header=None, sep=' ')
    data[0] = data[0].apply(fix_clothes)
    data[1] = data[1].apply(fix_pint2)    for i in range(2, len(data.columns)):
        data[i] = data[i].apply(fix_pint)    return data# 获取单个预测文件数据def get_single_data(file_name):
    # 获取txt文件名
    temp = file_name.split('\')[-1]    # 获取图片文件名
    temp = temp.split('.')[0] + '.jpg'
    mylist = []
    data = None
    try:
        data = get_data(file_name)    except:        # 如文件为空,返回None
        return None    
    for index, row in data.iterrows():
        row = row.tolist()        # 第2列概率
        # 第3列左上顶点x值
        # 第4列左上顶点y值
        
        # 第1列为标签,int
        row[0] = int(row[0])        # 第5列右下顶点x值
        # 第6列右下顶点y值
        # PaddleDetection预测结果为:左上x 左上y  宽度  高度,此处需要转换
        row[4] = row[2] + row[4]
        row[4] = float('%.1f' % row[4])
        row[5] = row[3] + row[5]
        row[5] = float('%.1f' % row[5])        for i in range(len(row)):
            row[i] = str(row[i])
        row = temp + ' ' + ' '.join(row)        # print(row)  # 输出每行的索引值
        mylist.append(row)    return mylist# 输出结果到提交文件def get_all_data():
    mylist = []    for dirpath, dirname, filenames in os.walk('./result_dir'):        for filename in filenames:            if '.txt' in filename:                print(filename)
                tmp = get_single_data(os.path.join(dirpath, filename))                if tmp == None:                    continue
                mylist.extend(tmp)    return mylistif __name__ == '__main__':
    all_data = get_all_data()    with open('myresult.txt', 'w') as f:        for item in all_data:
            f.write(item + '
')
登录后复制
In [6]
!head myresult.txt
登录后复制
chef910-0069.jpg 1 0.98 1353.4 318.9 1501.4 625.5

chef910-0069.jpg 0 0.95 1507.0 412.6 1672.6 658.8

chef910-0298.jpg 1 0.99 808.9 200.8 889.3 385.7

chef910-0298.jpg 1 0.93 914.6 200.7 983.3 334.5

chef910-0298.jpg 1 0.9 1126.5 207.0 1186.2 374.9

chef910-0592.jpg 1 0.93 114.7 322.2 223.3 548.4

chef910-0592.jpg 1 0.92 681.4 212.6 745.3 346.6

chef910-0592.jpg 1 0.75 1021.3 218.3 1107.3 435.0

chef910-0592.jpg 1 0.61 207.9 276.7 309.8 488.5

chef910-0593.jpg 1 0.96 681.8 210.6 747.9 346.5
登录后复制

如上所示,提交即可获得成绩,如下图:

【Paddle打比赛】基于PaddleDetection未知工作服识别 - php中文网

如需提分,可在模型选择,超参设置等方面下功夫。

以上就是【Paddle打比赛】基于PaddleDetection未知工作服识别的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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