Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleX
提交
57ce5a1b
P
PaddleX
项目概览
PaddlePaddle
/
PaddleX
通知
138
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
43
列表
看板
标记
里程碑
合并请求
5
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleX
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
43
Issue
43
列表
看板
标记
里程碑
合并请求
5
合并请求
5
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
57ce5a1b
编写于
9月 01, 2020
作者:
F
FlyingQianMM
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify some details for the reviews
上级
1093eacd
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
61 addition
and
41 deletion
+61
-41
docs/apis/models/semantic_segmentation.md
docs/apis/models/semantic_segmentation.md
+8
-5
docs/examples/multi-channel_remote_sensing/README.md
docs/examples/multi-channel_remote_sensing/README.md
+3
-3
examples/multi-channel_remote_sensing/README.md
examples/multi-channel_remote_sensing/README.md
+3
-3
paddlex/cv/datasets/analysis.py
paddlex/cv/datasets/analysis.py
+2
-2
paddlex/cv/datasets/imagenet.py
paddlex/cv/datasets/imagenet.py
+4
-0
paddlex/cv/datasets/seg_dataset.py
paddlex/cv/datasets/seg_dataset.py
+2
-2
paddlex/cv/datasets/voc.py
paddlex/cv/datasets/voc.py
+4
-0
paddlex/cv/models/deeplabv3p.py
paddlex/cv/models/deeplabv3p.py
+7
-5
paddlex/cv/models/fast_scnn.py
paddlex/cv/models/fast_scnn.py
+7
-5
paddlex/cv/models/hrnet.py
paddlex/cv/models/hrnet.py
+6
-5
paddlex/cv/models/unet.py
paddlex/cv/models/unet.py
+6
-5
paddlex/cv/transforms/seg_transforms.py
paddlex/cv/transforms/seg_transforms.py
+9
-6
未找到文件。
docs/apis/models/semantic_segmentation.md
浏览文件 @
57ce5a1b
...
@@ -3,8 +3,7 @@
...
@@ -3,8 +3,7 @@
## paddlex.seg.DeepLabv3p
## paddlex.seg.DeepLabv3p
```
python
```
python
paddlex
.
seg
.
DeepLabv3p
(
num_classes
=
2
,
backbone
=
'MobileNetV2_x1.0'
,
output_stride
=
16
,
aspp_with_sep_conv
=
True
,
decoder_use_sep_conv
=
True
,
encoder_with_aspp
=
True
,
enable_decoder
=
True
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
ignore_index
=
255
,
pooling_crop_size
=
None
)
paddlex
.
seg
.
DeepLabv3p
(
num_classes
=
2
,
backbone
=
'MobileNetV2_x1.0'
,
output_stride
=
16
,
aspp_with_sep_conv
=
True
,
decoder_use_sep_conv
=
True
,
encoder_with_aspp
=
True
,
enable_decoder
=
True
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
ignore_index
=
255
,
pooling_crop_size
=
None
,
input_channel
=
3
)
```
```
> 构建DeepLabv3p分割器。
> 构建DeepLabv3p分割器。
...
@@ -23,6 +22,7 @@ paddlex.seg.DeepLabv3p(num_classes=2, backbone='MobileNetV2_x1.0', output_stride
...
@@ -23,6 +22,7 @@ paddlex.seg.DeepLabv3p(num_classes=2, backbone='MobileNetV2_x1.0', output_stride
> > - **class_weight** (list/str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。
> > - **class_weight** (list/str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。
> > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。
> > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。
> > - **pooling_crop_size** (int):当backbone为`MobileNetV3_large_x1_0_ssld`时,需设置为训练过程中模型输入大小,格式为[W, H]。例如模型输入大小为[512, 512], 则`pooling_crop_size`应该设置为[512, 512]。在encoder模块中获取图像平均值时被用到,若为None,则直接求平均值;若为模型输入大小,则使用`avg_pool`算子得到平均值。默认值None。
> > - **pooling_crop_size** (int):当backbone为`MobileNetV3_large_x1_0_ssld`时,需设置为训练过程中模型输入大小,格式为[W, H]。例如模型输入大小为[512, 512], 则`pooling_crop_size`应该设置为[512, 512]。在encoder模块中获取图像平均值时被用到,若为None,则直接求平均值;若为模型输入大小,则使用`avg_pool`算子得到平均值。默认值None。
> > - **input_channel** (int): 输入图像通道数。默认值3。
### train
### train
...
@@ -115,7 +115,7 @@ batch_predict(self, img_file_list, transforms=None, thread_num=2):
...
@@ -115,7 +115,7 @@ batch_predict(self, img_file_list, transforms=None, thread_num=2):
## paddlex.seg.UNet
## paddlex.seg.UNet
```
python
```
python
paddlex
.
seg
.
UNet
(
num_classes
=
2
,
upsample_mode
=
'bilinear'
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
ignore_index
=
255
)
paddlex
.
seg
.
UNet
(
num_classes
=
2
,
upsample_mode
=
'bilinear'
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
ignore_index
=
255
,
input_channel
=
3
)
```
```
> 构建UNet分割器。
> 构建UNet分割器。
...
@@ -128,6 +128,7 @@ paddlex.seg.UNet(num_classes=2, upsample_mode='bilinear', use_bce_loss=False, us
...
@@ -128,6 +128,7 @@ paddlex.seg.UNet(num_classes=2, upsample_mode='bilinear', use_bce_loss=False, us
> > - **use_dice_loss** (bool): 是否使用dice loss作为网络的损失函数,只能用于两类分割,可与bce loss同时使用。当use_bce_loss和use_dice_loss都为False时,使用交叉熵损失函数。默认False。
> > - **use_dice_loss** (bool): 是否使用dice loss作为网络的损失函数,只能用于两类分割,可与bce loss同时使用。当use_bce_loss和use_dice_loss都为False时,使用交叉熵损失函数。默认False。
> > - **class_weight** (list/str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。
> > - **class_weight** (list/str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。
> > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。
> > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。
> > - **input_channel** (int): 输入图像通道数。默认值3。
> - train 训练接口说明同 [DeepLabv3p模型train接口](#train)
> - train 训练接口说明同 [DeepLabv3p模型train接口](#train)
> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate)
> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate)
...
@@ -137,7 +138,7 @@ paddlex.seg.UNet(num_classes=2, upsample_mode='bilinear', use_bce_loss=False, us
...
@@ -137,7 +138,7 @@ paddlex.seg.UNet(num_classes=2, upsample_mode='bilinear', use_bce_loss=False, us
## paddlex.seg.HRNet
## paddlex.seg.HRNet
```
python
```
python
paddlex
.
seg
.
HRNet
(
num_classes
=
2
,
width
=
18
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
ignore_index
=
255
)
paddlex
.
seg
.
HRNet
(
num_classes
=
2
,
width
=
18
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
ignore_index
=
255
,
input_channel
=
3
)
```
```
> 构建HRNet分割器。
> 构建HRNet分割器。
...
@@ -150,6 +151,7 @@ paddlex.seg.HRNet(num_classes=2, width=18, use_bce_loss=False, use_dice_loss=Fal
...
@@ -150,6 +151,7 @@ paddlex.seg.HRNet(num_classes=2, width=18, use_bce_loss=False, use_dice_loss=Fal
> > - **use_dice_loss** (bool): 是否使用dice loss作为网络的损失函数,只能用于两类分割,可与bce loss同时使用。当use_bce_loss和use_dice_loss都为False时,使用交叉熵损失函数。默认False。
> > - **use_dice_loss** (bool): 是否使用dice loss作为网络的损失函数,只能用于两类分割,可与bce loss同时使用。当use_bce_loss和use_dice_loss都为False时,使用交叉熵损失函数。默认False。
> > - **class_weight** (list|str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。
> > - **class_weight** (list|str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。
> > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。
> > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。
> > - **input_channel** (int): 输入图像通道数。默认值3。
> - train 训练接口说明同 [DeepLabv3p模型train接口](#train)
> - train 训练接口说明同 [DeepLabv3p模型train接口](#train)
> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate)
> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate)
...
@@ -159,7 +161,7 @@ paddlex.seg.HRNet(num_classes=2, width=18, use_bce_loss=False, use_dice_loss=Fal
...
@@ -159,7 +161,7 @@ paddlex.seg.HRNet(num_classes=2, width=18, use_bce_loss=False, use_dice_loss=Fal
## paddlex.seg.FastSCNN
## paddlex.seg.FastSCNN
```
python
```
python
paddlex
.
seg
.
FastSCNN
(
num_classes
=
2
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
ignore_index
=
255
,
multi_loss_weight
=
[
1.0
])
paddlex
.
seg
.
FastSCNN
(
num_classes
=
2
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
ignore_index
=
255
,
multi_loss_weight
=
[
1.0
]
,
input_channel
=
3
)
```
```
> 构建FastSCNN分割器。
> 构建FastSCNN分割器。
...
@@ -172,6 +174,7 @@ paddlex.seg.FastSCNN(num_classes=2, use_bce_loss=False, use_dice_loss=False, cla
...
@@ -172,6 +174,7 @@ paddlex.seg.FastSCNN(num_classes=2, use_bce_loss=False, use_dice_loss=False, cla
> > - **class_weight** (list/str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。
> > - **class_weight** (list/str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。
> > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。
> > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。
> > - **multi_loss_weight** (list): 多分支上的loss权重。默认计算一个分支上的loss,即默认值为[1.0]。也支持计算两个分支或三个分支上的loss,权重按[fusion_branch_weight, higher_branch_weight, lower_branch_weight]排列,fusion_branch_weight为空间细节分支和全局上下文分支融合后的分支上的loss权重,higher_branch_weight为空间细节分支上的loss权重,lower_branch_weight为全局上下文分支上的loss权重,若higher_branch_weight和lower_branch_weight未设置则不会计算这两个分支上的loss。
> > - **multi_loss_weight** (list): 多分支上的loss权重。默认计算一个分支上的loss,即默认值为[1.0]。也支持计算两个分支或三个分支上的loss,权重按[fusion_branch_weight, higher_branch_weight, lower_branch_weight]排列,fusion_branch_weight为空间细节分支和全局上下文分支融合后的分支上的loss权重,higher_branch_weight为空间细节分支上的loss权重,lower_branch_weight为全局上下文分支上的loss权重,若higher_branch_weight和lower_branch_weight未设置则不会计算这两个分支上的loss。
> > - **input_channel** (int): 输入图像通道数。默认值3。
> - train 训练接口说明同 [DeepLabv3p模型train接口](#train)
> - train 训练接口说明同 [DeepLabv3p模型train接口](#train)
> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate)
> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate)
...
...
docs/examples/multi-channel_remote_sensing/README.md
浏览文件 @
57ce5a1b
...
@@ -69,7 +69,7 @@ cd ..
...
@@ -69,7 +69,7 @@ cd ..
参考文档
[
数据分析
](
./analysis.md
)
对训练集进行统计分析,确定图像像素值的截断范围,并统计截断后的均值和方差。
参考文档
[
数据分析
](
./analysis.md
)
对训练集进行统计分析,确定图像像素值的截断范围,并统计截断后的均值和方差。
## 模型训练
## 模型训练
本案例选择
`UNet`
语义分割模型完成云雪分割,运行以下步骤完成模型训练,模型的最优精度
`miou`
为
`7
7.99
%`
。
本案例选择
`UNet`
语义分割模型完成云雪分割,运行以下步骤完成模型训练,模型的最优精度
`miou`
为
`7
8.38
%`
。
*
设置GPU卡号
*
设置GPU卡号
```
shell script
```
shell script
...
@@ -88,8 +88,8 @@ python train.py --data_dir dataset/remote_sensing_seg \
...
@@ -88,8 +88,8 @@ python train.py --data_dir dataset/remote_sensing_seg \
--lr 0.01 \
--lr 0.01 \
--clip_min_value 7172 6561 5777 5103 4291 4000 4000 4232 6934 7199 \
--clip_min_value 7172 6561 5777 5103 4291 4000 4000 4232 6934 7199 \
--clip_max_value 50000 50000 50000 50000 50000 40000 30000 18000 40000 36000 \
--clip_max_value 50000 50000 50000 50000 50000 40000 30000 18000 40000 36000 \
--mean 0.1
4311188522260637 0.14288498042151332 0.14812997807748615 0.16377211813814938 0.2737538363784552 0.2740934379398823 0.27749601919204 0.07767443032935262 0.5694699410349131 0.5549716085195542
\
--mean 0.1
5163569 0.15142828 0.15574491 0.1716084 0.2799778 0.27652043 0.28195933 0.07853807 0.56333154 0.5477584
\
--std
0.09101632762467489 0.09600705942721106 0.096193618606776 0.10371446736389771 0.10911951586604118 0.11043593115173281 0.12648042598739268 0.027746262217260665 0.06822348076384514 0.062377591186668725
\
--std
0.09301891 0.09818967 0.09831126 0.1057784 0.10842132 0.11062996 0.12791838 0.02637859 0.0675052 0.06168227
\
--num_epochs 500 \
--num_epochs 500 \
--train_batch_size 3
--train_batch_size 3
```
```
...
...
examples/multi-channel_remote_sensing/README.md
浏览文件 @
57ce5a1b
...
@@ -84,7 +84,7 @@ cd ..
...
@@ -84,7 +84,7 @@ cd ..
## <h2 id="2">模型训练</h2>
## <h2 id="2">模型训练</h2>
本案例选择
`UNet`
语义分割模型完成云雪分割,运行以下步骤完成模型训练,模型的最优精度
`miou`
为
`7
7.99
%`
。
本案例选择
`UNet`
语义分割模型完成云雪分割,运行以下步骤完成模型训练,模型的最优精度
`miou`
为
`7
8.38
%`
。
*
设置GPU卡号
*
设置GPU卡号
```
shell script
```
shell script
...
@@ -103,8 +103,8 @@ python train.py --data_dir dataset/remote_sensing_seg \
...
@@ -103,8 +103,8 @@ python train.py --data_dir dataset/remote_sensing_seg \
--lr 0.01 \
--lr 0.01 \
--clip_min_value 7172 6561 5777 5103 4291 4000 4000 4232 6934 7199 \
--clip_min_value 7172 6561 5777 5103 4291 4000 4000 4232 6934 7199 \
--clip_max_value 50000 50000 50000 50000 50000 40000 30000 18000 40000 36000 \
--clip_max_value 50000 50000 50000 50000 50000 40000 30000 18000 40000 36000 \
--mean 0.1
4311188522260637 0.14288498042151332 0.14812997807748615 0.16377211813814938 0.2737538363784552 0.2740934379398823 0.27749601919204 0.07767443032935262 0.5694699410349131 0.5549716085195542
\
--mean 0.1
5163569 0.15142828 0.15574491 0.1716084 0.2799778 0.27652043 0.28195933 0.07853807 0.56333154 0.5477584
\
--std
0.09101632762467489 0.09600705942721106 0.096193618606776 0.10371446736389771 0.10911951586604118 0.11043593115173281 0.12648042598739268 0.027746262217260665 0.06822348076384514 0.062377591186668725
\
--std
0.09301891 0.09818967 0.09831126 0.1057784 0.10842132 0.11062996 0.12791838 0.02637859 0.0675052 0.06168227
\
--num_epochs 500 \
--num_epochs 500 \
--train_batch_size 3
--train_batch_size 3
```
```
...
...
paddlex/cv/datasets/analysis.py
浏览文件 @
57ce5a1b
...
@@ -40,11 +40,11 @@ class Seg:
...
@@ -40,11 +40,11 @@ class Seg:
with
open
(
file_list
,
encoding
=
get_encoding
(
file_list
))
as
f
:
with
open
(
file_list
,
encoding
=
get_encoding
(
file_list
))
as
f
:
for
line
in
f
:
for
line
in
f
:
if
line
.
count
(
" "
)
>
1
:
items
=
line
.
strip
().
split
()
if
len
(
items
)
>
2
:
raise
Exception
(
raise
Exception
(
"A space is defined as the separator, but it exists in image or label name {}."
"A space is defined as the separator, but it exists in image or label name {}."
.
format
(
line
))
.
format
(
line
))
items
=
line
.
strip
().
split
()
items
[
0
]
=
path_normalization
(
items
[
0
])
items
[
0
]
=
path_normalization
(
items
[
0
])
items
[
1
]
=
path_normalization
(
items
[
1
])
items
[
1
]
=
path_normalization
(
items
[
1
])
full_path_im
=
osp
.
join
(
data_dir
,
items
[
0
])
full_path_im
=
osp
.
join
(
data_dir
,
items
[
0
])
...
...
paddlex/cv/datasets/imagenet.py
浏览文件 @
57ce5a1b
...
@@ -67,6 +67,10 @@ class ImageNet(Dataset):
...
@@ -67,6 +67,10 @@ class ImageNet(Dataset):
with
open
(
file_list
,
encoding
=
get_encoding
(
file_list
))
as
f
:
with
open
(
file_list
,
encoding
=
get_encoding
(
file_list
))
as
f
:
for
line
in
f
:
for
line
in
f
:
items
=
line
.
strip
().
split
()
items
=
line
.
strip
().
split
()
if
len
(
items
):
raise
Exception
(
"A space is defined as the separator, but it exists in image or label name {}."
.
format
(
line
))
items
[
0
]
=
path_normalization
(
items
[
0
])
items
[
0
]
=
path_normalization
(
items
[
0
])
if
not
is_pic
(
items
[
0
]):
if
not
is_pic
(
items
[
0
]):
continue
continue
...
...
paddlex/cv/datasets/seg_dataset.py
浏览文件 @
57ce5a1b
...
@@ -63,11 +63,11 @@ class SegDataset(Dataset):
...
@@ -63,11 +63,11 @@ class SegDataset(Dataset):
self
.
labels
.
append
(
item
)
self
.
labels
.
append
(
item
)
with
open
(
file_list
,
encoding
=
get_encoding
(
file_list
))
as
f
:
with
open
(
file_list
,
encoding
=
get_encoding
(
file_list
))
as
f
:
for
line
in
f
:
for
line
in
f
:
if
line
.
count
(
" "
)
>
1
:
items
=
line
.
strip
().
split
()
if
len
(
items
)
>
2
:
raise
Exception
(
raise
Exception
(
"A space is defined as the separator, but it exists in image or label name {}."
"A space is defined as the separator, but it exists in image or label name {}."
.
format
(
line
))
.
format
(
line
))
items
=
line
.
strip
().
split
()
items
[
0
]
=
path_normalization
(
items
[
0
])
items
[
0
]
=
path_normalization
(
items
[
0
])
items
[
1
]
=
path_normalization
(
items
[
1
])
items
[
1
]
=
path_normalization
(
items
[
1
])
full_path_im
=
osp
.
join
(
data_dir
,
items
[
0
])
full_path_im
=
osp
.
join
(
data_dir
,
items
[
0
])
...
...
paddlex/cv/datasets/voc.py
浏览文件 @
57ce5a1b
...
@@ -91,6 +91,10 @@ class VOCDetection(Dataset):
...
@@ -91,6 +91,10 @@ class VOCDetection(Dataset):
line
=
fr
.
readline
()
line
=
fr
.
readline
()
if
not
line
:
if
not
line
:
break
break
if
len
(
line
.
strip
().
split
())
>
2
:
raise
Exception
(
"A space is defined as the separator, but it exists in image or label name {}."
.
format
(
line
))
img_file
,
xml_file
=
[
osp
.
join
(
data_dir
,
x
)
\
img_file
,
xml_file
=
[
osp
.
join
(
data_dir
,
x
)
\
for
x
in
line
.
strip
().
split
()[:
2
]]
for
x
in
line
.
strip
().
split
()[:
2
]]
img_file
=
path_normalization
(
img_file
)
img_file
=
path_normalization
(
img_file
)
...
...
paddlex/cv/models/deeplabv3p.py
浏览文件 @
57ce5a1b
...
@@ -54,6 +54,8 @@ class DeepLabv3p(BaseAPI):
...
@@ -54,6 +54,8 @@ class DeepLabv3p(BaseAPI):
pooling_crop_size (list): 当backbone为MobileNetV3_large_x1_0_ssld时,需设置为训练过程中模型输入大小, 格式为[W, H]。
pooling_crop_size (list): 当backbone为MobileNetV3_large_x1_0_ssld时,需设置为训练过程中模型输入大小, 格式为[W, H]。
在encoder模块中获取图像平均值时被用到,若为None,则直接求平均值;若为模型输入大小,则使用'pool'算子得到平均值。
在encoder模块中获取图像平均值时被用到,若为None,则直接求平均值;若为模型输入大小,则使用'pool'算子得到平均值。
默认值为None。
默认值为None。
input_channel (int): 输入图像通道数。默认值3。
Raises:
Raises:
ValueError: use_bce_loss或use_dice_loss为真且num_calsses > 2。
ValueError: use_bce_loss或use_dice_loss为真且num_calsses > 2。
ValueError: backbone取值不在['Xception65', 'Xception41', 'MobileNetV2_x0.25',
ValueError: backbone取值不在['Xception65', 'Xception41', 'MobileNetV2_x0.25',
...
@@ -65,7 +67,6 @@ class DeepLabv3p(BaseAPI):
...
@@ -65,7 +67,6 @@ class DeepLabv3p(BaseAPI):
def
__init__
(
self
,
def
__init__
(
self
,
num_classes
=
2
,
num_classes
=
2
,
input_channel
=
3
,
backbone
=
'MobileNetV2_x1.0'
,
backbone
=
'MobileNetV2_x1.0'
,
output_stride
=
16
,
output_stride
=
16
,
aspp_with_sep_conv
=
True
,
aspp_with_sep_conv
=
True
,
...
@@ -76,7 +77,8 @@ class DeepLabv3p(BaseAPI):
...
@@ -76,7 +77,8 @@ class DeepLabv3p(BaseAPI):
use_dice_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
class_weight
=
None
,
ignore_index
=
255
,
ignore_index
=
255
,
pooling_crop_size
=
None
):
pooling_crop_size
=
None
,
input_channel
=
3
):
self
.
init_params
=
locals
()
self
.
init_params
=
locals
()
super
(
DeepLabv3p
,
self
).
__init__
(
'segmenter'
)
super
(
DeepLabv3p
,
self
).
__init__
(
'segmenter'
)
# dice_loss或bce_loss只适用两类分割中
# dice_loss或bce_loss只适用两类分割中
...
@@ -115,7 +117,6 @@ class DeepLabv3p(BaseAPI):
...
@@ -115,7 +117,6 @@ class DeepLabv3p(BaseAPI):
self
.
backbone
=
backbone
self
.
backbone
=
backbone
self
.
num_classes
=
num_classes
self
.
num_classes
=
num_classes
self
.
input_channel
=
input_channel
self
.
use_bce_loss
=
use_bce_loss
self
.
use_bce_loss
=
use_bce_loss
self
.
use_dice_loss
=
use_dice_loss
self
.
use_dice_loss
=
use_dice_loss
self
.
class_weight
=
class_weight
self
.
class_weight
=
class_weight
...
@@ -151,6 +152,7 @@ class DeepLabv3p(BaseAPI):
...
@@ -151,6 +152,7 @@ class DeepLabv3p(BaseAPI):
if
self
.
output_is_logits
:
if
self
.
output_is_logits
:
self
.
conv_filters
=
self
.
num_classes
self
.
conv_filters
=
self
.
num_classes
self
.
backbone_lr_mult_list
=
[
0.15
,
0.35
,
0.65
,
0.85
,
1
]
self
.
backbone_lr_mult_list
=
[
0.15
,
0.35
,
0.65
,
0.85
,
1
]
self
.
input_channel
=
input_channel
def
_get_backbone
(
self
,
backbone
):
def
_get_backbone
(
self
,
backbone
):
def
mobilenetv2
(
backbone
):
def
mobilenetv2
(
backbone
):
...
@@ -217,7 +219,6 @@ class DeepLabv3p(BaseAPI):
...
@@ -217,7 +219,6 @@ class DeepLabv3p(BaseAPI):
def
build_net
(
self
,
mode
=
'train'
):
def
build_net
(
self
,
mode
=
'train'
):
model
=
paddlex
.
cv
.
nets
.
segmentation
.
DeepLabv3p
(
model
=
paddlex
.
cv
.
nets
.
segmentation
.
DeepLabv3p
(
self
.
num_classes
,
self
.
num_classes
,
input_channel
=
self
.
input_channel
,
mode
=
mode
,
mode
=
mode
,
backbone
=
self
.
_get_backbone
(
self
.
backbone
),
backbone
=
self
.
_get_backbone
(
self
.
backbone
),
output_stride
=
self
.
output_stride
,
output_stride
=
self
.
output_stride
,
...
@@ -239,7 +240,8 @@ class DeepLabv3p(BaseAPI):
...
@@ -239,7 +240,8 @@ class DeepLabv3p(BaseAPI):
add_image_level_feature
=
self
.
add_image_level_feature
,
add_image_level_feature
=
self
.
add_image_level_feature
,
use_sum_merge
=
self
.
use_sum_merge
,
use_sum_merge
=
self
.
use_sum_merge
,
conv_filters
=
self
.
conv_filters
,
conv_filters
=
self
.
conv_filters
,
output_is_logits
=
self
.
output_is_logits
)
output_is_logits
=
self
.
output_is_logits
,
input_channel
=
self
.
input_channel
)
inputs
=
model
.
generate_inputs
()
inputs
=
model
.
generate_inputs
()
model_out
=
model
.
build_net
(
inputs
)
model_out
=
model
.
build_net
(
inputs
)
outputs
=
OrderedDict
()
outputs
=
OrderedDict
()
...
...
paddlex/cv/models/fast_scnn.py
浏览文件 @
57ce5a1b
...
@@ -36,6 +36,8 @@ class FastSCNN(DeepLabv3p):
...
@@ -36,6 +36,8 @@ class FastSCNN(DeepLabv3p):
也支持计算两个分支或三个分支上的loss,权重按[fusion_branch_weight, higher_branch_weight, lower_branch_weight]排列,
也支持计算两个分支或三个分支上的loss,权重按[fusion_branch_weight, higher_branch_weight, lower_branch_weight]排列,
fusion_branch_weight为空间细节分支和全局上下文分支融合后的分支上的loss权重,higher_branch_weight为空间细节分支上的loss权重,
fusion_branch_weight为空间细节分支和全局上下文分支融合后的分支上的loss权重,higher_branch_weight为空间细节分支上的loss权重,
lower_branch_weight为全局上下文分支上的loss权重,若higher_branch_weight和lower_branch_weight未设置则不会计算这两个分支上的loss。
lower_branch_weight为全局上下文分支上的loss权重,若higher_branch_weight和lower_branch_weight未设置则不会计算这两个分支上的loss。
input_channel (int): 输入图像通道数。默认值3。
Raises:
Raises:
ValueError: use_bce_loss或use_dice_loss为真且num_calsses > 2。
ValueError: use_bce_loss或use_dice_loss为真且num_calsses > 2。
...
@@ -48,12 +50,12 @@ class FastSCNN(DeepLabv3p):
...
@@ -48,12 +50,12 @@ class FastSCNN(DeepLabv3p):
def
__init__
(
self
,
def
__init__
(
self
,
num_classes
=
2
,
num_classes
=
2
,
input_channel
=
3
,
use_bce_loss
=
False
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
class_weight
=
None
,
ignore_index
=
255
,
ignore_index
=
255
,
multi_loss_weight
=
[
1.0
]):
multi_loss_weight
=
[
1.0
],
input_channel
=
3
):
self
.
init_params
=
locals
()
self
.
init_params
=
locals
()
super
(
DeepLabv3p
,
self
).
__init__
(
'segmenter'
)
super
(
DeepLabv3p
,
self
).
__init__
(
'segmenter'
)
# dice_loss或bce_loss只适用两类分割中
# dice_loss或bce_loss只适用两类分割中
...
@@ -87,7 +89,6 @@ class FastSCNN(DeepLabv3p):
...
@@ -87,7 +89,6 @@ class FastSCNN(DeepLabv3p):
)
)
self
.
num_classes
=
num_classes
self
.
num_classes
=
num_classes
self
.
input_channel
=
input_channel
self
.
use_bce_loss
=
use_bce_loss
self
.
use_bce_loss
=
use_bce_loss
self
.
use_dice_loss
=
use_dice_loss
self
.
use_dice_loss
=
use_dice_loss
self
.
class_weight
=
class_weight
self
.
class_weight
=
class_weight
...
@@ -95,18 +96,19 @@ class FastSCNN(DeepLabv3p):
...
@@ -95,18 +96,19 @@ class FastSCNN(DeepLabv3p):
self
.
ignore_index
=
ignore_index
self
.
ignore_index
=
ignore_index
self
.
labels
=
None
self
.
labels
=
None
self
.
fixed_input_shape
=
None
self
.
fixed_input_shape
=
None
self
.
input_channel
=
input_channel
def
build_net
(
self
,
mode
=
'train'
):
def
build_net
(
self
,
mode
=
'train'
):
model
=
paddlex
.
cv
.
nets
.
segmentation
.
FastSCNN
(
model
=
paddlex
.
cv
.
nets
.
segmentation
.
FastSCNN
(
self
.
num_classes
,
self
.
num_classes
,
input_channel
=
self
.
input_channel
,
mode
=
mode
,
mode
=
mode
,
use_bce_loss
=
self
.
use_bce_loss
,
use_bce_loss
=
self
.
use_bce_loss
,
use_dice_loss
=
self
.
use_dice_loss
,
use_dice_loss
=
self
.
use_dice_loss
,
class_weight
=
self
.
class_weight
,
class_weight
=
self
.
class_weight
,
ignore_index
=
self
.
ignore_index
,
ignore_index
=
self
.
ignore_index
,
multi_loss_weight
=
self
.
multi_loss_weight
,
multi_loss_weight
=
self
.
multi_loss_weight
,
fixed_input_shape
=
self
.
fixed_input_shape
)
fixed_input_shape
=
self
.
fixed_input_shape
,
input_channel
=
self
.
input_channel
)
inputs
=
model
.
generate_inputs
()
inputs
=
model
.
generate_inputs
()
model_out
=
model
.
build_net
(
inputs
)
model_out
=
model
.
build_net
(
inputs
)
outputs
=
OrderedDict
()
outputs
=
OrderedDict
()
...
...
paddlex/cv/models/hrnet.py
浏览文件 @
57ce5a1b
...
@@ -34,6 +34,7 @@ class HRNet(DeepLabv3p):
...
@@ -34,6 +34,7 @@ class HRNet(DeepLabv3p):
自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,
自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,
即平时使用的交叉熵损失函数。
即平时使用的交叉熵损失函数。
ignore_index (int): label上忽略的值,label为ignore_index的像素不参与损失函数的计算。默认255。
ignore_index (int): label上忽略的值,label为ignore_index的像素不参与损失函数的计算。默认255。
input_channel (int): 输入图像通道数。默认值3。
Raises:
Raises:
ValueError: use_bce_loss或use_dice_loss为真且num_calsses > 2。
ValueError: use_bce_loss或use_dice_loss为真且num_calsses > 2。
...
@@ -44,12 +45,12 @@ class HRNet(DeepLabv3p):
...
@@ -44,12 +45,12 @@ class HRNet(DeepLabv3p):
def
__init__
(
self
,
def
__init__
(
self
,
num_classes
=
2
,
num_classes
=
2
,
input_channel
=
3
,
width
=
18
,
width
=
18
,
use_bce_loss
=
False
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
class_weight
=
None
,
ignore_index
=
255
):
ignore_index
=
255
,
input_channel
=
3
):
self
.
init_params
=
locals
()
self
.
init_params
=
locals
()
super
(
DeepLabv3p
,
self
).
__init__
(
'segmenter'
)
super
(
DeepLabv3p
,
self
).
__init__
(
'segmenter'
)
# dice_loss或bce_loss只适用两类分割中
# dice_loss或bce_loss只适用两类分割中
...
@@ -73,7 +74,6 @@ class HRNet(DeepLabv3p):
...
@@ -73,7 +74,6 @@ class HRNet(DeepLabv3p):
'Expect class_weight is a list or string but receive {}'
.
'Expect class_weight is a list or string but receive {}'
.
format
(
type
(
class_weight
)))
format
(
type
(
class_weight
)))
self
.
num_classes
=
num_classes
self
.
num_classes
=
num_classes
self
.
input_channel
=
input_channel
self
.
width
=
width
self
.
width
=
width
self
.
use_bce_loss
=
use_bce_loss
self
.
use_bce_loss
=
use_bce_loss
self
.
use_dice_loss
=
use_dice_loss
self
.
use_dice_loss
=
use_dice_loss
...
@@ -81,18 +81,19 @@ class HRNet(DeepLabv3p):
...
@@ -81,18 +81,19 @@ class HRNet(DeepLabv3p):
self
.
ignore_index
=
ignore_index
self
.
ignore_index
=
ignore_index
self
.
labels
=
None
self
.
labels
=
None
self
.
fixed_input_shape
=
None
self
.
fixed_input_shape
=
None
self
.
input_channel
=
input_channel
def
build_net
(
self
,
mode
=
'train'
):
def
build_net
(
self
,
mode
=
'train'
):
model
=
paddlex
.
cv
.
nets
.
segmentation
.
HRNet
(
model
=
paddlex
.
cv
.
nets
.
segmentation
.
HRNet
(
self
.
num_classes
,
self
.
num_classes
,
input_channel
=
self
.
input_channel
,
width
=
self
.
width
,
width
=
self
.
width
,
mode
=
mode
,
mode
=
mode
,
use_bce_loss
=
self
.
use_bce_loss
,
use_bce_loss
=
self
.
use_bce_loss
,
use_dice_loss
=
self
.
use_dice_loss
,
use_dice_loss
=
self
.
use_dice_loss
,
class_weight
=
self
.
class_weight
,
class_weight
=
self
.
class_weight
,
ignore_index
=
self
.
ignore_index
,
ignore_index
=
self
.
ignore_index
,
fixed_input_shape
=
self
.
fixed_input_shape
)
fixed_input_shape
=
self
.
fixed_input_shape
,
input_channel
=
self
.
input_channel
)
inputs
=
model
.
generate_inputs
()
inputs
=
model
.
generate_inputs
()
model_out
=
model
.
build_net
(
inputs
)
model_out
=
model
.
build_net
(
inputs
)
outputs
=
OrderedDict
()
outputs
=
OrderedDict
()
...
...
paddlex/cv/models/unet.py
浏览文件 @
57ce5a1b
...
@@ -33,6 +33,7 @@ class UNet(DeepLabv3p):
...
@@ -33,6 +33,7 @@ class UNet(DeepLabv3p):
自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,
自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,
即平时使用的交叉熵损失函数。
即平时使用的交叉熵损失函数。
ignore_index (int): label上忽略的值,label为ignore_index的像素不参与损失函数的计算。默认255。
ignore_index (int): label上忽略的值,label为ignore_index的像素不参与损失函数的计算。默认255。
input_channel (int): 输入图像通道数。默认值3。
Raises:
Raises:
ValueError: use_bce_loss或use_dice_loss为真且num_calsses > 2。
ValueError: use_bce_loss或use_dice_loss为真且num_calsses > 2。
...
@@ -43,12 +44,12 @@ class UNet(DeepLabv3p):
...
@@ -43,12 +44,12 @@ class UNet(DeepLabv3p):
def
__init__
(
self
,
def
__init__
(
self
,
num_classes
=
2
,
num_classes
=
2
,
input_channel
=
3
,
upsample_mode
=
'bilinear'
,
upsample_mode
=
'bilinear'
,
use_bce_loss
=
False
,
use_bce_loss
=
False
,
use_dice_loss
=
False
,
use_dice_loss
=
False
,
class_weight
=
None
,
class_weight
=
None
,
ignore_index
=
255
):
ignore_index
=
255
,
input_channel
=
3
):
self
.
init_params
=
locals
()
self
.
init_params
=
locals
()
super
(
DeepLabv3p
,
self
).
__init__
(
'segmenter'
)
super
(
DeepLabv3p
,
self
).
__init__
(
'segmenter'
)
# dice_loss或bce_loss只适用两类分割中
# dice_loss或bce_loss只适用两类分割中
...
@@ -72,7 +73,6 @@ class UNet(DeepLabv3p):
...
@@ -72,7 +73,6 @@ class UNet(DeepLabv3p):
'Expect class_weight is a list or string but receive {}'
.
'Expect class_weight is a list or string but receive {}'
.
format
(
type
(
class_weight
)))
format
(
type
(
class_weight
)))
self
.
num_classes
=
num_classes
self
.
num_classes
=
num_classes
self
.
input_channel
=
input_channel
self
.
upsample_mode
=
upsample_mode
self
.
upsample_mode
=
upsample_mode
self
.
use_bce_loss
=
use_bce_loss
self
.
use_bce_loss
=
use_bce_loss
self
.
use_dice_loss
=
use_dice_loss
self
.
use_dice_loss
=
use_dice_loss
...
@@ -80,18 +80,19 @@ class UNet(DeepLabv3p):
...
@@ -80,18 +80,19 @@ class UNet(DeepLabv3p):
self
.
ignore_index
=
ignore_index
self
.
ignore_index
=
ignore_index
self
.
labels
=
None
self
.
labels
=
None
self
.
fixed_input_shape
=
None
self
.
fixed_input_shape
=
None
self
.
input_channel
=
input_channel
def
build_net
(
self
,
mode
=
'train'
):
def
build_net
(
self
,
mode
=
'train'
):
model
=
paddlex
.
cv
.
nets
.
segmentation
.
UNet
(
model
=
paddlex
.
cv
.
nets
.
segmentation
.
UNet
(
self
.
num_classes
,
self
.
num_classes
,
input_channel
=
self
.
input_channel
,
mode
=
mode
,
mode
=
mode
,
upsample_mode
=
self
.
upsample_mode
,
upsample_mode
=
self
.
upsample_mode
,
use_bce_loss
=
self
.
use_bce_loss
,
use_bce_loss
=
self
.
use_bce_loss
,
use_dice_loss
=
self
.
use_dice_loss
,
use_dice_loss
=
self
.
use_dice_loss
,
class_weight
=
self
.
class_weight
,
class_weight
=
self
.
class_weight
,
ignore_index
=
self
.
ignore_index
,
ignore_index
=
self
.
ignore_index
,
fixed_input_shape
=
self
.
fixed_input_shape
)
fixed_input_shape
=
self
.
fixed_input_shape
,
input_channel
=
self
.
input_channel
)
inputs
=
model
.
generate_inputs
()
inputs
=
model
.
generate_inputs
()
model_out
=
model
.
build_net
(
inputs
)
model_out
=
model
.
build_net
(
inputs
)
outputs
=
OrderedDict
()
outputs
=
OrderedDict
()
...
...
paddlex/cv/transforms/seg_transforms.py
浏览文件 @
57ce5a1b
...
@@ -21,6 +21,8 @@ import numpy as np
...
@@ -21,6 +21,8 @@ import numpy as np
from
PIL
import
Image
from
PIL
import
Image
import
cv2
import
cv2
import
imghdr
import
imghdr
import
six
import
sys
from
collections
import
OrderedDict
from
collections
import
OrderedDict
import
paddlex.utils.logging
as
logging
import
paddlex.utils.logging
as
logging
...
@@ -67,14 +69,15 @@ class Compose(SegTransform):
...
@@ -67,14 +69,15 @@ class Compose(SegTransform):
img_format
=
imghdr
.
what
(
img_path
)
img_format
=
imghdr
.
what
(
img_path
)
name
,
ext
=
osp
.
splitext
(
img_path
)
name
,
ext
=
osp
.
splitext
(
img_path
)
if
img_format
==
'tiff'
or
ext
==
'.img'
:
if
img_format
==
'tiff'
or
ext
==
'.img'
:
import
gdal
gdal
.
UseExceptions
()
gdal
.
PushErrorHandler
(
'CPLQuietErrorHandler'
)
try
:
try
:
dataset
=
gdal
.
Open
(
img_path
)
import
gdal
except
:
except
:
logging
.
error
(
gdal
.
GetLastErrorMsg
())
six
.
reraise
(
*
sys
.
exc_info
())
raise
Exception
(
"Please refer to https://github.com/PaddlePaddle/PaddleX/tree/develop/examples/multi-channel_remote_sensing/README.md to install gdal"
)
dataset
=
gdal
.
Open
(
img_path
)
if
dataset
==
None
:
if
dataset
==
None
:
raise
Exception
(
'Can not open'
,
img_path
)
raise
Exception
(
'Can not open'
,
img_path
)
im_data
=
dataset
.
ReadAsArray
()
im_data
=
dataset
.
ReadAsArray
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录