提到“野生动物非法贸易“大家一定不陌生,根据国际刑警组织的研究估算,每年和野生动物相关的非法贸易额高达200亿美元,是仅次于毒品和军火的全球第三大犯罪。打开这个潘多拉盒子,我们会发现这条血腥的产业链已经通过互联网(社交媒体、电商平台)从线下黑市走到了线上,交易触点越来越多,打击难度越来越大。

2020年“世界地球日”,百度与国际爱护动物基金会联合发布全球首个利用人工智能技术打击野生动物制品非法贸易的平台“濒危物种 AI 守护官“,对互联网上的野生动物图片实时监控,协助相关部门及时发现犯罪隐患。

这一有温度的工具,得益于百度飞桨工业应用级图像分类套件PaddleClas的加持。2020年4月,飞桨正式开源PaddleClas,包含23个系列的分类网络以及117个预训练模型和性能评估,从数据增广、骨干网络设计、损失定义、优化器设计、知识蒸馏、特征迁移学习等不同的角度对图像分类问题进行深入探索,助力图像分类技术的产业落地。无论是濒危动物保护、零售商品分类、眼疾识别还是农作物品质分级,从理想到现实,通过开源的PaddleClas,您都可以实现!

那么在飞桨开源框架1.8版本中,PaddleClas又有哪些新变化呢?

1.8版本中PaddleClas增强了SSLD知识蒸馏方案(SSLD,Simple Semi-supervised Label Distillation)。实验证明,使用更大尺度的图像数据(标准为224,这里修改为320)对ResNet50_vd_ssld模型进行微调,在ImageNet1k验证集上的精度可达到84.0%。当前ResNet50_vd_ssld预训练模型已经开源,即使开发者的数据数据量比较少,通过模型Finetune,也可实现高精度的图像分类。Github地址:

https://github.com/PaddlePaddle/PaddleClas

那么,84.0%的ResNet50_vd_ssld模型精度,PaddleClas是如何实现的呢?

众所周知,在数据量足够大的情况下,通过合理构建网络模型的方式增加其参数量,是可以显著改善模型性能。但是模型复杂度越高,意味着计算量越大,不单需要大量的计算资源,还会影响推理速度,影响产业应用。

这时大家开始思考,是否可以在不影响模型精度的情况下,减少其规模?

目前学术界有几种模型压缩方法可以减小模型的参数量,如:知识蒸馏、裁剪、量化等。知识蒸馏是指使用教师模型(精度更高、泛化能力强、模型相对复杂)去指导学生模型(参数量小、模型相对简单)学习特定任务,保证小模型在参数量不变的情况下,得到比较大的性能提升,甚至获得与大模型相似的精度指标。在传统的蒸馏方案中,使用了一定的标签信息,数据扩充的成本较高。PaddleClas融合目前常用的蒸馏方法,提出了一种简单的半监督标签知识蒸馏方案SSLD,其一大特色就是无需使用图像的真值标签,可以任意扩展训练集的大小实验证明,基于ImageNet1k分类数据集,使用SSLD蒸馏策略后,ResNet_vd和MobileNet系列模型上的精度均有超过3%的精度提升,如下图所示。

SSLD蒸馏原理

SSLD蒸馏原理实现如下图所示,其核心策略为:大数据集训练+ImageNet1k蒸馏Finetune。

第一步:引入ImageNet 22K数据集。将ImageNet 22k数据集与ImageNet 1k验证集进行去重,防止训练集中掺杂验证集图像。ImageNet 22K数据集中包含1400万张图片。

第二步:提取数据,生成训练集。依据Top-k数据选择方法从其中挑选出400万张图片,与ImageNet-1k训练集整合在一起,得到一个新的包含500万张图片的数据集。

第三步:计算网络的损失函数。将教师模型和学生模型输出的soft label计算JS散度,作为蒸馏模型的损失函数(在训练时,固定教师模型的参数)。

第四步:ImageNet1k蒸馏Finetune。由于引入了额外的ImageNet22k数据集,导致ImageNet 1K训练集和验证集的数据分布发生了变化。在模型蒸馏结束之后,需要在ImageNet1k数据集上进行模型微调,恢复训练集与验证集的数据分布一致性。

关于Top-k数据选择方法的介绍可参考:

https://github.com/PaddlePaddle/PaddleClas/blob/master/docs/zh_CN/advanced_tutorials/distillation/distillation.md

如此高精度的预训练模型,代码实现会不会很复杂呢?

手把手实践

对于开发者来说,获取足够大的数据集进行模型训练是件非常困难的事情。PaddleClas的ResNet50_vd_ssld预训练模型的好处就在于,只少量数据,通过直接加载预训练模型进行微调,也可以获得高精度指标。下面我们以ResNet50_vd_ssld在图像分类迁移学习的应用为例,手把手教你如何使用PaddleClas。

注意:本操作过程需要在GPU环境下运行(可以在百度AI Stuido蹭个GPU算力)

1. 安装飞桨(建议使用最新的1.8版本)。

2. 下载PaddleClas代码库并设置环境变量。

git clone https://github.com/PaddlePaddle/PaddleClas.git
cd PaddleClas
export PYTHONPATH=$PWD:$PYTHONPATH

3. 下载预训练模型。为了验证模型精度提升效果,需要下载ResNet50_vd和ResNet50_vd_ssld两个预训练模型。

python tools/download.py -a ResNet50_vd -p ./pretrained -d 1
python tools/download.py -a ResNet50_vd_ssld_v2 -p ./pretrained -d 1

4. 下载并解压Flowers102数据集,大约300M左右。

cd dataset/flowers102
wget https://paddlemodels.bj.bcebos.com/flowers/102flowers.tgz
wget https://paddlemodels.bj.bcebos.com/flowers/imagelabels.mat
wget https://paddlemodels.bj.bcebos.com/flowers/setid.mat
tar -xf 102flowers.tgz

5. 制作数据标签文件并返回PaddleClas根目录。

python generate_flowers102_list.py jpg train > train_list.txt
python generate_flowers102_list.py jpg valid > val_list.txt
cd ../../

6. 对ResNet50_vd预训练模型进行微调。

export CUDA_VISIBLE_DEVICES=0
python -m paddle.distributed.launch \--selected_gpus="0" \tools/train.py \-c ./configs/quick_start/ResNet50_vd_finetune.yaml

最终输出验证集精度(Top-1 Acc)为93.33%

7. 对ResNet50_vd_ssld预训练模型进行微调。

export CUDA_VISIBLE_DEVICES=0
python -m paddle.distributed.launch \--selected_gpus="0" \tools/train.py \-c ./configs/quick_start/ResNet50_vd_ssld_finetune.yaml \-o pretrained_model=./pretrained/ResNet50_vd_ssld_v2_pretrained/

最终输出验证集精度为94.61%

通过两个预训练模型在相同数据集的测试精度对比可以发现,在其参数相同的情况下, ResNet50_vd_ssld预训练模型精度可提升1.3%。(说明:该数据集较小,因此在训练时,指标可能会有少许波动)。

实现过程是不是很简单,这就是1.8版本PaddleClas为小伙伴们开源的 ResNet50_vd_ssld预训练模型。

此外在目标检测任务上,飞桨提出了一种面向服务器端实用的目标检测方案PSS-DET(Practical Server Side Detection),它的图像分类部分应用了ResNet50_vd_ssld预训练模型。实验证明,基于COCO2017目标检测数据集,V100单卡预测速度为为61FPS时,COCO mAP可达41.6%;预测速度为20FPS时,COCO mAP可达47.8%。

感兴趣的同学可以参考:

https://github.com/PaddlePaddle/PaddleDetection/blob/master/configs/rcnn_enhance/README.md

随着AI技术的不断成熟和算力的发展,越来越多的深度学习方案会走出实验室,实现产业应用,比如:垃圾分类、工业质检、眼疾筛查等等。你有想法,飞桨有技术,希望小伙伴们天马行空的创意能越来越多的在飞桨中实现。

Join us:飞桨为深度学习爱好者提供了多个实习生岗位,如果您具有图像处理、计算机视觉等科研背景,并愿意与飞桨携手,一起圆梦人工智能的未来,期待您的加入。

如在使用过程中有问题,可加入飞桨官方QQ群进行交流:703252161。

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

飞桨 PaddleClas 项目地址:

GitHub: https://github.com/PaddlePaddle/PaddleClas

Gitee: https://gitee.com/paddlepaddle/PaddleClas

PaddleClas文档地址:

https://paddleclas.readthedocs.io

30分钟玩转PaddleClas:

https://paddleclas.readthedocs.io/zh_CN/latest/tutorials/quick_start.html

PaddleClas 快速体验aistudio地址:

https://aistudio.baidu.com/aistudio/projectdetail/428501

官网地址:

https://www.paddlepaddle.org.cn

飞桨开源框架项目地址:

GitHub:

https://github.com/PaddlePaddle/Paddle

Gitee:

https://gitee.com/paddlepaddle/Paddle

END

PaddleClas预训练模型ResNet50_vd_ssld精度突破84%相关推荐

  1. 134个预训练模型、精度高达85.1%,百度视觉算法最强基石PaddleClas全新升级

    机器之心发布 机器之心编辑部 百度 PaddlePaddle 团队开发的 PaddleClas 是一个适用于业界和学界的图像分类任务工具集,可以帮助用户训练更好的计算机视觉模型并应用于真实场景中.近期 ...

  2. 清华唐杰团队:一文看懂NLP预训练模型前世今生

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 搞出了全球最大预训练模型的悟道团队,现在来手把手地教你怎么弄懂预训练这一概念了. 刚刚,清华唐杰教授联合悟道团队发布了一篇有关预训练模型的综 ...

  3. 『paddle』paddleclas 学习笔记:分类预训练模型选择

    目录 ImageNet预训练模型库 模型库概览图 SSLD知识蒸馏预训练模型 ResNet 及其 Vd 系列 移动端系列 SEResNeXt与Res2Net系列 DPN 与 DenseNet 系列 H ...

  4. 23个系列分类网络,10万分类预训练模型,这是飞桨PaddleClas百宝箱

    如何训练出优秀的图像分类模型?飞桨图像分类套件 PaddleClas 来助力. 今天咱们来聊聊计算机视觉领域最核心的技术之一--图像分类.顾名思义图像分类是指根据图像信息把不同类别的图像自动区分开来, ...

  5. 【论文精度】CodeBERT——基于自然语言和编程语言的预训练模型

    CodeBERT 论文地址:https://arxiv.org/abs/2002.08155 Abstract ​ 提出了一种用于编程语言(PL)和自然语言(NL)的双模态预训练模型CodeBERT, ...

  6. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  7. 巨量模型时代,浪潮不做旁观者:2457亿参数,打造全球最大中文预训练模型

    作者 | 琰琰 战鼓催征千嶂寒,阴阳交会九皋盘. 飞军万里浮云外,铁骑丛中明月边. 看到这首诗歌,有超过50%的人误以为是人类的杰作 但其实,它出自巨量模型 源1.0 经过图灵测试认证,源1.0 写诗 ...

  8. 文档智能理解:通用文档预训练模型与数据集

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很 ...

  9. NLP预训练模型综述

    文章目录 文章 介绍 背景 2.1语言表示学习 非上下文词嵌 2.2 神经上下文编码器 2.2.1 序列模型s 2.2.2 非序列模型 2.2.3 分析 2.3 为什么预训练? 2.4 NLP的PTM ...

最新文章

  1. 难忘的一天——装操作系统(三)
  2. 模拟电路基础秦世才_模拟电子技术基础碎片化-晶体管及放大电路基础
  3. fastadmin html模板,fastadmin 使用记录
  4. centos8下重启网卡命令_centos8 网络配置
  5. vue el-upload上传组件限制文件类型:accept属性
  6. 基于Linux的虚拟主机搭建
  7. 计算机系统结构——概述
  8. CiberCut_5.6 标牌制作
  9. Hdu 3478 Catch
  10. Android2.2查看svn历史提交记录
  11. 银河麒麟通过命令行安装软件没有安装上
  12. php获取xml中的数据格式_php-从xml文件获取数据
  13. 编程素人眼里的编程珠玑
  14. 批处理大全Win10版工具箱
  15. 2018最新版省市区三级联动数据
  16. idea第一次上传代码到gitlab
  17. TRS过期后解决办法
  18. bat文件开启mysql服务器,bat文件启动mysql服务器
  19. easyui datebox时间控件改为年月视图,值也为年月
  20. linux 正确错误输出_报告错误的正确方法

热门文章

  1. 在kali中安装探测工具gobuster和oneforall工具
  2. fliqlo时钟屏保win7/win10/win8下载
  3. 据说,很多程序员都没看过这些......
  4. WRL::ComPtr 的坑
  5. LocalSend - 无需联网,开源跨平台的局域网文件互传工具(AirDrop 替代品)
  6. mysql 姓刘或姓李_MYSQL数据库查询
  7. android 6.0 EC20驱动移植
  8. 4418 选元素(递推)
  9. 创面修复医疗器械行业概况及市场规模分析
  10. QLayout布局间消除间隙和QLayout边缘空白调整