前言:
现在兄弟们对“cnn算法的运用”大概比较重视,大家都需要知道一些“cnn算法的运用”的相关内容。那么小编同时在网络上收集了一些对于“cnn算法的运用””的相关知识,希望各位老铁们能喜欢,咱们快快来学习一下吧!自动驾驶用于计算机视觉(CV)的深度学习模型,长时间由卷积神经网络CNN主导,而CNN主要有图像分类(Classfication)、目标识别(Detection)、语义分割(Segmentation)三大应用场景,汽车人参考这里分享CNN算法的发展趋势,全文共2857个字。
CNN五大部件
局部感受野/局部感知(Local Receptive Field):由于图像的各局部信息联系紧密,神经元只需要感知局部信息,在更高层综合起来即可得到全局信息,卷积的理论支撑。
卷积(Convolution):乘积累加运算,包含多个可学习的卷积核,上一层输出的特征图与卷积核进行运算,输出下一层的特征图。
激活函数(Activation Function):卷积层输出的特征图需要加入的非线性因素,其中,卷积层常用Relu函数,全连接层常用Sigmod和Tanh函数。
池化(Pooling):图像缩小,只保留重要信息,以减少像素。
全连接层(Fully Connected Layers):将特征映射到样本标记空间,常采用卷积操作。
CNN基本参数
分辨率(Resolution):输入图像的尺寸(长宽)。
深度(Depth):神经网络层数或Module(由多个卷积层组成)的个数。
宽度(Width):在某层学到信息量(最大通道数)。
参数量(Params):网络中可学习变量的数量。
计算量(FLOPs):神经网络前向推理过程中乘加运算的次数floating point operations。
计算速度(FLOPS):每秒浮点运算次数floating point operations per second,是衡量硬件性能指标。
帧率(Frames per second, FPS):每秒显示帧数。
卷积核(Convolutional Kernel):卷积层中用于提取局部特征,CNN训练是训练出来各种各样的卷积核来提取特征,个数对应通道数。
top1accuracy/mIOU/mAP:图像分类/语义分割/目标检测的评价指标。
CNN的架构设计
CNN架构设计(Backbone),主要根据具体任务的数据集和评价指标,确定神经网络结构的分辨率、深度、宽度、拓扑结构等细节,之后采用PyTorch或TensorFlow进行开发。
针对于分类任务,目前公开发表论文大多基于ImageNet公开数据集,进行通用结构设计,由于ImageNet数据量丰富,通常在该数据集上获得很好精度的模型可以泛化到其他任务上。
在自动驾驶等实际应用场景中,从业人员都会基于自身情况,对已公开发表的网络结构进行再优化,但通用结构不大会有根本性的变动。
早期CNN架构设计以分类精度作为主要的设计指标,之后引入了参数量、计算量等进行综合评价。
此外,AI应用的一个大趋势是在端侧部署模型(如自动驾驶),并能在真实场景中实时(帧率大于30帧)运行,但自动驾驶平台往往内存资源少,硬件性能不高,功耗受限,经典的CNN网络对内存及计算资源的超额要求导致其无法部署。
为了解决这个难题,有两种方式,一是对训练好的复杂模型通过知识蒸馏、通道剪枝、低比特量化(浮点计算转成低比特定点计算)等手段对模型进行压缩,降低参数量和计算量;二是直接设计小模型/轻量化模型并进行训练。
不管如何,其目标都是在保持模型性能(分类精度accuracy)的前提下,降低模型大小(size),同时提升模型速度(响应速度快speed, 低延迟low latency)。
经典CNN模型
2012年,Hinton的学生Alex提出了AlexNet算法模型,是在20年前的LeNet模型基础上堆叠了5个卷积层和3个全连接层,整个模型的大小约200M,含60M个参数。
作为标志性事件,AlexNet将AI应用推向了高潮,CNN也成为了计算机视觉领域最核心的算法模型。
(AlexNet)
AlexNet提出后,提升分类精度成为主要的发展目标,最简单的方式是增加网络层数。
2014年,牛津大学提出了VGG模型,在AlexNet基础上堆叠了13个卷积层和3个全连接层,深度更深(约为AlexNet的两倍),将分类精度从55%提升到了80%,但计算量也从2GOPS提升到了40GOPS,VGG模型大小约500M,包含了138M个参数。
参数越多,计算量越大,受限于硬件GPU的性能,减少参数逐步成为另一个重要课题。
为此,Google在2014年启动了Inception项目,发布第一个版本GoogleNet,使用1×1卷积核(network in network),通过增加网络宽度,来增加网络复杂度,在保证分类精度的同时,使得参数量减少到了6.8M。
到2016年,Inception引入了ResNet ( 残差网络 ) ,发展到V4版本,精度越来越高;同时在v3的基础上也提出了基于通道分离式的卷积InceptionX。
轻量化CNN模型
随着分类精度逐渐达到饱和,巨大的计算量已经开始严重影响CNN在低功率领域的应用。
传统CNN网络结构由标准卷积核(7×7,5×5,3×3,1×1)组成,多以3×3及以上为主,通道数多,导致参数量和计算量很大。随着对CNN研究加深,发现两个3×3卷积可代替一个5×5卷积,三个3×3卷积可代替一个7×7卷积,而使用1×1卷积,使用3×3depthwise conv+pointwise conv(1×1标准卷积)可代替3×3普通卷积。
基于以上实践,Google在2017年发布了适用于端侧的轻量化CNN神经网络MobileNet,采用深度可分离卷积/深层卷积(depthwise separable convolution)代替普通的卷积,并使用宽度乘数(width multiply)减少参数量,它可在牺牲极少精度的同时去换取更好的数据吞吐量。
MobileNet逐步成为端侧(自动驾驶领域),比较有代表性用于2D感知视觉深度学习算法结构。
Transformer:从语言到视觉
谷歌在2017年发布了著名的论文“Attention is all you need”,提出了注意力机制,通过某种运算来直接计算得到句子在编码过程中每个位置上的注意力权重,然后再以权重和的形式来计算得到整个句子的隐含向量表示。
Transformer模型就是基于注意力机制算法,其在序列建模和机器翻译等任务上表现出了惊人的潜力,成为了自然语言处理(NLP)领域主要的深度学习模型。
与此同时,该模型在视觉识别领域也得到了很多关注,有大量研究尝试将Transformer移植到CV任务中,Google近期在深度学习顶级会议ICLR 2021上发表了ViT(Vision Transformer),针对谷歌内部分类训练库JFT-300M(3亿图片),及ImageNet-1K(1000个类别)评测集上取得了88.55%准确率,刷新了榜单上的纪录。
ViT很适用于图像分类任务,但因没有全面考量视觉信号特点,对于区域级别和像素级别任务不友好(物体检测和语义分割),因此较适用于图像分类。
为此,学术界将transformer与视觉信号先验结合起来,提出了Swin Transformer,最重要设计是移位的不重叠窗口(shifted windows),其对硬件实现更加友好。
Swin Transformer在物体检测(评价级COCO)和语义分割任务中(评测级ADE20K)大幅刷新了此前纪录,此外,还在视频动作识别、视觉自监督学习、图像复原、行人Re-ID、医疗图像分割等任务中大放异彩,也让学术界更加确信Transformer结构将会成为视觉建模的新主流。
Swim Transformer的提出,使视觉和语言的联合建模更容易,两个领域的建模和学习经验可以深度共享,从而加快各自领域的进展。
汽车人参考小结
本文梳理了计算机视觉领域深度学习模型CNN的演变历程,从二十年前昙花一现,到近年来的迅猛发展,AI已在自动驾驶领域找到了最合适发育土壤,算法迭代速度越来越快,相关论文数量也是以指数形式增长。
在这繁荣的背后,其实带来了两大挑战,一是商业软件公司,如何押注多变的算法技术路线,技术领先还是技术追随;二是行业硬件公司,在软硬结合过程中,如果让硬件架构去适配多变的算法。
如果把眼光放长远一点,以终为始去思考,不分应用领域,未来所有深度学习模型会不会统一在一个架构之下?至少从2020年年底开始,Transformer在CV领域中展现出的革命性的性能提升,有望将视觉和语言的建模统一。
本文为汽车人参考第367篇原创文章,如果您觉得文章不错,“推荐和关注”是对我最大的支持。
标签: #cnn算法的运用