一、前言

该项目是用标注工具Labelme和PaddleSeg实现卫星遥感图像的铁路分割。

Labelme是一个标注工具,可以基本实现深度学习的标注任务,让我们标注自己的数据集,不过麻烦的一点就是要自己手动标注。

PaddleSeg是百度飞桨的专门用于图像分割的套件,百度飞桨还有很多很好的开发套件,感谢百度飞桨降低了我们实现深度学习的门槛!

二、准备工作

2.1 安装PaddleSeg

# 解压PaddleSeg到/home/aistudio/目录下
!unzip -oq /home/aistudio/data/data159250/PaddleSeg-release-2.4.zip
!mv PaddleSeg-release-2.4 PaddleSeg
!pip install paddleseg -i https://mirror.baidu.com/pypi/simple #导入PaddleSeg包
Looking in indexes: https://mirror.baidu.com/pypi/simple
Collecting paddlesegDownloading https://mirror.baidu.com/pypi/packages/17/76/84a07245cb5a0ceae11a9a94c5d2be8a2cec94b3a0b883676d166eeacf2a/paddleseg-2.5.0-py3-none-any.whl (295 kB)
[2K     [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m295.9/295.9 kB[0m [31m3.3 MB/s[0m eta [36m0:00:00[0ma [36m0:00:01[0m
[?25hRequirement already satisfied: prettytable in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddleseg) (0.7.2)
Requirement already satisfied: pyyaml>=5.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddleseg) (5.1.2)
Requirement already satisfied: scipy in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddleseg) (1.6.3)
Requirement already satisfied: filelock in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddleseg) (3.0.12)
Requirement already satisfied: tqdm in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddleseg) (4.36.1)
Requirement already satisfied: sklearn in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddleseg) (0.0)
Requirement already satisfied: opencv-python in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddleseg) (4.1.1.26)
Requirement already satisfied: visualdl>=2.0.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddleseg) (2.2.0)
Requirement already satisfied: flake8>=3.7.9 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (4.0.1)
Requirement already satisfied: pre-commit in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (1.21.0)
Requirement already satisfied: matplotlib in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (2.2.3)
Requirement already satisfied: Flask-Babel>=1.0.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (1.0.0)
Requirement already satisfied: bce-python-sdk in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (0.8.53)
Requirement already satisfied: six>=1.14.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (1.16.0)
Requirement already satisfied: shellcheck-py in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (0.7.1.1)
Requirement already satisfied: pandas in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (1.1.5)
Requirement already satisfied: flask>=1.1.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (1.1.1)
Requirement already satisfied: protobuf>=3.11.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (3.20.1)
Requirement already satisfied: numpy in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (1.20.3)
Requirement already satisfied: requests in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (2.22.0)
Requirement already satisfied: Pillow>=7.0.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from visualdl>=2.0.0->paddleseg) (7.1.2)
Requirement already satisfied: scikit-learn in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from sklearn->paddleseg) (0.24.2)
Requirement already satisfied: importlib-metadata<4.3 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from flake8>=3.7.9->visualdl>=2.0.0->paddleseg) (4.2.0)
Requirement already satisfied: mccabe<0.7.0,>=0.6.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from flake8>=3.7.9->visualdl>=2.0.0->paddleseg) (0.6.1)
Requirement already satisfied: pycodestyle<2.9.0,>=2.8.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from flake8>=3.7.9->visualdl>=2.0.0->paddleseg) (2.8.0)
Requirement already satisfied: pyflakes<2.5.0,>=2.4.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from flake8>=3.7.9->visualdl>=2.0.0->paddleseg) (2.4.0)
Requirement already satisfied: Jinja2>=2.10.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from flask>=1.1.1->visualdl>=2.0.0->paddleseg) (3.0.0)
Requirement already satisfied: click>=5.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from flask>=1.1.1->visualdl>=2.0.0->paddleseg) (7.0)
Requirement already satisfied: itsdangerous>=0.24 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from flask>=1.1.1->visualdl>=2.0.0->paddleseg) (1.1.0)
Requirement already satisfied: Werkzeug>=0.15 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from flask>=1.1.1->visualdl>=2.0.0->paddleseg) (0.16.0)
Requirement already satisfied: pytz in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from Flask-Babel>=1.0.0->visualdl>=2.0.0->paddleseg) (2019.3)
Requirement already satisfied: Babel>=2.3 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from Flask-Babel>=1.0.0->visualdl>=2.0.0->paddleseg) (2.8.0)
Requirement already satisfied: future>=0.6.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from bce-python-sdk->visualdl>=2.0.0->paddleseg) (0.18.0)
Requirement already satisfied: pycryptodome>=3.8.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from bce-python-sdk->visualdl>=2.0.0->paddleseg) (3.9.9)
Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from matplotlib->visualdl>=2.0.0->paddleseg) (1.1.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from matplotlib->visualdl>=2.0.0->paddleseg) (3.0.9)
Requirement already satisfied: python-dateutil>=2.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from matplotlib->visualdl>=2.0.0->paddleseg) (2.8.2)
Requirement already satisfied: cycler>=0.10 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from matplotlib->visualdl>=2.0.0->paddleseg) (0.10.0)
Requirement already satisfied: aspy.yaml in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from pre-commit->visualdl>=2.0.0->paddleseg) (1.3.0)
Requirement already satisfied: cfgv>=2.0.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from pre-commit->visualdl>=2.0.0->paddleseg) (2.0.1)
Requirement already satisfied: nodeenv>=0.11.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from pre-commit->visualdl>=2.0.0->paddleseg) (1.3.4)
Requirement already satisfied: toml in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from pre-commit->visualdl>=2.0.0->paddleseg) (0.10.0)
Requirement already satisfied: identify>=1.0.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from pre-commit->visualdl>=2.0.0->paddleseg) (1.4.10)
Requirement already satisfied: virtualenv>=15.2 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from pre-commit->visualdl>=2.0.0->paddleseg) (16.7.9)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from requests->visualdl>=2.0.0->paddleseg) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from requests->visualdl>=2.0.0->paddleseg) (2019.9.11)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from requests->visualdl>=2.0.0->paddleseg) (1.25.6)
Requirement already satisfied: idna<2.9,>=2.5 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from requests->visualdl>=2.0.0->paddleseg) (2.8)
Requirement already satisfied: joblib>=0.11 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from scikit-learn->sklearn->paddleseg) (0.14.1)
Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from scikit-learn->sklearn->paddleseg) (2.1.0)
Requirement already satisfied: typing-extensions>=3.6.4 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from importlib-metadata<4.3->flake8>=3.7.9->visualdl>=2.0.0->paddleseg) (4.3.0)
Requirement already satisfied: zipp>=0.5 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from importlib-metadata<4.3->flake8>=3.7.9->visualdl>=2.0.0->paddleseg) (3.8.1)
Requirement already satisfied: MarkupSafe>=2.0.0rc2 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from Jinja2>=2.10.1->flask>=1.1.1->visualdl>=2.0.0->paddleseg) (2.0.1)
Requirement already satisfied: setuptools in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib->visualdl>=2.0.0->paddleseg) (56.2.0)
Installing collected packages: paddleseg
Successfully installed paddleseg-2.5.0

2.2 导入相关包

import os
import io
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image as PilImage
import paddle
import warnings
warnings.filterwarnings('ignore')
paddle.__version__#查看paddlepaddle版本
'2.2.2'

2.3 数据集准备

文件目录

|---|image1 #原始图片
|---|---|railway_050.png
|---|---|railway_051.png
|---|---|……|---|mask1 #生成的标注图片
|---|---|railway_050.png
|---|---|railway_051.png
|---|---|……

默认解压到work/train 目录下,该目录会在每次进入环境时重置,但可以节省项目启动时间

#
!unzip -oq /home/aistudio/data/data159221/dataset.zip -d work/train
#解压我已经用Labelme工具完成标注和生成的数据集到work目录中,具体制作数据集的方法见下文说明

2.4 搜集数据

这里使用从谷歌地球上截取得到的遥感图像进行训练并进行测试,json文件为后续手工标注

2.5 用Labelme工具标注分割信息

关于Labelme工具的安装和使用,

深度学习图像标注工具-Labelme

数据标注软件labelme详解

首先修改label.txt
一共为两类

对从谷歌地球上截取得到的所有图片进行标注

(这里展示使用Labelme工具进行标注出来的图片)

2.5 用标注完生成的json文件生成数据集

在本地用python文件批量生成数据集

得到的转换后的文件为

# 批量转换算法 已转换完毕,不用运行
# ### 将Labelme生成的数据集转换为PaddleSeg支持的数据集
import base64
import json
import os
import os.path as osp
import numpy as np
import PIL.Image
# from labelme import utils'''
制作自己的语义分割数据集需要注意以下几点:
1、我使用的labelme版本是3.16.7,建议使用该版本的labelme,有些版本的labelme会发生错误,具体错误为:Too many dimensions: 3 > 2安装方式为命令行pip install labelme==3.16.7
2、此处生成的标签图是8位彩色图,与视频中看起来的数据集格式不太一样。虽然看起来是彩图,但事实上只有8位,此时每个像素点的值就是这个像素点所属的种类。所以其实和视频中VOC数据集的格式一样。因此这样制作出来的数据集是可以正常使用的。也是正常的。
'''
# if __name__ == '__main__':
def dataset():jpgs_path   = "datasets/JPEGImages"pngs_path   = "datasets/SegmentationClass"classes     = ["_background_","railway"]count = os.listdir("./datasets/before/") for i in range(0, len(count)):path = os.path.join("./datasets/before", count[i])if os.path.isfile(path) and path.endswith('json'):data = json.load(open(path))if data['imageData']:imageData = data['imageData']else:imagePath = os.path.join(os.path.dirname(path), data['imagePath'])with open(imagePath, 'rb') as f:imageData = f.read()imageData = base64.b64encode(imageData).decode('utf-8')img = utils.img_b64_to_arr(imageData)label_name_to_value = {'_background_': 0}for shape in data['shapes']:label_name = shape['label']if label_name in label_name_to_value:label_value = label_name_to_value[label_name]else:label_value = len(label_name_to_value)label_name_to_value[label_name] = label_value# label_values must be denselabel_values, label_names = [], []for ln, lv in sorted(label_name_to_value.items(), key=lambda x: x[1]):label_values.append(lv)label_names.append(ln)assert label_values == list(range(len(label_values)))lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)PIL.Image.fromarray(img).save(osp.join(jpgs_path, count[i].split(".")[0]+'.jpg'))new = np.zeros([np.shape(img)[0],np.shape(img)[1]])for name in label_names:index_json = label_names.index(name)index_all = classes.index(name)new = new + index_all*(np.array(lbl) == index_json)utils.lblsave(osp.join(pngs_path, count[i].split(".")[0]+'.png'), new)print('Saved ' + count[i].split(".")[0] + '.jpg and ' + count[i].split(".")[0] + '.png')

2.6 统计数据集的样本数量

# 统计样本数量
images_path = "work/train/dataset/images1" #设置数据集路径
# images_path = "work/Line" #设置数据集路径
image_count = len([os.path.join(images_path, image_name) for image_name in os.listdir(images_path)])
print("用于训练的图片样本数量:", image_count)
用于训练的图片样本数量: 29

2.7 生成train.txt test.txt eval.txt

image_dir_1 = "work/train/dataset/masks1"
def _sort_images(image_dir):"""对文件夹内的图像进行按照文件名排序"""images = []labels = []for image_name in os.listdir(image_dir):images.append(os.path.join(os.path.join(image_dir, image_name)))# if os.path.isdir(os.path.join(image_dir, image_name)):#     images.append(os.path.join(os.path.join(image_dir, image_name), 'img.png'))#     labels.append(os.path.join(os.path.join(image_dir, image_name), 'label.png'))# print(images)for image_name in os.listdir(image_dir_1):labels.append(os.path.join(os.path.join(image_dir_1, image_name)))# if os.path.isdir(os.path.join(image_dir, image_name)):#     images.append(os.path.join(os.path.join(image_dir, image_name), 'img.png'))#     labels.append(os.path.join(os.path.join(image_dir, image_name), 'label.png'))# print(images)return sorted(images), sorted(labels)
"""
这里的分割符是\t,后面使用PaddleSeg的时候要注意修改相关代码,因为PaddleSeg读取文件时默认的分割符是空格。
当然也可以将这里的\t替换为空格。
"""
def write_file(mode, images, labels):with open('./{}.txt'.format(mode), 'w') as f:for i in range(len(images)):#f.write('{}\t{}\n'.format(images[i], labels[i]))f.write('{} {}\n'.format(images[i], labels[i]))            """
由于所有文件都是散落在文件夹中,在训练时我们需要使用的是数据集和标签对应的数据关系,
所以我们第一步是对原始的数据集进行整理,得到数据集和标签两个数组,分别一一对应。
这样可以在使用的时候能够很方便的找到原始数据和标签的对应关系,否则对于原有的文件夹图片数据无法直接应用。
"""
images, labels = _sort_images(images_path)print( len(images))
print( len(labels))
eval_num = int(image_count * 0.15)
print(eval_num)
"""
由于图片数量有限,这里的测试集和验证集采用相同的一组图片。
"""
write_file('train', images[:-eval_num], labels[:-eval_num])
write_file('test', images[-eval_num:], labels[-eval_num:])
write_file('eval', images[-eval_num:], labels[-eval_num:])
29
29
4

2.8 观察读取的图像

原始图像VS标注图像

with open('./train.txt', 'r') as f:i = 0for line in f.readlines():image_path, label_path = line.strip().split(' ')image = np.array(PilImage.open(image_path))label = np.array(PilImage.open(label_path))if i > 2:break# 进行图片的展示plt.figure()plt.subplot(1,2,1), plt.title('Train Image')plt.imshow(image.astype('uint8'))plt.axis('off')plt.subplot(1,2,2), plt.title('Label')plt.imshow(label.astype('uint8'), cmap='gray')plt.axis('off')plt.show()i = i + 1

三、配置训练模型所需的配置文件

配置文件说明
根据自己的需求修改batch_size,iters,以及num_classes

batch_size: 2
iters: 1000train_dataset:type: Datasetdataset_root: /home/aistudiotrain_path: train.txtnum_classes: 2transforms:- type: ResizeStepScalingmin_scale_factor: 0.5max_scale_factor: 2.0scale_step_size: 0.25- type: RandomPaddingCropcrop_size: [512, 512]- type: RandomHorizontalFlip- type: RandomDistortbrightness_range: 0.4contrast_range: 0.4saturation_range: 0.4- type: Normalizemode: trainval_dataset:type: Datasetdataset_root: /home/aistudioval_path: eval.txttransforms:- type: Normalizemode: valnum_classes: 2optimizer:type: sgdmomentum: 0.9weight_decay: 0.0005lr_scheduler: # 学习率的相关设置type: PolynomialDecay # 一种学习率类型。共支持12种策略learning_rate: 0.01power: 0.9end_lr: 0loss:types:- type: CrossEntropyLosscoef: [1]model:type: FCNbackbone:type: HRNet_W48pretrained: https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gznum_classes: 2pretrained: Nullbackbone_indices: [-1]

四、模型训练

PaddleSeg 模型训练官网指导文件
模型训练

本项目采用U-Net模型,U-Net网络结构因为形似字母“U”而得名,最早是在医学影像的细胞分割任务中提出,结构简单适合处理小数量级的数据集。比较于FCN网络的像素相加,U-Net是对通道进行concat操作,保留上下文信息的同时,加强了它们之间的语义联系。整体是一个Encode-Decode的结构,如下图所示。

  • 知识点1:下采样Encode包括conv和max pool,上采样Decode包括up-conv和conv。
  • 知识点2:U-Net特点在于灰色箭头,利用通道融合使上下文信息紧密联系起来。
# U-Net 模型核心代码,用来参考学习
"""
paddlepaddle-gpu==2.2.1
time:2021.07.16 9:00
author:CP
backbone:U-net
"""
import paddle
from paddle import nn
class Encoder(nn.Layer):#下采样:两层卷积,两层归一化,最后池化。def __init__(self, num_channels, num_filters):super(Encoder,self).__init__()#继承父类的初始化self.conv1 = nn.Conv2D(in_channels=num_channels,out_channels=num_filters,kernel_size=3,#3x3卷积核,步长为1,填充为1,不改变图片尺寸[H W]stride=1,padding=1)self.bn1   = nn.BatchNorm(num_filters,act="relu")#归一化,并使用了激活函数self.conv2 = nn.Conv2D(in_channels=num_filters,out_channels=num_filters,kernel_size=3,stride=1,padding=1)self.bn2   = nn.BatchNorm(num_filters,act="relu")self.pool  = nn.MaxPool2D(kernel_size=2,stride=2,padding="SAME")#池化层,图片尺寸减半[H/2 W/2]def forward(self,inputs):x = self.conv1(inputs)x = self.bn1(x)x = self.conv2(x)x = self.bn2(x)x_conv = x           #两个输出,灰色 ->x_pool = self.pool(x)#两个输出,红色 | return x_conv, x_poolclass Decoder(nn.Layer):#上采样:一层反卷积,两层卷积层,两层归一化def __init__(self, num_channels, num_filters):super(Decoder,self).__init__()self.up = nn.Conv2DTranspose(in_channels=num_channels,out_channels=num_filters,kernel_size=2,stride=2,padding=0)#图片尺寸变大一倍[2*H 2*W]self.conv1 = nn.Conv2D(in_channels=num_filters*2,out_channels=num_filters,kernel_size=3,stride=1,padding=1)self.bn1   = nn.BatchNorm(num_filters,act="relu")self.conv2 = nn.Conv2D(in_channels=num_filters,out_channels=num_filters,kernel_size=3,stride=1,padding=1)self.bn2   = nn.BatchNorm(num_filters,act="relu")def forward(self,input_conv,input_pool):x = self.up(input_pool)h_diff = (input_conv.shape[2]-x.shape[2])w_diff = (input_conv.shape[3]-x.shape[3])pad = nn.Pad2D(padding=[h_diff//2, h_diff-h_diff//2, w_diff//2, w_diff-w_diff//2])x = pad(x)                                #以下采样保存的feature map为基准,填充上采样的feature map尺寸x = paddle.concat(x=[input_conv,x],axis=1)#考虑上下文信息,in_channels扩大两倍x = self.conv1(x)x = self.bn1(x)x = self.conv2(x)x = self.bn2(x)return xclass UNet_2(nn.Layer):def __init__(self,num_classes=59):super(UNet_2,self).__init__()self.down1 = Encoder(num_channels=  3, num_filters=64) #下采样self.down2 = Encoder(num_channels= 64, num_filters=128)self.down3 = Encoder(num_channels=128, num_filters=256)self.down4 = Encoder(num_channels=256, num_filters=512)self.mid_conv1 = nn.Conv2D(512,1024,1)                 #中间层self.mid_bn1   = nn.BatchNorm(1024,act="relu")self.mid_conv2 = nn.Conv2D(1024,1024,1)self.mid_bn2   = nn.BatchNorm(1024,act="relu")self.up4 = Decoder(1024,512)                           #上采样self.up3 = Decoder(512,256)self.up2 = Decoder(256,128)self.up1 = Decoder(128,64)self.last_conv = nn.Conv2D(64,num_classes,1)           #1x1卷积,softmax做分类def forward(self,inputs):x1, x = self.down1(inputs)x2, x = self.down2(x)x3, x = self.down3(x)x4, x = self.down4(x)x = self.mid_conv1(x)x = self.mid_bn1(x)x = self.mid_conv2(x)x = self.mid_bn2(x)x = self.up4(x4, x)x = self.up3(x3, x)x = self.up2(x2, x)x = self.up1(x1, x)x = self.last_conv(x)return x
paddle.summary(UNet_2(), (1, 3, 600, 600))
W0721 15:32:39.766975   192 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0721 15:32:39.770218   192 device_context.cc:465] device: 0, cuDNN Version: 7.6.---------------------------------------------------------------------------------------------------------------------Layer (type)                  Input Shape                              Output Shape                   Param #
=====================================================================================================================Conv2D-1                 [[1, 3, 600, 600]]                       [1, 64, 600, 600]                  1,792     BatchNorm-1              [[1, 64, 600, 600]]                       [1, 64, 600, 600]                   256      Conv2D-2                [[1, 64, 600, 600]]                       [1, 64, 600, 600]                 36,928     BatchNorm-2              [[1, 64, 600, 600]]                       [1, 64, 600, 600]                   256      MaxPool2D-1              [[1, 64, 600, 600]]                       [1, 64, 300, 300]                    0       Encoder-1                [[1, 3, 600, 600]]             [[1, 64, 600, 600], [1, 64, 300, 300]]         0       Conv2D-3                [[1, 64, 300, 300]]                       [1, 128, 300, 300]                73,856     BatchNorm-3              [[1, 128, 300, 300]]                      [1, 128, 300, 300]                  512      Conv2D-4                [[1, 128, 300, 300]]                      [1, 128, 300, 300]                147,584    BatchNorm-4              [[1, 128, 300, 300]]                      [1, 128, 300, 300]                  512      MaxPool2D-2              [[1, 128, 300, 300]]                      [1, 128, 150, 150]                   0       Encoder-2               [[1, 64, 300, 300]]            [[1, 128, 300, 300], [1, 128, 150, 150]]        0       Conv2D-5                [[1, 128, 150, 150]]                      [1, 256, 150, 150]                295,168    BatchNorm-5              [[1, 256, 150, 150]]                      [1, 256, 150, 150]                 1,024     Conv2D-6                [[1, 256, 150, 150]]                      [1, 256, 150, 150]                590,080    BatchNorm-6              [[1, 256, 150, 150]]                      [1, 256, 150, 150]                 1,024     MaxPool2D-3              [[1, 256, 150, 150]]                       [1, 256, 75, 75]                    0       Encoder-3               [[1, 128, 150, 150]]            [[1, 256, 150, 150], [1, 256, 75, 75]]         0       Conv2D-7                 [[1, 256, 75, 75]]                        [1, 512, 75, 75]                1,180,160   BatchNorm-7               [[1, 512, 75, 75]]                        [1, 512, 75, 75]                  2,048     Conv2D-8                 [[1, 512, 75, 75]]                        [1, 512, 75, 75]                2,359,808   BatchNorm-8               [[1, 512, 75, 75]]                        [1, 512, 75, 75]                  2,048     MaxPool2D-4               [[1, 512, 75, 75]]                        [1, 512, 38, 38]                    0       Encoder-4                [[1, 256, 75, 75]]              [[1, 512, 75, 75], [1, 512, 38, 38]]          0       Conv2D-9                 [[1, 512, 38, 38]]                       [1, 1024, 38, 38]                 525,312    BatchNorm-9              [[1, 1024, 38, 38]]                       [1, 1024, 38, 38]                  4,096     Conv2D-10               [[1, 1024, 38, 38]]                       [1, 1024, 38, 38]                1,049,600   BatchNorm-10              [[1, 1024, 38, 38]]                       [1, 1024, 38, 38]                  4,096
Conv2DTranspose-1           [[1, 1024, 38, 38]]                        [1, 512, 76, 76]                2,097,664   Conv2D-11               [[1, 1024, 75, 75]]                        [1, 512, 75, 75]                4,719,104   BatchNorm-11               [[1, 512, 75, 75]]                        [1, 512, 75, 75]                  2,048     Conv2D-12                [[1, 512, 75, 75]]                        [1, 512, 75, 75]                2,359,808   BatchNorm-12               [[1, 512, 75, 75]]                        [1, 512, 75, 75]                  2,048     Decoder-1      [[1, 512, 75, 75], [1, 1024, 38, 38]]               [1, 512, 75, 75]                    0
Conv2DTranspose-2            [[1, 512, 75, 75]]                       [1, 256, 150, 150]                524,544    Conv2D-13               [[1, 512, 150, 150]]                      [1, 256, 150, 150]               1,179,904   BatchNorm-13              [[1, 256, 150, 150]]                      [1, 256, 150, 150]                 1,024     Conv2D-14               [[1, 256, 150, 150]]                      [1, 256, 150, 150]                590,080    BatchNorm-14              [[1, 256, 150, 150]]                      [1, 256, 150, 150]                 1,024     Decoder-2      [[1, 256, 150, 150], [1, 512, 75, 75]]             [1, 256, 150, 150]                   0
Conv2DTranspose-3           [[1, 256, 150, 150]]                      [1, 128, 300, 300]                131,200    Conv2D-15               [[1, 256, 300, 300]]                      [1, 128, 300, 300]                295,040    BatchNorm-15              [[1, 128, 300, 300]]                      [1, 128, 300, 300]                  512      Conv2D-16               [[1, 128, 300, 300]]                      [1, 128, 300, 300]                147,584    BatchNorm-16              [[1, 128, 300, 300]]                      [1, 128, 300, 300]                  512      Decoder-3     [[1, 128, 300, 300], [1, 256, 150, 150]]            [1, 128, 300, 300]                   0
Conv2DTranspose-4           [[1, 128, 300, 300]]                      [1, 64, 600, 600]                 32,832     Conv2D-17               [[1, 128, 600, 600]]                      [1, 64, 600, 600]                 73,792     BatchNorm-17              [[1, 64, 600, 600]]                       [1, 64, 600, 600]                   256      Conv2D-18               [[1, 64, 600, 600]]                       [1, 64, 600, 600]                 36,928     BatchNorm-18              [[1, 64, 600, 600]]                       [1, 64, 600, 600]                   256      Decoder-4     [[1, 64, 600, 600], [1, 128, 300, 300]]             [1, 64, 600, 600]                    0       Conv2D-19               [[1, 64, 600, 600]]                       [1, 59, 600, 600]                  3,835
=====================================================================================================================
Total params: 18,476,155
Trainable params: 18,452,603
Non-trainable params: 23,552
---------------------------------------------------------------------------------------------------------------------
Input size (MB): 4.12
Forward/backward pass size (MB): 3998.34
Params size (MB): 70.48
Estimated Total Size (MB): 4072.94
---------------------------------------------------------------------------------------------------------------------{'total_params': 18476155, 'trainable_params': 18452603}
!export CUDA_VISIBLE_DEVICES=0 # 设置1张可用的卡
# windows下请执行以下命令
# set CUDA_VISIBLE_DEVICES=0
!python PaddleSeg/train.py \--config mynet.yml \--do_eval \--use_vdl \--save_interval 100 \--save_dir output
2022-07-21 15:33:07 [INFO]
------------Environment Information-------------
platform: Linux-4.15.0-140-generic-x86_64-with-debian-stretch-sid
Python: 3.7.4 (default, Aug 13 2019, 20:35:49) [GCC 7.3.0]
Paddle compiled with cuda: True
NVCC: Cuda compilation tools, release 10.1, V10.1.243
cudnn: 7.6
GPUs used: 1
CUDA_VISIBLE_DEVICES: None
GPU: ['GPU 0: Tesla V100-SXM2-32GB']
GCC: gcc (Ubuntu 7.5.0-3ubuntu1~16.04) 7.5.0
PaddleSeg: 2.4.0
PaddlePaddle: 2.2.2
OpenCV: 4.1.1
------------------------------------------------
2022-07-21 15:33:07 [INFO]
---------------Config Information---------------
batch_size: 2
iters: 1000
loss:coef:- 1types:- ignore_index: 255type: CrossEntropyLoss
lr_scheduler:end_lr: 0learning_rate: 0.01power: 0.9type: PolynomialDecay
model:backbone:pretrained: https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gztype: HRNet_W48backbone_indices:- -1num_classes: 2pretrained: nulltype: FCN
optimizer:momentum: 0.9type: sgdweight_decay: 0.0005
train_dataset:dataset_root: /home/aistudiomode: trainnum_classes: 2train_path: train.txttransforms:- max_scale_factor: 2.0min_scale_factor: 0.5scale_step_size: 0.25type: ResizeStepScaling- crop_size:- 512- 512type: RandomPaddingCrop- type: RandomHorizontalFlip- brightness_range: 0.4contrast_range: 0.4saturation_range: 0.4type: RandomDistort- type: Normalizetype: Dataset
val_dataset:dataset_root: /home/aistudiomode: valnum_classes: 2transforms:- type: Normalizetype: Datasetval_path: eval.txt
------------------------------------------------
W0721 15:33:07.569408   563 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0721 15:33:07.569442   563 device_context.cc:465] device: 0, cuDNN Version: 7.6.
2022-07-21 15:33:11 [INFO]  Loading pretrained model from https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gz
Connecting to https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gz
Downloading hrnet_w48_ssld.tar.gz
[==================================================] 100.00%
Uncompress hrnet_w48_ssld.tar.gz
[==================================================] 100.00%
2022-07-21 15:33:27 [INFO]  There are 1525/1525 variables loaded into HRNet.
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/nn/layer/norm.py:653: UserWarning: When training, we now always track global mean and variance."When training, we now always track global mean and variance.")
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/math_op_patch.py:253: UserWarning: The dtype of left and right variables are not the same, left dtype is paddle.float32, but right dtype is paddle.int64, the right dtype will convert to paddle.float32format(lhs_dtype, rhs_dtype, lhs_dtype))
2022-07-21 15:33:31 [INFO]  [TRAIN] epoch: 1, iter: 10/1000, loss: 0.6690, lr: 0.009919, batch_cost: 0.3581, reader_cost: 0.07111, ips: 5.5854 samples/sec | ETA 00:05:54
2022-07-21 15:33:33 [INFO]  [TRAIN] epoch: 2, iter: 20/1000, loss: 0.5120, lr: 0.009829, batch_cost: 0.2637, reader_cost: 0.00918, ips: 7.5854 samples/sec | ETA 00:04:18
2022-07-21 15:33:36 [INFO]  [TRAIN] epoch: 3, iter: 30/1000, loss: 0.5978, lr: 0.009739, batch_cost: 0.2628, reader_cost: 0.01122, ips: 7.6107 samples/sec | ETA 00:04:14
2022-07-21 15:33:39 [INFO]  [TRAIN] epoch: 4, iter: 40/1000, loss: 0.5446, lr: 0.009648, batch_cost: 0.2523, reader_cost: 0.00835, ips: 7.9258 samples/sec | ETA 00:04:02
2022-07-21 15:33:41 [INFO]  [TRAIN] epoch: 5, iter: 50/1000, loss: 0.4189, lr: 0.009558, batch_cost: 0.2666, reader_cost: 0.01063, ips: 7.5012 samples/sec | ETA 00:04:13
2022-07-21 15:33:44 [INFO]  [TRAIN] epoch: 5, iter: 60/1000, loss: 0.4695, lr: 0.009467, batch_cost: 0.2466, reader_cost: 0.00018, ips: 8.1087 samples/sec | ETA 00:03:51
2022-07-21 15:33:46 [INFO]  [TRAIN] epoch: 6, iter: 70/1000, loss: 0.4872, lr: 0.009377, batch_cost: 0.2601, reader_cost: 0.00963, ips: 7.6893 samples/sec | ETA 00:04:01
2022-07-21 15:33:49 [INFO]  [TRAIN] epoch: 7, iter: 80/1000, loss: 0.4103, lr: 0.009286, batch_cost: 0.2602, reader_cost: 0.00833, ips: 7.6863 samples/sec | ETA 00:03:59
2022-07-21 15:33:52 [INFO]  [TRAIN] epoch: 8, iter: 90/1000, loss: 0.4378, lr: 0.009195, batch_cost: 0.2549, reader_cost: 0.00888, ips: 7.8468 samples/sec | ETA 00:03:51
2022-07-21 15:33:54 [INFO]  [TRAIN] epoch: 9, iter: 100/1000, loss: 0.4017, lr: 0.009104, batch_cost: 0.2593, reader_cost: 0.00699, ips: 7.7136 samples/sec | ETA 00:03:53
2022-07-21 15:33:54 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 96ms/step - batch_cost: 0.0955 - reader cost: 0.00
2022-07-21 15:33:55 [INFO]  [EVAL] #Images: 4 mIoU: 0.3853 Acc: 0.7707 Kappa: 0.0000 Dice: 0.4352
2022-07-21 15:33:55 [INFO]  [EVAL] Class IoU:
[0.7707 0.    ]
2022-07-21 15:33:55 [INFO]  [EVAL] Class Acc:
[0.7707 0.    ]
2022-07-21 15:34:00 [INFO]  [EVAL] The model with the best validation mIoU (0.3853) was saved at iter 100.
2022-07-21 15:34:02 [INFO]  [TRAIN] epoch: 10, iter: 110/1000, loss: 0.5353, lr: 0.009013, batch_cost: 0.2572, reader_cost: 0.00663, ips: 7.7759 samples/sec | ETA 00:03:48
2022-07-21 15:34:05 [INFO]  [TRAIN] epoch: 10, iter: 120/1000, loss: 0.4664, lr: 0.008922, batch_cost: 0.2397, reader_cost: 0.00013, ips: 8.3440 samples/sec | ETA 00:03:30
2022-07-21 15:34:08 [INFO]  [TRAIN] epoch: 11, iter: 130/1000, loss: 0.5065, lr: 0.008831, batch_cost: 0.2674, reader_cost: 0.00935, ips: 7.4785 samples/sec | ETA 00:03:52
2022-07-21 15:34:10 [INFO]  [TRAIN] epoch: 12, iter: 140/1000, loss: 0.3433, lr: 0.008740, batch_cost: 0.2469, reader_cost: 0.00667, ips: 8.1013 samples/sec | ETA 00:03:32
2022-07-21 15:34:13 [INFO]  [TRAIN] epoch: 13, iter: 150/1000, loss: 0.3888, lr: 0.008648, batch_cost: 0.2565, reader_cost: 0.00821, ips: 7.7966 samples/sec | ETA 00:03:38
2022-07-21 15:34:15 [INFO]  [TRAIN] epoch: 14, iter: 160/1000, loss: 0.4190, lr: 0.008557, batch_cost: 0.2560, reader_cost: 0.00921, ips: 7.8119 samples/sec | ETA 00:03:35
2022-07-21 15:34:18 [INFO]  [TRAIN] epoch: 15, iter: 170/1000, loss: 0.3911, lr: 0.008465, batch_cost: 0.2449, reader_cost: 0.00631, ips: 8.1667 samples/sec | ETA 00:03:23
2022-07-21 15:34:20 [INFO]  [TRAIN] epoch: 15, iter: 180/1000, loss: 0.5541, lr: 0.008374, batch_cost: 0.2386, reader_cost: 0.00017, ips: 8.3812 samples/sec | ETA 00:03:15
2022-07-21 15:34:22 [INFO]  [TRAIN] epoch: 16, iter: 190/1000, loss: 0.4818, lr: 0.008282, batch_cost: 0.2526, reader_cost: 0.00770, ips: 7.9178 samples/sec | ETA 00:03:24
2022-07-21 15:34:25 [INFO]  [TRAIN] epoch: 17, iter: 200/1000, loss: 0.3490, lr: 0.008190, batch_cost: 0.2418, reader_cost: 0.00584, ips: 8.2705 samples/sec | ETA 00:03:13
2022-07-21 15:34:25 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 84ms/step - batch_cost: 0.0840 - reader cost: 0.00
2022-07-21 15:34:25 [INFO]  [EVAL] #Images: 4 mIoU: 0.3853 Acc: 0.7707 Kappa: 0.0000 Dice: 0.4352
2022-07-21 15:34:25 [INFO]  [EVAL] Class IoU:
[0.7707 0.    ]
2022-07-21 15:34:25 [INFO]  [EVAL] Class Acc:
[0.7707 0.    ]
2022-07-21 15:34:26 [INFO]  [EVAL] The model with the best validation mIoU (0.3853) was saved at iter 100.
2022-07-21 15:34:29 [INFO]  [TRAIN] epoch: 18, iter: 210/1000, loss: 0.4200, lr: 0.008098, batch_cost: 0.2453, reader_cost: 0.00803, ips: 8.1524 samples/sec | ETA 00:03:13
2022-07-21 15:34:31 [INFO]  [TRAIN] epoch: 19, iter: 220/1000, loss: 0.4336, lr: 0.008005, batch_cost: 0.2379, reader_cost: 0.00620, ips: 8.4075 samples/sec | ETA 00:03:05
2022-07-21 15:34:34 [INFO]  [TRAIN] epoch: 20, iter: 230/1000, loss: 0.3803, lr: 0.007913, batch_cost: 0.2410, reader_cost: 0.00539, ips: 8.2976 samples/sec | ETA 00:03:05
2022-07-21 15:34:36 [INFO]  [TRAIN] epoch: 20, iter: 240/1000, loss: 0.4228, lr: 0.007821, batch_cost: 0.2293, reader_cost: 0.00013, ips: 8.7236 samples/sec | ETA 00:02:54
2022-07-21 15:34:38 [INFO]  [TRAIN] epoch: 21, iter: 250/1000, loss: 0.3879, lr: 0.007728, batch_cost: 0.2432, reader_cost: 0.00616, ips: 8.2238 samples/sec | ETA 00:03:02
2022-07-21 15:34:41 [INFO]  [TRAIN] epoch: 22, iter: 260/1000, loss: 0.4500, lr: 0.007635, batch_cost: 0.2470, reader_cost: 0.00493, ips: 8.0988 samples/sec | ETA 00:03:02
2022-07-21 15:34:43 [INFO]  [TRAIN] epoch: 23, iter: 270/1000, loss: 0.3834, lr: 0.007543, batch_cost: 0.2335, reader_cost: 0.00494, ips: 8.5656 samples/sec | ETA 00:02:50
2022-07-21 15:34:45 [INFO]  [TRAIN] epoch: 24, iter: 280/1000, loss: 0.3129, lr: 0.007450, batch_cost: 0.2355, reader_cost: 0.00543, ips: 8.4912 samples/sec | ETA 00:02:49
2022-07-21 15:34:48 [INFO]  [TRAIN] epoch: 25, iter: 290/1000, loss: 0.3466, lr: 0.007357, batch_cost: 0.2498, reader_cost: 0.00824, ips: 8.0062 samples/sec | ETA 00:02:57
2022-07-21 15:34:50 [INFO]  [TRAIN] epoch: 25, iter: 300/1000, loss: 0.3158, lr: 0.007264, batch_cost: 0.2341, reader_cost: 0.00012, ips: 8.5420 samples/sec | ETA 00:02:43
2022-07-21 15:34:50 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 80ms/step - batch_cost: 0.0799 - reader cost: 0.00
2022-07-21 15:34:51 [INFO]  [EVAL] #Images: 4 mIoU: 0.6495 Acc: 0.8213 Kappa: 0.5665 Dice: 0.7801
2022-07-21 15:34:51 [INFO]  [EVAL] Class IoU:
[0.7782 0.5208]
2022-07-21 15:34:51 [INFO]  [EVAL] Class Acc:
[0.947  0.5749]
2022-07-21 15:34:54 [INFO]  [EVAL] The model with the best validation mIoU (0.6495) was saved at iter 300.
2022-07-21 15:34:56 [INFO]  [TRAIN] epoch: 26, iter: 310/1000, loss: 0.2964, lr: 0.007170, batch_cost: 0.2522, reader_cost: 0.00523, ips: 7.9295 samples/sec | ETA 00:02:54
2022-07-21 15:34:59 [INFO]  [TRAIN] epoch: 27, iter: 320/1000, loss: 0.3348, lr: 0.007077, batch_cost: 0.2440, reader_cost: 0.00552, ips: 8.1969 samples/sec | ETA 00:02:45
2022-07-21 15:35:01 [INFO]  [TRAIN] epoch: 28, iter: 330/1000, loss: 0.3446, lr: 0.006983, batch_cost: 0.2368, reader_cost: 0.00886, ips: 8.4456 samples/sec | ETA 00:02:38
2022-07-21 15:35:04 [INFO]  [TRAIN] epoch: 29, iter: 340/1000, loss: 0.2897, lr: 0.006889, batch_cost: 0.2354, reader_cost: 0.00589, ips: 8.4950 samples/sec | ETA 00:02:35
2022-07-21 15:35:06 [INFO]  [TRAIN] epoch: 30, iter: 350/1000, loss: 0.3283, lr: 0.006796, batch_cost: 0.2342, reader_cost: 0.00934, ips: 8.5409 samples/sec | ETA 00:02:32
2022-07-21 15:35:08 [INFO]  [TRAIN] epoch: 30, iter: 360/1000, loss: 0.3124, lr: 0.006702, batch_cost: 0.2252, reader_cost: 0.00010, ips: 8.8795 samples/sec | ETA 00:02:24
2022-07-21 15:35:11 [INFO]  [TRAIN] epoch: 31, iter: 370/1000, loss: 0.3253, lr: 0.006607, batch_cost: 0.2446, reader_cost: 0.00624, ips: 8.1764 samples/sec | ETA 00:02:34
2022-07-21 15:35:13 [INFO]  [TRAIN] epoch: 32, iter: 380/1000, loss: 0.2911, lr: 0.006513, batch_cost: 0.2429, reader_cost: 0.00599, ips: 8.2346 samples/sec | ETA 00:02:30
2022-07-21 15:35:16 [INFO]  [TRAIN] epoch: 33, iter: 390/1000, loss: 0.2778, lr: 0.006419, batch_cost: 0.2477, reader_cost: 0.00762, ips: 8.0753 samples/sec | ETA 00:02:31
2022-07-21 15:35:18 [INFO]  [TRAIN] epoch: 34, iter: 400/1000, loss: 0.3425, lr: 0.006324, batch_cost: 0.2425, reader_cost: 0.00661, ips: 8.2472 samples/sec | ETA 00:02:25
2022-07-21 15:35:18 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 81ms/step - batch_cost: 0.0807 - reader cost: 0.00
2022-07-21 15:35:18 [INFO]  [EVAL] #Images: 4 mIoU: 0.5487 Acc: 0.7262 Kappa: 0.4482 Dice: 0.7033
2022-07-21 15:35:18 [INFO]  [EVAL] Class IoU:
[0.6471 0.4503]
2022-07-21 15:35:18 [INFO]  [EVAL] Class Acc:
[0.99   0.4549]
2022-07-21 15:35:19 [INFO]  [EVAL] The model with the best validation mIoU (0.6495) was saved at iter 300.
2022-07-21 15:35:22 [INFO]  [TRAIN] epoch: 35, iter: 410/1000, loss: 0.3291, lr: 0.006229, batch_cost: 0.2394, reader_cost: 0.00721, ips: 8.3545 samples/sec | ETA 00:02:21
2022-07-21 15:35:24 [INFO]  [TRAIN] epoch: 35, iter: 420/1000, loss: 0.3165, lr: 0.006134, batch_cost: 0.2390, reader_cost: 0.00012, ips: 8.3684 samples/sec | ETA 00:02:18
2022-07-21 15:35:27 [INFO]  [TRAIN] epoch: 36, iter: 430/1000, loss: 0.2764, lr: 0.006039, batch_cost: 0.2482, reader_cost: 0.00726, ips: 8.0568 samples/sec | ETA 00:02:21
2022-07-21 15:35:29 [INFO]  [TRAIN] epoch: 37, iter: 440/1000, loss: 0.2465, lr: 0.005944, batch_cost: 0.2427, reader_cost: 0.00701, ips: 8.2410 samples/sec | ETA 00:02:15
2022-07-21 15:35:31 [INFO]  [TRAIN] epoch: 38, iter: 450/1000, loss: 0.4015, lr: 0.005848, batch_cost: 0.2437, reader_cost: 0.00596, ips: 8.2053 samples/sec | ETA 00:02:14
2022-07-21 15:35:34 [INFO]  [TRAIN] epoch: 39, iter: 460/1000, loss: 0.2761, lr: 0.005753, batch_cost: 0.2392, reader_cost: 0.00912, ips: 8.3600 samples/sec | ETA 00:02:09
2022-07-21 15:35:36 [INFO]  [TRAIN] epoch: 40, iter: 470/1000, loss: 0.3243, lr: 0.005657, batch_cost: 0.2371, reader_cost: 0.00578, ips: 8.4358 samples/sec | ETA 00:02:05
2022-07-21 15:35:38 [INFO]  [TRAIN] epoch: 40, iter: 480/1000, loss: 0.2901, lr: 0.005561, batch_cost: 0.2303, reader_cost: 0.00012, ips: 8.6862 samples/sec | ETA 00:01:59
2022-07-21 15:35:41 [INFO]  [TRAIN] epoch: 41, iter: 490/1000, loss: 0.2666, lr: 0.005465, batch_cost: 0.2508, reader_cost: 0.00786, ips: 7.9742 samples/sec | ETA 00:02:07
2022-07-21 15:35:43 [INFO]  [TRAIN] epoch: 42, iter: 500/1000, loss: 0.2541, lr: 0.005369, batch_cost: 0.2439, reader_cost: 0.00539, ips: 8.2018 samples/sec | ETA 00:02:01
2022-07-21 15:35:43 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 85ms/step - batch_cost: 0.0853 - reader cost: 0.00
2022-07-21 15:35:44 [INFO]  [EVAL] #Images: 4 mIoU: 0.7347 Acc: 0.8851 Kappa: 0.6822 Dice: 0.8411
2022-07-21 15:35:44 [INFO]  [EVAL] Class IoU:
[0.8599 0.6096]
2022-07-21 15:35:44 [INFO]  [EVAL] Class Acc:
[0.934  0.7339]
2022-07-21 15:35:49 [INFO]  [EVAL] The model with the best validation mIoU (0.7347) was saved at iter 500.
2022-07-21 15:35:52 [INFO]  [TRAIN] epoch: 43, iter: 510/1000, loss: 0.2376, lr: 0.005272, batch_cost: 0.2428, reader_cost: 0.00824, ips: 8.2381 samples/sec | ETA 00:01:58
2022-07-21 15:35:54 [INFO]  [TRAIN] epoch: 44, iter: 520/1000, loss: 0.2546, lr: 0.005175, batch_cost: 0.2389, reader_cost: 0.00604, ips: 8.3713 samples/sec | ETA 00:01:54
2022-07-21 15:35:56 [INFO]  [TRAIN] epoch: 45, iter: 530/1000, loss: 0.2518, lr: 0.005078, batch_cost: 0.2427, reader_cost: 0.00799, ips: 8.2395 samples/sec | ETA 00:01:54
2022-07-21 15:35:59 [INFO]  [TRAIN] epoch: 45, iter: 540/1000, loss: 0.2570, lr: 0.004981, batch_cost: 0.2338, reader_cost: 0.00012, ips: 8.5554 samples/sec | ETA 00:01:47
2022-07-21 15:36:01 [INFO]  [TRAIN] epoch: 46, iter: 550/1000, loss: 0.2536, lr: 0.004884, batch_cost: 0.2498, reader_cost: 0.00731, ips: 8.0063 samples/sec | ETA 00:01:52
2022-07-21 15:36:04 [INFO]  [TRAIN] epoch: 47, iter: 560/1000, loss: 0.2203, lr: 0.004786, batch_cost: 0.2440, reader_cost: 0.00544, ips: 8.1966 samples/sec | ETA 00:01:47
2022-07-21 15:36:06 [INFO]  [TRAIN] epoch: 48, iter: 570/1000, loss: 0.2542, lr: 0.004688, batch_cost: 0.2417, reader_cost: 0.00752, ips: 8.2763 samples/sec | ETA 00:01:43
2022-07-21 15:36:08 [INFO]  [TRAIN] epoch: 49, iter: 580/1000, loss: 0.2159, lr: 0.004590, batch_cost: 0.2426, reader_cost: 0.00877, ips: 8.2435 samples/sec | ETA 00:01:41
2022-07-21 15:36:11 [INFO]  [TRAIN] epoch: 50, iter: 590/1000, loss: 0.2217, lr: 0.004492, batch_cost: 0.2439, reader_cost: 0.00557, ips: 8.2003 samples/sec | ETA 00:01:39
2022-07-21 15:36:13 [INFO]  [TRAIN] epoch: 50, iter: 600/1000, loss: 0.1788, lr: 0.004394, batch_cost: 0.2390, reader_cost: 0.00014, ips: 8.3679 samples/sec | ETA 00:01:35
2022-07-21 15:36:13 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 86ms/step - batch_cost: 0.0858 - reader cost: 0.00
2022-07-21 15:36:14 [INFO]  [EVAL] #Images: 4 mIoU: 0.7769 Acc: 0.9038 Kappa: 0.7417 Dice: 0.8706
2022-07-21 15:36:14 [INFO]  [EVAL] Class IoU:
[0.8799 0.6739]
2022-07-21 15:36:14 [INFO]  [EVAL] Class Acc:
[0.9586 0.7515]
2022-07-21 15:36:26 [INFO]  [EVAL] The model with the best validation mIoU (0.7769) was saved at iter 600.
2022-07-21 15:36:28 [INFO]  [TRAIN] epoch: 51, iter: 610/1000, loss: 0.2435, lr: 0.004295, batch_cost: 0.2491, reader_cost: 0.00597, ips: 8.0276 samples/sec | ETA 00:01:37
2022-07-21 15:36:31 [INFO]  [TRAIN] epoch: 52, iter: 620/1000, loss: 0.2067, lr: 0.004196, batch_cost: 0.2428, reader_cost: 0.00590, ips: 8.2359 samples/sec | ETA 00:01:32
2022-07-21 15:36:33 [INFO]  [TRAIN] epoch: 53, iter: 630/1000, loss: 0.2416, lr: 0.004097, batch_cost: 0.2429, reader_cost: 0.00728, ips: 8.2350 samples/sec | ETA 00:01:29
2022-07-21 15:36:35 [INFO]  [TRAIN] epoch: 54, iter: 640/1000, loss: 0.2269, lr: 0.003997, batch_cost: 0.2423, reader_cost: 0.00765, ips: 8.2538 samples/sec | ETA 00:01:27
2022-07-21 15:36:38 [INFO]  [TRAIN] epoch: 55, iter: 650/1000, loss: 0.2244, lr: 0.003897, batch_cost: 0.2497, reader_cost: 0.00834, ips: 8.0093 samples/sec | ETA 00:01:27
2022-07-21 15:36:40 [INFO]  [TRAIN] epoch: 55, iter: 660/1000, loss: 0.2318, lr: 0.003797, batch_cost: 0.2297, reader_cost: 0.00012, ips: 8.7086 samples/sec | ETA 00:01:18
2022-07-21 15:36:43 [INFO]  [TRAIN] epoch: 56, iter: 670/1000, loss: 0.2207, lr: 0.003697, batch_cost: 0.2442, reader_cost: 0.00545, ips: 8.1891 samples/sec | ETA 00:01:20
2022-07-21 15:36:45 [INFO]  [TRAIN] epoch: 57, iter: 680/1000, loss: 0.1869, lr: 0.003596, batch_cost: 0.2457, reader_cost: 0.00829, ips: 8.1416 samples/sec | ETA 00:01:18
2022-07-21 15:36:48 [INFO]  [TRAIN] epoch: 58, iter: 690/1000, loss: 0.1832, lr: 0.003495, batch_cost: 0.2387, reader_cost: 0.00707, ips: 8.3786 samples/sec | ETA 00:01:13
2022-07-21 15:36:50 [INFO]  [TRAIN] epoch: 59, iter: 700/1000, loss: 0.2233, lr: 0.003394, batch_cost: 0.2403, reader_cost: 0.00913, ips: 8.3218 samples/sec | ETA 00:01:12
2022-07-21 15:36:50 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 83ms/step - batch_cost: 0.0830 - reader cost: 0.00
2022-07-21 15:36:50 [INFO]  [EVAL] #Images: 4 mIoU: 0.7004 Acc: 0.8578 Kappa: 0.6376 Dice: 0.8176
2022-07-21 15:36:50 [INFO]  [EVAL] Class IoU:
[0.8235 0.5773]
2022-07-21 15:36:50 [INFO]  [EVAL] Class Acc:
[0.9498 0.6445]
2022-07-21 15:36:59 [INFO]  [EVAL] The model with the best validation mIoU (0.7769) was saved at iter 600.
2022-07-21 15:37:01 [INFO]  [TRAIN] epoch: 60, iter: 710/1000, loss: 0.1831, lr: 0.003292, batch_cost: 0.2468, reader_cost: 0.00728, ips: 8.1028 samples/sec | ETA 00:01:11
2022-07-21 15:37:03 [INFO]  [TRAIN] epoch: 60, iter: 720/1000, loss: 0.2241, lr: 0.003190, batch_cost: 0.2288, reader_cost: 0.00011, ips: 8.7428 samples/sec | ETA 00:01:04
2022-07-21 15:37:06 [INFO]  [TRAIN] epoch: 61, iter: 730/1000, loss: 0.1621, lr: 0.003088, batch_cost: 0.2447, reader_cost: 0.00752, ips: 8.1721 samples/sec | ETA 00:01:06
2022-07-21 15:37:08 [INFO]  [TRAIN] epoch: 62, iter: 740/1000, loss: 0.2119, lr: 0.002985, batch_cost: 0.2364, reader_cost: 0.00625, ips: 8.4585 samples/sec | ETA 00:01:01
2022-07-21 15:37:11 [INFO]  [TRAIN] epoch: 63, iter: 750/1000, loss: 0.1956, lr: 0.002882, batch_cost: 0.2370, reader_cost: 0.00552, ips: 8.4371 samples/sec | ETA 00:00:59
2022-07-21 15:37:13 [INFO]  [TRAIN] epoch: 64, iter: 760/1000, loss: 0.1423, lr: 0.002779, batch_cost: 0.2424, reader_cost: 0.00903, ips: 8.2512 samples/sec | ETA 00:00:58
2022-07-21 15:37:15 [INFO]  [TRAIN] epoch: 65, iter: 770/1000, loss: 0.1720, lr: 0.002675, batch_cost: 0.2338, reader_cost: 0.00574, ips: 8.5546 samples/sec | ETA 00:00:53
2022-07-21 15:37:18 [INFO]  [TRAIN] epoch: 65, iter: 780/1000, loss: 0.1781, lr: 0.002570, batch_cost: 0.2306, reader_cost: 0.00010, ips: 8.6724 samples/sec | ETA 00:00:50
2022-07-21 15:37:20 [INFO]  [TRAIN] epoch: 66, iter: 790/1000, loss: 0.1906, lr: 0.002465, batch_cost: 0.2390, reader_cost: 0.00637, ips: 8.3688 samples/sec | ETA 00:00:50
2022-07-21 15:37:22 [INFO]  [TRAIN] epoch: 67, iter: 800/1000, loss: 0.1710, lr: 0.002360, batch_cost: 0.2419, reader_cost: 0.00617, ips: 8.2681 samples/sec | ETA 00:00:48
2022-07-21 15:37:22 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 80ms/step - batch_cost: 0.0803 - reader cost: 0.00
2022-07-21 15:37:23 [INFO]  [EVAL] #Images: 4 mIoU: 0.7481 Acc: 0.8950 Kappa: 0.7000 Dice: 0.8500
2022-07-21 15:37:23 [INFO]  [EVAL] Class IoU:
[0.873  0.6231]
2022-07-21 15:37:23 [INFO]  [EVAL] Class Acc:
[0.9283 0.7791]
2022-07-21 15:37:31 [INFO]  [EVAL] The model with the best validation mIoU (0.7769) was saved at iter 600.
2022-07-21 15:37:34 [INFO]  [TRAIN] epoch: 68, iter: 810/1000, loss: 0.1725, lr: 0.002254, batch_cost: 0.2433, reader_cost: 0.00563, ips: 8.2203 samples/sec | ETA 00:00:46
2022-07-21 15:37:36 [INFO]  [TRAIN] epoch: 69, iter: 820/1000, loss: 0.1774, lr: 0.002147, batch_cost: 0.2470, reader_cost: 0.00742, ips: 8.0962 samples/sec | ETA 00:00:44
2022-07-21 15:37:39 [INFO]  [TRAIN] epoch: 70, iter: 830/1000, loss: 0.1750, lr: 0.002040, batch_cost: 0.2440, reader_cost: 0.00549, ips: 8.1960 samples/sec | ETA 00:00:41
2022-07-21 15:37:41 [INFO]  [TRAIN] epoch: 70, iter: 840/1000, loss: 0.1889, lr: 0.001933, batch_cost: 0.2264, reader_cost: 0.00009, ips: 8.8323 samples/sec | ETA 00:00:36
2022-07-21 15:37:43 [INFO]  [TRAIN] epoch: 71, iter: 850/1000, loss: 0.1751, lr: 0.001824, batch_cost: 0.2399, reader_cost: 0.00840, ips: 8.3354 samples/sec | ETA 00:00:35
2022-07-21 15:37:46 [INFO]  [TRAIN] epoch: 72, iter: 860/1000, loss: 0.1682, lr: 0.001715, batch_cost: 0.2415, reader_cost: 0.00709, ips: 8.2819 samples/sec | ETA 00:00:33
2022-07-21 15:37:48 [INFO]  [TRAIN] epoch: 73, iter: 870/1000, loss: 0.1540, lr: 0.001605, batch_cost: 0.2422, reader_cost: 0.00681, ips: 8.2560 samples/sec | ETA 00:00:31
2022-07-21 15:37:51 [INFO]  [TRAIN] epoch: 74, iter: 880/1000, loss: 0.1710, lr: 0.001495, batch_cost: 0.2359, reader_cost: 0.00514, ips: 8.4779 samples/sec | ETA 00:00:28
2022-07-21 15:37:53 [INFO]  [TRAIN] epoch: 75, iter: 890/1000, loss: 0.1636, lr: 0.001383, batch_cost: 0.2459, reader_cost: 0.00781, ips: 8.1335 samples/sec | ETA 00:00:27
2022-07-21 15:37:55 [INFO]  [TRAIN] epoch: 75, iter: 900/1000, loss: 0.1928, lr: 0.001270, batch_cost: 0.2320, reader_cost: 0.00011, ips: 8.6192 samples/sec | ETA 00:00:23
2022-07-21 15:37:55 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 95ms/step - batch_cost: 0.0946 - reader cost: 0.00
2022-07-21 15:37:56 [INFO]  [EVAL] #Images: 4 mIoU: 0.7236 Acc: 0.8771 Kappa: 0.6672 Dice: 0.8334
2022-07-21 15:37:56 [INFO]  [EVAL] Class IoU:
[0.8496 0.5976]
2022-07-21 15:37:56 [INFO]  [EVAL] Class Acc:
[0.9369 0.7056]
2022-07-21 15:38:04 [INFO]  [EVAL] The model with the best validation mIoU (0.7769) was saved at iter 600.
2022-07-21 15:38:07 [INFO]  [TRAIN] epoch: 76, iter: 910/1000, loss: 0.1375, lr: 0.001156, batch_cost: 0.2477, reader_cost: 0.00589, ips: 8.0752 samples/sec | ETA 00:00:22
2022-07-21 15:38:09 [INFO]  [TRAIN] epoch: 77, iter: 920/1000, loss: 0.1397, lr: 0.001041, batch_cost: 0.2499, reader_cost: 0.00850, ips: 8.0022 samples/sec | ETA 00:00:19
2022-07-21 15:38:12 [INFO]  [TRAIN] epoch: 78, iter: 930/1000, loss: 0.1662, lr: 0.000925, batch_cost: 0.2375, reader_cost: 0.00591, ips: 8.4227 samples/sec | ETA 00:00:16
2022-07-21 15:38:14 [INFO]  [TRAIN] epoch: 79, iter: 940/1000, loss: 0.1451, lr: 0.000807, batch_cost: 0.2362, reader_cost: 0.00529, ips: 8.4658 samples/sec | ETA 00:00:14
2022-07-21 15:38:16 [INFO]  [TRAIN] epoch: 80, iter: 950/1000, loss: 0.1618, lr: 0.000687, batch_cost: 0.2420, reader_cost: 0.00812, ips: 8.2633 samples/sec | ETA 00:00:12
2022-07-21 15:38:19 [INFO]  [TRAIN] epoch: 80, iter: 960/1000, loss: 0.1670, lr: 0.000564, batch_cost: 0.2295, reader_cost: 0.00011, ips: 8.7164 samples/sec | ETA 00:00:09
2022-07-21 15:38:21 [INFO]  [TRAIN] epoch: 81, iter: 970/1000, loss: 0.1384, lr: 0.000439, batch_cost: 0.2429, reader_cost: 0.00722, ips: 8.2351 samples/sec | ETA 00:00:07
2022-07-21 15:38:24 [INFO]  [TRAIN] epoch: 82, iter: 980/1000, loss: 0.1480, lr: 0.000309, batch_cost: 0.2453, reader_cost: 0.00506, ips: 8.1523 samples/sec | ETA 00:00:04
2022-07-21 15:38:26 [INFO]  [TRAIN] epoch: 83, iter: 990/1000, loss: 0.1794, lr: 0.000173, batch_cost: 0.2435, reader_cost: 0.00473, ips: 8.2122 samples/sec | ETA 00:00:02
2022-07-21 15:38:29 [INFO]  [TRAIN] epoch: 84, iter: 1000/1000, loss: 0.1583, lr: 0.000020, batch_cost: 0.2478, reader_cost: 0.00836, ips: 8.0724 samples/sec | ETA 00:00:00
2022-07-21 15:38:29 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 0s 89ms/step - batch_cost: 0.0893 - reader cost: 0.00
2022-07-21 15:38:29 [INFO]  [EVAL] #Images: 4 mIoU: 0.7597 Acc: 0.8990 Kappa: 0.7167 Dice: 0.8584
2022-07-21 15:38:29 [INFO]  [EVAL] Class IoU:
[0.8766 0.6427]
2022-07-21 15:38:29 [INFO]  [EVAL] Class Acc:
[0.9376 0.7733]
2022-07-21 15:38:38 [INFO]  [EVAL] The model with the best validation mIoU (0.7769) was saved at iter 600.
<class 'paddle.nn.layer.conv.Conv2D'>'s flops has been counted
<class 'paddle.nn.layer.norm.BatchNorm2D'>'s flops has been counted
<class 'paddle.nn.layer.activation.ReLU'>'s flops has been counted
Cannot find suitable count function for <class 'paddleseg.models.layers.wrap_functions.Add'>. Treat it as zero FLOPs.
/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#deprecationsif data.dtype == np.object:
Total Flops: 93548011520     Total Params: 65932658

五、模型评估

模型评估
在小型的铁路数据集上对测试集进行综合评估,评价指标结果如下

本次比赛使用IoU曲线作为评价指标,即利用预测的目标的定位概率图,计算不同阈值下预测结果与真实目标之间的IoU分数,最后取一个最高点作为最终的分数。在理想状态下,IoU曲线最高值接近1.0,对应的阈值为255,因为阈值越高,目标对象与背景的对比度越高。准确率的含义是预测类别正确的像素数占总像素数的比例。变量kappa决定了近邻像素间边的相对权重。Dice系数是一种集合相似度度量函数,通常用于计算两个样本的相似度,取值为[0,1]。

上述指标的结果如下所示:
mIoU: 0.7769

Acc: 0.9038

Kappa: 0.7417

Dice: 0.8706

#config为配置文件的设置,model_path是模型参数数文件,可以根据自己的需要选择模型参数
!python PaddleSeg/val.py \--config mynet.yml \--model_path output/best_model/model.pdparams
2022-07-21 15:39:36 [INFO]
---------------Config Information---------------
batch_size: 2
iters: 1000
loss:coef:- 1types:- type: CrossEntropyLoss
lr_scheduler:end_lr: 0learning_rate: 0.01power: 0.9type: PolynomialDecay
model:backbone:pretrained: https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gztype: HRNet_W48backbone_indices:- -1num_classes: 2pretrained: nulltype: FCN
optimizer:momentum: 0.9type: sgdweight_decay: 0.0005
train_dataset:dataset_root: /home/aistudiomode: trainnum_classes: 2train_path: train.txttransforms:- max_scale_factor: 2.0min_scale_factor: 0.5scale_step_size: 0.25type: ResizeStepScaling- crop_size:- 512- 512type: RandomPaddingCrop- type: RandomHorizontalFlip- brightness_range: 0.4contrast_range: 0.4saturation_range: 0.4type: RandomDistort- type: Normalizetype: Dataset
val_dataset:dataset_root: /home/aistudiomode: valnum_classes: 2transforms:- type: Normalizetype: Datasetval_path: eval.txt
------------------------------------------------
W0721 15:39:36.640465  1308 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0721 15:39:36.640496  1308 device_context.cc:465] device: 0, cuDNN Version: 7.6.
2022-07-21 15:39:39 [INFO]  Loading pretrained model from https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gz
2022-07-21 15:39:43 [INFO]  There are 1525/1525 variables loaded into HRNet.
2022-07-21 15:39:43 [INFO]  Loading pretrained model from output/best_model/model.pdparams
2022-07-21 15:39:44 [INFO]  There are 1533/1533 variables loaded into FCN.
2022-07-21 15:39:44 [INFO]  Loaded trained params of model successfully
2022-07-21 15:39:44 [INFO]  Start evaluating (total_samples: 4, total_iters: 4)...
4/4 [==============================] - 1s 192ms/step - batch_cost: 0.1915 - reader cost: 0.102
2022-07-21 15:39:45 [INFO]  [EVAL] #Images: 4 mIoU: 0.7769 Acc: 0.9038 Kappa: 0.7417 Dice: 0.8706
2022-07-21 15:39:45 [INFO]  [EVAL] Class IoU:
[0.8799 0.6739]
2022-07-21 15:39:45 [INFO]  [EVAL] Class Acc:
[0.9586 0.7515]

六、模型预测

预测

!python PaddleSeg/predict.py \--config mynet.yml \--model_path output/best_model/model.pdparams \--image_path work/train/dataset/images1/railway_041.png \--save_dir output/result #这里对work/Line/0114目录下的图片进行预测,结果保存在output/result目录下,要注意匹配配置文件和模型参数还有待处理图片的路径import cv2
mask = cv2.imread('output/result/added_prediction/railway_041.png')
#用matplotlib将图片展示出来
# plt.subplot(3, 2, 1)
plt.imshow(mask)
plt.title('Image')
# plt.axis("off")
2022-07-21 15:43:16 [INFO]
---------------Config Information---------------
batch_size: 2
iters: 1000
loss:coef:- 1types:- type: CrossEntropyLoss
lr_scheduler:end_lr: 0learning_rate: 0.01power: 0.9type: PolynomialDecay
model:backbone:pretrained: https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gztype: HRNet_W48backbone_indices:- -1num_classes: 2pretrained: nulltype: FCN
optimizer:momentum: 0.9type: sgdweight_decay: 0.0005
train_dataset:dataset_root: /home/aistudiomode: trainnum_classes: 2train_path: train.txttransforms:- max_scale_factor: 2.0min_scale_factor: 0.5scale_step_size: 0.25type: ResizeStepScaling- crop_size:- 512- 512type: RandomPaddingCrop- type: RandomHorizontalFlip- brightness_range: 0.4contrast_range: 0.4saturation_range: 0.4type: RandomDistort- type: Normalizetype: Dataset
val_dataset:dataset_root: /home/aistudiomode: valnum_classes: 2transforms:- type: Normalizetype: Datasetval_path: eval.txt
------------------------------------------------
W0721 15:43:16.770813  1529 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0721 15:43:16.770848  1529 device_context.cc:465] device: 0, cuDNN Version: 7.6.
2022-07-21 15:43:20 [INFO]  Loading pretrained model from https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gz
2022-07-21 15:43:23 [INFO]  There are 1525/1525 variables loaded into HRNet.
2022-07-21 15:43:23 [INFO]  Number of predict images = 1
2022-07-21 15:43:23 [INFO]  Loading pretrained model from output/best_model/model.pdparams
2022-07-21 15:43:24 [INFO]  There are 1533/1533 variables loaded into FCN.
2022-07-21 15:43:24 [INFO]  Start to predict...
1/1 [==============================] - 0s 132ms/stepText(0.5,1,'Image')

七、结果可视化

#展示效果看不清的话可以根据代码中的路径找到文件所在位置
import cv2
#work/Line2/line2/railway_100_json
image = cv2.imread('work/train/dataset/images1/railway_041.png')
label = cv2.imread('work/train/dataset/masks1/railway_041.png')
# label_viz = cv2.imread('work/Line2/line2/railway_100_json/label_viz.png')
predict = cv2.imread('output/result/pseudo_color_prediction/railway_041.png')
import cv2
mask = cv2.imread('output/result/added_prediction/railway_041.png')#用matplotlib将图片展示出来
plt.subplot(3, 2, 1)
plt.imshow(image)
plt.title('Input Image')
plt.axis("off")plt.subplot(3, 2, 2)
plt.imshow(label, cmap='gray')
plt.title('Label')
plt.axis("off")# plt.subplot(3, 2, 3)
# plt.imshow(label_viz, cmap='gray')
# plt.title('Label_viz')
# plt.axis("off")plt.subplot(3, 2, 3)
plt.imshow(predict, cmap='gray')
plt.title('Predict')
plt.axis("off")plt.subplot(3, 2, 4)
plt.imshow(mask, cmap='gray')
plt.title('Mask')
y')
plt.title('Label')
plt.axis("off")# plt.subplot(3, 2, 3)
# plt.imshow(label_viz, cmap='gray')
# plt.title('Label_viz')
# plt.axis("off")plt.subplot(3, 2, 3)
plt.imshow(predict, cmap='gray')
plt.title('Predict')
plt.axis("off")plt.subplot(3, 2, 4)
plt.imshow(mask, cmap='gray')
plt.title('Mask')
plt.axis("off")
(-0.5, 255.5, 255.5, -0.5)

声明

此项目为搬运
原项目链接

使用标注工具Labelme和PaddleSeg实现铁路的图像分割相关推荐

  1. 标注工具—labelme, label-studio

    标注工具 一.Labelme 安装 使用 导出 二.label-studio 简介 安装 使用 例子 总结 最近在学习使用标注工具,图像领域比较知名的标注工具如labelme,最近又发现了一款十分好用 ...

  2. php+在线文本标注,通用文本标注工具 labelme

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者: 理查德 导语: 一个支持文本类目标注和关键词打分的通用标注工具,为文本分类模型和关键词抽取任务提供训练和测试数据.-- by 慕福楠 ...

  3. 深度学习图像标注工具labelme

    来源:极客Merry 前言 在深度学习中若是没有带标注的数据,这可能会阻碍研究的进展,所以深度学习第一步就是制作数据集,手动去标注一些数据.LabelMe就是这样一个在线的图像数据标注工具: Labe ...

  4. 安装图像标注工具Labelme并使用其制作自己的数据集

    参考:https://blog.csdn.net/zong596568821xp/article/details/83375227 官方教程:https://github.com/wkentaro/l ...

  5. 语义分割标注工具——labelme

    参考下面网址: 感谢up主:https://www.bilibili.com/video/BV1xT4y1j7A9?from=search&seid=2903997967250679674 在 ...

  6. 图像数据标注工具labelme使用教程

    参考教程: https://github.com/wkentaro/labelme https://blog.csdn.net/ZYhhhh233/article/details/80278293 h ...

  7. 标注工具 labelme安装及使用 Win10

    Github上面有官方教程,我的下载过程供大家参考 Github链接:https://github.com/wkentaro/labelme anaconda安装及下载,创建环境 在使用labelme ...

  8. 目标检测 数据集—标注工具 labelImg/labelme

    版权声明:转载请说明来源,谢谢 https://blog.csdn.net/wsp_1138886114/article/details/85017498 文章目录 一.使用 LabelImg生成目标 ...

  9. 深度学习中图像标注工具整理

    在某些特定图像处理任务中,开源数据集往往并不能完全满足要求,需要制定数据集,来完成检测或者分割任务,接下来介绍几款用的比较多的标注工具. 图像检测标注工具 labelImg labelImg支持Win ...

最新文章

  1. 华为ac配置radius认证服务器_合作生态 | 升腾威讯云系统与华为泰山服务器完成产品互认证...
  2. WPF实现环(圆)形进度条
  3. 正则表达式与python re
  4. 机器学习(1)PLA
  5. HDU2203 亲和串【字符串】
  6. CCLayer中Touch事件(Standard Touch Delegate Targeted Touch Delegate)
  7. Android PDF文件阅读方案
  8. 送给前端的干货 ,绝对经典的学习资料大全,js框架,css
  9. 微信公众号问题:{errcode:40125,errmsg:invalid appsecret, view more at http:\/\/t.cn\/LOEdzVq, hints: [ ...
  10. kali 基于虚拟机下载
  11. 用Python自制随机点名程序,压迫感来了~
  12. 服务器被攻击网站打不开解决方案
  13. 第一位让我敬佩的学者张维迎
  14. 计算机考研要考java吗_计算机二级考JAVA还是C?
  15. Qlikview+nPrinting
  16. 水果小买卖c语言,C语言排序(1)___水果销售
  17. K2 工作流_携手捷普:让流程立于云端,臻于至上_全球领先的工作流引擎
  18. 王爽汇编语言 实验5
  19. Android 第五章 TextView
  20. 蓝牙协议栈(六、芯片组)

热门文章

  1. html中小三角怎么打出来,css实现小三角(原理)
  2. IDEA的安装、配置与使用详解
  3. GBase 8a 部署(8.6)
  4. vivox21升级鸿蒙,vivo X21刷机教程_vivo X21A卡刷升级更新官方系统包
  5. 测试小故事75:角色
  6. 《乐高EV3机器人搭建与编程》一2.5 可循环充电锂电池
  7. sql查询字符串截取方法
  8. 编写一个递归算法,找出从自然数1,2,3,…,n中任取r个数的所有组合。例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321。
  9. 介绍一个产品的思维导图_什么叫产品思维导图(产品思维的定义)
  10. CodeBlock 基本使用 与 设置断点和单步调试方法 与生活标准普尔图