diff --git a/docs/apis/datasets/classification.md b/docs/apis/datasets/classification.md deleted file mode 100755 index 54eb69a40ec08e2b89f9dd1ce3c0858594f2df0e..0000000000000000000000000000000000000000 --- a/docs/apis/datasets/classification.md +++ /dev/null @@ -1,38 +0,0 @@ -# 图像分类数据集 - -## ImageNet -``` -paddlex.datasets.ImageNet(data_dir, file_list, label_list, transforms=None, num_workers=‘auto’, buffer_size=100, parallel_method='thread', shuffle=False) -``` -读取ImageNet格式的分类数据集,并对样本进行相应的处理。ImageNet数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) - -示例:[代码文件](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/classification/mobilenetv2.py#L25) - -> **参数** - -> > * **data_dir** (str): 数据集所在的目录路径。 -> > * **file_list** (str): 描述数据集图片文件和类别id的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 -> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 -> > * **transforms** (paddlex.cls.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.cls.transforms](./transforms/cls_transforms.md)。 -> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 -> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 -> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 -> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 - -## EasyDataCls -``` -paddlex.datasets.EasyDatasetCls(data_dir, file_list, label_list, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) -``` - -> 读取EasyData平台标注图像分类数据集,并对样本进行相应的处理。EasyData图像分类任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md)。 - -> **参数** - -> > * **data_dir** (str): 数据集所在的目录路径。 -> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 -> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 -> > * **transforms** (paddlex.seg.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.cls.transforms](./transforms/cls_transforms.md)。 -> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 -> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 -> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 -> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 diff --git a/docs/apis/datasets/dataset_convert.md b/docs/apis/datasets/dataset_convert.md deleted file mode 100644 index 2a04c8013bb5ea32b761fa28dad7fa9a6e09db99..0000000000000000000000000000000000000000 --- a/docs/apis/datasets/dataset_convert.md +++ /dev/null @@ -1,42 +0,0 @@ -# 数据集转换 -## labelme2voc -```python -pdx.tools.labelme2voc(image_dir, json_dir, dataset_save_dir) -``` -将LabelMe标注的数据集转换为VOC数据集。 - -> **参数** -> > * **image_dir** (str): 图像文件存放的路径。 -> > * **json_dir** (str): 与每张图像对应的json文件的存放路径。 -> > * **dataset_save_dir** (str): 转换后数据集存放路径。 - -## 其它数据集转换 -### easydata2imagenet -```python -pdx.tools.easydata2imagenet(image_dir, json_dir, dataset_save_dir) -``` -### easydata2voc -```python -pdx.tools.easydata2voc(image_dir, json_dir, dataset_save_dir) -``` -### easydata2coco -```python -pdx.tools.easydata2coco(image_dir, json_dir, dataset_save_dir) -``` -### easydata2seg -```python -pdx.tools.easydata2seg(image_dir, json_dir, dataset_save_dir) -``` -### labelme2coco -```python -pdx.tools.labelme2coco(image_dir, json_dir, dataset_save_dir) -``` -### labelme2seg -```python -pdx.tools.labelme2seg(image_dir, json_dir, dataset_save_dir) -``` -### jingling2seg -```python -pdx.tools.jingling2seg(image_dir, json_dir, dataset_save_dir) -``` - diff --git a/docs/apis/datasets/detection.md b/docs/apis/datasets/detection.md deleted file mode 100755 index a32b6be5de6246ef6e28ebe376ded7e3faf82ff7..0000000000000000000000000000000000000000 --- a/docs/apis/datasets/detection.md +++ /dev/null @@ -1,93 +0,0 @@ -# 检测和实例分割数据集 - -## VOCDetection类 - -``` -paddlex.datasets.VOCDetection(data_dir, file_list, label_list, transforms=None, num_workers=‘auto’, buffer_size=100, parallel_method='thread', shuffle=False) -``` - -> 仅用于**目标检测**。读取PascalVOC格式的检测数据集,并对样本进行相应的处理。PascalVOC数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) - -> 示例:[代码文件](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/detection/yolov3_darknet53.py#L29) - -> **参数** - -> > * **data_dir** (str): 数据集所在的目录路径。 -> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 -> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 -> > * **transforms** (paddlex.det.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.det.transforms](./transforms/det_transforms.md)。 -> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 -> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 -> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 -> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 - -> 【可选】支持在训练过程中加入无目标真值的背景图片来减少背景误检,定义VOCDetection类后调用其成员函数`add_negative_samples`添加背景图片即可: -> ``` -> add_negative_samples(image_dir) -> ``` -> > 示例:[代码](../../tuning_strategy/detection/negatives_training.html#id4) - -> > **参数** - -> > > * **image_dir** (str): 背景图片所在的目录路径。 - -## CocoDetection类 - -``` -paddlex.datasets.CocoDetection(data_dir, ann_file, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) -``` - -> 用于**目标检测或实例分割**。读取MSCOCO格式的检测数据集,并对样本进行相应的处理,该格式的数据集同样可以应用到实例分割模型的训练中。MSCOCO数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) - -> 示例:[代码文件](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/detection/mask_rcnn_r50_fpn.py#L27) - -> **参数** - -> > * **data_dir** (str): 数据集所在的目录路径。 -> > * **ann_file** (str): 数据集的标注文件,为一个独立的json格式文件。 -> > * **transforms** (paddlex.det.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.det.transforms](./transforms/det_transforms.md)。 -> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 -> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 -> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 -> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 - -> 【可选】支持在训练过程中加入无目标真值的背景图片来减少背景误检,定义CocoDetection类后调用其成员函数`add_negative_samples`添加背景图片即可: -> ``` -> add_negative_samples(image_dir) -> ``` -> > 示例:[代码](../../tuning_strategy/detection/negatives_training.html#id4) - -> > **参数** - -> > > * **image_dir** (str): 背景图片所在的目录路径。 - -## EasyDataDet类 - -``` -paddlex.datasets.EasyDataDet(data_dir, file_list, label_list, transforms=None, num_workers=‘auto’, buffer_size=100, parallel_method='thread', shuffle=False) -``` - -> 用于**目标检测或实例分割**。读取EasyData目标检测格式数据集,并对样本进行相应的处理,该格式的数据集同样可以应用到实例分割模型的训练中。EasyData目标检测或实例分割任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) - - -> **参数** - -> > * **data_dir** (str): 数据集所在的目录路径。 -> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 -> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 -> > * **transforms** (paddlex.det.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.det.transforms](./transforms/det_transforms.md)。 -> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 -> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 -> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 -> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 - - -> 【可选】支持在训练过程中加入无目标真值的背景图片来减少背景误检,定义EasyDataDet类后调用其成员函数`add_negative_samples`添加背景图片即可: -> ``` -> add_negative_samples(image_dir) -> ``` -> > 示例:[代码](../../tuning_strategy/detection/negatives_training.html#id4) - -> > **参数** - -> > > * **image_dir** (str): 背景图片所在的目录路径。 diff --git a/docs/apis/datasets/index.rst b/docs/apis/datasets/index.rst deleted file mode 100755 index 06326e441d1573521d1030eaaeaca8364899b2c6..0000000000000000000000000000000000000000 --- a/docs/apis/datasets/index.rst +++ /dev/null @@ -1,32 +0,0 @@ -数据集-datasets -============================ - -PaddleX目前支持主流的CV数据集格式和 `EasyData `_ 数据标注平台的标注数据格式,此外PaddleX也提升了数据格式转换工具API,支持包括LabelMe,精灵标注助手和EasyData平台数据格式的转换,可以参考PaddleX的tools API文档。 - -下表为各数据集格式与相应任务的对应关系, - -+------------------------+------------+----------+----------+----------+ -| 数据集格式 | 图像分类 | 目标检测 | 实例分割 | 语义分割 | -+========================+============+==========+==========+==========+ -| ImageNet | √ | - | - | - | -+------------------------+------------+----------+----------+----------+ -| VOCDetection | - | √ | - | - | -+------------------------+------------+----------+----------+----------+ -| CocoDetection | - | √ | √ | - | -+------------------------+------------+----------+----------+----------+ -| SegDataset | - | - | - | √ | -+------------------------+------------+----------+----------+----------+ -| EasyDataCls | √ | - | - | - | -+------------------------+------------+----------+----------+----------+ -| EasyDataDet | - | √ | √ | - | -+------------------------+------------+----------+----------+----------+ -| EasyDataSeg | - | - | - | √ | -+------------------------+------------+----------+----------+----------+ - -.. toctree:: - :maxdepth: 2 - - classification.md - detection.md - semantic_segmentation.md - dataset_convert.md diff --git a/docs/apis/datasets/semantic_segmentation.md b/docs/apis/datasets/semantic_segmentation.md deleted file mode 100755 index 7aa4c21af7e1ebee850b185dea4f5d052abad167..0000000000000000000000000000000000000000 --- a/docs/apis/datasets/semantic_segmentation.md +++ /dev/null @@ -1,42 +0,0 @@ -# 语义分割数据集 - -## SegDataset类 - -``` -paddlex.datasets.SegDataset(data_dir, file_list, label_list, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) -``` - -> 读取语义分割任务数据集,并对样本进行相应的处理。语义分割任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) - -> 示例:[代码文件](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/segmentation/unet.py#L27) - -> **参数** - -> > * **data_dir** (str): 数据集所在的目录路径。 -> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 -> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 -> > * **transforms** (paddlex.seg.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.seg.transforms](./transforms/seg_transforms.md)。 -> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 -> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 -> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 -> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 - -## EasyDataSeg类 - -``` -paddlex.datasets.EasyDataSeg(data_dir, file_list, label_list, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) -``` - -> 读取EasyData语义分割任务数据集,并对样本进行相应的处理。EasyData语义分割任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) - - -> **参数** - -> > * **data_dir** (str): 数据集所在的目录路径。 -> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 -> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 -> > * **transforms** (paddlex.seg.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.seg.transforms](./transforms/seg_transforms.md)。 -> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 -> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 -> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 -> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 diff --git a/docs/apis/visualize.md b/docs/apis/visualize.md index eb4777a1e99f130c99ba4d11fd2542511a046b31..f04e86acc8ec1cb82355bac508952438a714d8b0 100755 --- a/docs/apis/visualize.md +++ b/docs/apis/visualize.md @@ -16,12 +16,12 @@ paddlex.det.visualize(image, result, threshold=0.5, save_dir='./') > * **save_dir**(str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下。默认值为'./'。 ### 使用示例 -> 点击下载如下示例中的[模型](https://bj.bcebos.com/paddlex/models/xiaoduxiong_epoch_12.tar.gz)和[测试图片](https://bj.bcebos.com/paddlex/datasets/xiaoduxiong.jpeg) +> 点击下载如下示例中的[模型](https://bj.bcebos.com/paddlex/models/xiaoduxiong_epoch_12.tar.gz) ``` import paddlex as pdx model = pdx.load_model('xiaoduxiong_epoch_12') -result = model.predict('xiaoduxiong.jpeg') -pdx.det.visualize('xiaoduxiong.jpeg', result, save_dir='./') +result = model.predict('./xiaoduxiong_epoch_12/xiaoduxiong.jpeg') +pdx.det.visualize('./xiaoduxiong_epoch_12/xiaoduxiong.jpeg', result, save_dir='./') # 预测结果保存在./visualize_xiaoduxiong.jpeg ``` ## paddlex.seg.visualize diff --git a/docs/appendix/anaconda_install.md b/docs/appendix/anaconda_install.md index 154be30928496da632ac5f67f3e7ee27fe05bc48..0484ea720bd944351efe1de63bce06d87d6429db 100755 --- a/docs/appendix/anaconda_install.md +++ b/docs/appendix/anaconda_install.md @@ -8,7 +8,7 @@ Anaconda是一个开源的Python发行版本,其包含了conda、Python等180 ### 第二步 安装 运行下载的安装包(以.exe为后辍),根据引导完成安装, 用户可自行修改安装目录(如下图) -![](../images/anaconda_windows.png) +![](images/anaconda_windows.png) ### 第三步 使用 - 点击Windows系统左下角的Windows图标,打开:所有程序->Anaconda3/2(64-bit)->Anaconda Prompt diff --git a/docs/appendix/datasets.md b/docs/appendix/datasets.md deleted file mode 100644 index e966205c1c39eb8e68d9366db324c984a8a42134..0000000000000000000000000000000000000000 --- a/docs/appendix/datasets.md +++ /dev/null @@ -1,367 +0,0 @@ -# 数据集格式说明 - ---- -## 图像分类ImageNet - -图像分类ImageNet数据集包含对应多个标签的图像文件夹、标签文件及图像列表文件。 -参考数据文件结构如下: -``` -./dataset/ # 数据集根目录 -|--labelA # 标签为labelA的图像目录 -| |--a1.jpg -| |--... -| └--... -| -|--... -| -|--labelZ # 标签为labelZ的图像目录 -| |--z1.jpg -| |--... -| └--... -| -|--train_list.txt # 训练文件列表文件 -| -|--val_list.txt # 验证文件列表文件 -| -└--labels.txt # 标签列表文件 - -``` -其中,相应的文件名可根据需要自行定义。 - -`train_list.txt`和`val_list.txt`文本以空格为分割符分为两列,第一列为图像文件相对于dataset的相对路径,第二列为图像文件对应的标签id(从0开始)。如下所示: -``` -labelA/a1.jpg 0 -labelZ/z1.jpg 25 -... -``` - -`labels.txt`: 每一行为一个单独的类别,相应的行号即为类别对应的id(行号从0开始),如下所示: -``` -labelA -labelB -... -``` -[点击这里](https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz),下载蔬菜分类分类数据集。 -在PaddleX中,使用`paddlex.cv.datasets.ImageNet`([API说明](../apis/datasets/classification.html#imagenet))加载分类数据集。 - -## 目标检测VOC -目标检测VOC数据集包含图像文件夹、标注信息文件夹、标签文件及图像列表文件。 -参考数据文件结构如下: -``` -./dataset/ # 数据集根目录 -|--JPEGImages # 图像目录 -| |--xxx1.jpg -| |--... -| └--... -| -|--Annotations # 标注信息目录 -| |--xxx1.xml -| |--... -| └--... -| -|--train_list.txt # 训练文件列表文件 -| -|--val_list.txt # 验证文件列表文件 -| -└--labels.txt # 标签列表文件 - -``` -其中,相应的文件名可根据需要自行定义。 - -`train_list.txt`和`val_list.txt`文本以空格为分割符分为两列,第一列为图像文件相对于dataset的相对路径,第二列为标注文件相对于dataset的相对路径。如下所示: -``` -JPEGImages/xxx1.jpg Annotations/xxx1.xml -JPEGImages/xxx2.jpg Annotations/xxx2.xml -... -``` - -`labels.txt`: 每一行为一个单独的类别,相应的行号即为类别对应的id(行号从0开始),如下所示: -``` -labelA -labelB -... -``` -[点击这里](https://bj.bcebos.com/paddlex/datasets/insect_det.tar.gz),下载昆虫检测数据集。 -在PaddleX中,使用`paddlex.cv.datasets.VOCDetection`([API说明](../apis/datasets/detection.html#vocdetection))加载目标检测VOC数据集。 - -## 目标检测和实例分割COCO -目标检测和实例分割COCO数据集包含图像文件夹及图像标注信息文件。 -参考数据文件结构如下: -``` -./dataset/ # 数据集根目录 -|--JPEGImages # 图像目录 -| |--xxx1.jpg -| |--... -| └--... -| -|--train.json # 训练相关信息文件 -| -└--val.json # 验证相关信息文件 - -``` -其中,相应的文件名可根据需要自行定义。 - -`train.json`和`val.json`存储与标注信息、图像文件相关的信息。如下所示: - -``` -{ - "annotations": [ - { - "iscrowd": 0, - "category_id": 1, - "id": 1, - "area": 33672.0, - "image_id": 1, - "bbox": [232, 32, 138, 244], - "segmentation": [[32, 168, 365, 117, ...]] - }, - ... - ], - "images": [ - { - "file_name": "xxx1.jpg", - "height": 512, - "id": 267, - "width": 612 - }, - ... - ] - "categories": [ - { - "name": "labelA", - "id": 1, - "supercategory": "component" - } - ] -} -``` -其中,每个字段的含义如下所示: - -| 域名 | 字段名 | 含义 | 数据类型 | 备注 | -|:-----|:--------|:------------|------|:-----| -| annotations | id | 标注信息id | int | 从1开始 | -| annotations | iscrowd | 标注框是否为一组对象 | int | 只有0、1两种取值 | -| annotations | category_id | 标注框类别id | int | | -| annotations | area | 标注框的面积 | float | | -| annotations | image_id | 当前标注信息所在图像的id | int | | -| annotations | bbox | 标注框坐标 | list | 长度为4,分别代表x,y,w,h | -| annotations | segmentation | 标注区域坐标 | list | list中有至少1个list,每个list由每个小区域坐标点的横纵坐标(x,y)组成 | -| images | id | 图像id | int | 从1开始 | -| images | file_name | 图像文件名 | str | | -| images | height | 图像高度 | int | | -| images | width | 图像宽度 | int | | -| categories | id | 类别id | int | 从1开始 | -| categories | name | 类别标签名 | str | | -| categories | supercategory | 类别父类的标签名 | str | | - - -[点击这里](https://bj.bcebos.com/paddlex/datasets/garbage_ins_det.tar.gz),下载垃圾实例分割数据集。 -在PaddleX中,使用`paddlex.cv.datasets.COCODetection`([API说明](../apis/datasets/detection.html#cocodetection))加载COCO格式数据集。 - -## 语义分割数据 -语义分割数据集包含原图、标注图及相应的文件列表文件。 -参考数据文件结构如下: -``` -./dataset/ # 数据集根目录 -|--images # 原图目录 -| |--xxx1.png -| |--... -| └--... -| -|--annotations # 标注图目录 -| |--xxx1.png -| |--... -| └--... -| -|--train_list.txt # 训练文件列表文件 -| -|--val_list.txt # 验证文件列表文件 -| -└--labels.txt # 标签列表 - -``` -其中,相应的文件名可根据需要自行定义。 - -`train_list.txt`和`val_list.txt`文本以空格为分割符分为两列,第一列为图像文件相对于dataset的相对路径,第二列为标注图像文件相对于dataset的相对路径。如下所示: -``` -images/xxx1.png annotations/xxx1.png -images/xxx2.png annotations/xxx2.png -... -``` - -`labels.txt`: 每一行为一个单独的类别,相应的行号即为类别对应的id(行号从0开始),如下所示: -``` -background -labelA -labelB -... -``` - -标注图像为单通道图像,像素值即为对应的类别,像素标注类别需要从0开始递增(一般第一个类别为`background`), -例如0,1,2,3表示有4种类别,标注类别最多为256类。其中可以指定特定的像素值用于表示该值的像素不参与训练和评估(默认为255)。 - -[点击这里](https://bj.bcebos.com/paddlex/datasets/optic_disc_seg.tar.gz),下载视盘语义分割数据集。 -在PaddleX中,使用`paddlex.cv.datasets.SegReader`([API说明](../apis/datasets/semantic_segmentation.html#segdataset))加载语义分割数据集。 - - -## 图像分类EasyDataCls - -图像分类EasyDataCls数据集包含存放图像和json文件的文件夹、标签文件及图像列表文件。 -参考数据文件结构如下: -``` -./dataset/ # 数据集根目录 -|--easydata # 存放图像和json文件的文件夹 -| |--0001.jpg -| |--0001.json -| |--0002.jpg -| |--0002.json -| └--... -| -|--train_list.txt # 训练文件列表文件 -| -|--val_list.txt # 验证文件列表文件 -| -└--labels.txt # 标签列表文件 - -``` -其中,图像文件名应与json文件名一一对应。 - -每个json文件存储于`labels`相关的信息。如下所示: -``` -{"labels": [{"name": "labelA"}]} -``` -其中,`name`字段代表对应图像的类别。 - -`train_list.txt`和`val_list.txt`文本以空格为分割符分为两列,第一列为图像文件相对于dataset的相对路径,第二列为json文件相对于dataset的相对路径。如下所示: -``` -easydata/0001.jpg easydata/0001.json -easydata/0002.jpg easydata/0002.json -... -``` - -`labels.txt`: 每一行为一个单独的类别,相应的行号即为类别对应的id(行号从0开始),如下所示: -``` -labelA -labelB -... -``` -[点击这里](https://ai.baidu.com/easydata/),可以标注图像分类EasyDataCls数据集。 -在PaddleX中,使用`paddlex.cv.datasets.EasyDataCls`([API说明](../apis/datasets/classification.html#easydatacls))加载分类数据集。 - - -## 目标检测和实例分割EasyDataDet - -目标检测和实例分割EasyDataDet数据集包含存放图像和json文件的文件夹、标签文件及图像列表文件。 -参考数据文件结构如下: -``` -./dataset/ # 数据集根目录ß -|--easydata # 存放图像和json文件的文件夹 -| |--0001.jpg -| |--0001.json -| |--0002.jpg -| |--0002.json -| └--... -| -|--train_list.txt # 训练文件列表文件 -| -|--val_list.txt # 验证文件列表文件 -| -└--labels.txt # 标签列表文件 - -``` -其中,图像文件名应与json文件名一一对应。 - -每个json文件存储于`labels`相关的信息。如下所示: -``` -"labels": [{"y1": 18, "x2": 883, "x1": 371, "y2": 404, "name": "labelA", - "mask": "kVfc0`0Zg0 注: acck准确率是针对一张图片进行计算的:把模型在各个类别上的预测得分按从高往低进行排序,取出前k个预测类别,若这k个预测类别包含了真值类,则认为该图片分类正确。 -![](../images/cls_train.png) +![](images/cls_train.png) 上图中第1行中的`acc1`表示参与当前迭代步数的训练样本的平均top1准确率,值越高代表模型越优;`acc5`表示参与当前迭代步数的训练样本的平均top5(若类别数n少于5,则为topn)准确率,值越高代表模型越优。第4行中的`loss`表示整个训练集的平均损失函数值,`acc1`表示整个训练集的平均top1准确率,`acc5`表示整个训练集的平均top5准确率。 @@ -46,7 +46,7 @@ PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epoc ### 评估日志字段 -![](../images/cls_eval.png) +![](images/cls_eval.png) 上图中第3行中的`acc1`表示整个验证集的平均top1准确率,`acc5`表示整个验证集的平均top5准确率。 @@ -59,7 +59,7 @@ PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epoc YOLOv3的训练日志只包括训练通用统计信息(见上文训练通用统计信息)。 -![](../images/yolo_train.png) +![](images/yolo_train.png) 上图中第5行`loss`表示整个训练集的平均损失函数loss值。 @@ -75,7 +75,7 @@ FasterRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`lo | loss_rpn_bbox | RPN子网络中检测框回归损失函数值 | | loss | 所有子网络损失函数值之和 | -![](../images/faster_train.png) +![](images/faster_train.png) 上图中第1行`loss`, `loss_cls`、`loss_bbox`、`loss_rpn_clss`、`loss_rpn_bbox`都是参与当前迭代步数的训练样本的损失值,而第7行是针整个训练集的损失函数值。 @@ -93,7 +93,7 @@ MaskRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`loss | loss_rpn_bbox | RPN子网络中检测框回归损失函数值 | | loss | 所有子网络损失函数值之和 | -![](../images/mask_train.png) +![](images/mask_train.png) 上图中第1行`loss`, `loss_cls`、`loss_bbox`、`loss_mask`、`loss_rpn_clss`、`loss_rpn_bbox`都是参与当前迭代步数的训练样本的损失值,而第7行是针整个训练集的损失函数值。 @@ -103,7 +103,7 @@ MaskRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`loss #### VOC评估标准 -![](../images/voc_eval.png) +![](images/voc_eval.png) > 注:`map`为平均准确率的平均值,即IoU(Intersection Over Union)取0.5时各个类别的准确率-召回率曲线下面积的平均值。 @@ -115,11 +115,11 @@ MaskRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`loss COCO格式的数据集不仅可以用于训练目标检测模型,也可以用于训练实例分割模型。在目标检测中,PaddleX主要反馈针对检测框的`bbox_mmAP`指标;在实例分割中,还包括针对Mask的`seg_mmAP`指标。如下所示,第一张日志截图为目标检测的评估结果,第二张日志截图为实例分割的评估结果。 -![](../images/faster_eval.png) +![](images/faster_eval.png) 上图中红框标注的`bbox_mmap`表示整个验证集的检测框平均准确率平均值。 -![](../images/mask_eval.png) +![](images/mask_eval.png) 上图中红框标注的`bbox_mmap`和`seg_mmap`分别表示整个验证集的检测框平均准确率平均值、Mask平均准确率平均值。 ## 分割特有统计信息 @@ -128,7 +128,7 @@ COCO格式的数据集不仅可以用于训练目标检测模型,也可以用 语义分割的训练日志只包括训练通用统计信息(见上文训练通用统计信息)。 -![](../images/seg_train.png) +![](images/seg_train.png) ### 评估日志字段 @@ -142,4 +142,4 @@ COCO格式的数据集不仅可以用于训练目标检测模型,也可以用 | category_acc | 各类别的准确率,即各类别预测正确的像素数/预测为该类别的总像素数 | | kappa | kappa系数,用于一致性检验 | -![](../images/seg_eval.png) +![](images/seg_eval.png) diff --git a/docs/appendix/parameters.md b/docs/appendix/parameters.md index 408f2faf351f63f1474d4777d38c4ea9124fd12f..d0f913600aa3a402be95ae9b998b3dfc2dd45901 100644 --- a/docs/appendix/parameters.md +++ b/docs/appendix/parameters.md @@ -23,7 +23,7 @@ Epoch数是模型训练过程,迭代的轮数,用户可以设置较大的数 `lr_decay_epochs`用于让学习率在模型训练后期逐步衰减,它一般是一个list,如[6, 8, 10],表示学习率在第6个epoch时衰减一次,第8个epoch时再衰减一次,第10个epoch时再衰减一次。每次学习率衰减为之前的学习率*lr_decay_gamma。 -> 例如YOLOv3的train接口,默认`num_epochs`为270,`learning_rate`为0.000125, `lr_decay_epochs`为[213, 240],`lr_decay_gamma`为0.1;在此参数配置下表示,模型在启动训练后,在前213个epoch中,训练时使用的学习率为0.000125,在第213至240个epoch之间,训练使用的学习率为0.000125*0.1,在240个epoch之后,使用的学习率为0.000125*0.1*0.1 +> 例如YOLOv3的train接口,默认`num_epochs`为270,`learning_rate`为0.000125, `lr_decay_epochs`为[213, 240],`lr_decay_gamma`为0.1;在此参数配置下表示,模型在启动训练后,在前213个epoch中,训练时使用的学习率为0.000125,在第213至240个epoch之间,训练使用的学习率为0.000125x0.1=0.0000125,在240个epoch之后,使用的学习率为0.000125x0.1x0.1=0.00000125 ## 5.参数设定时的约束 根据上述几个参数,可以了解到学习率的变化分为WarmUp热身阶段和Decay衰减阶段, diff --git a/docs/change_log.md b/docs/change_log.md index bc8bf5feda99761544232aaf348966e0c945b1db..bf1da23bcbd9facb293afa20a020a879ca90647d 100644 --- a/docs/change_log.md +++ b/docs/change_log.md @@ -1,7 +1,7 @@ # 更新日志 -**v1.1.0** 2020.07.10 +**v1.1.0** 2020.07.12 - 模型更新 > - 新增语义分割模型HRNet、FastSCNN diff --git a/docs/conf.py b/docs/conf.py index 6313188c25f83092e7d8f69019936c3d7223cd54..1f62b6bf6340a2ddd61d4744dcd75590d4ec805c 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -76,5 +76,4 @@ if not on_rtd: # only import and set the theme if we're building docs locally html_static_path = ['_static'] -html_logo = 'images/paddlex.jpg' - +html_logo = 'paddlex.png' diff --git a/docs/index.rst b/docs/index.rst index 8308b56bf1eb330fcf608ddd33132339dd47d7d5..b95bed141e17ba80f4fc21958ac3287648e13b05 100755 --- a/docs/index.rst +++ b/docs/index.rst @@ -17,5 +17,4 @@ PaddleX是基于飞桨核心框架、开发套件和工具组件的深度学习 gui/index apis/index change_log.md - FAQ.md appendix/index diff --git a/docs/install.md b/docs/install.md index d513fab442c8d6139c3850b3d1228dae6e52a671..f087632aaf65e55279b43bdcdd40223c93886c66 100755 --- a/docs/install.md +++ b/docs/install.md @@ -2,12 +2,7 @@ 以下安装过程默认用户已安装好**paddlepaddle-gpu或paddlepaddle(版本大于或等于1.8.1)**,paddlepaddle安装方式参照[飞桨官网](https://www.paddlepaddle.org.cn/install/quick) -- pip安装PaddleX -- github代码安装PaddleX -- pycocotools安装问题 - - -**安装方式一 pip安装** +## pip安装 > 注意其中pycocotools在Windows安装较为特殊,可参考下面的Windows安装命令 @@ -15,8 +10,11 @@ pip install paddlex -i https://mirror.baidu.com/pypi/simple ``` - -**安装方式二 Github代码安装** +## Anaconda安装 +Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。使用Anaconda可以通过创建多个独立的Python环境,避免用户的Python环境安装太多不同版本依赖导致冲突。 +- 参考[Anaconda安装PaddleX文档](appendix/anaconda_install.md) + +## 代码安装 github代码会跟随开发进度不断更新 @@ -28,8 +26,8 @@ python setup.py install ``` - -**pycocotools安装问题** +## pycocotools安装问题 + > PaddleX依赖pycocotools包,如安装pycocotools失败,可参照如下方式安装pycocotools > Windows安装时可能会提示缺少`Microsoft Visual C++ 2015 build tools`,[点击下载VC build tools](https://go.microsoft.com/fwlink/?LinkId=691126)安装再执行如下pip命令 diff --git a/docs/paddlex.png b/docs/paddlex.png new file mode 100644 index 0000000000000000000000000000000000000000..bc1135abfab7aa48f29392da4bca614f688314af Binary files /dev/null and b/docs/paddlex.png differ diff --git a/docs/quick_start.md b/docs/quick_start.md index 8f4329b9b6194abc6c635660f0d3a2f7caf0ff57..db23eb58b71b72b72d3bedb7290a9d6b967ddaa2 100644 --- a/docs/quick_start.md +++ b/docs/quick_start.md @@ -2,11 +2,21 @@ 本文档在一个小数据集上展示了如何通过PaddleX进行训练,您可以阅读PaddleX的**使用教程**来了解更多模型任务的训练使用方式。本示例同步在AIStudio上,可直接[在线体验模型训练](https://aistudio.baidu.com/aistudio/projectdetail/439860) -PaddleX的模型训练都分为以下几个步骤 -> 1.定义训练/验证图像处理流程transforms -> 2.定义dataset加载数据集 -> 3.定义模型开始训练 -> 4.加载训练保存的模型进行预测 +PaddleX中的所有模型训练跟随以下3个步骤,即可快速完成训练代码开发! + +| 步骤 | |说明 | +| :--- | :--------------- | :-------------- | +| 第1步| 定义transforms | 用于定义模型训练、验证、预测过程中,
输入图像的预处理和数据增强操作 | +| 第2步| 定义datasets | 用于定义模型要加载的训练、验证数据集 | +| 第3步| 定义模型开始训练 | 选择需要的模型,进行训练 | + +> **注意**:不同模型的transforms、datasets和训练参数都有较大差异,更多模型训练,可直接根据文档教程获取更多模型的训练代码。[模型训练教程](train/index.html) + +PaddleX的其它用法 + +- 加载训练保存的模型进行预测 +- [使用VisualDL查看训练过程中的指标变化]() + **1. 安装PaddleX** diff --git a/docs/train/classification.md b/docs/train/classification.md index 061894e1f87c116bc08f46319a8d666f7ddbc65c..289ab23cdf539cbe9e4bcce086d858000326dd23 100644 --- a/docs/train/classification.md +++ b/docs/train/classification.md @@ -1,27 +1,32 @@ # 图像分类 -PaddleX共提供了20+的图像分类模型,包括基于大规模数据训练的 +## 介绍 -点击表格中模型名,可获取各模型训练的教程代码 +PaddleX共提供了20+的图像分类模型,可满足开发者不同场景的需求下的使用。 -| 模型 | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 | -| :---------------- | :------- | :------- | :--------- | :--------- | | -| MobileNetV3_small_ssld | | | | | | -| MobileNetV2 | | | | | | -| ShuffleNetV2 | | | | | | -| AlexNet | | | | | | -| ResNet50_vd_ssld | 97.5% | 22M | 10ms | 200ms | | +- **Top1精度**: 模型在ImageNet数据集上的测试精度 +- **预测速度**:单张图片的预测用时(不包括预处理和后处理) +- "-"表示指标暂未更新 -更多图像分类模型,可查阅PaddleX模型库和API使用文档。 +| 模型(点击获取代码) | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 | +| :---------------- | :------- | :------- | :--------- | :--------- | :----- | +| [MobileNetV3_small_ssld](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/mobilenetv3_small_ssld.py) | 71.3% | 21.0MB | 6.809ms | - | 模型小,预测速度快,适用于低性能或移动端设备 | +| [MobileNetV2](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/mobilenetv2.py) | 72.2% | 14.0MB | 4.546ms | - | 模型小,预测速度快,适用于低性能或移动端设备 | +| [ShuffleNetV2](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/shufflenetv2.py) | 68.8% | 9.0MB | 6.101ms | - | 模型体积小,预测速度快,适用于低性能或移动端设备 | +| [ResNet50_vd_ssld](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/resnet50_vd_ssld.py) | 82.4% | 102.8MB | 9.058ms | - | 模型精度高,适用于服务端部署 | -在选取分类模型时,一般模型大小越大,表示模型的拟合能力越强,但并非越大训练效果越佳。需要用户根据自己的数据集来评估,一般数据样本较少时,MobileNetV3_small_ssld已经可以满足大部分需求。 +## 开始训练 +> 代码保存到本地后,即可直接训练,**训练代码会自动下载训练数据开始训练** +> > 如保存为`mobilenetv3_small_ssld.py`,如下命令即可开始训练 +> > ``` +> > python mobilenetv3_small_ssld.py +> > ``` -点击上述表格模型名,将对应模型的训练代码保存到本地后,即可直接训练,训练代码会自动下载训练数据开始训练,如保存为`mobilenetv3_small_ssld.py`,如下命令即可开始训练 -``` -python mobilenetv3_small_ssld.py -``` -- 针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数。[——>>传送门]() -- 没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门]() +## 相关文档 + +- 【**重要**】针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数作用。[——>>传送门](../appendix/parameters.md) +- 【**有用**】没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门](https://aistudio.baidu.com/aistudio/projectdetail/450925) +- 【**拓展**】更多图像分类模型,查阅[PaddleX模型库](../appendix/model_zoo.md)和[API使用文档](../apis/models/index.html)。 diff --git a/docs/train/instance_segmentation.md b/docs/train/instance_segmentation.md index 2117dc3124c83c5c1df29d224f416f6671b12866..51b7337c3df3ce9a707c7c038ded5279e1159ae2 100644 --- a/docs/train/instance_segmentation.md +++ b/docs/train/instance_segmentation.md @@ -1,15 +1,30 @@ # 实例分割 -| 模型 | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 | -| :---------------- | :------- | :------- | :--------- | :--------- | | -| MaskRCNN-ResNet50-FPN | 97.5% | 22M | 10ms | 200ms | | -| MaskRCNN-ResNet101-FPN | | | | | | -| MaskRCNN-HRNet-FPN | | | | | | - -将对应模型的训练代码保存到本地后,即可直接训练,训练代码会自动下载训练数据开始训练,如保存为`mask_r50_fpn.py`,如下命令即可开始训练 -``` -python mask_r50_fpn.py -``` - -- 针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数。[——>>传送门]() -- 没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门]() +## 介绍 + +PaddleX目前提供了MaskRCNN实例分割模型结构,多种backbone模型,可满足开发者不同场景和性能的需求。 + +- **Box MMAP/Seg MMAP**: 模型在COCO数据集上的测试精度 +- **预测速度**:单张图片的预测用时(不包括预处理和后处理) +- "-"表示指标暂未更新 + +| 模型(点击获取代码) | Box MMAP/Seg MMAP | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 | +| :---------------- | :------- | :------- | :--------- | :--------- | :----- | +| [MaskRCNN-ResNet50-FPN](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/instance_segmentation/mask_r50_fpn.py) | -/- | 136.0MB | 197.715ms | - | 模型精度高,适用于服务端部署 | +| [MaskRCNN-ResNet18-FPN](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/instance_segmentation/mask_r18_fpn.py) | -/- | - | - | - | 模型精度高,适用于服务端部署 | +| [MaskRCNN-HRNet-FPN](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/instance_segmentation/mask_hrnet_fpn.py) | -/- | 115.MB | 81.592ms | - | 模型精度高,预测速度快,适用于服务端部署 | + + +## 开始训练 + +> 代码保存到本地后,即可直接训练,**训练代码会自动下载训练数据开始训练** +> > 如保存为`mask_r50_fpn.py`,如下命令即可开始训练 +> > ``` +> > python mask_r50_fpn.py +> > ``` + +## 相关文档 + +- 【**重要**】针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数作用。[——>>传送门](../appendix/parameters.md) +- 【**有用**】没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门](https://aistudio.baidu.com/aistudio/projectdetail/450925) +- 【**拓展**】更多图像分类模型,查阅[PaddleX模型库](../appendix/model_zoo.md)和[API使用文档](../apis/models/index.html)。 diff --git a/docs/train/object_detection.md b/docs/train/object_detection.md index 20c070c075e886121099edc597b0030acebb2e28..e1aae0bbf619010a67f592ac490cb45cddd88666 100644 --- a/docs/train/object_detection.md +++ b/docs/train/object_detection.md @@ -1,18 +1,34 @@ # 目标检测 -| 模型 | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 | -| :---------------- | :------- | :------- | :--------- | :--------- | | -| YOLOv3-MobileNetV1 | 97.5% | 22M | 10ms | 200ms | | -| YOLOv3-MobileNetV3 | | | | | | -| YOLOv3-DarkNet53 | | | | | | -| FasterRCNN-ResNet50-FPN | | | | | | -| FasterRCNN-ResNet101-FPN | | | | | | -| FasterRCNN-HRNet-FPN | | | | | | - -将对应模型的训练代码保存到本地后,即可直接训练,训练代码会自动下载训练数据开始训练,如保存为`faster_r50_fpn.py`,如下命令即可开始训练 -``` -python faster_r50_fpn.py -``` - -- 针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数。[——>>传送门]() -- 没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门]() +## 介绍 + +PaddleX目前提供了FasterRCNN和YOLOv3两种检测结构,多种backbone模型,可满足开发者不同场景和性能的需求。 + +- **Box MMAP**: 模型在COCO数据集上的测试精度 +- **预测速度**:单张图片的预测用时(不包括预处理和后处理) +- "-"表示指标暂未更新 + +| 模型(点击获取代码) | Box MMAP | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 | +| :---------------- | :------- | :------- | :--------- | :--------- | :----- | +| [YOLOv3-MobileNetV1](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/yolov3_mobilenetv1.py) | 29.3% | 99.2MB | 15.442ms | - | 模型小,预测速度快,适用于低性能或移动端设备 | +| [YOLOv3-MobileNetV3](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/yolov3_mobilenetv3.py) | 31.6% | 100.7MB | 143.322ms | - | 模型小,移动端上预测速度有优势 | +| [YOLOv3-DarkNet53](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/yolov3_darknet53.py) | 38.9 | 249.2MB | 42.672ms | - | 模型较大,预测速度快,适用于服务端 | +| [FasterRCNN-ResNet50-FPN](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/faster_r50_fpn.py) | 37.2% | 136.0MB | 197.715ms | - | 模型精度高,适用于服务端部署 | +| [FasterRCNN-ResNet18-FPN](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/faster_r18_fpn.py) | - | - | - | - | 模型精度高,适用于服务端部署 | +| [FasterRCNN-HRNet-FPN](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/faster_hrnet_fpn.py) | 36.0% | 115.MB | 81.592ms | - | 模型精度高,预测速度快,适用于服务端部署 | + + +## 开始训练 + +> 代码保存到本地后,即可直接训练,**训练代码会自动下载训练数据开始训练** +> > 如保存为`yolov3_mobilenetv1.py`,如下命令即可开始训练 +> > ``` +> > python yolov3_mobilenetv1.py +> > ``` + + +## 相关文档 + +- 【**重要**】针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数作用。[——>>传送门](../appendix/parameters.md) +- 【**有用**】没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门](https://aistudio.baidu.com/aistudio/projectdetail/450925) +- 【**拓展**】更多图像分类模型,查阅[PaddleX模型库](../appendix/model_zoo.md)和[API使用文档](../apis/models/index.html)。 diff --git a/docs/train/semantic_segmentation.md b/docs/train/semantic_segmentation.md index 09866b7f13bd30e51799f6bc0a87e9908c76d9ff..f9fba81f39c840ab82006ff7f398b73de237a4cb 100644 --- a/docs/train/semantic_segmentation.md +++ b/docs/train/semantic_segmentation.md @@ -1,17 +1,34 @@ # 语义分割 -| 模型 | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 | -| :---------------- | :------- | :------- | :--------- | :--------- | | -| DeepLabv3p-MobileNetV2 | 97.5% | 22M | 10ms | 200ms | | -| DeepLabv3p-Xception65 | | | | | | -| UNet | | | | | | -| HRNet | | | | | | -| FastSCNN | | | | | | - -将对应模型的训练代码保存到本地后,即可直接训练,训练代码会自动下载训练数据开始训练,如保存为`deeplab_mobilenetv2.py`,如下命令即可开始训练 -``` -python deeplab_mobilenetv2.py -``` - -- 针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数。[——>>传送门]() -- 没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门]() +## 介绍 + +PaddleX目前提供了DeepLabv3p、UNet、HRNet和FastSCNN四种语义分割结构,多种backbone模型,可满足开发者不同场景和性能的需求。 + +- **mIOU**: 模型在COCO数据集上的测试精度 +- **预测速度**:单张图片的预测用时(不包括预处理和后处理) +- "-"表示指标暂未更新 + +| 模型(点击获取代码) | Box MMAP | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 | +| :---------------- | :------- | :------- | :--------- | :--------- | :----- | +| [DeepLabv3p-MobileNetV2-x0.25](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/yolov3_mobilenetv1.py) | 29.3% | 99.2MB | 15.442ms | - | 模型小,预测速度快,适用于低性能或移动端设备 | +| [DeepLabv3p-MobileNetV2-x1.0](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/yolov3_mobilenetv1.py) | 29.3% | 99.2MB | 15.442ms | - | 模型小,预测速度快,适用于低性能或移动端设备 | +| [DeepLabv3p-Xception65](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/yolov3_mobilenetv3.py) | 31.6% | 100.7MB | 143.322ms | - | 模型小,移动端上预测速度有优势 | +| [UNet](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/yolov3_darknet53.py) | 38.9 | 249.2MB | 42.672ms | - | 模型较大,预测速度快,适用于服务端 | +| [HRNet](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/faster_r50_fpn.py) | 37.2% | 136.0MB | 197.715ms | - | 模型精度高,适用于服务端部署 | +| [FastSCNN](https://github.com/PaddlePaddle/PaddleX/blob/doc/tutorials/train/image_classification/faster_r18_fpn.py) | - | - | - | - | 模型精度高,适用于服务端部署 | + + +## 开始训练 + +> 代码保存到本地后,即可直接训练,**训练代码会自动下载训练数据开始训练** +> > 如保存为`deeplabv3p_mobilenetv2_x0.25.py`,如下命令即可开始训练 +> > ``` +> > python deeplabv3p_mobilenetv2_x0.25.py +> > ``` + + +## 相关文档 + +- 【**重要**】针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数作用。[——>>传送门](../appendix/parameters.md) +- 【**有用**】没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门](https://aistudio.baidu.com/aistudio/projectdetail/450925) +- 【**拓展**】更多图像分类模型,查阅[PaddleX模型库](../appendix/model_zoo.md)和[API使用文档](../apis/models/index.html)。 diff --git a/paddlex/cv/models/utils/visualize.py b/paddlex/cv/models/utils/visualize.py index 89875114f13e2b275019e3a65fc19576013dd68a..7e1fbbc74932cd9cca06327bf757a566b6d30547 100644 --- a/paddlex/cv/models/utils/visualize.py +++ b/paddlex/cv/models/utils/visualize.py @@ -1,11 +1,11 @@ # copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. -# +# # 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. @@ -28,7 +28,7 @@ def visualize_detection(image, result, threshold=0.5, save_dir='./'): """ if isinstance(image, np.ndarray): - image_name = str(int(time.time())) + '.jpg' + image_name = str(int(time.time() * 1000)) + '.jpg' else: image_name = os.path.split(image)[-1] image = cv2.imread(image) @@ -64,7 +64,7 @@ def visualize_segmentation(image, result, weight=0.6, save_dir='./'): if isinstance(image, np.ndarray): im = image - image_name = str(int(time.time())) + '.jpg' + image_name = str(int(time.time() * 1000)) + '.jpg' else: image_name = os.path.split(image)[-1] im = cv2.imread(image) @@ -145,8 +145,8 @@ def draw_bbox_mask(image, results, threshold=0.5): assert brightness_factor >= -1.0 and brightness_factor <= 1.0 color = mplc.to_rgb(color) polygon_color = colorsys.rgb_to_hls(*mplc.to_rgb(color)) - modified_lightness = polygon_color[1] + ( - brightness_factor * polygon_color[1]) + modified_lightness = polygon_color[1] + (brightness_factor * + polygon_color[1]) modified_lightness = 0.0 if modified_lightness < 0.0 else modified_lightness modified_lightness = 1.0 if modified_lightness > 1.0 else modified_lightness modified_color = colorsys.hls_to_rgb( @@ -161,8 +161,7 @@ def draw_bbox_mask(image, results, threshold=0.5): dpi = fig.get_dpi() fig.set_size_inches( (width * scale + 1e-2) / dpi, - (height * scale + 1e-2) / dpi, - ) + (height * scale + 1e-2) / dpi, ) canvas = FigureCanvasAgg(fig) ax = fig.add_axes([0.0, 0.0, 1.0, 1.0]) ax.axis("off") @@ -208,8 +207,7 @@ def draw_bbox_mask(image, results, threshold=0.5): edgecolor=color, linewidth=linewidth * scale, alpha=0.8, - linestyle="-", - )) + linestyle="-", )) # draw mask if 'mask' in dt: @@ -232,23 +230,22 @@ def draw_bbox_mask(image, results, threshold=0.5): fill=True, facecolor=mplc.to_rgb(color) + (alpha, ), edgecolor=edge_color, - linewidth=max(default_font_size // 15 * scale, 1), - ) + linewidth=max(default_font_size // 15 * scale, 1), ) ax.add_patch(polygon) # draw label text_pos = (xmin, ymin) horiz_align = "left" instance_area = w * h - if (instance_area < _SMALL_OBJECT_AREA_THRESH * scale - or h < 40 * scale): + if (instance_area < _SMALL_OBJECT_AREA_THRESH * scale or + h < 40 * scale): if ymin >= height - 5: text_pos = (xmin, ymin) else: text_pos = (xmin, ymax) height_ratio = h / np.sqrt(height * width) - font_size = (np.clip((height_ratio - 0.02) / 0.08 + 1, 1.2, 2) * 0.5 * - default_font_size) + font_size = (np.clip((height_ratio - 0.02) / 0.08 + 1, 1.2, + 2) * 0.5 * default_font_size) text = "{} {:.2f}".format(cname, score) color = np.maximum(list(mplc.to_rgb(color)), 0.2) color[np.argmax(color)] = max(0.8, np.max(color)) @@ -269,8 +266,7 @@ def draw_bbox_mask(image, results, threshold=0.5): horizontalalignment=horiz_align, color=color, zorder=10, - rotation=0, - ) + rotation=0, ) s, (width, height) = canvas.print_to_buffer() buffer = np.frombuffer(s, dtype="uint8") @@ -408,8 +404,8 @@ def draw_pr_curve(eval_details_file=None, plt.plot(x, sr_array, color=color, label=nm, linewidth=1) plt.legend(loc="lower left", fontsize=5) plt.savefig( - os.path.join(save_dir, "./{}_pr_curve(iou-{}).png".format( - style, iou_thresh)), + os.path.join(save_dir, + "./{}_pr_curve(iou-{}).png".format(style, iou_thresh)), dpi=800) plt.close()