Closed jaffe-fly closed 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:
# 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"
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:
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"
SNAPSHOT_EPOCH: 10
TEST: TEST_MODEL: r"/home/aistudio/work/saved_model/deeplabv3p_mobilenetv2-2-0_bn/final" ########################### 模型优化相关配置 ################################## SOLVER:
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
这边的1出现的很奇怪,你确定数据集的标注没有问题?你数据集的标签是什么?
训练集标签和图片是这样子的 网上直接下载的 没看出什么问题
你这边的标签只有两类,看你的标注图应该分别对应着0和255,你把255的值改成1就可以了,让两个类别的标签分别对应0和1。在PaddleSeg里,255对应的是被忽略的像素。
IGNORE_INDEX: 1 是改这个吗? 改动之后是否需要重新训练?
这个是你的标注图不对导致的。PaddleSeg采用单通道的标注图片,每一种像素值代表一种类别,像素标注类别需要从0开始递增,例如0,1,2,3表示有4种类别。你把图转成ndarray看下就知道了,你的这个火的标注在ndarray里面的值肯定是255了,把它改成1就可以了。但是图片就变成一片黑了,不过这正好说明标注图已经正确了。PaddleSeg 数据准备
@HOLLIZHAO 感谢这位同学的解答,你说的是对的。@jaffe-fly 可以参考下Holli同学的解答。
这个是你的标注图不对导致的。PaddleSeg采用单通道的标注图片,每一种像素值代表一种类别,像素标注类别需要从0开始递增,例如0,1,2,3表示有4种类别。你把图转成ndarray看下就知道了,你的这个火的标注在ndarray里面的值肯定是255了,把它改成1就可以了。但是图片就变成一片黑了,不过这正好说明标注图已经正确了。PaddleSeg 数据准备
请问您说的这个改成1是怎么改?我也遇到了这个问题。
这个是你的标注图不对导致的。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种类别。)
这是什么原因造成的,并且配置文件是按照官网的配置训练了100epoch,可以看到损失降低了。 另外 在val的时候 输出也看不懂