|
|
@@ -1,63 +1,132 @@
|
|
|
# PaddleX视觉方案介绍
|
|
|
|
|
|
-PaddleX目前提供了4种视觉任务解决方案,分别为图像分类、目标检测、实例分割和语义分割。用户可以根据自己的任务类型按需选取。
|
|
|
+PaddleX针对图像分类、目标检测、实例分割和语义分割4种视觉任务提供了包含模型选择、压缩策略选择、部署方案选择在内的解决方案。用户根据自己的需求选择合适的模型,选择合适的压缩策略来减小模型的计算量和存储体积、加速模型预测推理,最后选择合适的部署方案将模型部署在移动端或者服务器端。
|
|
|
|
|
|
-## 图像分类
|
|
|
+## 模型选择
|
|
|
+
|
|
|
+### 图像分类
|
|
|
图像分类任务指的是输入一张图片,模型预测图片的类别,如识别为风景、动物、车等。
|
|
|
|
|
|

|
|
|
|
|
|
-对于图像分类任务,针对不同的应用场景,PaddleX提供了百度改进的模型,见下表所示
|
|
|
+对于图像分类任务,针对不同的应用场景,PaddleX提供了百度改进的模型,见下表所示:
|
|
|
+> 表中GPU预测速度是使用PaddlePaddle Python预测接口测试得到(测试GPU型号为Nvidia Tesla P40)。
|
|
|
+> 表中CPU预测速度 (测试CPU型号为)。
|
|
|
+> 表中骁龙855预测速度是使用处理器为骁龙855的手机测试得到。
|
|
|
+> 测速时模型输入大小为224 x 224,Top1准确率为ImageNet-1000数据集上评估所得。
|
|
|
|
|
|
-| 模型 | 模型大小 | GPU预测速度 | CPU预测速度 | ARM芯片预测速度 | 准确率 | 备注 |
|
|
|
-| :--------- | :------ | :---------- | :-----------| :------------- | :----- | :--- |
|
|
|
-| MobileNetV3_small_ssld | 12M | - | - | - | 71.3% |适用于移动端场景 |
|
|
|
-| MobileNetV3_large_ssld | 21M | - | - | - | 79.0% | 适用于移动端/服务端场景 |
|
|
|
-| ResNet50_vd_ssld | 102.8MB | - | - | - | 82.4% | 适用于服务端场景 |
|
|
|
-| ResNet101_vd_ssld | 179.2MB | - | - | - |83.7% | 适用于服务端场景 |
|
|
|
+| 模型 | 模型特点 | 存储体积 | GPU预测速度(毫秒) | CPU(x86)预测速度(毫秒) | 骁龙855(ARM)预测速度 (毫秒)| Top1准确率 |
|
|
|
+| :--------- | :------ | :---------- | :-----------| :------------- | :------------- |:--- |
|
|
|
+| MobileNetV3_small_ssld | 轻量高速,适用于追求高速的实时移动端场景 | 12.5MB | 7.08837 | - | 6.546 | 71.3.0% |
|
|
|
+| ShuffleNetV2 | 轻量级模型,精度相对偏低,适用于要求更小存储体积的实时移动端场景 | 10.2MB | 15.40 | - | 10.941 | 68.8% |
|
|
|
+| MobileNetV3_large_ssld | 轻量级模型,在存储方面优势不大,在速度和精度上表现适中,适合于移动端场景 | 22.8MB | 8.06651 | - | 19.803 | 79.0% |
|
|
|
+| MobileNetV2 | 轻量级模型,适用于使用GPU预测的移动端场景 | 15.0MB | 5.92667 | - | 23.318| 72.2 % |
|
|
|
+| ResNet50_vd_ssld | 高精度模型,预测时间较短,适用于大多数的服务器端场景 | 103.5MB | 7.79264 | - | - | 82.4% |
|
|
|
+| ResNet101_vd_ssld | 超高精度模型,预测时间相对较长,适用于有大数据量时的服务器端场景 | 180.5MB | 13.34580 | - | -| 83.7% |
|
|
|
+| Xception65 | 超高精度模型,预测时间更长,在处理较大数据量时有较高的精度,适用于服务器端场景 | 161.6MB | 13.87017 | - | - | 80.3% |
|
|
|
|
|
|
-除上述模型外,PaddleX还支持近20种图像分类模型,模型列表可参考[PaddleX模型库](../appendix/model_zoo.md)
|
|
|
+包括上述模型,PaddleX支持近20种图像分类模型,其余模型可参考[PaddleX模型库](../appendix/model_zoo.md)
|
|
|
|
|
|
|
|
|
-## 目标检测
|
|
|
+### 目标检测
|
|
|
目标检测任务指的是输入图像,模型识别出图像中物体的位置(用矩形框框出来,并给出框的位置),和物体的类别,如在手机等零件质检中,用于检测外观上的瑕疵等。
|
|
|
|
|
|

|
|
|
|
|
|
对于目标检测,针对不同的应用场景,PaddleX提供了主流的YOLOv3模型和Faster-RCNN模型,见下表所示
|
|
|
-
|
|
|
-| 模型 | 模型大小 | GPU预测速度 | CPU预测速度 |ARM芯片预测速度 | BoxMAP | 备注 |
|
|
|
-| :------- | :------- | :--------- | :---------- | :------------- | :----- | :--- |
|
|
|
-| YOLOv3-MobileNetV1 | 101.2M | - | - | - | 29.3 | |
|
|
|
-| YOLOv3-MobileNetV3 | 94.6M | - | - | - | 31.6 | |
|
|
|
-| YOLOv3-ResNet34 | 169.7M | - | - | - | 36.2 | |
|
|
|
-| YOLOv3-DarkNet53 | 252.4 | - | - | - | 38.9 | |
|
|
|
-
|
|
|
-除YOLOv3模型外,PaddleX同时也支持FasterRCNN模型,支持FPN结构和5种backbone网络,详情可参考[PaddleX模型库](../appendix/model_zoo.md)
|
|
|
-
|
|
|
-## 实例分割
|
|
|
+> 表中GPU预测速度是使用PaddlePaddle Python预测接口测试得到(测试GPU型号为Nvidia Tesla P40)。
|
|
|
+> 表中CPU预测速度 (测试CPU型号为)。
|
|
|
+> 表中骁龙855预测速度是使用处理器为骁龙855的手机测试得到。
|
|
|
+> 测速时YOLOv3的输入大小为608 x 608,FasterRCNN的输入大小为800 x 1333,Box mmAP为COCO2017数据集上评估所得。
|
|
|
+
|
|
|
+| 模型 | 模型特点 | 存储体积 | GPU预测速度 | CPU(x86)预测速度(毫秒) | 骁龙855(ARM)预测速度 (毫秒)| Box mmAP |
|
|
|
+| :------- | :------- | :--------- | :---------- | :------------- | :------------- |:--- |
|
|
|
+| YOLOv3-MobileNetV3_larget | 适用于追求高速预测的移动端场景 | 100.7MB | 143.322 | - | - | 31.6 |
|
|
|
+| YOLOv3-MobileNetV1 | 精度相对偏低,适用于追求高速预测的服务器端场景 | 99.2MB| 15.422 | - | - | 29.3 |
|
|
|
+| YOLOv3-DarkNet53 | 在预测速度和模型精度上都有较好的表现,适用于大多数的服务器端场景| 249.2MB | 42.672 | - | - | 38.9 |
|
|
|
+| FasterRCNN-ResNet50-FPN | 经典的二阶段检测器,预测速度相对较慢,适用于重视模型精度的服务器端场景 | 167.MB | 83.189 | - | -| 37.2 |
|
|
|
+| FasterRCNN-HRNet_W18-FPN | 适用于对图像分辨率较为敏感、对目标细节预测要求更高的服务器端场景 | 115.5MB | 81.592 | - | - | 36 |
|
|
|
+| FasterRCNN-ResNet101_vd-FPN | 超高精度模型,预测时间更长,在处理较大数据量时有较高的精度,适用于服务器端场景 | 244.3MB | 156.097 | - | - | 40.5 |
|
|
|
+
|
|
|
+除上述模型外,YOLOv3和Faster RCNN还支持其他backbone,详情可参考[PaddleX模型库](../appendix/model_zoo.md)
|
|
|
+
|
|
|
+### 实例分割
|
|
|
在目标检测中,模型识别出图像中物体的位置和物体的类别。而实例分割则是在目标检测的基础上,做了像素级的分类,将框内的属于目标物体的像素识别出来。
|
|
|
|
|
|

|
|
|
|
|
|
PaddleX目前提供了实例分割MaskRCNN模型,支持5种不同的backbone网络,详情可参考[PaddleX模型库](../appendix/model_zoo.md)
|
|
|
-
|
|
|
-| 模型 | 模型大小 | GPU预测速度 | CPU预测速度 | ARM芯片预测速度 | BoxMAP | SegMAP | 备注 |
|
|
|
-| :---- | :------- | :---------- | :---------- | :------------- | :----- | :----- | :--- |
|
|
|
-| MaskRCNN-ResNet50_vd-FPN | 185.5M | - | - | - | 39.8 | 35.4 | |
|
|
|
-| MaskRCNN-ResNet101_vd-FPN | 268.6M | - | - | - | 41.4 | 36.8 | |
|
|
|
-
|
|
|
-
|
|
|
-## 语义分割
|
|
|
+> 表中GPU预测速度是使用PaddlePaddle Python预测接口测试得到(测试GPU型号为Nvidia Tesla P40)。
|
|
|
+> 表中CPU预测速度 (测试CPU型号为)。
|
|
|
+> 表中骁龙855预测速度是使用处理器为骁龙855的手机测试得到。
|
|
|
+> 测速时MaskRCNN的输入大小为800 x 1333,Box mmAP和Seg mmAP为COCO2017数据集上评估所得。
|
|
|
+
|
|
|
+| 模型 | 模型特点 | 存储体积 | GPU预测速度 | CPU(x86)预测速度(毫秒) | 骁龙855(ARM)预测速度 (毫秒)| Box mmAP | Seg mmAP |
|
|
|
+| :---- | :------- | :---------- | :---------- | :----- | :----- | :--- |:--- |
|
|
|
+| MaskRCNN-HRNet_W18-FPN | 适用于对图像分辨率较为敏感、对目标细节预测要求更高的服务器端场景 | - | - | - | - | 37.0 | 33.4 |
|
|
|
+| MaskRCNN-ResNet50-FPN | 精度较高,适合大多数的服务器端场景| 185.5M | - | - | - | 37.9 | 34.2 |
|
|
|
+| MaskRCNN-ResNet101_vd-FPN | 高精度但预测时间更长,在处理较大数据量时有较高的精度,适用于服务器端场景 | 268.6M | - | - | - | 41.4 | 36.8 |
|
|
|
+
|
|
|
+### 语义分割
|
|
|
语义分割用于对图像做像素级的分类,应用在人像分类、遥感图像识别等场景。
|
|
|
|
|
|

|
|
|
|
|
|
对于语义分割,PaddleX也针对不同的应用场景,提供了不同的模型选择,如下表所示
|
|
|
+> 表中GPU预测速度是使用PaddlePaddle Python预测接口测试得到(测试GPU型号为Nvidia Tesla P40)。
|
|
|
+> 表中CPU预测速度 (测试CPU型号为)。
|
|
|
+> 表中骁龙855预测速度是使用处理器为骁龙855的手机测试得到。
|
|
|
+> 测速时模型的输入大小为1024 x 2048,mIOU为Cityscapes数据集上评估所得。
|
|
|
+
|
|
|
+| 模型 | 模型特点 | 存储体积 | GPU预测速度 | CPU(x86)预测速度(毫秒) | 骁龙855(ARM)预测速度 (毫秒)| mIOU |
|
|
|
+| :---- | :------- | :---------- | :---------- | :----- | :----- |:--- |
|
|
|
+| DeepLabv3p-MobileNetV2_x1.0 | 轻量级模型,适用于移动端场景| - | - | - | 69.8% |
|
|
|
+| HRNet_W18_Small_v1 | 轻量高速,适用于移动端场景 | - | - | - | - |
|
|
|
+| FastSCNN | 轻量高速,适用于追求高速预测的移动端或服务器端场景 | - | - | - | 69.64 |
|
|
|
+| HRNet_W18 | 高精度模型,适用于对图像分辨率较为敏感、对目标细节预测要求更高的服务器端场景| - | - | - | 79.36 |
|
|
|
+| DeepLabv3p-Xception65 | 高精度但预测时间更长,在处理较大数据量时有较高的精度,适用于服务器且背景复杂的场景| - | - | - | 79.3% |
|
|
|
+
|
|
|
+## 压缩策略选择
|
|
|
+
|
|
|
+PaddleX提供包含模型剪裁、定点量化的模型压缩策略来减小模型的计算量和存储体积,加快模型部署后的预测速度。使用不同压缩策略在图像分类、目标检测和语义分割模型上的模型精度和预测速度详见以下内容,用户可以选择根据自己的需求选择合适的压缩策略,进一步优化模型的性能。
|
|
|
+
|
|
|
+| 压缩策略 | 策略特点 |
|
|
|
+| :---- | :------- |
|
|
|
+| 量化 | 较为显著地减少模型的存储体积,适用于移动端或服务期端TensorRT部署,在移动端对于MobileNet系列模型有明显的加速效果 |
|
|
|
+| 剪裁 | 能够去除冗余的参数,达到显著减少参数计算量和模型体积的效果,提升模型的预测性能,适用于CPU部署或移动端部署(GPU上无明显加速效果) |
|
|
|
+| 先剪裁后量化 | 可以进一步提升模型的预测性能,适用于移动端或服务器端TensorRT部署 |
|
|
|
+
|
|
|
+### 性能对比
|
|
|
+
|
|
|
+* 表中各指标的格式为XXX/YYY,XXX表示未采取压缩策略时的指标,YYY表示压缩后的指标
|
|
|
+* 分类模型的准确率指的是ImageNet-1000数据集上的Top1准确率(模型输入大小为224x224),检测模型的准确率指的是COCO2017数据集上的mmAP(模型输入大小为608x608),分割模型的准确率指的是Cityscapes数据集上mIOU(模型输入大小为769x769)
|
|
|
+* 量化策略中,PaddleLiter推理环境为Qualcomm SnapDragon 855 + armv8,速度指标为Thread4耗时
|
|
|
+* 剪裁策略中,PaddleLiter推理环境为Qualcomm SnapDragon 845 + armv8,速度指标为Thread4耗时
|
|
|
+
|
|
|
+
|
|
|
+| 模型 | 压缩策略 | 存储体积(MB) | 准确率(%) | PaddleLite推理耗时(ms) |
|
|
|
+| :--: | :------: | :------: | :----: | :----------------: |
|
|
|
+| MobileNetV1 | 量化 | 17/4.4 | 70.99/70.18 | 10.0811/4.2934 |
|
|
|
+| MobileNetV1 | 剪裁 -30% | 17/12 | 70.99/70.4 | 19.5762/13.6982 |
|
|
|
+| YOLOv3-MobileNetV1 | 量化 | 95/25 | 29.3/27.9 | - |
|
|
|
+| YOLOv3-MobileNetV1 | 剪裁 -51.77% | 95/25 | 29.3/26 | - |
|
|
|
+| Deeplabv3-MobileNetV2 | 量化 | 7.4/1.8 | 63.26/62.03 | 593.4522/484.0018 |
|
|
|
+| FastSCNN | 剪裁 -47.60% | 11/5.7 | 69.64/66.68 | 415.664/291.748 |
|
|
|
+
|
|
|
+更多模型在不同设备上压缩前后的指标对比详见[PaddleX压缩模型库](appendix/slim_model_zoo.md)
|
|
|
+
|
|
|
+压缩策略的具体使用流程详见[模型压缩](tutorials/compress)
|
|
|
+
|
|
|
+**注意:PaddleX中全部图像分类模型和语义分割模型都支持量化和剪裁操作,目标检测仅有YOLOv3支持量化和剪裁操作。**
|
|
|
+
|
|
|
+## 模型部署
|
|
|
+
|
|
|
+PaddleX提供服务器端python部署、服务器端c++部署、服务器端加密部署、OpenVINO部署、移动端部署共5种部署方案,用户可以根据自己的需求选择合适的部署方案,点击以下链接了解部署的具体流程。
|
|
|
|
|
|
-| 模型 | 模型大小 | GPU预测速度 | CPU预测速度 | ARM芯片预测速度 | mIOU | 备注 |
|
|
|
-| :---- | :------- | :---------- | :---------- | :------------- | :----- | :----- |
|
|
|
-| DeepLabv3p-MobileNetV2_x0.25 | | - | - | - | - | - |
|
|
|
-| DeepLabv3p-MobileNetV2_x1.0 | | - | - | - | - | - |
|
|
|
-| DeepLabv3p-Xception65 | | - | - | - | - | - |
|
|
|
-| UNet | | - | - | - | - | - |
|
|
|
+| 部署方案 | 部署流程 |
|
|
|
+| :------: | :------: |
|
|
|
+| 服务器端python部署 | [部署流程](tutorials/deploy/deploy_server/deploy_python.html)|
|
|
|
+| 服务器端c++部署 | [部署流程](tutorials/deploy/deploy_server/deploy_cpp/) |
|
|
|
+| 服务器端加密部署 | [部署流程](tutorials/deploy/deploy_server/encryption.html) |
|
|
|
+| OpenVINO部署 | [部署流程](tutorials/deploy/deploy_openvino.html) |
|
|
|
+| 移动端部署 | [部署流程](tutorials/deploy/deploy_lite.html) |
|