PaddleSeg provides five types of extensible components, i.e. MODELS, LOSSES, TRANSFORMS, BACKBONES, DATASETS.
If you intent to design a customized model, e.g, NewNet in newnet.py:
import paddle.nn as nn
from paddleseg.cvlibs import manager
@manager.MODELS.add_component
class NewNet(nn.Layer):
def __init__(self, param1, param2, param3):
pass
def forward(self, x):
pass
Step 1: Put newnet.py under paddleseg/models/.
Step 2: Add @manager.MODELS.add_component above your model class, where the manager is a component container, inclduing MODELS, BACKBONES, DATASETS, TRANSFORMS, LOSSES.
Step 3: Import your class in paddleseg/models/__init__.py, like this:
from .newnet import NewNet
Step 4: Specify the model name in a yaml file:
model:
type: NewNet
param1: ...
param2: ...
param3: ...
Note: If your model has more than one output, i.e. main loss + auxiliary losses, you have to modify loss in the yaml file, otherwise it will throw out an error like "The length of logits should equal to the types of loss config: 2!=1.". For example, PSPNet has two losses, where both are CrossEntropyLoss, and the weight of auxilary loss is 0.4, thus we have the loss settings:
loss:
types:
- type: CrossEntropyLoss
coef: [1, 0.4]
If you intent to implement a new loss, e.g. NewLoss in new_loss.py.
import paddle.nn as nn
from paddleseg.cvlibs import manager
@manager.LOSSES.add_component
class NewLoss(nn.Layer):
def __init__(self, param1, ignore_index=255):
pass
def forward(self, x):
pass
Step 1: Put new_loss.py under paddleseg/models/losses.
Step 2: Add @manager.LOSSES.add_component above your loss class.
Step 3: Import your class in paddleseg/models/losses/__init__.py, like this:
from .new_loss import NewLoss
Step 4: Specify the loss name in a yaml file:
loss:
types:
- type: NewLoss
param1: ...
coef: [1]
If you intent to implement a new transform (data augmentation), e.g. NewTrans.
@manager.TRANSFORMS.add_component
class NewTrans(nn.Layer):
def __init__(self, param1):
pass
def __call__(self, im, label=None):
...
if label is None:
return (im, )
else:
return (im, label)
Step 1: Define the NewTrans class in paddleseg/transforms/transforms.py.
Step 2: Add @manager.TRANSFORMS.add_component above your transform class. That's all.
Step 3: Specify the transform name in a yaml file:
train_dataset:
transforms:
- type: NewTrans
param1: ...
Note: For better readability,please implement detailed transformation functions in paddleseg/transforms/functional.py.
If you intent to add a new backbone network, e.g. NewBackbone in new_backbone.py.
import paddle.nn as nn
from paddleseg.cvlibs import manager
@manager.BACKBONES.add_component
class NewBackbone(nn.Layer):
def __init__(self, param1):
pass
def forward(self, x):
pass
Step 1: Put new_backbone.py under paddleseg/models/backbones.
Step 2: Add @manager.BACKBONES.add_component above your backbone class.
Step 3: Import your class in paddleseg/models/backbones/__init__.py, like this:
from .new_backbone import NewBackbone
Step 4: Specify the backbone name in a yaml file:
model:
backbone:
type: NewBackbone
param1: ...
If you intent to add a new dataset, e.g. NewData in new_data.py.
from paddleseg..dataset import Dataset
from paddleseg.cvlibs import manager
@manager.DATASETS.add_component
class NewData(Dataset):
def __init__(self,
dataset_root=None,
transforms=None,
mode='train'):
pass
Step 1: Put new_data.py under paddleseg/datasets.
Step 2: Add @manager.DATASETS.add_component above your dataset class.
Step 3: Import your class in paddleseg/datasets/__init__.py, like this:
from .new_data import NewData
Step 4: Specify the backbone name in a yaml file:
train_dataset:
type: NewData
dataset_root: ...
mode: train
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。