当前位置: 首页 > AI > 文章内容页

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

时间:2025-07-24    作者:游乐小编    

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

【paddle打比赛】基于paddledetection未知工作服识别 - 游乐网

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

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 2024       +-----------------------------------------------------------------------------+| 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
登录后复制
2024-01-03 12:27:08 [INFO]Dataset split starts...2024-01-03 12:27:08 [INFO]Dataset split done.2024-01-03 12:27:08 [INFO]Train samples: 7362024-01-03 12:27:08 [INFO]Eval samples: 1832024-01-03 12:27:08 [INFO]Test samples: 02024-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: VOCmap_type: 11pointnum_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等

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未知工作服识别 - 游乐网

五、模型预测

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.1W0104 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 Imageimg=Image.open('output/chef910-0000.jpg')img
登录后复制
登录后复制

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.1W0104 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 Imageimg=Image.open('output/chef910-0298.jpg')img
登录后复制
登录后复制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:2024/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.5chef910-0069.jpg 0 0.95 1507.0 412.6 1672.6 658.8chef910-0298.jpg 1 0.99 808.9 200.8 889.3 385.7chef910-0298.jpg 1 0.93 914.6 200.7 983.3 334.5chef910-0298.jpg 1 0.9 1126.5 207.0 1186.2 374.9chef910-0592.jpg 1 0.93 114.7 322.2 223.3 548.4chef910-0592.jpg 1 0.92 681.4 212.6 745.3 346.6chef910-0592.jpg 1 0.75 1021.3 218.3 1107.3 435.0chef910-0592.jpg 1 0.61 207.9 276.7 309.8 488.5chef910-0593.jpg 1 0.96 681.8 210.6 747.9 346.5
登录后复制

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

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

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

热门推荐

更多

热门文章

更多

首页  返回顶部

本站所有软件都由网友上传,如有侵犯您的版权,请发邮件youleyoucom@outlook.com