PaddlePaddle / PaddleSeg

Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.
https://arxiv.org/abs/2101.06175
Apache License 2.0
8.57k stars 1.68k forks source link

在自己定义的数据集上训练后 test的输出结果图片是全黑(没有检测到目标) #171

Closed jaffe-fly closed 4 years ago

jaffe-fly commented 4 years ago

这是什么原因造成的,并且配置文件是按照官网的配置训练了100epoch,可以看到损失降低了。 另外 在val的时候 输出也看不懂 TIM图片20200227154712

wuyefeilin commented 4 years ago

麻烦你给一下你的训练数据的信息和训练日志开头关于配置的信息

jaffe-fly commented 4 years ago

########################## 基本配置 ###########################################

训练时图像裁剪尺寸(宽,高)

TRAIN_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling EVAL_CROP_SIZE: (1997, 1024) # (width, height), for unpadding rangescaling and stepscaling BATCH_SIZE: 4 ########################### 数据增强配置 ###################################### AUG:

图像resize的方式有三种:

# unpadding(固定尺寸),stepscaling(按比例resize),rangescaling(长边对齐)
AUG_METHOD: "stepscaling" # choice unpadding rangescaling and stepscaling
# 图像resize的固定尺寸(宽,高),非负
#FIX_RESIZE_SIZE: (512, 512) # (width, height), for unpadding

# 图像resize方式为rangescaling, 测试验证可视化模式下长边resize的长度,
# 在MIN_RESIZE_VALUE到MAX_RESIZE_VALUE范围内
#INF_RESIZE_VALUE: 500  # for rangescaling
# 图像resize方式为rangescaling,训练时长边resize的范围最大值,
# 不小于MIN_RESIZE_VALUE
#MAX_RESIZE_VALUE: 600  # for rangescaling
# 图像resize方式为rangescaling,训练时长边resize的范围最小值,非负
#MIN_RESIZE_VALUE: 400  # for rangescaling

# 图像resize方式为stepscaling,resize最大尺度,不小于MIN_SCALE_FACTOR
MAX_SCALE_FACTOR: 1.25  # for stepscaling
# 图像resize方式为stepscaling,resize最小尺度,非负
MIN_SCALE_FACTOR: 0.75  # for stepscaling
# 图像resize方式为stepscaling,resize尺度范围间隔,非负
SCALE_STEP_SIZE: 0.25  # for stepscaling

# 图像镜像左右翻转
MIRROR: True
# 图像上下翻转开关,True/False
FLIP: True
# 图像启动上下翻转的概率,0-1
FLIP_RATIO: 0.5

RICH_CROP:
    # RichCrop数据增广开关,用于提升模型鲁棒性
    ENABLE: True
    # 图像旋转最大角度,0-90
    MAX_ROTATION: 15
    # 裁取图像与原始图像面积比,0-1
    MIN_AREA_RATIO: 0.5
    # 裁取图像宽高比范围,非负
    ASPECT_RATIO: 0.33
    # 亮度调节范围,0-1
    BRIGHTNESS_JITTER_RATIO: 0.5
    # 饱和度调节范围,0-1
    SATURATION_JITTER_RATIO: 0.5
    # 对比度调节范围,0-1
    CONTRAST_JITTER_RATIO: 0.5
    # 图像模糊开关,True/False
    BLUR: True
    # 图像启动模糊百分比,0-1
    BLUR_RATIO: 0.1

########################## 数据集配置 ######################################### DATASET: DATA_DIR: r"/home/aistudio/work/dataset" IMAGE_TYPE: "rgb" # choice rgb or rgba NUM_CLASSES: 2 TEST_FILE_LIST: r"/home/aistudio/work/dataset/test.txt" TRAIN_FILE_LIST: r"/home/aistudio/work/dataset/train.txt" VAL_FILE_LIST: r"/home/aistudio/work/dataset/val.txt"

Tensorboard 可视化的数据集

VIS_FILE_LIST: r"/home/aistudio/work/dataset/test.txt"
# 忽略的像素标签值, 默认为255,一般无需改动
IGNORE_INDEX: 255
# 数据列表分割符, 默认为空格
SEPARATOR: " "

########################## 预测部署模型配置 ################################### FREEZE:

预测保存的模型名称

MODEL_FILENAME: "__model__"
# 预测保存的参数名称
PARAMS_FILENAME: "__params__"
# 预测模型参数保存的路径
# SAVE_DIR: r'/home/aistudio/work/freeze_model'

########################## 模型通用配置 ####################################### MODEL:

模型名称, 已支持deeplabv3p, unet, icnet,pspnet,hrnet

MODEL_NAME: "deeplabv3p"
# BatchNorm类型: bn、gn(group_norm)
DEFAULT_NORM_TYPE: "bn"
# 多路损失加权值
MULTI_LOSS_WEIGHT: [1.0]
# DEFAULT_NORM_TYPE为gn时group数
DEFAULT_GROUP_NUMBER: 32
# 极小值, 防止分母除0溢出,一般无需改动
DEFAULT_EPSILON: 1e-5
# BatchNorm动量, 一般无需改动
BN_MOMENTUM: 0.99
# 是否使用FP16训练
FP16: False
########################## DeepLab模型配置 ####################################
DEEPLAB:
    # DeepLab backbone 配置, 可选项xception_65, mobilenetv2
    BACKBONE: "mobilenetv2"
    # MobileNet v2 backbone scale 设置
    DEPTH_MULTIPLIER: 2.0
    # MobileNet v2 backbone scale 设置
    ENCODER_WITH_ASPP: False
    # MobileNet v2 backbone scale 设置
    ENABLE_DECODER: False

########################### 训练配置 ########################################## TRAIN: PRETRAINED_MODEL_DIR: r"/home/aistudio/PaddleSeg/pretrained_model/deeplabv3p_mobilenetv2-2-0_bn" MODEL_SAVE_DIR: r"/home/aistudio/work/saved_model/deeplabv3p_mobilenetv2-2-0_bn"

模型参数保存的epoch间隔数,可用来继续训练中断的模型

SNAPSHOT_EPOCH: 10

TEST: TEST_MODEL: r"/home/aistudio/work/saved_model/deeplabv3p_mobilenetv2-2-0_bn/final" ########################### 模型优化相关配置 ################################## SOLVER:

训练epoch数,正整数

NUM_EPOCHS: 100
LR: 0.005
# 学习率下降方法, 支持poly piecewise cosine 三种
LR_POLICY: "poly"
# 优化算法, 支持SGD和Adam两种算法
OPTIMIZER: "sgd"
# 是否开启warmup学习策略
LR_WARMUP: True
# warmup的迭代次数
LR_WARMUP_STEPS: 2000
wuyefeilin commented 4 years ago

image 这边的1出现的很奇怪,你确定数据集的标注没有问题?你数据集的标签是什么?

jaffe-fly commented 4 years ago

fire000 fire000_gt

训练集标签和图片是这样子的 网上直接下载的 没看出什么问题

wuyefeilin commented 4 years ago

你这边的标签只有两类,看你的标注图应该分别对应着0和255,你把255的值改成1就可以了,让两个类别的标签分别对应0和1。在PaddleSeg里,255对应的是被忽略的像素。

jaffe-fly commented 4 years ago

IGNORE_INDEX: 1 是改这个吗? 改动之后是否需要重新训练?

HOLLIZHAO commented 4 years ago

这个是你的标注图不对导致的。PaddleSeg采用单通道的标注图片,每一种像素值代表一种类别,像素标注类别需要从0开始递增,例如0,1,2,3表示有4种类别。你把图转成ndarray看下就知道了,你的这个火的标注在ndarray里面的值肯定是255了,把它改成1就可以了。但是图片就变成一片黑了,不过这正好说明标注图已经正确了。PaddleSeg 数据准备

ZeyuChen commented 4 years ago

@HOLLIZHAO 感谢这位同学的解答,你说的是对的。@jaffe-fly 可以参考下Holli同学的解答。

Suzi1213 commented 2 years ago

这个是你的标注图不对导致的。PaddleSeg采用单通道的标注图片,每一种像素值代表一种类别,像素标注类别需要从0开始递增,例如0,1,2,3表示有4种类别。你把图转成ndarray看下就知道了,你的这个火的标注在ndarray里面的值肯定是255了,把它改成1就可以了。但是图片就变成一片黑了,不过这正好说明标注图已经正确了。PaddleSeg 数据准备

请问您说的这个改成1是怎么改?我也遇到了这个问题。

HOLLIZHAO commented 2 years ago

这个是你的标注图不对导致的。PaddleSeg采用单通道的标注图片,每一种像素值代表一种类别,像素标注类别需要从0开始递增,例如0,1,2,3表示有4种类别。你把图转成ndarray看下就知道了,你的这个火的标注在ndarray里面的值肯定是255了,把它改成1就可以了。但是图片就变成一片黑了,不过这正好说明标注图已经正确了。PaddleSeg 数据准备

请问您说的这个改成1是怎么改?我也遇到了这个问题。

test_png = 'C:/test.png'
imagedata = cv2.imread(test_png, COLOR_BGR2GRAY)  #使用openCV以灰度图读取图片;
imagedata[imagedata > 0] = 1  #将不为0的数值全部改成1;(0在PaddleSeg中默认为背景色类。PaddleSeg采用单通道的标注图片,每一种像素值代表一种类别,像素标注类别需要从0开始递增,例如0,1,2,3表示有4种类别。)