当前位置:   article > 正文

安装paddleSeq2.7.0版本模块-笔记_anaconda-project 0.11.1 requires ruamel-yaml, whic

anaconda-project 0.11.1 requires ruamel-yaml, which is not installed.

安装paddleSeq2.7.0版本模块-笔记

安装conda和python版本
本机安装的conda 22.9.0
python2.9.12
paddle2.4.2
paddlepaddle-gpu==2.4.2 cuda10.2
安装matplotlib3.5.0版本
opencv_python-4.5.4.60-cp39-cp39-win_amd64.whl

测试采用分割模型名称:BiSeNetv2

#BiSeNetv2保证速度的同时,也能保证精度
#2020年,相关学者基于可实现实时语义分割的双向网络BiSeNet(Bilateral Segmentation Network),
# 建设性地提出了BiSeNetv2,# 以期望获得更好的语义分割精度。
# 通常来说,语义分割任务既需要低级细节,也需要高级语义。
# 就目前的语义分割模型而言,于精度相比,更多的是追求速度,因此存在着一定缺陷。
# 而BiSeNetv2则是两方兼顾且行之有效的语义分割模型。
#(Bilateral Segmentation Network) 双边分割网络
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

测试分割结果图效果如下所示:
左图为分割结果图,中间图是分割后合成图,右图是测试的原图

在这里插入图片描述
在这里插入图片描述

一、第一步先激活环境
conda activate base

conda activate base
  • 1

安装完paddleSeq后要关闭conda激活环境
conda deactivate

conda deactivate
  • 1

二、第二步安装paddleSeq版本
本机选择安装paddleSeq2.7.0版本安装没有冲突OK
(base) D:\ProgramData\Anaconda3>pip install PaddleSeg==2.7.0
(base) D:\ProgramData\Anaconda3>

(base) D:\ProgramData\Anaconda3>pip install PaddleSeg==2.7.0
(base) D:\ProgramData\Anaconda3>
  • 1
  • 2

升级protobuf==3.20.0为3.20.0
(base) D:\ProgramData\Anaconda3>pip install protobuf==3.20.0

(base) D:\ProgramData\Anaconda3>pip install protobuf==3.20.0
Collecting protobuf==3.20.0
  Downloading protobuf-3.20.0-cp39-cp39-win_amd64.whl (904 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 904.1/904.1 kB 510.8 kB/s eta 0:00:00
Installing collected packages: protobuf
  Attempting uninstall: protobuf
    Found existing installation: protobuf 3.19.0
    Uninstalling protobuf-3.19.0:
      Successfully uninstalled protobuf-3.19.0
Successfully installed protobuf-3.20.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
  • 1
  • 2
  • 3

默认安装paddleSeq最新版2.8.0时有版本冲突问题,如下所示:

(base) D:\ProgramData\Anaconda3>pip install PaddleSeg
  • 1
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
anaconda-project 0.11.1 requires ruamel-yaml, which is not installed.
paddlepaddle-gpu 2.4.2 requires protobuf<=3.20.0,>=3.1.0, but you have protobuf 4.24.0 which is incompatible.
conda-repo-cli 1.0.20 requires clyent==1.2.1, but you have clyent 1.2.2 which is incompatible.
conda-repo-cli 1.0.20 requires nbformat==5.4.0, but you have nbformat 5.5.0 which is incompatible.
  • 1
  • 2
  • 3
  • 4
  • 5

三、paddleSeq2.7.0安装详细情况

显示Successfully installed PaddleSeg-2.7.0 sklearn-0.0
表示安装成功

(base) D:\ProgramData\Anaconda3>pip install PaddleSeg==2.7.0
Collecting PaddleSeg==2.7.0
  Downloading paddleseg-2.7.0-py3-none-any.whl (349 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 349.4/349.4 kB 271.3 kB/s eta 0:00:00
Requirement already satisfied: prettytable in d:\programdata\anaconda3\lib\site-packages (from PaddleSeg==2.7.0) (3.8.0)
Requirement already satisfied: filelock in d:\programdata\anaconda3\lib\site-packages (from PaddleSeg==2.7.0) (3.6.0)
Requirement already satisfied: pyyaml>=5.1 in d:\programdata\anaconda3\lib\site-packages (from PaddleSeg==2.7.0) (6.0)
Requirement already satisfied: opencv-python in d:\programdata\anaconda3\lib\site-packages (from PaddleSeg==2.7.0) (4.5.4.60)
Requirement already satisfied: visualdl>=2.2.0 in d:\programdata\anaconda3\lib\site-packages (from PaddleSeg==2.7.0) (2.5.3)
Requirement already satisfied: scipy in d:\programdata\anaconda3\lib\site-packages (from PaddleSeg==2.7.0) (1.9.1)
Collecting sklearn==0.0
  Downloading sklearn-0.0.tar.gz (1.1 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: tqdm in d:\programdata\anaconda3\lib\site-packages (from PaddleSeg==2.7.0) (4.64.1)
Requirement already satisfied: scikit-learn in d:\programdata\anaconda3\lib\site-packages (from sklearn==0.0->PaddleSeg==2.7.0) (1.0.2)
Requirement already satisfied: numpy in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (1.21.5)
Requirement already satisfied: requests in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (2.28.1)
Requirement already satisfied: protobuf>=3.20.0 in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (4.24.0)
Requirement already satisfied: matplotlib in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (3.5.2)
Requirement already satisfied: bce-python-sdk in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (0.8.87)
Requirement already satisfied: packaging in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (21.3)
Requirement already satisfied: pandas in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (1.4.4)
Requirement already satisfied: flask>=1.1.1 in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (2.3.2)
Requirement already satisfied: Pillow>=7.0.0 in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (9.2.0)
Requirement already satisfied: six>=1.14.0 in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (1.16.0)
Requirement already satisfied: Flask-Babel>=3.0.0 in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (3.1.0)
Requirement already satisfied: rarfile in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (4.0)
Requirement already satisfied: psutil in d:\programdata\anaconda3\lib\site-packages (from visualdl>=2.2.0->PaddleSeg==2.7.0) (5.9.0)
Requirement already satisfied: wcwidth in d:\programdata\anaconda3\lib\site-packages (from prettytable->PaddleSeg==2.7.0) (0.2.5)
Requirement already satisfied: colorama in d:\programdata\anaconda3\lib\site-packages (from tqdm->PaddleSeg==2.7.0) (0.4.5)
Requirement already satisfied: itsdangerous>=2.1.2 in d:\programdata\anaconda3\lib\site-packages (from flask>=1.1.1->visualdl>=2.2.0->PaddleSeg==2.7.0) (2.1.2)
Requirement already satisfied: Jinja2>=3.1.2 in d:\programdata\anaconda3\lib\site-packages (from flask>=1.1.1->visualdl>=2.2.0->PaddleSeg==2.7.0) (3.1.2)
Requirement already satisfied: Werkzeug>=2.3.3 in d:\programdata\anaconda3\lib\site-packages (from flask>=1.1.1->visualdl>=2.2.0->PaddleSeg==2.7.0) (2.3.6)
Requirement already satisfied: click>=8.1.3 in d:\programdata\anaconda3\lib\site-packages (from flask>=1.1.1->visualdl>=2.2.0->PaddleSeg==2.7.0) (8.1.6)
Requirement already satisfied: blinker>=1.6.2 in d:\programdata\anaconda3\lib\site-packages (from flask>=1.1.1->visualdl>=2.2.0->PaddleSeg==2.7.0) (1.6.2)
Requirement already satisfied: importlib-metadata>=3.6.0 in d:\programdata\anaconda3\lib\site-packages (from flask>=1.1.1->visualdl>=2.2.0->PaddleSeg==2.7.0) (4.11.3)
Requirement already satisfied: Babel>=2.12 in d:\programdata\anaconda3\lib\site-packages (from Flask-Babel>=3.0.0->visualdl>=2.2.0->PaddleSeg==2.7.0) (2.12.1)
Requirement already satisfied: pytz>=2022.7 in d:\programdata\anaconda3\lib\site-packages (from Flask-Babel>=3.0.0->visualdl>=2.2.0->PaddleSeg==2.7.0) (2023.3)
Requirement already satisfied: pycryptodome>=3.8.0 in d:\programdata\anaconda3\lib\site-packages (from bce-python-sdk->visualdl>=2.2.0->PaddleSeg==2.7.0) (3.18.0)
Requirement already satisfied: future>=0.6.0 in d:\programdata\anaconda3\lib\site-packages (from bce-python-sdk->visualdl>=2.2.0->PaddleSeg==2.7.0) (0.18.2)
Requirement already satisfied: python-dateutil>=2.7 in d:\programdata\anaconda3\lib\site-packages (from matplotlib->visualdl>=2.2.0->PaddleSeg==2.7.0) (2.8.2)
Requirement already satisfied: cycler>=0.10 in d:\programdata\anaconda3\lib\site-packages (from matplotlib->visualdl>=2.2.0->PaddleSeg==2.7.0) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in d:\programdata\anaconda3\lib\site-packages (from matplotlib->visualdl>=2.2.0->PaddleSeg==2.7.0) (4.25.0)
Requirement already satisfied: pyparsing>=2.2.1 in d:\programdata\anaconda3\lib\site-packages (from matplotlib->visualdl>=2.2.0->PaddleSeg==2.7.0) (3.0.9)
Requirement already satisfied: kiwisolver>=1.0.1 in d:\programdata\anaconda3\lib\site-packages (from matplotlib->visualdl>=2.2.0->PaddleSeg==2.7.0) (1.4.2)
Requirement already satisfied: charset-normalizer<3,>=2 in d:\programdata\anaconda3\lib\site-packages (from requests->visualdl>=2.2.0->PaddleSeg==2.7.0) (2.0.4)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in d:\programdata\anaconda3\lib\site-packages (from requests->visualdl>=2.2.0->PaddleSeg==2.7.0) (1.26.11)
Requirement already satisfied: idna<4,>=2.5 in d:\programdata\anaconda3\lib\site-packages (from requests->visualdl>=2.2.0->PaddleSeg==2.7.0) (3.3)
Requirement already satisfied: certifi>=2017.4.17 in d:\programdata\anaconda3\lib\site-packages (from requests->visualdl>=2.2.0->PaddleSeg==2.7.0) (2022.9.14)
Requirement already satisfied: threadpoolctl>=2.0.0 in d:\programdata\anaconda3\lib\site-packages (from scikit-learn->sklearn==0.0->PaddleSeg==2.7.0) (2.2.0)
Requirement already satisfied: joblib>=0.11 in d:\programdata\anaconda3\lib\site-packages (from scikit-learn->sklearn==0.0->PaddleSeg==2.7.0) (1.1.0)
Requirement already satisfied: zipp>=0.5 in d:\programdata\anaconda3\lib\site-packages (from importlib-metadata>=3.6.0->flask>=1.1.1->visualdl>=2.2.0->PaddleSeg==2.7.0) (3.8.0)
Requirement already satisfied: MarkupSafe>=2.0 in d:\programdata\anaconda3\lib\site-packages (from Jinja2>=3.1.2->flask>=1.1.1->visualdl>=2.2.0->PaddleSeg==2.7.0) (2.1.3)
Building wheels for collected packages: sklearn
  Building wheel for sklearn (setup.py) ... done
  Created wheel for sklearn: filename=sklearn-0.0-py2.py3-none-any.whl size=1304 sha256=292bc45b32f83827cb71ee7501b63c818b0b845e39c063fe776f07399e395fd6
  Stored in directory: c:\users\hsgpc\appdata\local\pip\cache\wheels\e4\7b\98\b6466d71b8d738a0c547008b9eb39bf8676d1ff6ca4b22af1c
Successfully built sklearn
Installing collected packages: sklearn, PaddleSeg
  Attempting uninstall: PaddleSeg
    Found existing installation: paddleseg 2.8.0
    Uninstalling paddleseg-2.8.0:
      Successfully uninstalled paddleseg-2.8.0
Successfully installed PaddleSeg-2.7.0 sklearn-0.0

(base) D:\ProgramData\Anaconda3>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

四、测试训练代码

测试结果正常运行

PS E:\project\python> & D:/ProgramData/Anaconda3/python.exe e:/project/python/Seq/test.py
Connecting to https://paddleseg.bj.bcebos.com/dataset/optic_disc_seg.zip
Downloading optic_disc_seg.zip
[==================================================] 100.00%
Uncompress optic_disc_seg.zip
[==================================================] 100.00%
W0811 20:07:56.475862 16348 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 12.2, Runtime API Version: 10.2
W0811 20:07:56.523449 16348 gpu_resources.cc:91] device: 0, cuDNN Version: 7.6.
D:\ProgramData\Anaconda3\lib\site-packages\paddle\nn\layer\norm.py:712: UserWarning: When training, we now always track global mean and variance.
  warnings.warn(
D:\ProgramData\Anaconda3\lib\site-packages\paddle\fluid\dygraph\math_op_patch.py:275: 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.float32
  warnings.warn(
2023-08-11 20:08:09 [INFO]      [TRAIN] epoch: 1, iter: 10/1000, loss: 2.6801, lr: 0.009919, batch_cost: 1.0978, reader_cost: 0.09730, ips: 3.6436 samples/sec | ETA 00:18:06
2023-08-11 20:08:13 [INFO]      [TRAIN] epoch: 1, iter: 20/1000, loss: 0.6180, lr: 0.009829, batch_cost: 0.3860, reader_cost: 0.00010, ips: 10.3626 samples/sec | ETA 00:06:18
2023-08-11 20:08:17 [INFO]      [TRAIN] epoch: 1, iter: 30/1000, loss: 0.4047, lr: 0.009739, batch_cost: 0.4011, reader_cost: 0.00020, ips: 9.9725 samples/sec | ETA 00:06:29
2023-08-11 20:08:21 [INFO]      [TRAIN] epoch: 1, iter: 40/1000, loss: 0.3404, lr: 0.009648, batch_cost: 0.4061, reader_cost: 0.00030, ips: 9.8509 samples/sec | ETA 00:06:29
2023-08-11 20:08:25 [INFO]      [TRAIN] epoch: 1, iter: 50/1000, loss: 0.3043, lr: 0.009558, batch_cost: 0.3877, reader_cost: 0.00030, ips: 10.3161 samples/sec | ETA 00:06:08
2023-08-11 20:08:28 [INFO]      [TRAIN] epoch: 1, iter: 60/1000, loss: 0.2918, lr: 0.009467, batch_cost: 0.3862, reader_cost: 0.00010, ips: 10.3586 samples/sec | ETA 00:06:02
2023-08-11 20:08:32 [INFO]      [TRAIN] epoch: 2, iter: 70/1000, loss: 0.2548, lr: 0.009377, batch_cost: 0.4038, reader_cost: 0.01672, ips: 9.9049 samples/sec | ETA 00:06:15
2023-08-11 20:08:36 [INFO]      [TRAIN] epoch: 2, iter: 80/1000, loss: 0.2641, lr: 0.009286, batch_cost: 0.3905, reader_cost: 0.00015, ips: 10.2446 samples/sec | ETA 00:05:59
2023-08-11 20:08:40 [INFO]      [TRAIN] epoch: 2, iter: 90/1000, loss: 0.2426, lr: 0.009195, batch_cost: 0.3884, reader_cost: 0.00000, ips: 10.2990 samples/sec | ETA 00:05:53
2023-08-11 20:08:44 [INFO]      [TRAIN] epoch: 2, iter: 100/1000, loss: 0.2403, lr: 0.009104, batch_cost: 0.3864, reader_cost: 0.00000, ips: 10.3526 samples/sec | ETA 00:05:47
2023-08-11 20:08:48 [INFO]      [TRAIN] epoch: 2, iter: 110/1000, loss: 0.2847, lr: 0.009013, batch_cost: 0.3890, reader_cost: 0.00010, ips: 10.2830 samples/sec | ETA 00:05:46
2023-08-11 20:08:52 [INFO]      [TRAIN] epoch: 2, iter: 120/1000, loss: 0.2442, lr: 0.008922, batch_cost: 0.3874, reader_cost: 0.00010, ips: 10.3261 samples/sec | ETA 00:05:40
2023-08-11 20:08:56 [INFO]      [TRAIN] epoch: 2, iter: 130/1000, loss: 0.2243, lr: 0.008831, batch_cost: 0.3901, reader_cost: 0.00020, ips: 10.2547 samples/sec | ETA 00:05:39
2023-08-11 20:09:00 [INFO]      [TRAIN] epoch: 3, iter: 140/1000, loss: 0.2251, lr: 0.008740, batch_cost: 0.3946, reader_cost: 0.00559, ips: 10.1366 samples/sec | ETA 00:05:39
2023-08-11 20:09:04 [INFO]      [TRAIN] epoch: 3, iter: 150/1000, loss: 0.1888, lr: 0.008648, batch_cost: 0.3949, reader_cost: 0.00000, ips: 10.1292 samples/sec | ETA 00:05:35
2023-08-11 20:09:08 [INFO]      [TRAIN] epoch: 3, iter: 160/1000, loss: 0.2272, lr: 0.008557, batch_cost: 0.3883, reader_cost: 0.00030, ips: 10.3016 samples/sec | ETA 00:05:26
2023-08-11 20:09:11 [INFO]      [TRAIN] epoch: 3, iter: 170/1000, loss: 0.1854, lr: 0.008465, batch_cost: 0.3875, reader_cost: 0.00010, ips: 10.3239 samples/sec | ETA 00:05:21
2023-08-11 20:09:15 [INFO]      [TRAIN] epoch: 3, iter: 180/1000, loss: 0.2287, lr: 0.008374, batch_cost: 0.3893, reader_cost: 0.00020, ips: 10.2751 samples/sec | ETA 00:05:19
2023-08-11 20:09:19 [INFO]      [TRAIN] epoch: 3, iter: 190/1000, loss: 0.1802, lr: 0.008282, batch_cost: 0.4025, reader_cost: 0.00030, ips: 9.9373 samples/sec | ETA 00:05:26
2023-08-11 20:09:23 [INFO]      [TRAIN] epoch: 4, iter: 200/1000, loss: 0.1878, lr: 0.008190, batch_cost: 0.3942, reader_cost: 0.00663, ips: 10.1465 samples/sec | ETA 00:05:15
2023-08-11 20:09:23 [INFO]      Start evaluating (total_samples: 76, total_iters: 76)...
76/76 [==============================] - 2s 33ms/step - batch_cost: 0.0325 - reader cost: 3.1596e-04
2023-08-11 20:09:26 [INFO]      [EVAL] #Images: 76 mIoU: 0.7409 Acc: 0.9900 Kappa: 0.6546 Dice: 0.8271
2023-08-11 20:09:26 [INFO]      [EVAL] Class IoU: 
[0.9899 0.4919]
2023-08-11 20:09:26 [INFO]      [EVAL] Class Precision: 
[0.9912 0.8759]
2023-08-11 20:09:26 [INFO]      [EVAL] Class Recall:
[0.9986 0.5287]
2023-08-11 20:09:26 [INFO]      [EVAL] The model with the best validation mIoU (0.7409) was saved at iter 200.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

test.py

# 构建训练用的数据增强和预处理
import paddleseg.transforms as T
transforms = [
    T.Resize(target_size=(512, 512)),
    T.RandomHorizontalFlip(),
    T.Normalize()
]

# 构建训练集
from paddleseg.datasets import OpticDiscSeg
train_dataset = OpticDiscSeg(
    dataset_root='data/optic_disc_seg',
    transforms=transforms,
    mode='train'
)

from paddleseg.models import BiSeNetV2
model = BiSeNetV2(num_classes=2,
                 lambd=0.25,
                 align_corners=False,
                 pretrained=None)

# 构建验证用的数据增强和预处理
import paddleseg.transforms as T
transforms = [
    T.Resize(target_size=(512, 512)),
    T.Normalize()
]

# 构建验证集
from paddleseg.datasets import OpticDiscSeg
val_dataset = OpticDiscSeg(
    dataset_root='data/optic_disc_seg',
    transforms=transforms,
    mode='val'
)

import paddle
# 设置学习率
base_lr = 0.01
lr = paddle.optimizer.lr.PolynomialDecay(base_lr, power=0.9, decay_steps=1000, end_lr=0)

optimizer = paddle.optimizer.Momentum(lr, parameters=model.parameters(), momentum=0.9, weight_decay=4.0e-5)

from paddleseg.models.losses import CrossEntropyLoss
losses = {}
losses['types'] = [CrossEntropyLoss()] * 5
losses['coef'] = [1]* 5

print(losses)  #构造字典的值
#losses={
# 'types': [CrossEntropyLoss(), CrossEntropyLoss(), CrossEntropyLoss(), CrossEntropyLoss(), CrossEntropyLoss()], 
# 'coef': [1, 1, 1, 1, 1]
# }

from paddleseg.core import train
train(
    model=model,
    train_dataset=train_dataset,
    val_dataset=val_dataset,
    optimizer=optimizer,
    save_dir='output',
    iters=1000,
    batch_size=4,
    save_interval=200,
    log_iters=10,
    num_workers=0,
    losses=losses,
    use_vdl=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

五、评估结果

#optic disc seq 视盘分割  测试
import paddle
#模型评估
#============================================
#构建模型
from paddleseg.models import BiSeNetV2
model = BiSeNetV2(num_classes=2,
                 lambd=0.25,
                 align_corners=False,
                 pretrained=None)
#============================================
#BiSeNetv2保证速度的同时,也能保证精度
#2020年,相关学者基于可实现实时语义分割的双向网络BiSeNet(Bilateral Segmentation Network),
# 建设性地提出了BiSeNetv2,# 以期望获得更好的语义分割精度。
# 通常来说,语义分割任务既需要低级细节,也需要高级语义。
# 就目前的语义分割模型而言,于精度相比,更多的是追求速度,因此存在着一定缺陷。
# 而BiSeNetv2则是两方兼顾且行之有效的语义分割模型。
#(Bilateral Segmentation Network) 双边分割网络

#加载模型参数
model_path = 'output/best_model/model.pdparams'
if model_path:
    para_state_dict = paddle.load(model_path)
    model.set_dict(para_state_dict)
    print('Loaded trained params of model successfully')
else: 
    raise ValueError('The model_path is wrong: {}'.format(model_path))

# 构建验证集
# 构建验证用的transforms
import paddleseg.transforms as T
transforms = [
    T.Resize(target_size=(512, 512)),
    T.Normalize()
]

# 构建验证集
from paddleseg.datasets import OpticDiscSeg
val_dataset = OpticDiscSeg(
    dataset_root='data/optic_disc_seg',
    transforms=transforms,
    mode='val'
)   

#评估
from paddleseg.core import evaluate
#evaluate(model,val_dataset)
'''
评估结果:准确率Acc: 0.9942
平均交并比:mIoU: 0.8601=(0.9941+0.7262)/2
2023-08-12 12:06:05 [INFO]      [EVAL] #Images: 76 mIoU: 0.8601 Acc: 0.9942 Kappa: 0.8384 Dice: 0.9192
2023-08-12 12:06:05 [INFO]      [EVAL] Class IoU:      [0.9941 0.7262]
2023-08-12 12:06:05 [INFO]      [EVAL] Class Precision:[0.9969 0.8497]
2023-08-12 12:06:05 [INFO]      [EVAL] Class Recall:   [0.9972 0.8331]
'''

#多尺度+翻转评估
evaluate(
        model,
        val_dataset,
        aug_eval=True,
        scales=[0.75, 1.0, 1.25],
        flip_horizontal=True)

#
'''
评估结果:准确率Acc: 0.9943
平均交并比:mIoU: 0.8629=(0.9942+0.7315)/2
2023-08-12 12:14:34 [INFO]      [EVAL] #Images: 76 mIoU: 0.8629 Acc: 0.9943 Kappa: 0.8421 Dice: 0.9210
2023-08-12 12:14:34 [INFO]      [EVAL] Class IoU:      [0.9942 0.7315]
2023-08-12 12:14:34 [INFO]      [EVAL] Class Precision:[0.9971 0.8459]
2023-08-12 12:14:34 [INFO]      [EVAL] Class Recall:   [0.9971 0.844 ]
'''   

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

六、预测结果代码

#predict  预测
#效果可视化

#构建模型
from paddleseg.models import BiSeNetV2
model = BiSeNetV2(num_classes=2,
                 lambd=0.25,
                 align_corners=False,
                 pretrained=None)

#创建transform
import paddleseg.transforms as T
transforms = T.Compose([
    T.Resize(target_size=(512, 512)),
    T.RandomHorizontalFlip(),
    T.Normalize()
])

#构建待预测的图像列表
import os
def get_image_list(image_path):
    """Get image list"""
    valid_suffix = [
        '.JPEG', '.jpeg', '.JPG', '.jpg', '.BMP', '.bmp', '.PNG', '.png'
    ]
    image_list = []
    image_dir = None
    if os.path.isfile(image_path):
        if os.path.splitext(image_path)[-1] in valid_suffix:
            image_list.append(image_path)
    elif os.path.isdir(image_path):
        image_dir = image_path
        for root, dirs, files in os.walk(image_path):
            for f in files:
                if os.path.splitext(f)[-1] in valid_suffix:
                    image_list.append(os.path.join(root, f))
    else:
        raise FileNotFoundError(
            '`--image_path` is not found. it should be an image file or a directory including images'
        )

    if len(image_list) == 0:
        raise RuntimeError('There are not image file in `--image_path`')

    return image_list, image_dir

#====================================================================================
image_path = 'data/optic_disc_seg/JPEGImages/N0010.jpg' # 也可以输入一个包含图像的目录   N0010.jpg/N0058/P0091
image_list, image_dir = get_image_list(image_path)    
#====================================================================================
#预测
#=========================================
#预测输出结果保存到save_dir目录下 
from paddleseg.core import predict
predict(
        model,
        model_path='output/best_model/model.pdparams',
        transforms=transforms,
        image_list=image_list,
        image_dir=image_dir,
        save_dir='Seq/output/results'
    )
#=========================================
#copy old image to output dir
import os
from shutil import copyfile
copyfile(image_path,'Seq/output/'+os.path.basename(image_path))
               
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

—the—end—

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/692734
推荐阅读
相关标签
  

闽ICP备14008679号