U-net裂缝分割模型训练异常求助:Loss与Accuracy反向变化
U-Net裂缝分割模型训练异常排查求助
我是AI与Python新手,尝试用U-Net构建裂缝识别与分割模型,但训练结果异常。以下是第5轮训练输出:
Epoch 5/25 20/20 [==============================] - 42s 2s/step - loss: -12.7775 - accuracy: 0.0591 - dice_coef: 1.3771 - iou: 2.9680 - val_loss: 0.9940 - val_accuracy: 0.4198 - val_dice_coef: 0.9033 - val_iou: 0.9226
训练过程中出现矛盾现象:随着轮次增加,loss与accuracy持续下降,但dice_coef与IOU却持续上升。
实现细节
训练数据集
数据集包含两类图像:
- 主图像:带裂缝的场景图像
- 掩码图像:对应主图像的二值灰度掩码,裂缝区域为前景
图像读取与预处理代码
Xtrain存储缩放至128x128的主图像;Ytrain存储转灰度、缩放至128x128并新增单通道的掩码图像:
def readimg(name_image, list_images): path_image = os.path.join('crack_dataset/img', name_image) if os.path.exists(path_image): image = cv2.imread(path_image) image = cv2.resize(image,(128,128)) Xtrain.append(image) def leimg_mask(name_image, list_images): path_image = os.path.join('crack_dataset/labelcol', nome_imagem) if os.path.exists(path_image): image = cv2.imread(path_image, cv2.IMREAD_GRAYSCALE) image = cv2.resize(image,(128,128)) mask_array = image[:, :, np.newaxis] Ytrain.append(mask_array)
后续处理
将列表转换为NumPy数组,并对主图像做归一化:
Xtrain = np.array(Xtrain) Ytrain = np.array(Ytrain) Xtrain = Xtrain / 255.0
数据生成器
训练集启用数据增强,测试集无增强:
datagen = ImageDataGenerator( rotation_range=15, width_shift_range=0.1, height_shift_range=0.1, shear_range=0.2, zoom_range=0.2, brightness_range=[0.7, 1.3], fill_mode="nearest" ) datagen_test = ImageDataGenerator() X_train, X_test, y_train, y_test = train_test_split(Xtrain, Ytrain, test_size=0.2, random_state=42)
模型结构
采用标准U-Net架构,分为编码(下采样)和解码(上采样)两部分,包含卷积-池化模块与上采样-特征拼接模块。
训练代码
train_generator = datagen.flow( X_train, y_train, batch_size=16, shuffle=True ) val_generator = datagen_test.flow( X_test, y_test, batch_size=16, shuffle=False ) many_steps = len(train_generator) history = model.fit(train_generator, steps_per_epoch=many_steps, epochs=25, validation_data=val_generator)
恳请帮忙排查问题!
内容的提问来源于stack exchange,提问作者Eric Yudi
相关产品推荐
相关产品推荐

