Explorar o código

Merge branch 'develop' of https://github.com/PaddlePaddle/PaddleX into develop_qh

FlyingQianMM %!s(int64=4) %!d(string=hai) anos
pai
achega
2e35c832f6

+ 1 - 1
deploy/raspberry/CMakeLists.txt

@@ -53,7 +53,7 @@ include_directories(${OpenCV_INCLUDE_DIRS})
 if (${ARCH} STREQUAL "armv7-a")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -mfloat-abi=hard -mfpu=neon-vfpv4 -g -o2 -fopenmp -std=c++11")
     set(CMAKE_STATIC_LIBRARY_PREFIX "")
-elseif(${ARC}H STREQUAL "armv8-a")
+elseif(${ARCH} STREQUAL "armv8-a")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -g -o2 -fopenmp -std=c++11")
     set(CMAKE_STATIC_LIBRARY_PREFIX "")
 else()

+ 1 - 1
docs/deploy/jetson/nvidia-jetson.md

@@ -1,7 +1,7 @@
 # Nvidia Jetson开发板本地部署
 
 ## 说明
-本文档在基于Nvidia Jetpack 4.4的`Linux`平台上使用`GCC 7.4`测试过,如需使用不同G++版本,则需要重新编译Paddle预测库,请参考: [NVIDIA Jetson嵌入式硬件预测库源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html#id12)。
+本文档在基于Nvidia Jetpack 4.4的`Linux`平台上使用`GCC 7.4`测试过,如需使用不同G++版本,则需要重新编译Paddle预测库,请参考: [NVIDIA Jetson嵌入式硬件预测库源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html)。
 
 ## 前置条件
 * G++ 7.4

+ 1 - 1
docs/gui/restful/introduction.md

@@ -50,7 +50,7 @@ paddlex_restful --start_restful --port [端口号] --workspace_dir [工作空间
 
 ## PaddleX Web Demo
 PaddleX Web Demo是针对PaddleX RESTful开发的Web可视化客户端。  
-[Wed demo传送门](https://github.com/PaddlePaddle/PaddleX/blob/develop/paddlex_resful/restful/templates/paddlex_restful_demo.html)
+[Wed demo传送门](https://github.com/PaddlePaddle/PaddleX/blob/develop/paddlex_restful/restful/templates/paddlex_restful_demo.html)
 
 ### Web DEMO使用流程
 

+ 1 - 1
examples/industrial_quality_inspection/train_yolov3.py

@@ -45,7 +45,7 @@ num_classes = len(train_dataset.labels)
 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
 model = pdx.det.YOLOv3(num_classes=num_classes, backbone='MobileNetV3_large')
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#train
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id1
 # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
 model.train(
     num_epochs=400,

+ 1 - 1
examples/meter_reader/deploy/python/reader_deploy.py

@@ -214,7 +214,7 @@ class MeterReader:
             im_size = min(meter_num, i + seg_batch_size)
             meter_images = list()
             for j in range(i, im_size):
-                meter_images.append(resized_meters[j - i])
+                meter_images.append(resized_meters[j])
             # Segment scales and point in each meter area
             result = self.segmenter.batch_predict(
                 transforms=self.seg_transforms, img_file_list=meter_images)

+ 1 - 1
examples/meter_reader/reader_infer.py

@@ -214,7 +214,7 @@ class MeterReader:
             im_size = min(meter_num, i + seg_batch_size)
             meter_images = list()
             for j in range(i, im_size):
-                meter_images.append(resized_meters[j - i])
+                meter_images.append(resized_meters[j])
             # Segment scales and point in each meter area
             result = self.segmenter.batch_predict(
                 transforms=self.seg_transforms, img_file_list=meter_images)

+ 1 - 1
examples/meter_reader/train_detection.py

@@ -44,7 +44,7 @@ eval_dataset = pdx.datasets.CocoDetection(
 # 浏览器打开 https://0.0.0.0:8001即可
 # 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/latest/apis/models/detection.html#yolov3
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
 num_classes = len(train_dataset.labels)
 model = pdx.det.YOLOv3(
     num_classes=num_classes, backbone='DarkNet53', label_smooth=True)

+ 2 - 2
examples/meter_reader/train_segmentation.py

@@ -21,7 +21,7 @@ eval_transforms = transforms.Compose([
     transforms.Normalize(),
 ])
 # 定义训练和验证所用的数据集
-# API说明: https://paddlex.readthedocs.io/zh_CN/latest/apis/datasets/semantic_segmentation.html#segdataset
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/datasets.html#paddlex-datasets-segdataset
 train_dataset = pdx.datasets.SegDataset(
     data_dir='meter_seg/',
     file_list='meter_seg/train.txt',
@@ -40,7 +40,7 @@ eval_dataset = pdx.datasets.SegDataset(
 # 浏览器打开 https://0.0.0.0:8001即可
 # 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
 #
-# API说明: https://paddlex.readthedocs.io/zh_CN/latest/apis/models/semantic_segmentation.html#deeplabv3p
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-deeplabv3p
 model = pdx.seg.DeepLabv3p(
     num_classes=len(train_dataset.labels), backbone='Xception65')
 model.train(

+ 3 - 2
paddlex/__init__.py

@@ -14,8 +14,7 @@
 
 from __future__ import absolute_import
 
-__version__ = '1.3.6'
-gui_mode = True
+__version__ = '1.3.7'
 
 import os
 if 'FLAGS_eager_delete_tensor_gb' not in os.environ:
@@ -29,6 +28,7 @@ if "CUDA_VISIBLE_DEVICES" in os.environ:
 import paddle
 version = paddle.__version__.strip().split('.')
 if version[0] == '1':
+    gui_mode = True
     if version[1] != '8':
         raise Exception(
             'For running paddlex(v{}), Version of paddlepaddle should be greater than 1.8.3'.
@@ -39,6 +39,7 @@ if version[0] == '1':
 
 if hasattr(paddle, 'enable_static'):
     paddle.enable_static()
+    gui_mode = False
 
 from .utils.utils import get_environ_info
 from . import cv

+ 23 - 13
paddlex/cv/models/base.py

@@ -245,26 +245,23 @@ class BaseAPI:
         if startup_prog is None:
             startup_prog = fluid.default_startup_program()
         self.exe.run(startup_prog)
-        if resume_checkpoint:
-            logging.info(
-                "Resume checkpoint from {}.".format(resume_checkpoint),
-                use_color=True)
-            paddlex.utils.utils.load_pretrain_weights(
-                self.exe, self.train_prog, resume_checkpoint, resume=True)
-            if not osp.exists(osp.join(resume_checkpoint, "model.yml")):
-                raise Exception("There's not model.yml in {}".format(
-                    resume_checkpoint))
-            with open(osp.join(resume_checkpoint, "model.yml")) as f:
-                info = yaml.load(f.read(), Loader=yaml.Loader)
-                self.completed_epochs = info['completed_epochs']
-        elif pretrain_weights is not None:
+
+        if not resume_checkpoint and pretrain_weights:
             logging.info(
                 "Load pretrain weights from {}.".format(pretrain_weights),
                 use_color=True)
             paddlex.utils.utils.load_pretrain_weights(
                 self.exe, self.train_prog, pretrain_weights, fuse_bn)
+
         # 进行裁剪
         if sensitivities_file is not None:
+            import paddle
+            version = paddle.__version__.strip().split('.')
+            if version[0] == '2' or (version[0] == '0' and
+                                     hasattr(paddle, 'enable_static')):
+                raise Exception(
+                    'Model pruning is not ready when using paddle>=2.0.0, please downgrade paddle to 1.8.5.'
+                )
             import paddleslim
             from .slim.prune_config import get_sensitivities
             sensitivities_file = get_sensitivities(sensitivities_file, self,
@@ -286,6 +283,19 @@ class BaseAPI:
                 use_color=True)
             self.status = 'Prune'
 
+        if resume_checkpoint:
+            logging.info(
+                "Resume checkpoint from {}.".format(resume_checkpoint),
+                use_color=True)
+            paddlex.utils.utils.load_pretrain_weights(
+                self.exe, self.train_prog, resume_checkpoint, resume=True)
+            if not osp.exists(osp.join(resume_checkpoint, "model.yml")):
+                raise Exception("There's not model.yml in {}".format(
+                    resume_checkpoint))
+            with open(osp.join(resume_checkpoint, "model.yml")) as f:
+                info = yaml.load(f.read(), Loader=yaml.Loader)
+                self.completed_epochs = info['completed_epochs']
+
     def get_model_info(self):
         info = dict()
         info['version'] = paddlex.__version__

+ 4 - 12
setup.py

@@ -19,7 +19,7 @@ long_description = "PaddlePaddle Entire Process Development Toolkit"
 
 setuptools.setup(
     name="paddlex",
-    version='1.3.6',
+    version='1.3.7',
     author="paddlex",
     author_email="paddlex@baidu.com",
     description=long_description,
@@ -38,17 +38,9 @@ setuptools.setup(
     include_data_files=True,
     setup_requires=['cython', 'numpy'],
     install_requires=[
-        "pycocotools;platform_system!='Windows'",
-        'pyyaml',
-        'colorama',
-        'tqdm',
-        'paddleslim==1.1.1',
-        'visualdl>=2.0.0',  #'paddlehub==1.8.2',
-        'shapely>=1.7.0',
-        'opencv-python',
-        'flask_cors',
-        'sklearn',
-        'psutil',
+        "pycocotools;platform_system!='Windows'", 'pyyaml', 'colorama', 'tqdm',
+        'paddleslim==1.1.1', 'visualdl>=2.0.0', 'paddlehub==2.0.1',
+        'shapely>=1.7.0', 'opencv-python', 'flask_cors', 'sklearn', 'psutil',
         'xlwt'
     ],
     classifiers=[

+ 1 - 1
tutorials/train/image_classification/mobilenetv3_small_ssld.py

@@ -39,7 +39,7 @@ eval_dataset = pdx.datasets.ImageNet(
 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
 model = pdx.cls.MobileNetV3_small_ssld(num_classes=len(train_dataset.labels))
 
-# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/datasets.html#paddlex-datasets-imagenet
+# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train
 # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
 model.train(
     num_epochs=10,

+ 1 - 1
tutorials/train/object_detection/faster_rcnn_hrnet_fpn.py

@@ -45,7 +45,7 @@ num_classes = len(train_dataset.labels) + 1
 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-fasterrcnn
 model = pdx.det.FasterRCNN(num_classes=num_classes, backbone='HRNet_W18')
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id1
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id5
 # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
 model.train(
     num_epochs=12,

+ 1 - 1
tutorials/train/object_detection/faster_rcnn_r18_fpn.py

@@ -47,7 +47,7 @@ num_classes = len(train_dataset.labels) + 1
 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-fasterrcnn
 model = pdx.det.FasterRCNN(num_classes=num_classes, backbone='ResNet18')
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id1
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id5
 # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
 model.train(
     num_epochs=12,

+ 1 - 1
tutorials/train/object_detection/faster_rcnn_r50_fpn.py

@@ -47,7 +47,7 @@ num_classes = len(train_dataset.labels) + 1
 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-fasterrcnn
 model = pdx.det.FasterRCNN(num_classes=num_classes, backbone='ResNet50')
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id1
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id5
 # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
 model.train(
     num_epochs=12,

+ 1 - 1
tutorials/train/object_detection/ppyolo.py

@@ -42,7 +42,7 @@ eval_dataset = pdx.datasets.VOCDetection(
 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
 num_classes = len(train_dataset.labels)
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-ppyolo
 model = pdx.det.PPYOLO(num_classes=num_classes)
 
 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#train

+ 1 - 1
tutorials/train/object_detection/yolov3_darknet53.py

@@ -45,7 +45,7 @@ num_classes = len(train_dataset.labels)
 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
 model = pdx.det.YOLOv3(num_classes=num_classes, backbone='DarkNet53')
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#train
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id1
 # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
 model.train(
     num_epochs=270,

+ 1 - 1
tutorials/train/object_detection/yolov3_mobilenetv1.py

@@ -50,7 +50,7 @@ num_classes = len(train_dataset.labels)
 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
 model = pdx.det.YOLOv3(num_classes=num_classes, backbone='MobileNetV1')
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#train
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id1
 # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
 model.train(
     num_epochs=270,

+ 1 - 1
tutorials/train/object_detection/yolov3_mobilenetv3.py

@@ -45,7 +45,7 @@ num_classes = len(train_dataset.labels)
 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
 model = pdx.det.YOLOv3(num_classes=num_classes, backbone='MobileNetV3_large')
 
-# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#train
+# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id1
 # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
 model.train(
     num_epochs=270,

+ 1 - 1
tutorials/train/semantic_segmentation/unet.py

@@ -40,7 +40,7 @@ eval_dataset = pdx.datasets.SegDataset(
 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
 num_classes = len(train_dataset.labels)
 
-# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-deeplabv3p
+# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-unet
 model = pdx.seg.UNet(num_classes=num_classes)
 
 # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#train