★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
【基于可见光图像的柑橘花果梢语义分割挑战赛比赛链接】

一、赛事背景

柑橘是我国重要的经济作物之一,柑橘花果梢是柑橘生长发育的重要部位,也是柑橘病虫害的主要发生部位。为了提高柑橘产量和品质,需要对柑橘花果梢进行有效的监测和管理。语义分割是一种计算机视觉技术,可以对图像中的每个像素进行分类,从而实现对图像中不同对象的识别和分割。

示例一 示例二 示例三

二、赛事任务

柑橘花果梢的语义分割研究需要强大的数据作为支撑,本次大赛提供了华南农业大学校内及部分实验室内部柑橘花果梢数据作为训练样本,参赛选手需根据提供的样本构建相应模型,对柑橘新梢、花朵和青果进行语义分割。

三、赛题解析

1.数据说明

本次大赛所用可见光柑橘新梢、花朵、花苞和青果图像,图像格式为jpg。此次比赛分为初赛和复赛两个阶段,两个阶段的区别是所提供样本的量级有所不同,并且检测任务不同(初赛1分类,复赛2分类),其它的设置均相同。

表1(初赛1个类别)

数据类别 数据名称 数据格式 解释
基本数据 shoots jpg 柑橘新梢

表2(复赛2个类别)

数据类别 数据名称 数据格式 解释
基本数据 orange jpg 柑橘青果
基本数据 flower jpg 柑橘花

2.评估指标

本模型依据提交的结果文件,采用mIOU进行评价。

(1)TP、FP、FN、TN

  • 统计TP(真正): 预测正确, 预测结果 = 真实 = 正类 ;

  • FP(假正): 预测错误, 预测结果 = 正类 ≠ 真实 = 负类;

  • FN(假负): 预测错误, 预测结果 = 负类 ≠ 真实 = 正类;

  • TN(真负): 预测正确, 预测结果 = 负类 = 真实 = 负类。

(2)通过第一步的统计值计算模型的MIoU,计算公式如下:

MIoU = 1 k + 1 1 \over k+1 k+11 ∑ i = 0 k \sum_{i=0}^k i=0k T P F N + F P + T P TP \over FN+FP+TP FN+FP+TPTP

3.结果提交

  • 文件格式:按照zip格式提交

  • 文件大小:无要求

  • 提交次数限制:每支队伍每天最多3次

  • 文件详细说明:

    • 以zip文件格式提交,编码为UTF-8

    • 文件格式:submit.zip文件,包含分割结果的文件夹submit,存储每张图片的分割结果的png文件,文件名为图片名.png

  • 提交前请确保预测结果的文件夹和压缩包名称均为submit

注:若某个类别没有分割出任何对象,则保存为原图片

四、数据预处理

4.1 数据集解压

!unzip -oq /home/aistudio/orange.zip

4.2 json2mask

使用语义分割时,比赛数据集是使用labelme制作标签,生成的是json格式,需要转成png格式。转换脚本如下:

!pip install -r /home/aistudio/requirements.txt
!python json2mask.py

转换后的效果如下:

Origin Mask Label
# 对数据集进行整理
!mv /home/aistudio/orange/train/labels/* /home/aistudio/orange/train
!mv /home/aistudio/orange/train/json/*.png /home/aistudio/orange/train/labels
mkdir: 无法创建目录"/home/aistudio/orange/train/labels": 文件已存在

4.3 数据集划分

对于所有原始图像和标注图像,需要按照比例划分为训练集、验证集、测试集。PaddleSeg提供了切分数据并生成文件列表的脚本split_dataset_list.py此代码为默认比例7 :3 :1

python tools/split_dataset_list.py <dataset_root> <images_dir_name> <labels_dir_name> ${FLAGS}

参数说明:

  • dataset_root: 数据集根目录
  • images_dir_name: 原始图像目录名
  • labels_dir_name: 标注图像目录名

FLAGS说明:

FLAG 含义 默认值 参数数目
–spilt 训练集、验证集、测试集的切分比例 0.7 0.3 0 3
–separator txt文件列表分隔符 “” 1
–format 原始图片和标注图像的图片后缀 “jpg” “png” 2
–postfix 按文件著名是否包含指定后缀对图片和标签进行筛选 “”" “”" 2
# 克隆PaddleDetection仓库
!unzip -oq /home/aistudio/PaddleSeg.zip
%cd ~/PaddleSeg
!python tools/data/split_dataset_list.py /home/aistudio/orange/train image labels --split 0.8 0.2 0.0 --format jpg png

五、代码实现

5.1 安装PaddleSeg

%cd ~/PaddleSeg
# 安装其他依赖
!pip install -r requirements.txt --user
# 编译安装paddleseg
!python setup.py install

5.2 模型训练

在baseline选择pp_mobileseg系列的pp_mobileseg_base_cityscapes_1024x512_80k模型。数据集配置和模型配置如下:

数据集配置:

batch_size: 2
iters: 80000

train_dataset:
  type: Dataset   # 自有数据集
  dataset_root: /home/aistudio/orange/train # 数据集路径
  train_path: /home/aistudio/orange/train/train.txt # 训练集列表路径
  num_classes: 2 # 类别数量
  transforms: # 数据增强
    - type: ResizeStepScaling
      min_scale_factor: 0.5
      max_scale_factor: 2.0
      scale_step_size: 0.25
    - type: RandomPaddingCrop
      crop_size: [1024, 512]
    - type: RandomHorizontalFlip
    - type: RandomDistort
      brightness_range: 0.4
      contrast_range: 0.4
      saturation_range: 0.4
    - type: Normalize
  mode: train

val_dataset:
  type: Dataset
  dataset_root: /home/aistudio/orange/train
  val_path: /home/aistudio/orange/train/val.txt
  num_classes: 2
  transforms:
    - type: Normalize
  mode: val


optimizer: # 优化器
  type: SGD
  momentum: 0.9
  weight_decay: 4.0e-5

lr_scheduler: # 学习率
  type: PolynomialDecay
  learning_rate: 0.01
  end_lr: 0
  power: 0.9

loss: # 损失函数
  types:
    - type: CrossEntropyLoss
  coef: [1]

模型配置:

_base_: './cityscapes.yml'

batch_size: 16  # total batch size is 32 # 样本批次
iters: 16000 # 训练轮数

train_dataset:
  transforms:
    - type: ResizeStepScaling
      min_scale_factor: 0.125
      max_scale_factor: 1.5
      scale_step_size: 0.125
    - type: RandomPaddingCrop
      crop_size: [1024, 512]
    - type: RandomHorizontalFlip
    - type: RandomDistort
      brightness_range: 0.5
      contrast_range: 0.5
      saturation_range: 0.5
    - type: Normalize

optimizer:
  _inherited_: False
  type: AdamW
  weight_decay: 0.01
  custom_cfg:
  - name: pos_embed
    weight_decay_mult: 0.0
  - name: head
    lr_multi: 10.0
  - name: bn
    weight_decay_mult: 0.0

lr_scheduler:
  type: PolynomialDecay
  learning_rate: 0.0001
  end_lr: 0
  power: 1.0
  warmup_iters: 1500
  warmup_start_lr: 1.0e-6

loss:
  types:
    - type: MixedLoss
      losses:
        - type: CrossEntropyLoss
        - type: LovaszSoftmaxLoss
      coef: [0.8, 0.2]
  coef: [1]


model:
  type: PPMobileSeg
  num_classes: 2
  backbone:
    type: MobileSeg_Base
    inj_type: AAMSx8
    out_feat_chs: [64, 128, 192] 
    pretrained: https://bj.bcebos.com/paddleseg/dygraph/ade20k/pp_mobileseg/pretrain/model.pdparams
  upsample: intepolate # During exportation, you need to change it to vim for using VIM

%cd ~/PaddleSeg
!python tools/train.py \
       --config /home/aistudio/configs/pp_mobileseg_base_cityscapes_1024x512_80k.yml \
       --save_interval 500 \
       --do_eval \
       --use_vdl \
       --save_dir output/pp_mobileseg_base_cityscapes_1024x512_80k
  • 2023-06-12 17:53:26 [INFO] Start evaluating (total_samples: 45, total_iters: 45)…
  • 45/45 [==============================] - 3s 56ms/step - batch_cost: 0.0562 - reader cost: 7.4379e-04
  • 2023-06-12 17:53:28 [INFO] [EVAL] #Images: 45 mIoU: 0.7472 Acc: 0.9740 Kappa: 0.6717 Dice: 0.8358
  • 2023-06-12 17:53:28 [INFO] [EVAL] Class IoU: [0.9732 0.5211]
  • 2023-06-12 17:53:28 [INFO] [EVAL] Class Precision: [0.9898 0.6346]
  • 2023-06-12 17:53:28 [INFO] [EVAL] Class Recall: [0.983 0.7445]
  • 2023-06-12 17:53:29 [INFO] [EVAL] The model with the best validation mIoU (0.7488) was saved at iter 9500.

5.3 模型评估

!python tools/val.py \
       --config /home/aistudio/configs/pp_mobileseg_base_cityscapes_1024x512_80k.yml \
       --model_path output/pp_mobileseg_base_cityscapes_1024x512_80k/best_model/model.pdparams

5.4 模型预测

!python tools/predict.py \
       --config /home/aistudio/configs/pp_mobileseg_base_cityscapes_1024x512_80k.yml \
       --model_path output/pp_mobileseg_base_cityscapes_1024x512_80k/best_model/model.pdparams \
       --image_path /home/aistudio/orange/test/image \
       --save_dir output/result

5.5 提交结果生成

【结果提交传送门】

!mkdir ~/submit
!cp -r  /home/aistudio/PaddleSeg/output/result/pseudo_color_prediction/*.png ~/submit
%cd ~
!zip -r -q -o submit.zip submit/
/home/aistudio

o

预测结果展示:

六、总结与提分技巧

以上是2023科大讯飞AI开发者大赛—基于可见光图像的柑橘花果梢语义分割挑战赛[非官方baseline],大家将更多的精力花在改进模型提升模型的性能上。

  • 数据分析:在开始模型训练前,可以对数据进行分析,做到心中有数。可参考【图像语义分割EDA模板】

  • 增加训练轮次:可以增加训练的轮数,以获得精度较好的模型!

  • 模型选择:可以选择PaddleSeg套件中精度更高的模型或者复现其他精度较高的模型!

  • 数据增强:除配置文件中使用数据增强方法,可以考虑使用其他数据增强方法,如RandomHorizontalFlip、RandomVerticalFlip等方法,提升模型的泛化能力。

  • 模型预测:在进行模型预测时,可考虑增强测试,使预测结果更准确,得到较好的分数。

建议参赛者使用一些工具在参加初赛过程中记录实验过程,以便于每一次有目的进行模型的优化和改进,得到较好的结果。

请点击此处查看本环境基本用法.

Please click here for more detailed instructions.

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐