随着防控措施效果显现,新冠疫情在全国范围内已经得到了控制。当我们走进地铁与车站,甚至很多小区与超市,都会看到口罩人脸检测系统与红外测温系统,这些都是人工智能在疫情控制方面给出的独到帮助。
人工智能在抗击疫情过程中作出的贡献,与深度学习先进算法的不断开源是密不可分的。早在 2 月份,百度就开源了首个口罩人脸检测模型,并发布了多个预训练模型,你要部署到服务器还是移动端,它都能满足。
我们会发现,这样的预训练模型简直太好用了,比如说借助 PaddleHub,只需一行命令就能部署到服务器。然而不止是 PaddleHub,整个 PaddleCV 也非常好用,不然开发者很难在短时间内借助它开发并开源「防疫模型」。
近日,百度正式全面升级 PaddleCV,顶尖模型新发布、常用模型再提速,它已经是有 73 个视觉顶尖算法、203 个预训练模型的大家庭了。
PaddleCV 新一波来袭
之前机器之心曾介绍过,相比 TensorFlow 或 PyTorch,PaddlePaddle 拥有最大的官方模型库,也就是说飞桨团队会花费大量精力维护这些模型,以保证它们的性能最优、API 最新、易用性最好。PaddleCV 是就是其中包含视觉算法、模型和工具的开源项目。
在这一次的 PaddleCV 更新中,PaddleCV 新增产业实践中广泛应用的 15 个算法、35 个高精度预训练模型,以及 3D 视觉、PLSC 超大规模分类模型这两项全新能力。
PaddleCV 地址:https://github.com/PaddlePaddle/models/tree/release/1.7/PaddleCV
如上全景图所示,整个 PaddleCV 从底层工具到最上层的套件都有更新,其中 PaddleDetection 更新、新增了一系列算法模型,例如增强版 YOLOv3 相比原版提升 mAP 10 个点,新增 COCO 最佳检测模型 CBNet 等。
与此同时,PaddleSeg 也有很多更新,例如新增实时语义分割模型 Fast-SCNN、基于 HRNet 的高精度图像分割模型。以非常流行的 DeepLab V3+来说,Fast-SCNN 的推理速度要比它快一倍多。
两大新发布
PaddleCV 全新发布了 3D 点云视觉算法,可能在我们的印象中,3D 视觉还处于研究阶段,但这两个模型已经经过了工业界的重重考验,有很好的稳定性与效果。给定 3D 点云,PaddleCV 中的 3D 视觉模型就能完成目标检测,构建一个神奇的 3D 边界框。
PointRCNN 与一般目标检测一样分为两阶段:自底向上生成 3D 候选边界框,以及微调精炼得到精确的 3D 边界框。
另一项新发布是 PLSC 这个超大规模分类工具,它的「超大规模」指的是千万规模的分类任务,这对于大规模人脸识别,或「口罩人脸识别」非常重要。
飞桨大规模分类库 PLSC 封装了大规模分类神经网络实现,提供简洁易用的高层 API,用户通过五行代码即可实现千万类别分类神经网络。训练有多简单?看下面这段代码就知道了:
from plsc import Entry
if __name__ == "main":
ins = Entry()
ins.set_class_num(1000000) #设置分类类别数
ins.train()
——————————————————————————————————————————————————
# command line
python -m paddle.distributed.launch \
--selected_gpus=0,1,2,3,4,5,6,7 \
train.py
算法硬件不分家
总的来说,在算法上,PaddleCV 现在已有 73 个视觉顶尖算法。如果觉得这个数字还不够直观的话,推荐可以看一看 PaddleCV 的 GitHub 页面,模型列表真的非常丰富,不说最常规的图像分类模型,视频类算法都有下面这么多。
PaddleCV 的模型已经有那么多了,若要用好它们,压缩、部署、硬件缺一不可。而现在,从训练到部署,借助飞桨在服务器和移动端全硬件平台能力,视觉模型能落地到各种平台,包括百度的昆仑芯片。PaddleSlim 为不同的模型提供最好的压缩方案,以适合不同的硬件,而 Paddle Lite 等工具则以最好的方式真正将模型运行在各类硬件上。
完整的 PaddleCV 与更新内容读者可查看 GitHub 地址,本文后面则主要介绍 PaddleDetection 的更新内容,它从性能更新、顶尖新模型和实战部署都有很多进步。
YOLOv3:训练再提速 40%
PaddleDetection 的目的是为工业界和学术界提供丰富、易用的目标检测模型。在这一次更新中,我们能看到 PaddleDetection 优化了很多主流模型的性能,YOLOv3 就是一个明显的案例。
在 COCO 数据集的上,骨干网络 DarkNet 作者在其论文中所使用的 YOLOv3 模型的验证精度 mAP 为 33.0%,而飞桨在之前版本中曾经发布过基于 DarkNet53 的 YOLOv3 模型,该模型的验证精度为 mAP 38.9%。
在最新的 PaddleDetection 检测库中,飞桨对 YOLOv3 又做了如下改进,使得验证精度 mAP 再次提高到 43.2%,并且推理速度提升 21%。本次升级还对数据预处理速度持续优化,使得整体训练速度提升 40%。相比原版 YOLOv3,百度优化的模型在 mAP 上已经有 10 个点的提升,就说准确度这就已经非常惊人了。
而 YOLO,差不多是目前最为常用的目标检测算法,每次优化都显得非常有意义。YOLO 模型最早由 Joseph Redmon 等人在 2015 年提出,并在随后的几篇论文中进行了修订。
YOLO 的创新之处在于,它提出了 one-stage 的检测思路,即目标定位和目标识别在一个步骤中完成,不需要网络划定边界框后再进行预测。但它也有一定的缺陷:它不擅长小目标检测。为了弥补这一缺陷,2018 年,Redmon 等人发布了 YOLO v3。
在架构上,YOLOv3 采用了 Darknet-53,并借鉴了残差神经网络的思路,采用了残差连接,从而更好地学习图像特征。那么,飞桨团队为什么能优化 10 个点的精度,且还提升训练推理速度?
首先,飞桨团队将 YOLOv3 的骨干网络从 DarkNet 更换为 ResNet50-VD 类型。ResNet50-VD 网络相比升级前的 DarkNet53 网络,在速度和精度上都有一定的优势,且 ResNet 系列更容易扩展。在 PaddleDetection 中,用户可以针对自己业务场景的特点,灵活选择 ResNet18、34、101 等不同网络类型作为模型的骨干网络。
ResNet-50 是著名的目标检测骨干网络,具有一定的性能优势。而「VD」则是在这一网络的基础上进行的改进,如在训练方面增加一些技巧,或进行架构上的改进等。
对于 ResNet-50 的几种架构改进。
另一方面,PaddleDetection 引入 Deformable Convolution v2(简称 DCNv2,可变形卷积)替代原始卷积操作。实验数据表明,使用 ResNet50-VD 和 DCNv2 后,模型精度提升了 0.2%,提速约为 21%。
DCNv2 同时考虑了速度与精度平衡。本次升级的 YOLOv3 模型使用 DCNv2 替换了主干网络中 stage5 部分的 3x3 卷积。
此外,PaddleDetection 在 FPN 部分增加 DropBlock 模块,提高了模型泛化能力。DropBlock 算法相比于 Dropout 算法,在 Drop 特征的时候会集中在某一块区域,更适合应用到检测任务中来提高网络的泛化能力。
Dropout 和 Dropblock 对比图。
这样一种机制,很明显能够帮助网络集中对某些区域进行 Dropout,因此它相比随机 Dropout 具有更好的针对性。
从 YOLOv3 在飞桨上进一步大放光彩可以说明,本次 PaddleDetection 的开源,让很多优秀而成熟的老模型能够进一步提升自身的性能,从而在更多图像场景中发挥有效能力。
CBNet:新增 COCO 最优检测模型
PaddleCV 除了保证 YOLO 这种常用模型「跟上时代的步伐」,也会增加一些经实践检验过的优质算法。COCO 数据集精度最高的开源模型 CBNet、Open Images V5 目标检测比赛最佳单模型等在这一次更新中都有加入。
CBNet 是目前 COCO 数据集上表现最佳的目标检测网络,在测试集上其 mAP 为 53.3%。CBNet 通过相邻骨干(backbone)网络之间的复合连接 (Composite Connection) 组合生成新的骨干网络,称为复合骨干网络 (Composite Backbone Network)。以 ResNet 结构为例,级联个数为 2 时,称为 Dual-ResNet,级联个数为 3 时,称为 Triple-ResNet。
本次 PaddleCV 新增的 CBNet 基础模型使用的是 AHLC(Adjacent Higher Level Composition)组网方式,即Assistant Backbone的每个输出特征都通过复合连接模块作为相邻骨干的输入。在论文中,AHLC 为多种组网方式中性能最好的联结方式。
此外除了新增基础模型外,还发布了单尺度检测模型 CascadeRCNN-CBR200-vd-FPN-dcnv2-nonlocal,其在 COCO 测试集上精度高达 53.3%。
PaddleSlim:模型压缩进入 1.0
PaddleCV 提升、更新了一大波模型,这些模型要实际应用到手机等设备,还是必须得完成「瘦身」操作。目前 PaddleSlim 已经进入了 1.0 版,它应用到在 SDK,在嵌入式设备上 0.3 秒内就能完成人脸检测、跟踪、活体检测和识别等全流程。
在前文中,YOLO v3 已经有了增强版,而对于 PaddleSlim,它也能提供定制化的 YOLO 蒸馏方案,其可以刷新 COCO 检测任务精度。下表对 YOLOv3 的「瘦身」效果有很详细的描述,在 Pascal VOC 数据集上,减少 67% 的参数量、69% 的计算量,效果竟然还要提升 2.6%。
PaddleSlim 1.0 也是走向成熟的标识,它在模型压缩方面已经做得非常好了,那么 1.0 将不止步于的知识蒸馏、剪枝等压缩方法。PaddleSlim 1.0 开放了更加灵活的网络结构搜索 NAS API,预定义了更丰富的搜索策略和搜索空间,只有搜索,才能针对特定任务实现更完美的架构。
上图展示了 One-Shot 网络结构搜索原理,相比之前方法一块 V100 GPU 需要 42 天 才能完成,One-Shot 只需要 4 天。其获得的收益是,相比 MobileNet V2,搜索出的网络在计算量(FLOPs)上少了 20%。
作为成熟的瘦身框架,它势必与部署联系在一起,我们压缩模型不就是为了方便在各种设备上使用么?PaddleSlim 1.0 这一点也是考虑到的,从训练、压缩到部署,模型能无缝落地到各种硬件环境。
最后,基于飞桨框架,开发者们现在可以快速利用主流算法,直接进行全流程模型开发。甚至可以快速实现最顶尖的 3D图像分类、语义分割和目标检测任务,并让模型精度与世界领先水平持平。百度飞桨已为我们发展应用提供了必不可少的工具。
在疫情进入消退期后,「新基建」正在成为各界关注重点,在发力于科技端的基础设施建设过程中,人工智能登场的舞台必将越来越多