소스 검색

Init res docs

Bobholamovic 2 년 전
부모
커밋
ceddb51a80
6개의 변경된 파일70개의 추가작업 그리고 8개의 파일을 삭제
  1. 4 0
      docs/apis/data.md
  2. 7 3
      docs/apis/infer.md
  3. 11 1
      docs/apis/train.md
  4. 3 3
      docs/dev/dev_guide.md
  5. 9 1
      tests/deploy/test_predictor.py
  6. 36 0
      tests/rs_models/test_res_models.py

+ 4 - 0
docs/apis/data.md

@@ -84,6 +84,9 @@
 
 - file list中的每一行应该包含2个以空格分隔的项,依次表示输入影像相对`data_dir`的路径以及[Pascal VOC格式](http://host.robots.ox.ac.uk/pascal/VOC/)标注文件相对`data_dir`的路径。
 
+### 图像复原数据集`ResDataset`
+
+
 ### 图像分割数据集`SegDataset`
 
 `SegDataset`定义在:https://github.com/PaddlePaddle/PaddleRS/blob/develop/paddlers/datasets/seg_dataset.py
@@ -143,6 +146,7 @@
 |`'aux_masks'`|图像分割/变化检测任务中的辅助标签路径或数据。|
 |`'gt_bbox'`|目标检测任务中的检测框标注数据。|
 |`'gt_poly'`|目标检测任务中的多边形标注数据。|
+|`'target'`|图像复原中的目标影像路径或数据。|
 
 ### 组合数据变换算子
 

+ 7 - 3
docs/apis/infer.md

@@ -26,7 +26,7 @@ def predict(self, img_file, transforms=None):
 若`img_file`是一个元组,则返回对象为包含下列键值对的字典:
 
 ```
-{"label map": 输出类别标签(以[h, w]格式排布),"score_map": 模型输出的各类别概率(以[h, w, c]格式排布)}
+{"label_map": 输出类别标签(以[h, w]格式排布),"score_map": 模型输出的各类别概率(以[h, w, c]格式排布)}
 ```
 
 若`img_file`是一个列表,则返回对象为与`img_file`等长的列表,其中的每一项为一个字典(键值对如上所示),顺序对应`img_file`中的每个元素。
@@ -51,7 +51,7 @@ def predict(self, img_file, transforms=None):
 若`img_file`是一个字符串或NumPy数组,则返回对象为包含下列键值对的字典:
 
 ```
-{"label map": 输出类别标签,
+{"label_map": 输出类别标签,
  "scores_map": 输出类别概率,
  "label_names_map": 输出类别名称}
 ```
@@ -87,6 +87,10 @@ def predict(self, img_file, transforms=None):
 
 若`img_file`是一个列表,则返回对象为与`img_file`等长的列表,其中的每一项为一个由字典(键值对如上所示)构成的列表,顺序对应`img_file`中的每个元素。
 
+#### `BaseRestorer.predict()`
+
+
+
 #### `BaseSegmenter.predict()`
 
 接口形式:
@@ -107,7 +111,7 @@ def predict(self, img_file, transforms=None):
 若`img_file`是一个字符串或NumPy数组,则返回对象为包含下列键值对的字典:
 
 ```
-{"label map": 输出类别标签(以[h, w]格式排布),"score_map": 模型输出的各类别概率(以[h, w, c]格式排布)}
+{"label_map": 输出类别标签(以[h, w]格式排布),"score_map": 模型输出的各类别概率(以[h, w, c]格式排布)}
 ```
 
 若`img_file`是一个列表,则返回对象为与`img_file`等长的列表,其中的每一项为一个字典(键值对如上所示),顺序对应`img_file`中的每个元素。

+ 11 - 1
docs/apis/train.md

@@ -18,11 +18,15 @@
 - `use_mixed_loss`参将在未来被弃用,因此不建议使用。
 - 不同的子类支持与模型相关的输入参数,详情请参考[模型定义](https://github.com/PaddlePaddle/PaddleRS/blob/develop/paddlers/rs_models/clas)和[训练器定义](https://github.com/PaddlePaddle/PaddleRS/blob/develop/paddlers/tasks/classifier.py)。
 
-### 初始化`Baseetector`子类对象
+### 初始化`BaseDetector`子类对象
 
 - 一般支持设置`num_classes`和`backbone`参数,分别表示模型输出类别数以及所用的骨干网络类型。相比其它任务,目标检测任务的训练器支持设置的初始化参数较多,囊括网络结构、损失函数、后处理策略等方面。
 - 不同的子类支持与模型相关的输入参数,详情请参考[模型定义](https://github.com/PaddlePaddle/PaddleRS/blob/develop/paddlers/rs_models/det)和[训练器定义](https://github.com/PaddlePaddle/PaddleRS/blob/develop/paddlers/tasks/object_detector.py)。
 
+### 初始化`BaseRestorer`子类对象
+
+
+
 ### 初始化`BaseSegmenter`子类对象
 
 - 一般支持设置`input_channel`、`num_classes`以及`use_mixed_loss`参数,分别表示输入通道数、输出类别数以及是否使用预置的混合损失。部分模型如`FarSeg`暂不支持对`input_channel`参数的设置。
@@ -170,6 +174,9 @@ def train(self,
 |`use_vdl`|`bool`|是否启用VisualDL日志。|`True`|
 |`resume_checkpoint`|`str` \| `None`|检查点路径。PaddleRS支持从检查点(包含先前训练过程中存储的模型权重和优化器权重)继续训练,但需注意`resume_checkpoint`与`pretrain_weights`不得同时设置为`None`以外的值。|`None`|
 
+### `BaseRestorer.train()`
+
+
 ### `BaseSegmenter.train()`
 
 接口形式:
@@ -311,6 +318,9 @@ def evaluate(self,
  "mask": 预测得到的掩模图信息}
 ```
 
+### `BaseRestorer.evaluate()`
+
+
 ### `BaseSegmenter.evaluate()`
 
 接口形式:

+ 3 - 3
docs/dev/dev_guide.md

@@ -22,7 +22,7 @@
 
 在子目录中新建文件,以`{模型名称小写}.py`命名。在文件中编写完整的模型定义。
 
-新模型必须是`paddle.nn.Layer`的子类。对于图像分割、目标检测和场景分类任务,分别需要遵循[PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg)、[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)[PaddleClas](https://github.com/PaddlePaddle/PaddleClas)套件中制定的相关规范。**对于变化检测、场景分类和图像分割任务,模型构造时必须传入`num_classes`参数以指定输出的类别数目**对于变化检测任务,模型定义需遵循的规范与分割模型类似,但有以下几点不同:
+新模型必须是`paddle.nn.Layer`的子类。对于图像分割、目标检测、场景分类和图像复原任务,分别需要遵循[PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg)、[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)[PaddleClas](https://github.com/PaddlePaddle/PaddleClas)和[PaddleGAN](https://github.com/PaddlePaddle/PaddleGAN)套件中制定的相关规范。**对于变化检测、场景分类和图像分割任务,模型构造时必须传入`num_classes`参数以指定输出的类别数目。对于图像复原任务,模型构造时必须传入`rs_factor`参数以指定超分辨率缩放倍数(对于非超分辨率模型,将此参数设置为`None`)。**对于变化检测任务,模型定义需遵循的规范与分割模型类似,但有以下几点不同:
 
 - `forward()`方法接受3个输入参数,分别是`self`、`t1`和`t2`,其中`t1`和`t2`分别表示前、后两个时相的输入影像。
 - 对于多任务变化检测模型(例如模型同时输出变化检测结果与两个时相的建筑物提取结果),需要指定类的`USE_MULTITASK_DECODER`属性为`True`,同时在`OUT_TYPES`属性中设置模型前向输出的列表中每一个元素对应的标签类型。可参考`ChangeStar`模型的定义。
@@ -64,7 +64,7 @@ Args:
 2. 在`paddlers/tasks`目录中找到任务对应的训练器定义文件(例如变化检测任务对应`paddlers/tasks/change_detector.py`)。
 
 3. 在文件尾部追加新的训练器定义。训练器需要继承自相关的基类(例如`BaseChangeDetector`),重写`__init__()`方法,并根据需要重写其他方法。对训练器`__init__()`方法编写的要求如下:
-    - 对于变化检测、场景分类、目标检测、图像分割任务,`__init__()`方法的第1个输入参数是`num_classes`,表示模型输出类别数对于变化检测、场景分类、图像分割任务,第2个输入参数是`use_mixed_loss`,表示用户是否使用默认定义的混合损失。
+    - 对于变化检测、场景分类、目标检测、图像分割任务,`__init__()`方法的第1个输入参数是`num_classes`,表示模型输出类别数对于变化检测、场景分类、图像分割任务,第2个输入参数是`use_mixed_loss`,表示用户是否使用默认定义的混合损失;第3个输入参数是`losses`,表示训练时使用的损失函数。对于图像复原任务,第1个参数是`losses`,含义同上;第2个参数是`rs_factor`,表示超分辨率缩放倍数
     - `__init__()`的所有输入参数都必须有默认值,且在**取默认值的情况下,模型接收3通道RGB输入**。
     - 在`__init__()`中需要更新`params`字典,该字典中的键值对将被用作模型构造时的输入参数。
 
@@ -78,7 +78,7 @@ Args:
 
 ### 2.2 新增数据预处理/数据增强算子
 
-在`paddlers/transforms/operators.py`中定义新算子,所有算子均继承自`paddlers.transforms.Transform`类。算子的`apply()`方法接收一个字典`sample`作为输入,取出其中存储的相关对象,处理后对字典进行in-place修改,最后返回修改后的字典。在定义算子时,只有极少数的情况需要重写`apply()`方法。大多数情况下,只需要重写`apply_im()`、`apply_mask()`、`apply_bbox()`和`apply_segm()`方法就分别可以实现对输入图像、分割标签、目标框以及目标多边形的处理。
+在`paddlers/transforms/operators.py`中定义新算子,所有算子均继承自`paddlers.transforms.Transform`类。算子的`apply()`方法接收一个字典`sample`作为输入,取出其中存储的相关对象,处理后对字典进行in-place修改,最后返回修改后的字典。在定义算子时,只有极少数的情况需要重写`apply()`方法。大多数情况下,只需要重写`apply_im()`、`apply_mask()`、`apply_bbox()`和`apply_segm()`方法就分别可以实现对图像、分割标签、目标框以及目标多边形的处理。
 
 如果处理逻辑较为复杂,建议先封装为函数,添加到`paddlers/transforms/functions.py`中,然后在算子的`apply*()`方法中调用函数。
 

+ 9 - 1
tests/deploy/test_predictor.py

@@ -24,7 +24,7 @@ from testing_utils import CommonTest, run_script
 
 __all__ = [
     'TestCDPredictor', 'TestClasPredictor', 'TestDetPredictor',
-    'TestSegPredictor'
+    'TestResPredictor', 'TestSegPredictor'
 ]
 
 
@@ -302,6 +302,14 @@ class TestDetPredictor(TestPredictor):
         self.assertEqual(len(out_multi_array_t), num_inputs)
 
 
+@TestPredictor.add_tests
+class TestResPredictor(TestPredictor):
+    MODULE = pdrs.tasks.restorer
+
+    def check_predictor(self, predictor, trainer):
+        pass
+
+
 @TestPredictor.add_tests
 class TestSegPredictor(TestPredictor):
     MODULE = pdrs.tasks.segmenter

+ 36 - 0
tests/rs_models/test_res_models.py

@@ -0,0 +1,36 @@
+# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import paddlers
+from rs_models.test_model import TestModel
+
+__all__ = ['TestRCANModel']
+
+
+class TestResModel(TestModel):
+    def check_output(self, output, target):
+        pass
+
+    def set_inputs(self):
+        pass
+
+    def set_targets(self):
+        pass
+
+
+class TestRCANModel(TestSegModel):
+    MODEL_CLASS = paddlers.rs_models.res.RCAN
+
+    def set_specs(self):
+        pass