精度超越现有SOTA,百度视觉团队基于飞桨推出工业级骨干网络「HS-ResNet」
图像分类、目标检测、图像分割等各类视觉技术都离不开骨干网络(backbone),一个强有力的骨干网络可以为模型带来更高的效率及精度,所以它的设计一直都是业界研究者关注的重点方向。
当下,现有的骨干网络其实已经非常丰富和成熟。比如近几年工业界的『网红』骨干网络—— ResNet,它做到了速度与精度的完美平衡,且由于较高的鲁棒性,在各类数据集上都有较好的效果,成为了社区中为数不多「久经考验的模型」。
这些年,很多研究者也基于ResNet进行了诸多改进,如ResNeXt、ResNet-D,Res2Net等。但是由于在速度与精度的平衡方面表现欠佳:为了追求更高的精度,而牺牲了速度,因此没有在工业领域广泛落地应用。
例如今年年中推出的ResNeSt,当属ResNet的最强改进版,在精度上取得了SOTA(state-of-the-art)的效果,但是速度上依旧受人诟病,所以没能成为工业落地的标配。
而原始的ResNet系列模型依然是工业界的首选。因此,如何设计一个精度高且速度快的骨干网络,一直是工业界和学术界研究的热点。
百度视觉研发团队基于飞桨深度学习平台推出的HS-ResNet,就是这样一个很好地平衡了精度和速度的优秀骨干网络。其以尽量不增加模型计算量和推理开销为前提,将原先的ResNet模型的top-1精度(ImageNet val数据集)从76.5%提升了近5个百分点,达到81.28%,精度远超现有SOTA!该网络不仅在图像分类领域表现抢眼,将其用于目标检测、图像分割上,涨点也同样明显。也就是说,在同样预测速度的网络中,该网络可以取得更高的精度,实打实堪称工业界最强的骨干网络之一。
下载安装命令 ## CPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle ## GPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
下图展现了ResNet50不同改进版本的精度和延时的关系。测试环境为T4/FP32,使用了TensorRT,且Batch-Size为1。圆圈面积反映了不同模型的参数大小。橙色圆圈表示使用不同改进策略的ResNet50,绿色圆圈表示在ResNet50上使用了不同注意力策略,红色圆圈表示这次的主角HS-ResNet50。
下表展示了HS-ResNet与ResNet改进版的比较,从表格中的数据可以看出HS-ResNet的优势非常明显。
该HS-ResNet的设计也被梳理总结成了论文,感兴趣的开发者可以参见下面的链接阅读全文。
HS-ResNet论文:
https://arxiv.org/abs/2010.07621
那HS-ResNet到底是如何设计的呢?下面带领大家一起来看一下最强骨干网络的养成之路。
基于ResNet-D的
初步优化
原始的ResNet已经是非常好的骨干网络了,ResNet-D在几乎不增加推理开销的同时进一步提升了精度,所以研发同学首先考虑使用该网络为baseline去优化。下图展示了ResNet-B(即常见的ResNet版本)到ResNet-D的进化。
采用更细致的Split方式
近些年很多模型的设计都在通道层面进行切分。比如,ResNeXt引入了「组」与「基数」的概念,将通道按不同的组分别做卷积操作,获取更加丰富的特征;Res2Net引入了scale与width的概念,将通道split后分级做卷积操作,提升了模型的感受野;ResNeSt采用了更细致的attention机制对通道做了加权处理。HS-ResNet的研发人员发现,使用更多的分组操作或者使用更细致的attention操作都会大大增加模型的耗时,大大降低网络结构的性价比;而多级的Split操作可以将不同的感受野信息做更好的融合,推理速度也没有变慢很多,从而达到只增加很少的耗时情况下提升更多的精度效果。
HS-ResNet的整体结构与ResNet-D一样,只是将bottleneck中的3x3卷积替换成了更为细致的split分级结构,当scale=5时其结构图如下所示。
使用更适当的训练策略
众所周知,训练策略往往会决定模型的最终性能,但过分的调整训练策略往往会让其他开发者认为模型优秀的表现源自于更好的训练策略。基于此,HS-ResNet的作者没有使用更强的训练策略(如EMA策略,drop-block等),仅使用了目前较为常规的训练分类trick,如label-smoothing、cosine-learning-rate-decay等。即使在这些常规策略下,该模型仍取得了SOTA效果。
前文提到,该骨干网络应用到下游任务中,也取得了不俗的表现,让我们一起看看其他视觉任务中的情况
1. 目标检测任务
对于目标检测任务,HS-ResNet的作者在MS-COCO数据集上进行验证,使用Faster-RCNN和FPN作为基础模型。下表展示了检测精度,从下表数据可以计算出,与ResNet50-D相比,HS-ResNet50在mAP@IoU=05:0.95%上可以直接获得2.7%的收益,这表明仅仅替换检测任务中的骨架网络,通过使用HS-ResNet网络即可显著提升检测任务的精度。
2. 实例分割任务
对于实例分割任务,同样地在MS-COCO数据集上进行验证,使用Mask R-CNN和FPN作为基础模型。实验结果如下表所示。从下表数据可以计算出,HS-ResNet50相比同等级参数量的ResNet50-D提高2.6%,相比参数量更多的ResNet101-D提高1.2%。
3. 语义分割任务
对于语义分割任务,在Cityscapes dataset上验证HS-ResNet带来的收益,使用Deeplabv3+作为基础模型。实验结果如下表所示。从下表数据可以计算出,与ResNet50-D相比,HS-ResNet50在meanIoU上的性能提升了1.8%,这表明多级切分通道模块能获得更加准确的语义信息。
后续工作
HS-ResNet的作者将继续验证该模型在其他视觉任务上的表现,期待该模型更多的state-of-the-art的结果。
该模型将于PaddleClas Repo进行开源,并提供丰富的下游任务(例如OCR,视频分类和场景分类)的实现,以供业界开发者使用。
PaddleClas飞桨图像分类套件是飞桨为工业界和学术界所准备的图像分类任务的工具集,拥有24个系列的分类网络结构和训练配置,122个预训练模型和性能评估,其中包括10万类图像分类预训练模型。其涵盖百度自研的SSLD知识蒸馏方案优化方案及优化后的诸多模型。并支持丰富的数据增广、多机训练、混合精度训练等方案。助力使用者训练出更好的视觉模型和应用落地。
下载安装命令 ## CPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle ## GPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL优化(性能,索引,orderby,explain)
前言 今天我们来讲讲如何优化MySQL的性能,主要从索引方面优化。下期文章讲讲MySQL慢查询日志,我们是依据慢查询日志来判断哪条SQL语句有问题,然后再进行优化,敬请期待MySQL慢查询日志篇 建表 优化一:全部用到索引 介绍 建立的复合索引包含了几个字段,查询的时候最好能全部用到,而且严格按照索引顺序,这样查询效率是最高的。(最理想情况,具体情况具体分析) SQL 案例 优化二:最左前缀法则 介绍 如果建立的是复合索引,索引的顺序要按照建立时的顺序,即从左到右,如:a->b->c(和 B+树的数据结构有关) 无效索引举例 a->c:a 有效,c 无效 b->c:b、c 都无效 c:c 无效 SQL 案例 优化三:不要对索引做以下处理 以下用法会导致索引失效 计算,如:+、-、*、/、!=、<>、is null、is not null、or 函数,如:sum()、round()等等 手动/自动类型转换,如:id = “1”,本来是数字,被写成字符串了 SQL 案例 优化四:索引不要放在范围查询右边 举例 比如复合索引:a->b->...
- 下一篇
了解HashMap数据结构,超详细!
点击蓝色“程序员的时光”关注我,标注“星标”,及时阅读最新技术文章 写在前面: 小伙伴儿们,大家好!今天来学习HashMap相关内容,作为面试必问的知识点,来深入了解一波! 思维导图: 学习框架图 1,HashMap集合简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。 JDK1.8之前的HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了节解决哈希碰撞(两个对象调用的hashCode方法计算的哈希码值一致导致计算的数组索引值相同)而存在的(“拉链法”解决冲突)。 JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(或者红黑树的边界值,默认为8)并且当前数组的长度大于64时,此时此索引位置上的所有数据改为使用红黑树存储。 数组里面都是key-value的实例,在JDK1.8之前叫做Entry,在JDK1.8之后叫做Node。 key-value实例 由于...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)