Merge branch 'master' of https://github.com/PaddlePaddle/PaddleClas into add_distillation

pull/28/head
littletomatodonkey 2020-04-15 13:11:46 +00:00
commit 9daf0b390f
6 changed files with 18 additions and 15 deletions

View File

@ -6,7 +6,7 @@
PaddleClas的目的是为工业界和学术界提供一个图像分类任务相关的百宝箱特色如下 PaddleClas的目的是为工业界和学术界提供一个图像分类任务相关的百宝箱特色如下
- 模型库ResNet_vd、MobileNetV3等23种系列的分类网络结构和训练技巧以及对应的117个分类预训练模型和性能评估 - 模型库ResNet_vd、MobileNetV3等23种系列的分类网络结构和训练技巧以及对应的117个分类预训练模型和性能评估
- 高阶使用:高精度的实用知识蒸馏方案准确率82.39%的ResNet50_vd和78.9%的MobileNetV3、8种数据增广方法的复现和验证 - 高阶支持:高精度的知识蒸馏方案准确率82.39%的ResNet50_vd和78.9%的MobileNetV3、8种数据增广方法的复现和验证
- 应用拓展常见视觉任务的特色方案包括图像分类领域的迁移学习百度自研的10万类图像分类预训练模型和通用目标检测mAP 47.8%的实用检测方案)等 - 应用拓展常见视觉任务的特色方案包括图像分类领域的迁移学习百度自研的10万类图像分类预训练模型和通用目标检测mAP 47.8%的实用检测方案)等
@ -34,7 +34,7 @@ src="docs/images/models/mobile_arm_top1.png" width="700">
- TODO - TODO
- [ ] EfficientLite、GhostNet、RegNet论文指标复现和性能评估 - [ ] EfficientLite、GhostNet、RegNet论文指标复现和性能评估
## 高阶使用 ## 高阶支持
除了提供丰富的分类网络结构和预训练模型PaddleClas也支持了一系列有助于图像分类任务效果和效率提升的算法或工具。 除了提供丰富的分类网络结构和预训练模型PaddleClas也支持了一系列有助于图像分类任务效果和效率提升的算法或工具。
### 知识蒸馏 ### 知识蒸馏
@ -45,7 +45,7 @@ src="docs/images/models/mobile_arm_top1.png" width="700">
src="docs/images/distillation/distillation_perform.png" width="700"> src="docs/images/distillation/distillation_perform.png" width="700">
</div> </div>
PaddleClas提供了一种简单的半监督标签知识蒸馏方案SSLDSimple Semi-supervised Label Distillation使用该方案大幅提升了使用该方案大幅提升了ResNet101_vdResNet50_vd、MobileNetV1、MobileNetV2和MobileNetV3在ImageNet数据集上分类效果如上图所示。该知识蒸馏方案的框架图如下详细的知识蒸馏方法介绍以及使用正在持续更新中。 PaddleClas提供了一种简单的半监督标签知识蒸馏方案SSLDSimple Semi-supervised Label Distillation使用该方案大幅提升了ResNet101_vdResNet50_vd、MobileNetV1、MobileNetV2和MobileNetV3在ImageNet数据集上分类效果如上图所示。该知识蒸馏方案的框架图如下详细的知识蒸馏方法介绍以及使用正在持续更新中。
<div align="center"> <div align="center">
<img <img
@ -54,7 +54,7 @@ src="docs/images/distillation/ppcls_distillation_v1.png" width="700">
### 数据增广 ### 数据增广
在图像分类任务中图像数据的增广是一种常用的正则化方法可以有效提升图像分类的效果尤其对于数据量不足或者模型网络较大的场景。PaddleClas支持了最新的8种数据增广算法的复现和在统一实验环境下的效果评估如下图所示。每种数据增广方法的详细介绍、对比的实验环境以及使用正在持续更新中。 在图像分类任务中图像数据的增广是一种常用的正则化方法可以有效提升图像分类的效果尤其对于数据量不足或者模型网络较大的场景。PaddleClas支持了最新的8种数据增广算法的复现和在统一实验环境下的效果评估下图展示了不同数据增广方式在ResNet50上的表现。每种数据增广方法的详细介绍、对比的实验环境以及使用正在持续更新中。
<div align="center"> <div align="center">
<img <img
@ -65,6 +65,9 @@ src="docs/images/image_aug/main_image_aug.png" width="600">
- [ ] 更多的优化器支持和效果验证 - [ ] 更多的优化器支持和效果验证
- [ ] 支持模型可解释性工具 - [ ] 支持模型可解释性工具
## 开始使用
PaddleClas的安装说明、模型训练、预测、评估以及模型微调fine-tuning请参考文档教程中的[**初级使用章节**](https://paddleclas.readthedocs.io/zh_CN/latest/tutorials/index.html)SSLD知识蒸馏和数据增广的高阶使用正在持续更新中。
## 应用拓展 ## 应用拓展
效果更优的图像分类网络结构和预训练模型往往有助于提升其他视觉任务的效果PaddleClas提供了一系列在常见视觉任务中的特色方案。 效果更优的图像分类网络结构和预训练模型往往有助于提升其他视觉任务的效果PaddleClas提供了一系列在常见视觉任务中的特色方案。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 KiB

After

Width:  |  Height:  |  Size: 356 KiB

View File

@ -41,7 +41,7 @@ ResNet系列模型是在2015年提出的一举在ILSVRC2015比赛中取得冠
| ResNet152_vd | 0.806 | 0.953 | | | 23.530 | 60.210 | | ResNet152_vd | 0.806 | 0.953 | | | 23.530 | 60.210 |
| ResNet200_vd | 0.809 | 0.953 | | | 30.530 | 74.740 | | ResNet200_vd | 0.809 | 0.953 | | | 30.530 | 74.740 |
| ResNet50_vd_ssld | 0.824 | 0.961 | | | 8.670 | 25.580 | | ResNet50_vd_ssld | 0.824 | 0.961 | | | 8.670 | 25.580 |
| ResNet101_vd_ssld | 0.835 | 0.968 | | | 16.100 | 44.570 | | ResNet101_vd_ssld | 0.837 | 0.967 | | | 16.100 | 44.570 |

View File

@ -13,16 +13,15 @@
#limitations under the License. #limitations under the License.
import cv2 import cv2
import numpy as np import numpy as np
import os import os
import signal import signal
import paddle import paddle
import imaug from . import imaug
from imaug import transform from .imaug import transform
from imaug import MixupOperator from .imaug import MixupOperator
from ppcls.utils import logger from ppcls.utils import logger
trainers_num = int(os.environ.get('PADDLE_TRAINERS_NUM', 1)) trainers_num = int(os.environ.get('PADDLE_TRAINERS_NUM', 1))
@ -190,9 +189,9 @@ def partial_reader(params, full_lines, part_id=0, part_num=1):
for line in full_lines: for line in full_lines:
img_path, label = line.split() img_path, label = line.split()
img_path = os.path.join(params['data_dir'], img_path) img_path = os.path.join(params['data_dir'], img_path)
img = open(img_path).read() with open(img_path, 'rb') as f:
img = transform(img, ops) img = f.read()
yield (img, int(label)) yield (transform(img, ops), int(label))
return reader return reader

View File

@ -12,10 +12,11 @@
#See the License for the specific language governing permissions and #See the License for the specific language governing permissions and
#limitations under the License. #limitations under the License.
import architectures
import types import types
from difflib import SequenceMatcher from difflib import SequenceMatcher
from . import architectures
def get_architectures(): def get_architectures():
""" """

View File

@ -15,5 +15,5 @@
from . import optimizer from . import optimizer
from . import learning_rate from . import learning_rate
from optimizer import OptimizerBuilder from .optimizer import OptimizerBuilder
from learning_rate import LearningRateBuilder from .learning_rate import LearningRateBuilder