Processing math: 66%
  • 中国精品科技期刊
  • CCF推荐A类中文期刊
  • 计算领域高质量科技期刊T1类
高级检索

开源软件缺陷预测方法综述

田笑, 常继友, 张弛, 荣景峰, 王子昱, 张光华, 王鹤, 伍高飞, 胡敬炉, 张玉清

田笑, 常继友, 张弛, 荣景峰, 王子昱, 张光华, 王鹤, 伍高飞, 胡敬炉, 张玉清. 开源软件缺陷预测方法综述[J]. 计算机研究与发展, 2023, 60(7): 1467-1488. DOI: 10.7544/issn1000-1239.202221046
引用本文: 田笑, 常继友, 张弛, 荣景峰, 王子昱, 张光华, 王鹤, 伍高飞, 胡敬炉, 张玉清. 开源软件缺陷预测方法综述[J]. 计算机研究与发展, 2023, 60(7): 1467-1488. DOI: 10.7544/issn1000-1239.202221046
Tian Xiao, Chang Jiyou, Zhang Chi, Rong Jingfeng, Wang Ziyu, Zhang Guanghua, Wang He, Wu Gaofei, Hu Jinglu, Zhang Yuqing. Survey of Open-Source Software Defect Prediction Method[J]. Journal of Computer Research and Development, 2023, 60(7): 1467-1488. DOI: 10.7544/issn1000-1239.202221046
Citation: Tian Xiao, Chang Jiyou, Zhang Chi, Rong Jingfeng, Wang Ziyu, Zhang Guanghua, Wang He, Wu Gaofei, Hu Jinglu, Zhang Yuqing. Survey of Open-Source Software Defect Prediction Method[J]. Journal of Computer Research and Development, 2023, 60(7): 1467-1488. DOI: 10.7544/issn1000-1239.202221046
田笑, 常继友, 张弛, 荣景峰, 王子昱, 张光华, 王鹤, 伍高飞, 胡敬炉, 张玉清. 开源软件缺陷预测方法综述[J]. 计算机研究与发展, 2023, 60(7): 1467-1488. CSTR: 32373.14.issn1000-1239.202221046
引用本文: 田笑, 常继友, 张弛, 荣景峰, 王子昱, 张光华, 王鹤, 伍高飞, 胡敬炉, 张玉清. 开源软件缺陷预测方法综述[J]. 计算机研究与发展, 2023, 60(7): 1467-1488. CSTR: 32373.14.issn1000-1239.202221046
Tian Xiao, Chang Jiyou, Zhang Chi, Rong Jingfeng, Wang Ziyu, Zhang Guanghua, Wang He, Wu Gaofei, Hu Jinglu, Zhang Yuqing. Survey of Open-Source Software Defect Prediction Method[J]. Journal of Computer Research and Development, 2023, 60(7): 1467-1488. CSTR: 32373.14.issn1000-1239.202221046
Citation: Tian Xiao, Chang Jiyou, Zhang Chi, Rong Jingfeng, Wang Ziyu, Zhang Guanghua, Wang He, Wu Gaofei, Hu Jinglu, Zhang Yuqing. Survey of Open-Source Software Defect Prediction Method[J]. Journal of Computer Research and Development, 2023, 60(7): 1467-1488. CSTR: 32373.14.issn1000-1239.202221046

开源软件缺陷预测方法综述

基金项目: 先进密码技术与系统安全四川省重点实验室开放课题(SKLACSS-202205);海南省重点研发计划项目(GHYF2022010, ZDYF202012);国家自然科学基金项目(U1836210);陕西省自然科学基础研究计划(2021JQ-192);广西密码学与信息安全重点实验室课题(GCIS202123)
详细信息
    作者简介:

    田笑: 1999年生. 硕士研究生. 主要研究方向为网络与信息安全

    常继友: 1999年生. 硕士研究生. 主要研究方向为网络与信息安全

    张弛: 2002年生. 硕士研究生. 主要研究方向为人工智能与安全

    荣景峰: 1986年生. 博士研究生. 主要研究方向为网络与信息安全

    王子昱: 1998年生. 硕士研究生. 主要研究方向网络与信息安全

    张光华: 1979年生. 博士,教授,硕士生导师. 主要研究方向为网络与信息安全

    王鹤: 1987年生. 博士,讲师, 硕士生导师. 主要研究方向为密码学、量子密码协议

    伍高飞: 1987年生. 博士,讲师,硕士生导师. 主要研究方向为密码学

    胡敬炉: 1962年生. 博士,教授,博士生导师. 主要研究方向为计算智能

    张玉清: 1966年生. 博士,教授,博士生导师. 主要研究方向为信息安全

    通讯作者:

    张玉清(zhangyq@nipc.org.cn

  • 中图分类号: TP311

Survey of Open-Source Software Defect Prediction Method

Funds: This work was supported by the Open Fund of Advanced Cryptography and System Security Key Laboratory of Sichuan Province (SKLACSS-202205), the Key Research and Development Program of Hainan Province (GHYF2022010, ZDYF202012), and the National Natural Science Foundation of China (U1836210), the Natural Science Basis Research Plan in Shaanxi Province of China (2021JQ-192), and the Program of Guangxi Key Laboratory of Cryptography and Information Security (GCIS202123)
More Information
    Author Bio:

    Tian Xiao: born in 1999. Master candidate. Her main research interest includes network and information security

    Chang Jiyou: born in 1999. Master candidate. His main research interest includes network and information security

    Zhang Chi: born in 2002. Master candidate. His main research interest includes AI and security

    Rong Jingfeng: born in 1986. PhD candidate. His main research interest includes network and information security

    Wang Ziyu: born in 1998. Master candidate. His main research interest includes network and information security

    Zhang Guanghua: born in 1979. PhD, professor, master supervisor. His main research interest includes network and information security

    Wang He: born in 1987. PhD, lecturer, master supervisor. Her main research interests include cryptography, quantum cryptographic protocol

    Wu Gaofei: born in 1987. PhD, lecturer, master supervisor. His main research interest includes cryptography

    Hu Jinglu: born in 1962. PhD, professor, PhD supervisor. His main research interest includes computational intelligence

    Zhang Yuqing: born in 1966. PhD, professor, PhD supervisor. His main research interest includes information security

  • 摘要:

    开源软件缺陷预测通过挖掘软件历史仓库的数据,利用与软件缺陷相关的度量元或源代码本身的语法语义特征,借助机器学习或深度学习方法提前发现软件缺陷,从而减少软件修复成本并提高产品质量. 漏洞预测则通过挖掘软件实例存储库来提取和标记代码模块,预测新的代码实例是否含有漏洞,减少漏洞发现和修复的成本. 通过对2000年至2022年12月软件缺陷预测研究领域的相关文献调研,以机器学习和深度学习为切入点,梳理了基于软件度量和基于语法语义的预测模型. 基于这2类模型,分析了软件缺陷预测和漏洞预测之间的区别和联系,并针对数据集来源与处理、代码向量的表征方法、预训练模型的提高、深度学习模型的探索、细粒度预测技术、软件缺陷预测和漏洞预测模型迁移六大前沿热点问题进行了详尽分析,最后指出了软件缺陷预测未来的发展方向.

    Abstract:

    Open-source software defect prediction reduces software repair costs and improves product quality by mining data from software history warehouses, using the syntactic semantic features of metrics related to software defects or the source code itself, and utilizing machine learning or deep learning methods to find software defects in advance. Vulnerability prediction extracts and tags code modules by mining software instance repositories to predict whether new code instances contain vulnerabilities in order to reduce the cost of vulnerability discovery and fixing. We investigate and analyze the relevant literatures in the field of software defect prediction from 2000 to December 2022. Taking machine learning and deep learning as the starting point, we sort out two types of prediction models which are based on software metrics and grammatical semantics. Based on the two types of models, the difference and connection between software defect prediction and vulnerability prediction are analyzed. Moreover, six frontier hot issues such as dataset source and processing, code vector representation method, pre-training model improvement, deep learning model exploration, fine-grained prediction technology, software defect prediction and vulnerability prediction model migration are analyzed in detail. Finally, the future development direction of software defect prediction is pointed out.

  • 随着边缘智能的发展,将深度神经网络部署在边缘低功耗设备来解决实际问题的需求愈加迫切[1]. 卷积神经网络(convolutional neural network, CNN)是典型的深度神经网络,在目标检测、图像分类和语义分析等领域广泛应用[2-4]. 然而,由于CNN模型计算量庞大通常在GB数量级[5],而且CNN中主要计算类型与计算量集中在卷积操作[6],其大量的乘累加计算与庞大的模型参数量对资源受限的边缘智能设备的模型部署带来了严峻挑战.

    现场可编程门阵列(field programmable gate array, FPGA)凭借其灵活的设计模式和高效能优势,成为边缘智能领域部署深度学习各类模型及应用的理想平台[7-9]. 然而,各类FPGA平台资源十分有限. 因此,以往FPGA加速器设计时,针对深度神经网络模型计算量及参数量庞大的问题,主要通过2类方法来解决[10]:一类是通过神经网络压缩(如模型量化和模型剪枝),来减少模型的参数并降低计算复杂度[11-14];另一类是通过改进卷积的计算方式,获得轻量级的神经网络模型来降低计算量[15]. 此外, 在部署模型到硬件加速平台时,期望借助主流的神经网络推理框架如TensorFlow[16], PyTorch[17]等,以便缩短研发周期、实现快速部署[18]. 但是,传统的深度神经网络加速器设计及框架优化方法在面对资源受限的FPGA平台时,以CNN为例往往存在3个挑战:

    1)神经网络模型所包含的算子操作类别愈发多样,FPGA平台需要为多种算子进行独立的硬件设计,资源消耗代价高昂. 例如,MobileNet[19]采用深度可分离卷积来代替传统卷积操作以降低参数数量和计算复杂度. 深度可分离卷积可分为2种不同的计算方式,即逐通道卷积和逐点卷积[19]. 逐通道卷积在计算输出特征图时只关联单一通道的输入特征图,而逐点卷积关联所有的输入特征图到每个输出特征图中. 传统的FPGA加速器针对这2种不同的卷积操作分别设计不同的IP核进行计算加速[20-21]. 然而,作为边缘设备的嵌入式FPGA资源往往受限,无法支撑分别为逐通道卷积和逐点卷积进行单独的硬件设计.

    2)传统的CNN加速器设计方案对FPGA带宽资源利用不充分、数据交换通信代价高,尤其针对低位宽数据缺乏良好的处理机制. 以往的研究工作通常采用切片方法将无法部署于FPGA的大块数据的计算分解为多个小块数据的计算,并通过优化数据交换机制来减少片上存储与片外存储之间的通信代价[18,22],以便将模型部署于嵌入式FPGA. 这些方法中,经过量化操作后其推理任务所使用的数据通常是低位宽的定点数. 然而,在片上与片外数据交换过程中,由于缺少对低位宽数据的有效组织,导致带宽资源利用不充分、并行读写效率低,从而成为制约高效计算的瓶颈. 此外,直接封装多个低位宽数据为单个高位宽数据会降低FPGA端并行解码的执行效率. 尽管采用独立分布的硬件资源可以满足并行解码的需求,但会造成碎片化的数据存储方式[23-24],导致需要大量片上存储资源才能满足并行解码需求,资源代价高昂.

    3)边缘智能设备种类繁多且资源受限,嵌入式设备的资源相比于云中心设备是极端匮乏的,而传统的深度学习推理框架往往针对的是GPU等资源丰富的目标推理平台[16],难以对边缘智能设备提供支持. 由于目标设备与推理框架的特性不一致,导致模型部署时经常出现数据格式不匹配、算子描述不一致、计算流程定义各异等诸多无法规避的技术问题,从而严重降低边缘智能设备的推理性能. 尽管推理框架如TensorFlow Lite, Paddle Lite[25]也可支持模型部署到嵌入式平台,但这些端侧框架在部署模型到FPGA平台时,其经过量化压缩后的神经网络模型的量化算子和非量化算子之间的数据类型描述存在差异,无法调度量化算子到FPGA上进行加速,进而造成模型计算中存留大量碎片化的计算图[24]. 这些大量的计算图将会导致CPU与FPGA这2种执行环境频繁切换,而每次执行环境的切换都将引入数据的拷贝和预处理操作,从而降低整体的模型推理性能.

    为解决这3个挑战,提出一种面向嵌入式FPGA的卷积神经网络稀疏化加速框架(sparse acceleration framework of convolutional neural network, SAF-CNN),并将SAF-CNN的FPGA加速器设计和部署方法与推理框架优化方法实现为组件,在开源深度学习框架Paddle Lite中进行集成与优化,实现了CNN的快速部署. 验证了SAF-CNN在Intel CycloneV和Xilinx ZU3EG这2种资源受限的FPGA平台上的推理性能. 实验结果表明,SAF-CNN在2种平台分别最大可实现76.3GOPS和474.3GOPS的计算性能. 与多核CPU相比,针对目标检测模型推理,SAF-CNN在这2种平台可提升推理速度最高达3.5倍与2.2倍. 其中,SAF-CNN在ZU3EG平台上可获得26.5 fps的优越性能.

    本文的主要贡献包括3个方面:

    1) 设计一种面向嵌入式FPGA的模型细粒度结构化块划分剪枝算法. 根据各时钟周期所需计算的权重元素,将权重矩阵划分为不同的块矩阵. 在块矩阵内进行输入通道维度上的结构化剪枝以获得稀疏的且规则的权重,从而实现时钟周期粒度上的负载均衡,避免计算流水线执行被阻塞.

    2) 提出一种兼容深度可分离卷积的输入通道维度动态拓展及运行时调度策略. 根据硬件资源可支持的计算阵列处理单元数量,动态调整逐通道卷积权重的输入通道数量,并在运行时调度逐通道卷积与逐点卷积到相同的计算、存储和数据传输模块,从而实现高效的资源复用.

    3) 提出一种针对量化CNN模型的硬件算子类型感知的计算图重构方法. 在量化模型的计算图中,依据硬件平台的算子库快速搜索数据类型存在差异的量化算子. 通过引入量化节点,增加硬件子图中的算子数量,进而减少CPU与FPGA执行环境的切换次数,降低不同平台数据拷贝和转换的代价.

    面向嵌入式FPGA的稀疏化CNN加速框架研究主要涉及CNN模型压缩、CNN加速器设计,以及推理框架联合优化3个方面,其中模型压缩方法主要聚焦于CNN模型量化与CNN模型剪枝.

    在CNN模型量化算法方面,其方法可分为低比特量化[11]、线性量化[26]以及非线性量化[27]三类. 低比特量化是通过极低的比特位数的量化来提高计算效率,模型权重通常只有1个或2个比特位,如二值化神经网络BNN[11]和三值化神经网络TWN[12]. 尽管二值化和三值化的神经网络可以实现更高的计算效率,但其精度下降严重,难以实际应用. 多比特的线性量化和非线性量化2类方法已经被成功用于各类神经网络模型和推理框架[14]. 线性量化首先寻找缩放因子,并将其数据缩放到目标范围,然后采用舍入操作实现阈值化处理. 与线性量化相比,非线性量化方法更适合处理神经网络中符合钟形分布和长尾数据分布的权值与激活值. 对于SAF-CNN,本文权衡模型精度与方法通用性,采用线性方法实现模型量化.

    在CNN模型剪枝方面,通过裁剪CNN中冗余的参数,可有效减少CNN的存储参数并降低计算规模[28]. 剪枝方法可分为非结构化剪枝和结构化剪枝[29]. 非结构化剪枝将CNN中每个独立的连接看作为可被裁剪的对象,能够实现理想的剪枝率. 但是,其不规则的稀疏性难以适配通用硬件体系结构,通常需要进行硬件定制化设计[30]. 例如,Song等人[31]设计了基于高带宽存储器的稀疏矩阵向量乘的专用加速器,实现了以内存为中心的处理引擎,可支持稀疏的矩阵向量乘,但其严重依赖高带宽大容量的片上存储器,难以应用到边缘计算平台. 结构化剪枝则按照不同的粒度,将CNN权值划分为大小不同的结构进行相应裁剪,可在通用硬件体系结构下实现加速,但是剪枝率往往偏低[32]. 通道剪枝[33]和卷积核剪枝[29]是2类常用的结构化剪枝方法. 通道剪枝直接剪去输出通道的所有卷积核,生成的稀疏化模型可直接部署于现有神经网络加速器而无需修改硬件. 卷积核剪枝方法则是剪去固定输入通道的卷积核,其剪枝粒度相比通道剪枝的方法较细. 然而,通道剪枝和卷积核剪枝直接修改了模型的结构,其剪枝粒度仍旧难以实现较高的模型稀疏率. 细粒度剪枝通过构建专用的剪枝算法实现较高的稀疏率,以此可达到比肩非结构剪枝的效果[34]. 基于硬件感知的细粒度剪枝方法,例如块内剪枝[35],既可以缓解硬件效率低的问题,也可以提升模型的稀疏率. 对于SAF-CNN,本文权衡模型精度与硬件设计及其执行效率后,设计结构化的细粒度剪枝方法,获得稀疏化的CNN模型.

    在嵌入式FPGA加速器设计方面,由于CNN卷积层的乘累加计算占据了模型中90%左右的计算量[6],因此基于FPGA的CNN加速器研究往往从计算和通信2方面对计算密集的卷积层进行优化[18].Wei等人[22]提出脉动阵列的架构实现卷积层计算,能够拓展到大规模计算平台加速卷积计算,大幅度降低推理延迟. Zhang等人[36]采用多种嵌套循环优化策略加速卷积层处理,如循环流水线、循环展开和循环平铺. 卢冶等人[37]从数据访问独立性的角度提出通道并行计算的方案,引入循环切割因子并在通道维度展开循环,利用数据流优化和缓存优化技术加速CNN的卷积计算. Lu等人[38]利用Winograd算法降低卷积层计算复杂度,提高卷积层的处理速度. 然而,文献[36-38]所述工作中的普通卷积计算加速器主要集中在输入输出通道维度来并行加速,对于深度可分离卷积的逐通道卷积不能进行计算,导致普通卷积加速器难以适用于深度可分离卷积. 对于设计支持深度可分离卷积的加速器,Wu等人[39]和Ding等人[21]相继提出逐通道卷积和逐点卷积的融合机制,实现跨层的融合优化,减少中间数据的通信带宽需求,提升深度可分离卷积的处理性能. 然而,这类融合机制的本质仍基于2个独立IP核,而且对模型的结构具有严格的约束,只适用于具有1×1卷积核的逐点卷积. Zhang等人[40]在处理深度可分离卷积时,对逐通道卷积和逐点卷积也采用2个IP核轮流工作. 这些工作都未针对逐通道卷积和逐点卷积设计可复用的计算引擎,导致较高的硬件资源代价. Yan等人[41]针对深度可分离卷积提出可配置加法树的方案,实现了逐通道卷积和逐点卷积共享计算引擎,但因缺少共享数据传输模块,导致资源消耗偏高. 对于加速器通信优化,ShiDianNao[42]将所有的模型参数存储于片上SRAM中,消除对DRAM的访问,但该设计需要较高存储资源,并不适用于大规模的CNN模型. FitNN[43]提出了一种跨层数据流策略来减少特征图的片外数据传输,基于资源受限的边缘设备实现低推理延迟,然而该策略只支持特定的模型结构,即只由逐通道卷积层、逐点卷积层和池化层共同构成的模型. 此外,Cong等人[6]分析了如何利用高位宽模式传输数据,将多个32b的字打包为512b的字,实现单周期传输多数据,最大化利用带宽资源. 但是,该方法没有考虑片上存储资源的分配方式,导致并行编码和解码消耗大量存储资源. 因此,本文在设计SAF-CNN时,采用资源复用方法,映射逐通道卷积与逐点卷积到可复用的硬件资源,然后设计通道维度上的并行编解码方法实现单周期传输多数据,在有限硬件资源上实现计算与数据传输效率最优.

    在深度学习推理框架设计方面,通常会将神经网络的计算流程以计算图的方式呈现[44],在实际应用中计算图被定义为有向图,其中节点代表相应的计算操作,边代表数据的流入与流出. 深度学习框架中的计算图主要分为静态计算图和动态计算图[16]. 在模型开发时采用动态图编程以获得更好的编程体验、更易用的接口、更友好的调试交互机制[17]. 在模型训练或者推理部署时,通过添加装饰器将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行,获得更好的模型运行性能[25]. 主流深度学习训练框架PyTorch[17]采用动态计算图,TensorFlow[16]采用静态计算图,而PaddlePaddle[25]等新兴框架则采用动静融合的方案. 此外,推理框架的优化方法主要聚焦于:算子融合、内存优化、子图检测和生成、硬件平台相关优化、冗余算子删除、精度转换等. 对于FPGA加速器与深度学习框架集成实现联合优化方面,Li等人[45]集成卷积计算的前向传播算子和反向传播算子到TensorFlow的算子库中,加速CNN模型的训练和推理. FADES[46]提出一种针对TensorFlow Lite的稀疏矩阵和密集矩阵的硬件处理架构,支持CPU和FPGA异构加速器,并能从结构化剪枝中获益,进一步提升计算性能. Zhang等人[18]提出Caffeine,通过集成卷积计算和全连接计算的算子到Caffe框架的算子库中,来加速CNN模型的推理. 然而,FADES和Caffeine并未涉及计算图的优化,在推理过程中需进行数据转换,执行环境的频繁切换造成额外的时间代价. TVM[44]和Paddle Lite 的推理后端支持多种定制硬件平台,如NPU, ARM,x86,MLU等神经网络加速器,但是缺少对嵌入式FPGA的平台的支持. 因此,本文在设计SAF-CNN时也充分探索基于计算图的优化方法,既要发挥加速器计算性能高的优势,又要充分利用深度学习框架的可拓展性和通用性.

    本节首先介绍SAF-CNN稀疏化加速器的总体架构,然后着重就数据流设计、稀疏化计算引擎、数据存储与传输、算子资源复用4个方面,展开加速器设计思路和优化方法的具体论述,并阐明SAF-CNN稀疏加速器的优势.

    本文SAF-CNN所设计的FPGA架构如图1所示,包含数据引擎、片上缓存单元、指令单元、计算引擎及调度模块5个重要组成部分.

    图  1  FPGA稀疏化加速器整体架构
    Figure  1.  Overall architecture of FPGA sparse accelerator

    1) 数据引擎. 负责在片上存储和片外存储之间进行数据传输.FPGA加速器在运行过程中读取片外存储器中的输入特征图和模型权重参数,以及写出输出特征图,都需通过该模块进行数据传输. 此外,SAF-CNN采用高位宽的数据传输模式,单个周期传输多个字节,借此充分利用带宽资源.

    2) 片上缓存单元. 片上存储器负责缓存输入特征图、模型权重参数以及输出特征图的数据,为计算单元提供并行访问的高带宽支撑. SAF-CNN采用了双缓冲的存储结构来实现计算与数据传输并行执行.

    3) 指令单元. 在SAF-CNN框架中,卷积层的配置被转化为固定格式的指令. FPGA加速器启动时,通过指令单元获取卷积层的具体配置参数,并对硬件资源进行配置. 在加速器运行过程中,其他模块的执行都依赖指令的具体配置.

    4)计算引擎. 对于从片上存储器读取的输入特征图和稀疏化模型权重参数,SAF-CNN的计算引擎通过乘法器和加法器来执行卷积操作,是卷积(conv)模块的核心. 此外,本文在SAF-CNN中设计了稀疏化的卷积计算模块,以此利用权重稀疏性来加速卷积层处理.

    5) 调度模块. 对于深度可分离卷积的逐通道卷积和逐点卷积,SAF-CNN设计了可复用的计算引擎和数据传输模块,调度模块根据具体计算类型来决定数据传输模块所要读写的数据地址,以及计算模块的执行流程.

    由于片上资源受限,SAF-CNN采用数据分块策略来完成卷积层的计算. SAF-CNN的卷积计算数据流处理包含了3个模块,分别为加载(load)、卷积(conv)和存储(store). 在卷积操作完整的计算流程中,3个模块对应的子任务不断迭代执行. 例如,在每次迭代中,可先累加输入特征图与卷积核的卷积结果,得到输出特征图. 具体来讲,首先load模块加载必要的输入特征图数据和权重数据到片上存储器中. 然后,conv模块采用流水并行的稀疏化计算引擎对片上存储器中的数据执行卷积计算. 最后,在完成输出特征图的计算后,store模块写回输出特征图到片外大容量存储器中,而后进入到下一个输出特征图分块的计算过程.

    数据流的相关处理如图2所示,其中oc, oh, ow分别表示输出特征图的通道数、行数和列数,ic表示输入特征图的通道数,kernel表示卷积核的大小. 受片上资源约束,SAF-CNN每次迭代只计算tn个通道、tr行和所有列的输出数据. 考虑到不同卷积层具有各自不同的行数和列数,SAF-CNN分配固定大小的片上缓存,tr则根据列的大小进行相应变化,以此保证所有的列可被完整计算. 通过这种设计,输入特征图和输出特征图的数据传输方能利用FPGA的猝发式[14]机制,从而充分利用带宽资源.

    图  2  卷积计算数据流
    Figure  2.  Computing dataflow of convolution

    在conv模块执行卷积计算时,计算引擎沿着输入通道和输出通道2个维度同时并行. 输入通道并行因子和输出通道并行因子分别是tntm. 计算引擎使用tm个累加树, 通过共享tn个输入数据来计算得出tm个输出数据. 每个累加树包含了tn个乘法单元和tn−1个加法单元,负责计算1个输出元素. 通过并行tm个累加树,计算引擎可同时计算并得出tm个输出元素. 此外,由于SAF-CNN计算引擎采用深度流水线来提升吞吐率,每个周期都能计算出tm个输出元素. 通过设计并行和流水的硬件架构,SAF-CNN中的conv模块可以最大化资源利用率,并提升输入特征图分块的吞吐率.

    为减少conv模块的数据准备等待时间,SAF-CNN将数据传输与计算进行并行,通过预先准备数据,从而掩盖数据传输的时间代价.对输入特征图、权重和输出特征图,SAF-CNN采用双缓冲存储结构来实现一边传输数据一边为conv模块提供数据.

    本节将详述SAF-CNN稀疏化计算引擎设计中剪枝方法如何择取、剪枝规则如何设定、剪枝后的数据如何保存,以及剪枝后如何进行计算.

    1)对于剪枝方法的择取,考虑到conv模块中的计算引擎负责执行矩阵向量乘操作,共使用tm×tn个乘法器.具体来讲,如图2所示,对于一个权重张量Wtm行、tn列)和一个输入向量I(长度为tn),通过计算可得长度为tm的输出向量. 通过剪去张量W中冗余的权重参数,可以有效地降低乘法器的使用数量. 考虑到流水线过程中计算引擎的硬件资源不断被重复使用,非结构化的稀疏方式会造成不规则的存储访问和不均衡的计算负载,导致流水线被阻塞,而结构化的稀疏方式可避免此现象.因此,SAF-CNN稀疏化加速器采用结构化剪枝来保证每次参与计算的权重矩阵具有相同的稀疏率.

    2)对于剪枝规则的设定,考虑到张量W的大小是oc×ic,conv模块的计算引擎每次计算的块大小是tm×tn,因此构建基于块的剪枝方法,可以保证每次计算的块具有相同的稀疏度. SAF-CNN的卷积层权重在输入通道维度所进行的块内结构化剪枝方法的具体细节如图3所示. 其中,每行元素的个数是ic,可划分为ic/tn个块,每个块包含tn个元素. 在每一块内,可设置固定的稀疏率,绝对值更小的元素则被置0. 此外,所有的行采用相同的稀疏率. 针对块内的每一行,tn个权重元素和tn个输入数据乘累加得到输出数据. 剪掉tn个权重数据中绝对值更小的项等价于舍弃tn个累加项中更小的项,这种方式可以有效地裁剪掉对输出数据影响更小的权重.

    图  3  输入通道块内结构化剪枝方法
    Figure  3.  Block-based structured pruning method along input channel

    3)对于剪枝后的模型数据存储,为避免0元素参与计算,SAF-CNN对权重进行压缩处理,直接舍去0元素,例如图3中的block0可以压缩为4行1列的矩阵. 同时,SAF-CNN采用列索引方式保存非零元素的位置信息. 与CSR/COO[47]等稀疏化数据存储方式不同,块内结构化剪枝方法只需要保留列维度的位置信息. 考虑到量化后的权重数据为低位宽的定点数,索引数据使用的位宽定义为lb(tn). 因此,权重的非零元素和对应的索引数据可以拼接在一起. 由于推理过程中,权重数据是固定不变的,因此压缩和拼接均在离线条件下完成.

    4)对于剪枝后的模型如何计算,SAF-CNN为充分利用权重矩阵的稀疏性,构建了稀疏化的计算引擎,负责稀疏化的矩阵向量乘操作. 稀疏化计算引擎的具体内容如图1所示,包含2个模块,采样模块和乘累加模块. 首先,片上的权重数据分离出非零权重矩阵和索引矩阵. 然后,索引矩阵和输入向量进入到采样模块,数据多路选择器根据索引矩阵从输入向量中挑选指定的数据得到输入矩阵,该矩阵每一行的元素是输入向量的子集. 接下来,具有相同元素个数的非零权重矩阵和采样模块生成的输入矩阵进行相乘,得到中间矩阵. 最后,累加中间矩阵的每一行,即可得到目标输出向量. 由此,SAF-CNN计算引擎设计充分利用了权重矩阵每一行具有相同的稀疏度的特点,即包含相同个数的非零元素,并使用相同个数的乘法器和累加器进行计算. 由于块内结构化的剪枝方法可使不同的分块具有相同的稀疏规则,因此,稀疏化计算引擎能够高效地处理所有分块,并且对不同分块具有相同的处理时间,可保证卷积计算流水线不会阻塞,即SAF-CNN所设计的稀疏化计算引擎中的乘法器和累加器都将处于忙碌状态,FPGA计算资源被高效利用.

    数据存储方式是影响加速器性能的重要因素之一[14]. 针对片上存储,SAF-CNN稀疏化加速器为避免硬件资源访问端口数目限制而导致的数据访问冲突,设计了满足单周期多数据并行访问需求的存储方案. 对于片外存储,SAF-CNN利用数据重组织机制保证数据分布的连续性,来提升数据通信效率.

    对于片上存储,将输入特征图、权重和输出特征图数据分布在不同的存储块(bank)上, 可符合计算引擎并行的数据访问要求. 每个bank具有1个数据读写端口,每个周期内可以执行1个数据的读写操作. 计算引擎采用流水并行的硬件架构,每个时钟周期读取tn个输入数据和tm×tn个权重数据,写入tm个输出数据. 此外,每个时钟周期读写的数据位于不同的通道. SAF-CNN加速器设计利用高层次综合HLS工具提供的pragma优化指令,针对输入特征图、权重和输出特征图数据,在通道维度上进行分割,使不同的通道数据可被存储在不同的bank上,从而满足数据并行访问需求.

    对于片外存储,由于数据流的分块方式,加速器对多维张量的数据访问具有局部性[14],导致load模块和store模块每次所访问的数据在片外存储器上是碎片化分布的. 访问碎片化的数据将严重降低数据传输性能. 为了最大化提升数据传输性能,SAF-CNN利用重组织操作将片外存储中的碎片化数据进行整理,从而形成连续的数据分布. 输入特征图张量各个维度的大小是(ic, ih, iw), icih, iw分别是输入通道、输入行和输入列的大小. 经过重组织后的输入特征图分布为(ic/tn, ih, iw, tn). 模块load每次加载的数据大小是tr×iw×tn,这些数据在片外存储器上是连续分布的. 此外,输出特征图采用相同的重组织方式. 未经处理的权重分布为(oc, ic, k×k). 其中,k表示卷积核的大小, 则经过重排后的权值分布为(tb, k×k, tm, tn), 进一步将稀疏化的权重从tn压缩为dn,得到(tb, k×k, tm, dn). 其中, tb是指权重拷贝的次数,tb=oc/tm×ic/tn,每次拷贝的块大小则为k×k×tm×dn. 为了降低数据重组带来的额外代价,SAF-CNN对权重进行离线压缩和重组,如算法1所示.

    算法1. 卷积层权重数据压缩重组算法.

    输入:原始权重张量W, 原始掩码张量M, 输出通道数oc,输入通道ic, 卷积核大小k×k, 输出通道并行因子tm, 输入通道并行因子tn, 剪枝后的输入通道并行因子dn

    输出:重组织后的权重张量W'.

    booc oc/tm

    biocic/tn

    ③ for all bo<booc do

    ④ for all bi<bioc do

    ⑤  for all ti<dn do

    ⑥   for all tk<k×k do

    ⑦    for all m<tm do

    ⑧     computing mask_index using

    bo, bi, ti, tk, m

    ⑨     mask= M[mask_index];

    ⑩     select weight from W by mask

    ⑪     computing weight_index using

    bo, bi, titk, m

    ⑫     W' [weight_index] = weight

    ⑬     W' [weight_index+1] = mask

    ⑭    endfor

    ⑮   endfor

    ⑯  endfor

    ⑰ endfor

    ⑱ endfor

    算法1中,行⑧⑨用来计算目标掩码数据在原始掩码矩阵的索引,并赋值给mask,行⑩利用mask从原始权重张量中选择数据weight,行⑫⑬将weightmask拼接到一起并放置在目标权重张量中. 此外,加速器将输出数据写回片外存储器时,直接对输出数据进行重组织. 在执行接下来的卷积层时,输入特征图已经被处理,不需要额外的重组织过程. 通过这种设计,SAF-CNN只需要对CNN模型的第1层和最后1层卷积层的数据进行重组织,有效地降低数据重组引入的时间代价.

    片外存储器的数据经过重组以后,每次传输输入特征图数据、权重数据和输出特征数据都将符合连续分布. 由此,可采用猝发式传输方法高效地传输这些数据. 为了进一步利用带宽资源,本文采用高位宽的传输模式,在单个周期内传输多个低位宽的数据. 通过使用128b的传输位宽,单个周期可以传输16个8b的数据. 经过重组织后,高位宽传输的批量数据处于不同的通道. 在片上存储器中,不同通道的数据位于不同的bank. 因此,单个周期读取的多个数据可以并行地写到多个bank,或者从多个bank读数据写回到片外存储器中. 通过结合重组织方法和高位宽数据传输模式,SAF-CNN可以充分利用硬件平台提供的带宽资源.

    SAF-CNN针对特殊卷积操作如深度可分离卷积进行了资源复用设计. 深度可分离卷积是一类特殊的卷积运算,其有逐通道卷积和逐点卷积2种卷积方式. 逐通道卷积在计算输出特征图时,只计算单一通道的输入特征图;而逐点卷积则计算所有通道的输入特征图并累加到输出特征图中. 其中,逐点卷积使用的卷积核大小是1×1. 考虑到加速器的可拓展性,SAF-CNN采用通用卷积的配置模式,并灵活支持卷积核尺寸. 为节省资源,SAF-CNN通过资源复用设计,将逐通道卷积和逐点卷积调度到同一数据传输模块和同一计算引擎,2种卷积计算的主要区别在于是否沿着输入通道进行累加,其计算方式取决于调度策略.

    在SAF-CNN中,conv模块的核心即计算引擎,它采用累加树规则对tn或者被压缩后的dn个(如2.4节所述)输入通道的乘积进行累加. 然而,逐通道卷积并未在输入通道累加,而是通过计算单一通道的输入特征图得到输出特征图. 因此,SAF-CNN为了将逐通道卷积映射到计算引擎上,采用了填充策略对逐通道卷积的权重进行预处理,如图4所示. 其中,在未采用剪枝策略时,tm个输出通道的权重拓展为tm×tn个通道,这种填充策略要求tm=tn. 在填充后,输出通道和输入通道序号相同的卷积核包含有效数据,其他通道卷积核为0元素. 如图4(a)所示,原始的逐通道卷积第i个输出通道的数据,需要被放置在第i个输入通道上,以此保证计算引擎在累加tn个输入通道的数据时,能够正确计算出逐通道卷积的输出特征图. 采用剪枝策略后,权重被分为2个部分,即非零权重和索引信息. SAF-CNN利用索引信息将逐通道卷积的计算映射到稀疏化的计算引擎,如图4(b)所示. 其中,tm个输出通道的权重拓展为tm×dn个通道,逐通道卷积的第i个输出通道数据可被放置在第1个输入通道, 其他输入通道的数据置0. 同样,第i个输出通道的索引矩阵只在第1个输入通道上包含有效数据,具体的数据被设置为i. 这种填充方式可以保证稀疏化的计算引擎既可以执行稀疏的逐点卷积也可以执行逐通道卷积. 此外,针对经过剪枝后的SAF-CNN稀疏加速器的逐通道卷积权重填充策略,其tmdn可以灵活取值便于计算引擎的设计.

    图  4  逐通道卷积权重填充策略
    Figure  4.  Weight expanding strategy of depth-wise convolution

    除了共享复用计算引擎外,逐通道卷积和逐点卷积还可共享复用数据传输模块.在每次分块计算过程中,逐通道卷积和逐点卷积需要传输的数据块具有相同的大小和不同的地址偏置.因此,对于2种不同类型的卷积计算,通过调度策略可以映射到相同的数据传输模块和计算模块,达到复用效果.调度策略的编程实现示例如图5所示.对于逐通道卷积,load,conv,store这3个模块轮流执行.如2.4节所述,由于片上存储采用双缓冲的存储结构,因此可对3个模块进行流水线执行.对于逐点卷积,需要遍历其输入通道,并将结果累加到输出特征图.因此,load模块和conv模块所形成的计算流水线需多次执行.当输入通道计算完毕,store模块负责写回输出特征图.

    图  5  卷积层调度策略
    Figure  5.  Scheduling strategy of convolution layer

    为便于快速部署各类CNN模型到嵌入式FPGA平台,本文设计实现了SAF-CNN推理框架. 本节将论述SAF-CNN推理框架的具体设计及优化方法,重点聚焦于框架推理流程、算子融合方法、模型重构及硬件子图融合方法.SAF-CNN通过把加速器的设计思想与推理框架结合并进行联合优化,弥合了互相割裂的稀疏化加速器与推理框架,从而支持快速部署各类CNN模型.

    图6所示,利用SAF-CNN推理框架来部署稀疏化CNN模型到嵌入式FPGA的主要环节有3个方面:

    图  6  集成稀疏化加速器和深度学习框架
    Figure  6.  Integrating sparse accelerator and deep learning framework

    1)首先利用训练框架(实验中基于PaddlePaddle)训练得到精度理想的目标模型. 其次,通过训练框架所集成的QAT[25]等量化方法对模型权重和激活值进行量化,并嵌入2.3节所设计的结构化剪枝方法到训练框架中进行模型剪枝,SAF-CNN通过掩码方法[28]将冗余的权重参数过滤. 然后,通过模型计算图重构的方法来分析模型的计算图结构,依据目标硬件平台的算子库搜索数据类型不匹配的量化算子如卷积计算、全连接计算等,在该量化算子之前插入符合硬件数据类型的量化节点,并微调CNN模型保证精度.

    2) 利用训练框架导出静态图模型后,针对其计算图进行优化,主要包含算子融合、量化节点卸载到FPGA、生成硬件计算子图、模型权重预处理.其中,算子融合优化主要针对Conv层、ReLU层和BN层进行融合,并重新计算权重参数、偏置和量化参数.量化节点卸载到FPGA可与卷积计算融合.在计算图中,目标硬件支持的具有数据依赖关系的算子所构成的集合称作子图[25],将子图中计算节点的参数配置转化为硬件支持的参数配置.借此,目标硬件可一次执行多个计算任务,减少执行环境的切换次数. 此外,训练框架导出的模型参数类型通常是浮点数,利用量化参数和剪枝所采用的掩码方法可对模型参数进行量化和剪枝预处理操作.

    3) 针对CPU-FPGA异构架构,SAF-CNN采用混合调度策略进行推理,由逐通道卷积和逐点卷积算子构成的子图, 通过硬件运行时接口SDK被调度到加速器平台执行,其他轻量级计算任务保留在CPU端执行.SDK对CNN模型的第1层的输入特征图和最后1层的输出特征图进行数据重组织,硬件子图遍历,并启动FPGA进行计算.

    算子融合是计算图优化的常用方法[44],通过将多个算子融合为单个算子,可避免中间数据的存储和传输带来的时间消耗,从而降低推理延迟. 卷积层、批归一化(batch normalization, BN)层和激活层是CNN模型中普遍使用的算子,且这些层的计算可被融合为1层计算. 在引入量化操作后,卷积层和BN层的权重参数与量化参数可以进行融合. 经过算子融合后,在第i个输出通道的输出特征图计算定义为

    {{\boldsymbol{output}}}_i = is \times ws_i \times {{\boldsymbol{output}}}_i + {{\boldsymbol{bias}}}_i, (1)

    其中output是量化后的输入特征图与权重进行卷积计算所得到的定点数张量,经过输入缩放因子is和权重缩放因子ws的缩放操作后,累加偏置参数bias得到正确的浮点数输出特征图output'. 此外,BN层的缩放参数已被融合到ws,偏置参数已被融合到bias. 经过激活层后可得到目标输出特征图.

    在计算图中,如果当前算子的后继算子仍为量化算子,那么当前算子的输出特征图经过量化后成为后继算子的输入特征图. 为了提升硬件执行的效率,SAF-CNN加速器在写回输出特征图时,预先进行量化操作处理,供后继算子直接计算. 在量化输出特征图时,使用下一层的is作为当前层输出缩放因子,这里以os表示,故SAF-CNN的具体量化处理为

    {{\boldsymbol{output}}}'' = clip{\text{( }}round{\text{( }}{{\boldsymbol{output}}}'/os)) , (2)

    其中output''是量化后的输出特征图,函数clipround分别代表截断和取整操作.考虑到os可以与is, ws, bias进行预先处理.因此,结合式(1) (2)可以得到

    {{\boldsymbol{output}}}'' = clip{\text{( }}round{\text{( }}{{\boldsymbol{ws}}}' \times {{\boldsymbol{output}}} + {{\boldsymbol{bias}}}')), (3)

    其中ws'bias'分别由wsbias经过预处理得到. 加速器将量化后的output'' 写回到片外存储器中,供后继节点使用. 通过这种方式,片上存储器和片外存储器之间传输的数据都是量化后的低位宽定点数据,可有效地降低带宽需求.

    经过算子融合后,目标加速器的片上存储和片外存储之间传输的数据都是低位宽定点数据,只要符合输入输出数据类型的卷积算子都能够被调度到硬件FPGA平台进行执行,并且连续的卷积算子可以构成子图,交由硬件SDK进行执行. 然而,由于数据类型的不匹配,CNN模型的计算图中普遍存在量化后的卷积算子无法调度到FPGA平台进行加速的情况,主要原因是量化的卷积算子的后继节点是无法进行量化的算子,例如slice算子、transpose算子等. 针对这种情况,SAF-CNN对模型计算图进行重构,在量化算子后加入量化节点和数据类型转换算子,来辅助完成量化算子调度到FPGA平台进行加速. 以下分为2种情形来说明.

    1)单路径情形. CNN模型计算图中存在的单路径情形如图7(a)所示,量化算子q1的输入数据类型是量化后的定点数,后继算子是非量化算子. 因此,q1的输出数据类型是浮点数类型,与加速器所期望的定点数输出数据类型是不匹配的. 在这种情形中,q1算子不能被调度到FPGA加速器平台执行. 通过插入qnew量化节点,可对q1算子的输出特征图进行量化,并传递量化参数到q1算子. 由此,可实现q1算子的输入数据类型与输出数据类型皆符合硬件加速器的设计要求. 需要指出的是,qnew节点并不引入额外的计算量,其实现时已被融合到加速器设计中. 此外,利用数据类型转换算子可将低位宽的定点数据恢复为浮点数类型,供后继的非量化算子使用.

    图  7  插入量化节点的模型重构机制
    Figure  7.  Model reconstruction mechanism of inserting quantization node

    2)多路径情形. CNN模型中存在的多路径情形如图7(b)所示,q1算子具有多个后继算子,同时包含量化算子q2, q3和非量化算子nq. 与单路径情形相同,nq后继算子要求q1节点的输出特征图是浮点数类型,导致q1算子无法调度到硬件FPGA上执行. 此时,CNN模型的计算图被分割为多个计算子图,CPU和FPGA执行环境的切换将增大推理的延迟. 通过插入量化节点可以统一数据类型,并将多个计算子图合并为更大规模的计算子图,从而使FPGA平台执行更多的算子,进而减少执行环境的切换次数.

    本文将硬件子图定义为具有相同数据依赖的硬件算子集合,即在CNN计算图优化过程中,多个具备数据依赖关系的算子可被封装成为1个子图,该子图可作为这些算子的集合直接交由硬件FPGA执行. 硬件子图在CNN计算图的优化过程中产生,并在推理过程中执行. 因此,各个算子的执行顺序以及硬件需要的配置参数应在子图产生过程中确定,从而避免在运行时引入额外的处理时间. 针对CNN模型的计算图,本文采用深度优先搜索方式确定算子的执行顺序. 考虑到CNN模型拓扑结构的多样性,硬件子图可能具有多个输入和多个输出. 由于输入数据来自于硬件子图的外部节点,输出数据供外部节点使用,因此在硬件子图的输入节点前面或输出节点后面插入数据重组织节点,该节点对外部存储器中的数据进行重组.

    图6所示,硬件SDK采用指令形式首先对加速器平台进行配置,然后启动加速器. 该指令包含卷积层的参数配置,如输入特征图的通道数、行数和列数以及卷积操作的配置参数. 此外,为了减少硬件资源占用,其他相关参数可预先进行配置,如分块的个数、行数等. 针对输入特征图、权重和输出特征图的数据,采用基地址加偏置的寻址方式进行访问,该偏置参数也被预置在指令中.

    本节通过实验评估SAF-CNN稀疏化加速器的设计,并将SAF-CNN推理框架实现方法作为组件嵌入到深度学习推理框架Paddle Lite2.11,验证SAF-CNN加速器与框架联合优化的优势.评估实验数据集分别采用ImageNet[48]和VOC2012数据集[49],并部署典型CNN模型VGG16[2], ResNet18[50], MobileNetV1[19]到资源极端受限的边缘嵌入式设备CycloneV和ZU3EG开发板,探究SAF-CNN带来的性能收益.

    1)硬件配置. 实验采用Xilinx ZU3EG SoC FPGA开发板和Intel CycloneV FPGA开发板作为硬件加速器验证平台,如图8所示,FPGA的运行频率分别设定为333 MHz和150 MHz. 此外,配备工作站运行Vitis软件与Quartus软件,搭载Intel Xeon Silver 4210 CPU@ 2.20 GHz和64GB DDR4内存. 配备1块GeForce RTX2080Ti GPU显卡,用于模型训练.

    图  8  硬件加速器验证平台
    Figure  8.  Hardware accelerator verification platform

    2)软件配置. 对于Xilinx FPGA平台,实验采用集成开发环境Vitis2021.1进行FPGA加速器设计. 通过编程语言C++设计各模块,并利用Vitis HLS工具来进行高层次综合. 对于Intel FPGA平台,实验采用集成开发环境Quartus17.1进行FPGA加速器设计. 通过编程语言C++设计各模块,并利用Quartus HLS工具来进行高层次综合;此外,为进一步验证SAF-CNN的性能,实验也采用寄存器传输级(register-transfer level,RTL)语言Verilog-2001,在Intel FPGA平台上实现并部署.

    3)评估指标. 面向嵌入式FPGA的CNN稀疏化加速框架SAF-CNN的实验评估选取4个定量指标来测量数据并分析性能收益.

    ① CNN模型各层处理时延. 该指标能够反映出加速器针对不同配置的卷积层所能实现的计算性能,并对比稀疏CNN加速器和普通CNN加速器的处理时延,反映出SAF-CNN所设计的结构化剪枝方法带来的性能增益.

    ②模型精度. 为验证SAF-CNN稀疏化剪枝算法对模型精度的影响,实验以VGG16, ResNet18, MobileNetV1和目标检测模型SSD_MobileNetV1为例,探究不同的稀疏率条件下模型精度的变化.

    ③模型端到端推理时延. 为验证SAF-CNN稀疏化加速器与推理框架实现的联合优化方法,实验以包含深度可分离卷积的SSD_MobileNetV1模型为例,以此验证SAF-CNN加速框架的推理性能.

    ④模型计算图重构性能增益. 为验证SAF-CNN对重构前模型和重构后模型的推理性能影响,实验对比2个模型在相同平台的推理延迟,并细粒度分析推理框架与加速器各个模块的执行时间,呈现SAF-CNN模型计算图重构的优势.

    本节对SAF-CNN稀疏化剪枝算法的有效性进行评估,利用结构化剪枝算法在2类不同平台上构建稀疏化加速器,并与非剪枝算法的普通加速器及其他加速器方案进行性能对比. 稀疏化加速器SAF-CNN_Sparse设置75%的剪枝率,计算引擎分别采用64, 128, 256个乘累加(MAC)单元进行验证. 输入通道并行因子和输出通道并行因子配置如表1所示. 其中,输出通道并行因子和输入通道并行因子采用的2种配置分别是16和32,经过剪枝后输入通道并行因子被压缩为4和8. 所对比的非剪枝算法的普通稠密加速器SAF-CNN_Dense方案则采用64个MAC单元,输入和输出通道并行因子皆配置为8. 此外,SAF-CNN只对逐点卷积进行结构化剪枝,逐通道卷积并没有引入稀疏性. 因为逐通道卷积的输入通道个数为1,不需要在输入通道维度进行剪枝.

    表  1  加速器乘累加单元配置
    Table  1.  Accelerator MACs Unit Configuration
    加速器输出通道并行因子输入通道并行因子剪枝后输入通道并行因子MACs个数
    SAF-CNN_Dense8864
    SAF-CNN_Sparse1616464
    32164128
    32328256
    下载: 导出CSV 
    | 显示表格

    SAF-CNN在ImageNet数据集上进行了图像分类实验,VGG16, ResNet18, MobileNetV1这3个模型在ZU3EG平台上的分层处理时延如图9所示. 其中,MobileNetV1的第2~14层是深度可分离卷积层,每个深度可分离卷积层包含1个逐通道卷积和1个逐点卷积.VGG16模型卷积层的通道数和特征图的尺寸大于ResNet18和MobileNetV1模型,因此,VGG16模型各层消耗的时间高于ResNet18和MobileNetV1模型. 图9中,与非剪枝算法的普通稠密加速器相比,稀疏加速器的处理速度更快. 具体来讲,在VGG16和ResNet18模型中,64个MACs的稀疏化加速器与稠密加速器相比,可分别获得2.91倍和2.86倍的计算性能提升,十分接近理论上的3倍性能提升. 实际性能提升与理论性能提升的差距在于,加速器对卷积层的处理时延不仅包含计算时间而且包含数据拷贝时间,其中,稀疏化加速器中输入特征图和输出特征图的数据拷贝时间和稠密加速器相同. 尽管SAF-CNN稀疏化加速器设计了计算与数据传输流水处理的方案,但是在流水线第1个分块和最后1个分块的处理过程中,加速器仍然有额外的数据传输时间. 因此,稀疏化加速器的计算性能相比理论性能略有下降. 在MobileNetV1中,计算引擎针对逐通道卷积的处理包含对填充数据的额外处理,因此其计算性能略低于VGG16和ResNet18. 因为逐通道卷积并没有引入稀疏性,稀疏化加速器对逐通道卷积的计算性能和稠密加速器相同. 因此,稀疏化加速器和稠密加速器相比有2.1倍的加速比. 此外,采用128个MACs和256个MACs可进一步提升稀疏化加速器的性能. 与采用64个MACs的稀疏化加速器相比,128个MACs和256个MACs的加速器分别能够达到1倍和2.86倍的性能提升,且分别实现254.9 GOPS和494.3 GOPS的计算性能. 在CycloneV平台上,基于HLS和RTL所实现的加速器皆采用64个MACs进行乘累加操作,VGG16, ResNet18,MobileNetV1这3个稀疏化模型的分层处理时延如图10所示. 与HLS加速器相比,RTL加速器设计通过更细粒度的控制,能够实现较低的处理延迟,计算性能提升近1倍. 由各个模型的计算性能可知,稀疏化加速器能够高效处理普通卷积和深度可分离卷积.

    图  9  ZU3EG平台上VGG16, ResNet18,MobileNetV1的各层延迟
    Figure  9.  Layer-wise latency of VGG16, ResNet18 and MobileNetV1 on ZU3EG
    图  10  CycloneV平台上VGG16, ResNet18,MobileNetV1的各层延迟
    Figure  10.  Layer-wise latency of VGG16, ResNet18 and MobileNetV1 on CycloneV

    SAF-CNN稀疏化加速器与其他同是基于Xilinx的加速器的资源与性能对比如表2所示,基于CycloneV的SAF-CNN加速器资源与性能如表3所示. 其中,对比对象主要使用具有较大规模计算资源的Xilinx FPGA平台进行验证,从而取得相对较高的计算性能.SAF-CNN的加速器平台虽受限于资源条件,但仍能在CycloneV平台分别取得41.8 GOPS和76.3 GOPS的计算性能,在ZU3EG平台分别取得128 GOPS,254.9 GOPS,494.3 GOPS的计算性能. 通过对比每千个LUT的计算效率、单个DSP的计算效率及加速器功耗来评估加速器的计算效率,如图11所示. 其中,ZU3EG_64表示使用64个MACs,以此类推. 如图11(a)所示,和其他加速器相比,SAF-CNN功耗代价更低,CycloneV仅消耗5 W,ZU3EG消耗7.5 W左右. 此外,在ZU3EG平台上SAF-CNN采用3种不同的MACs资源配置进行验证. 针对LUT效率,SAF-CNN分别实现5.87 GOPS/kLUT,8.82 GOPS/kLUT,10.82 GOPS/kLUT的计算性能. 针对DSP效率,SAF-CNN分别实现0.99 GOPS/DSP,1.27 GOPS/DSP,1.5 GOPS/DSP的计算性能,远高于其他加速器. SAF-CNN基于CycloneV平台的加速器采用的是28 nm的工艺,却仍能运行在150 MHz的时钟频率. 在基于HLS的加速器设计上实现1.63 GOPS/kLUT和0.62 GOPS/DSP的计算性能,明显高于资源丰富的Suda加速器[51]和Li加速器[53]. SAF-CNN在基于CycloneV的RTL加速器设计上实现了高达3.48 GOPS/kLUT和1.19 GOPS/DSP的计算性能. 和HLS加速器相比,RTL加速器进行更细粒度的任务调度,通过数据加载模块和计算模块并行执行来充分隐藏数据传输代价,从而实现更高的计算性能.

    表  2  ZU3EG加速器与其他加速器计算性能与资源占用对比
    Table  2.  Computing Performance and Resource Utilization Comparison of ZU3EG Accelerators and Other Accelerators
    加速器平台频率/MHz精度/bkLUTsDSPBRAM计算性能/GOPS
    Suda[51]Stratix-V GSD816120760117.8
    Wei[22]Arria 10 GT1150232831315008341171.3
    AccELB[52]ZC706886808303493
    FAQ-CNN[14]ZU102200821024837231229
    Caffeine[18]KU06020082001167841200
    Li[53]Virtex-7 VC709200162732144956565.9
    ZU3EG_64ZU3EG333821.813071128
    ZU3EG_128ZU3EG333828.9201107254.9
    ZU3EG_256ZU3EG333845.7330178494.3
    下载: 导出CSV 
    | 显示表格
    表  3  SAF-CNN加速器在CycloneV上的资源占用与计算性能
    Table  3.  Resource Utilization and Computing Performance of SAF-CNN Accelerator on CycloneV
    编程语言频率/MHzkALMsDSP存储/Mb计算性能/GOPS
    RTL15021.9642.576.3
    HLS15025.7684.141.8
    下载: 导出CSV 
    | 显示表格
    图  11  加速器功耗和计算效率对比
    Figure  11.  Power and computing efficiency comparison of accelerators

    本节探究结构化剪枝方法对模型精度的影响.在结构化剪枝算法中,SAF-CNN采用2阶段的剪枝方法进行剪枝:第1阶段进行非结构化剪枝以引入稀疏性;第2阶段使用结构化剪枝. 同样,输入通道并行因子tn和输出通道并行因子tm都配置为16. 此外,VGG16和ResNet18模型的稀疏率从10%增加到80%.SSD_MobileNetV1模型的稀疏率从10%增加到75%. 考虑到参数的冗余性,MobileNetV1骨干网络的逐点卷积和SSD头部网络的普通卷积层都进行剪枝操作,逐通道卷积不进行剪枝操作. 实验中加速器所设置的可处理输入通道个数为16,在稀疏率为75%的情况下,经过SAF-CNN稀疏剪枝方法得到的输入通道个数减少到4. 当块内输入通道大于4,则需裁剪为4;对于块内输入通道数等于或者小于4的输入特征图,可无需裁减而直接输入到加速器进行计算. 由于3个模型处理的RGB图像数据的输入通道个数为3,此时可将该图像数据直接输入到SAF-CNN加速器直接计算,而无需对模型的第1层进行稀疏剪枝,进而不会对第1个卷积层引入稀疏性,由此保证模型精度,因为模型第1层的精度往往会直接影响整个模型推理精度.

    在量化模型的基础上,不同稀疏率下的模型准确率损失如图12所示. 在Cifar100数据集上,VGG16模型的推理准确率是71.86%,ResNet18模型的推理准确率是76.45%. 从图12可知,在VGG16模型上采用80%的稀疏率时,第2阶段剪枝算法可实现0.08%的准确率提升.当采用小于80%的稀疏率时,ResNet18模型的推理准确率损失小于1%,实现了理想的剪枝结果. 为验证剪枝方法在大规模数据集上的有效性,实验验证ResNet18模型在ImageNet数据集的剪枝效果,如图12(c)所示,其中ResNet18模型在ImageNet数据集的推理准确率是70.59%. 当稀疏率小于60%时,剪枝算法会带来准确率提升,当稀疏率设定为80%时,剪枝算法仅导致0.83%的准确率损失. SSD_MobileNetV1模型在VOC2012数据集上的推理平均准确率mAP为73.8%,经过QAT 8b量化算法处理后,mAP为72.59%. 其中,当采用50%的稀疏率时,模型的mAP损失小于1%,表明结构化算法的有效性. 当设定为75%的稀疏率时,SAF-CNN结构化剪枝算法引入了3.59%的mAP损失. 针对该损失,SSD_MobileNetV1模型采用深度可分离卷积降低模型冗余度,可通过知识蒸馏技术更好地恢复精度.

    图  12  不同稀疏率下CNN模型的精度损失
    Figure  12.  Accuracy loss of CNN models with different sparsity ratios

    本节实验通过部署SSD_MobileNetV1模型并评测其推理时延,来揭示SAF-CNN加速器与框架实现联合优化所带来的性能增益. 实验采用8b的量化方法以及75%的稀疏率,并在Intel FPGA和Xilinx FPGA这2种平台分别部署了SAF-CNN稀疏化加速框架. 此外,将SAF-CNN与针对深度可分离卷积定制的DPU加速器[20]进行对比.

    SAF-CNN加速器和DPU加速器的运行频率,以及硬件资源使用量如表3表4所示. 当联合深度学习框架时,SAF-CNN在ZU3EG平台上实现数据重组功能,会导致资源使用量略有提升. CycloneV运行时钟频率为150 MHz,DPU和ZU3EG则基于16 nm工艺,可运行在更高的时钟频率. 和DPU相比,SAF-CNN加速器可使用更少的硬件资源,尤其是乘法器DSP,这主要得益于SAF-CNN设计了结构化剪枝算法. 表5展示了各个平台上的SSD_MobileNetV1加速器推理性能对比,CPU0和CPU1分别是采用ARMV7架构的2核处理器和ARMV8架构的4核处理器. 在加速器与框架结合的方案中,所有的卷积层都调度到FPGA执行,其他算子仍然在CPU上执行. 在CycloneV平台上采用HLS设计时,SAF-CNN稀疏化异构加速器和CPU相比能够获得1.4倍的性能提升,采用RTL实现的加速器则能够获得3.5倍的性能提升. 在ZU3EG平台上采用HLS的SAF-CNN异构加速器,使用64 MACs, 128 MACs, 256 MACs分别能够获得1.8倍、2.1倍和2.2倍的性能提升. DPU凭借自身高运行频率和丰富的资源量分别达到了31 fps和124.3 fps的推理性能. 其中DPU_L不仅对深度可分离卷积算子实现加速,而且包含了SSD_MobileNetV1中其他大量的轻量级算子,从而达到了124.3 fps的推理性能. 但为了公平对比,本文比较了单位DSP上的SAF-CNN和DPU的处理性能. SAF-CNN在CycloneV平台上,采用RTL实现0.156 fps/DSP的计算性能,在ZU3EG平台上采用64个MACs能够实现0.147 fps/DSP的计算性能, 高于DPU_S的0.146 fps/DSP的计算性能. 说明SAF-CNN的设计能够在单位硬件资源上实现较高的计算能力,该方法如应用在资源丰富的FPGA平台将获得更高性能.

    表  4  加速器硬件配置对比
    Table  4.  Hardware Configuration Comparison of Accelerators
    平台硬件型号频率/MHzLUTBRAMDSP
    DPU_SZU2EG43031198145212
    DPU_LZU9EG3331619447112070
    ZU3EG_64ZU3EG3332657584137
    ZU3EG_128ZU3EG33333496120208
    ZU3EG_256ZU3EG33350506191337
    下载: 导出CSV 
    | 显示表格
    表  5  SSD_MobileNetV1 推理性能对比
    Table  5.  Inference Performance Comparison of SSD_MobileNetV1
    平台编程语言硬件配置帧率/fpsDSP 效率/(fps/DSP)
    CPU0C++ARMV7 * 22.2
    CPU1C++ARMV8 * 48.3
    DPU_SZU2EG310.146
    DPU_LZU9EG124.30.06
    CycloneV_64HLSARMV7 +CycloneV5.30.078
    CycloneV_64RTLARMV7 +CycloneV100.156
    ZU3EG_64HLSARMV8+ZU3EG20.20.147
    ZU3EG_128HLSARMV8+ZU3EG25.60.123
    ZU3EG_256HLSARMV8+ZU3EG26.50.079
    下载: 导出CSV 
    | 显示表格

    本节对SAF-CNN中模型计算图重构的有效性进行评估,在ZU3EG平台分别使用64个MACS、128个MACs和256个MACs设计加速器,并对SSD_MobileNetV1模型重构前和重构后的推理性能进行对比. 在SSD_MobileNetV1中,需要进行模型重构的计算图结构主要分布在MobileNetV1骨干网络和SSD头部网络的连接部分.

    经过实测,SAF-CNN所实现的SSD_MobileNetV1模型,其推理时延的各部分组成与占比数据如表6所示. 其中ZU3EG_64表示使用64个MACs,以此类推. 表6中FPGA硬件子图运行时间包含了调度到FPGA平台上的所有卷积层的运行时间,框架处理时延包含轻量级的算子执行时间和未被调度到FPGA的数据类型不匹配的卷积运行时间. 模型计算图重构前,部分数据类型不匹配的卷积算子被调度到CPU执行,导致所有的卷积层被分成6个子图. 此外,CPU端执行18个卷积层,导致框架处理时延显著提升. 当经过模型计算图重构后,所有的卷积层都是互连的并且都可被调度到FPGA进行加速,因此只有1个子图. 由于子图数目的减少,数据重排的次数也会降低,促使数据重排的时延由5 ms左右降低到3 ms左右. 卷积层都被调度到FPGA平台进行加速,使得FPGA的运行时间分别从27.1 ms增加到32.1 ms、从17.1 ms增加到22 ms和从15.1 ms增加20 ms. CPU端只负责执行轻量级的算子,从而使框架处理时延分别由78.9 ms降低为14.4 ms、81 ms降低为14.5 ms和79.5 ms降低为14.7 ms,充分发挥加速器的计算优势. 当增加MAC乘累加单元数量时,SSD_MobileNetV1的推理总时延从49.6 ms降低到37.8 ms,实现了更高的推理速度. 然而,以下3方面制约了SAF-CNN在该平台进一步提升性能:1)该平台资源有限,相比于DPU_L,只能在有限条件下增加计算引擎的并行能力和片上缓存;2)通过增加输入通道并行因子和输出通道并行因子来增加MAC使用个数,会增加逐通道卷积的无效计算量,从而导致深度可分离卷积的计算性能没有明显提升;3) SSD_MobileNetV1模型中包含的其他算子被调度到CPU上进行执行,该部分算子执行过程约占用14.5 ms,使得整个模型的推理性能受到限制. 即使在资源和CPU性能受限的条件下,SAF-CNN经过模型计算图重构优化后,推理总时延分别是49.6 ms,39.6 ms和37.8 ms,仍能实现重构前的2.24倍、2.6倍和2.63倍. 由此证明,SAF-CNN的模型计算图重构方法可以有效提升SAF-CNN加速器与框架结合的推理性能.

    表  6  SSD_MobileNetV1推理延迟组成
    Table  6.  Inference Latency Components of SSD_MobileNetV1
    推理结果ZU3EG_64ZU3EG_128ZU3EG_256
    计算图重构前计算图重构后计算图重构前计算图重构后计算图重构前计算图重构后
    子图数量616161
    CPU端卷积层数量180180180
    数据重排时延/ms5.13.14.73.14.93.1
    FPGA子图运行时延/ms27.132.117.12215.120
    框架处理时延/ms78.914.48114.579.514.7
    总时延/ms111.149.6102.839.699.537.8
    下载: 导出CSV 
    | 显示表格

    本文提出了一种面向嵌入式FPGA的稀疏化神经网络加速框架SAF-CNN,分别从加速器设计与推理框架实现方面进行设计与联合优化. 通过设计稀疏化架构、块内稀疏剪枝方法、资源复用机制、数据流设计、数据存储通信等技术实现了SAF-CNN稀疏化加速器. 然后,SAF-CNN通过设计CNN量化模型计算图重构等方法,对推理框架与模型目标加速器进行联合优化,从而实现快速部署CNN模型到资源受限的嵌入式FPGA平台. 实验结果表明,即使在资源受限的低端FPGA平台上,如CycloneV和ZU3EG,SAF-CNN仍可实现高达76.3 GOPS和494.3 GOPS的计算性能. 在目标检测模型推理中,SAF-CNN加速器与多核CPU相比可达到3.5倍和2.2倍的推理速度提升,实现26.5 fps的优越性能,且与同类方案相比,SAF-CNN的DSP效率具有明显优势.

    作者贡献声明:谢坤鹏提出算法实现思路,完成实验并撰写论文;仪德智负责实验数据整理和分析;刘义情参与协助完成部分实验;刘航调研方案和数据分析;赫鑫宇负责论文校对和图表修正;龚成参与论文校对和实验数据审查;卢冶提出算法思路、实验方案,修改与审核全文.

  • 图  1   基于软件度量的缺陷预测模型

    Figure  1.   Defect prediction model based on software metrics

    图  2   基于语法语义的缺陷预测模型

    Figure  2.   Defect prediction model based on semantic and syntactic

    图  3   缺陷预测和漏洞预测相关文献数量

    Figure  3.   Number of literatures related to defect prediction and vulnerability prediction

    图  4   缺陷预测框架

    Figure  4.   Defect prediction framework

    图  5   评估指标统计

    Figure  5.   Summary of evaluation indicators

    图  6   度量元发展时间线

    Figure  6.   Timeline of metrics development

    图  7   代码示例

    Figure  7.   Code example

    表  1   软件缺陷状态描述

    Table  1   Software Defect State Description

    状态描述
    新建(New)缺陷在测试中首次出现,并被质量工程师标记
    待确认(Pending)缺陷已被报告,并等待确认
    开放(Open)被确定为缺陷,等待被分配和修复
    已分配(Assigned)初步筛选后,被分配给适当的团队进行修复
    拒绝(Rejected)缺陷不需要修复或者不是缺陷
    修复中(In Progress)缺陷已被确认,并且开发人员正在处理修复
    已修复(Fixed)开发人员修改代码或者配置,并将缺陷标记为已修复
    待测试(Test)修复后的缺陷等待再次进行测试以验证修复是否有效
    重新开放(Re-open)经过修复并重新测试后,缺陷再次出现并被重新标记
    已解决(Resolved)缺陷已经修复,并且通过再次测试验证了修复的有效性
    已关闭(Closed)缺陷被确认为已解决,不需要进一步处理
    下载: 导出CSV

    表  2   缺陷检测与缺陷预测方法对比

    Table  2   Comparison of Defect Detection and Defect Prediction Methods

    方法类别准确性范围时间局限性
    手动测试缺陷检测较为准确较小很多可能出现人为错误
    自动化分析缺陷检测基本准确较大适中难以处理视觉、用户体验等问题
    静态分析缺陷检测基本准确较小无法检测运行时行为和集成问题
    代码审查缺陷检测较为准确较小很多取决于审查者的经验和技能水平
    人工智能缺陷预测基本准确适中取决于数据质量和技术
    下载: 导出CSV

    表  3   软件缺陷模型的公共仓库数据来源

    Table  3   Public Warehouse Data Sources for Software Defect Modeling

    下载: 导出CSV

    表  4   公共数据集属性列表

    Table  4   Attributes List of the Publicly Available Datasets

    数据集缺陷仓库语言属性行数缺陷行缺陷率/%
    CM1NASAC22498499.84
    JM1NASAC2210885877980.65
    KC1NASAC++22210932615.46
    KC2NASAC++2252210520.11
    KC3NASAJava40458439.39
    KC4NASAPerl401256148.80
    MC1NASAC++399466680.72
    MC2NASAC++401615232.30
    MW1NASAC404036115.14
    PC1NASAC401107766.87
    PC2NASAC405589230.41
    PC3NASAC40156316010.24
    PC4NASAC40145817812.21
    PC5NASAC++39171865163.00
    ant-1.7PROMISEJava2174516622.30
    ivy-2.0PROMISEJava213524011.40
    camel-1.6PROMISEJava2196518819.50
    jedit-4.0PROMISEJava213067524.50
    log4j-1.2PROMISEJava211093733.90
    Lucene-2.4PROMISEJava211959146.70
    poi-2.0PROMISEJava213143711.80
    Synapse-1.1PROMISEJava212226027.00
    velocity-1.6PROMISEJava212297834.10
    Xerces-1.3PROMISEJava214536015.20
    tomcatPROMISEJava21858778.90
    Xalan-2.4PROMISEJava2172311015.20
    EQAEEEMJava6232412939.81
    JDTAEEEMJava6299720620.66
    LCAEEEMJava62691649.26
    MLAEEEMJava62186224513.16
    PDEAEEEMJava62149720913.96
    下载: 导出CSV

    表  5   开源软件项目缺陷数量列表

    Table  5   Number of Defects List in Open-Source Software Projects

    来源开源软件版本数量细粒度代码行缺陷数量
    文献[12]Camel2文件11236762.00
    文献[12]Flume2文件9578247.00
    文献[12]Tika2文件8534116.00
    文献[12]Gedit2文件6044118.50
    文献[12]Nginx2文件8061818.00
    文献[12]Redis2文件4599121.00
    文献[13]Gedit314函数201258.96
    文献[13]Nagios Core93函数17504.82
    文献[13]Nginx455函数19756.17
    文献[13]Redis173函数235057.31
    下载: 导出CSV

    表  6   开源软件项目代码变更对缺陷的影响

    Table  6   Impact of Code Changes on Defects in Open-Source Software Projects

    开源软件代码更改时间段文件数量每次更改的文件数平均变更的代码行代码更改诱发的缺陷率/%
    Bugzilla08/1998−12/200646202.337.536
    Platform05/2001−12/2007642504.372.214
    Mozilla01/2000−12/2006982755.3106.55
    JDT05/2001−12/2007353864.371.414
    Columba11/2002−07/200644556.2149.431
    PostgreSQL07/1996−05/2010204314.5101.325
    下载: 导出CSV

    表  7   数据预处理方法

    Table  7   Data Preprocessing Methods

    来源年份数据集数据预处理模型分类方法评价指标
    文献[23]2022AEEM,NASAAJCC-RamXGBoostF1-Score
    文献[27]2018PROMISENCL,RUSAdaboostPD,PF,G-mean,AUC
    文献[30]2018NASA,SOFTLAB,ReLink,
    AEEEM,MORPH
    CTKCCA逻辑回归PD,PF,F-measure,
    G-mean,AUC
    文献[33]2019NASA,PROMISESTr-NN+TCA集成学习F-measure,AUC,Recall,PF
    文献[34]2022NASA,AEEEM,RelinkBiGAN随机森林、支持向量机、
    朴素贝叶斯
    AUC,G-mean,F1-Score
    文献[39]2021NASA,PROMISE,AEEEM,ReLinkEWFS决策树、
    朴素贝叶斯
    F-measure,AUC
    文献[45]2017ReLink,AEEEMFESCH决策树、朴素贝叶斯、
    逻辑回归
    Precision,Recall,
    F-measure,AUC
    文献[46]2019NASALSKDSA逻辑回归F-measure,AUC
    文献[49]2018MORPHHAL,KCPA逻辑回归F-measure,G-mean,Balance
    文献[50]2020MORPHCDS随机森林、逻辑回归、
    朴素贝叶斯
    F-measure,G-mean,Balance
    下载: 导出CSV

    表  8   常用评价指标及其描述

    Table  8   Common Evaluation Indicators and Their Descriptions

    评价指标具体描述
    Accuracy模型预测正确的个数占实例总数中的比例
    Precision,Correctness模型预测有缺陷的实例中真实类别为缺陷所占的比例
    Recall,TPR模型预测有缺陷的实际数量占真实有缺陷中的比例
    Specificity,TNR模型预测无缺陷模块的实际数量占真实无缺陷中的比例
    FPR模型预测有缺陷的模块占真实无缺陷中的比例
    FNR模型预测无缺陷的模块占真实有缺陷的比例
    AUCROC曲线下面积、AUC值越大,模型的有效性越好
    MCC观察到的分类与预测分类的比值
    BalancePF的最佳截止点,ROC曲线中(0, 1)点的归一化欧几里得距离
    F-measure是召回率和精确度之间的调和平均值
    F1-Score,F2-Score不平衡数据集学习的评价标准,表示精准率和召回率的组合
    G-meanRecall和Precision的几何平均数
    Error Rate所有实例中错误分类的比率
    AAE平均绝对误差,表示预测值和实际值之间的绝对差
    ARE平均相对误差,表示预测值和实际值的绝对差与实际值的比值
    Completeness实际缺陷值与预测缺陷值的比值
    下载: 导出CSV

    表  9   度量元的演进对比

    Table  9   Comparison of Metric Evolution

    来源时间度量元机器学习/深度学习评价指标对比结果
    文献[59]2021代码气味
    代码度量
    RF,SVM,MLP,DT,NBROC,AUC,PR,F1-Score代码气味优于代码度量且优于这两者的混合度量
    文献[62]2008代码变更
    代码度量
    LR,NB,DTFP,Recall,PC过程度量比代码度量更有效
    文献[64]2016演化模式度量元
    代码变更度量元
    NB、二元逻辑回归、J48决策树Precision,Recall,F-measure,ROC与代码和代码变更相比,演化度量元有相对较好的预测性能
    文献[81]2018交叉熵基于LSTM的循环神经网络(RNN)Precision,Recall,F1-Score,AUC交叉熵度量比50%的传统度量有更好的预测能力
    下载: 导出CSV

    表  10   缺陷和漏洞的区别与联系

    Table  10   Differences and Connections Between Defects and Vulnerabilities

    区别与联系角度缺陷漏洞
    区别概念软件或程序中存在的某种错误或隐藏的功能故障软件在设计、实现、配置策略及使用过程中出现的缺陷,它可能导致攻击者在未授权的情况下访问或破坏系统.
    来源软件架构和设计软件代码(源代码或二进制代码)
    产生原因测试范围过小,需求分析不精准,团队职责
    不规范,硬件配置、固件、处理器中的缺陷,
    软件配置、操作系统中的缺陷
    编程人员的能力,硬件缺陷,软件缺陷,协议缺陷
    披露方式软件存储库中会对缺陷进行披露,缺
    陷数据的质量高于漏洞数据的质量
    漏洞的披露会引发一系列的攻击,开发人员和漏
    洞研究人员通常会限制公开披露漏洞的信息
    数量较多较少
    联系概念漏洞是可能被攻击者利用从而实施入侵的软件缺陷
    来源与硬件、代码的复杂性以及编程人员的能力有关
    影响会对企业和人们的生活造成巨大的伤害
    检测和预测方法手动测试、自动化、静态分析、动态分析、代码审查、人工智能
    下载: 导出CSV

    表  11   缺陷预测和漏洞预测任务的挑战与机遇

    Table  11   Opportunities and Challenges of Defect Prediction and Vulnerability Prediction Tasks

    挑战机遇
    数据集的来源与处理建立一个高质量平衡且无噪音的基准数据集
    代码向量的表征方法构建一种最大程度蕴含语法语义信息的表征方法
    预训练模型的提高利用在其他领域训练好的词向量嵌入提升模型性能
    深度学习模型的探索探索更适合具体预测任务的深度学习模型
    细粒度预测技术更加精确地定位缺陷和漏洞可能出现的位置
    预训练模型的迁移通过模型的迁移节约时间和资源成本
    下载: 导出CSV
  • [1]

    Pachouly J, Ahirrao S, Kotecha K, et al. A systematic literature review on software defect prediction using artificial intelligence: Datasets, data validation methods, approaches, and tools[J]. Engineering Applications of Artificial Intelligence, 2022, 111: 1−33 doi: 10.1016/j.engappai.2022.104773

    [2] 陈翔,顾庆,刘望舒,等. 静态软件缺陷预测方法研究[J]. 软件学报,2016,27(1):1−25 doi: 10.13328/j.cnki.jos.004923

    Chen Xiang, Gu Qing, Liu Wangshu, et al. Survey of static software defect prediction[J]. Journal of Software, 2016, 27(1): 1−25 (in Chinese) doi: 10.13328/j.cnki.jos.004923

    [3] 顾绵雪,孙鸿宇,韩丹,等. 基于深度学习的软件安全漏洞挖掘[J]. 计算机研究与发展,2021,58(10):2140−2162 doi: 10.7544/issn1000-1239.2021.20210620

    Gu Mianxue, Sun Hongyu, Han Dan, et al. Software security vulnerability mining based on deep learning[J]. Journal of Computer Research and Development, 2021, 58(10): 2140−2162 (in Chinese) doi: 10.7544/issn1000-1239.2021.20210620

    [4]

    Trachtenberg M. Discovering how to ensure software reliability[J]. Radio Corporation of America Engineer, 1982, 27(1): 53−57

    [5]

    Qian Lianfen, Yao Qingchuan, Khoshgoftaar T M. Dynamic two-phase truncated Rayleigh model for release date prediction of software[J]. Journal of Software Engineering and Applications, 2010, 3(06): 603−609 doi: 10.4236/jsea.2010.36070

    [6]

    Bustamante A, Bustamante B. Multinomial-exponential reliability function: A software reliability model[J]. Reliability Engineering & System Safety, 2003, 79(3): 281−288

    [7]

    Zheng Yanyan, Xu Renzuo. An adaptive exponential smoothing approach for software reliability prediction[C]//Proc of 2008 4th Int Conf on Wireless Communications, Networking and Mobile Computing. Piscataway, NJ: IEEE, 2008: 1−4

    [8]

    Yamada S, Ohba M, Osaki S. S-shaped reliability growth modeling for software error detection[J]. IEEE Transactions on Reliability, 1983, 32(5): 475−484

    [9]

    Kececioglu D, Jiang S, Vassiliou P. The modified Gompertz reliability growth model[C]//Proc of Annual Reliability and Maintainability Symp (RAMS). Piscataway, NJ: IEEE, 1994: 160−165

    [10]

    Ahmad N, Imam M Z. Software reliability growth models with log-logistic testing-effort function: A comparative study[J]. International Journal of Computer Applications, 2014, 75(12): 8−11

    [11] 宫丽娜,姜淑娟,姜丽. 软件缺陷预测技术研究进展[J]. 软件学报,2019,30(10):3090−3114 doi: 10.13328/j.cnki.jos.005790

    Gong Lina, Jiang Shujuan, Jiang Li. Research progress of software defect prediction[J]. Journal of Software, 2019, 30(10): 3090−3114 (in Chinese) doi: 10.13328/j.cnki.jos.005790

    [12]

    Li Yiyao, Lee S Y, Wotawa F, et al. Using tri-relation networks for effective software fault-proneness prediction[J]. IEEE Access, 2019, 7: 63066−63080 doi: 10.1109/ACCESS.2019.2916615

    [13]

    Lee S Y, Wong W E, Li Yiyao, et al. Software fault-proneness analysis based on composite developer-module networks[J]. IEEE Access, 2021, 9: 155314−155334 doi: 10.1109/ACCESS.2021.3128438

    [14]

    Zhu Kun, Zhang Nana, Ying Shi, et al. Within-project and cross-project software defect prediction based on improved transfer naive Bayes algorithm[J]. Computers, Materials and Continua, 2020, 63(2): 891−910

    [15]

    Akiyama F. An example of software system debugging.[J]. IFIP Congress, 1971, 71(1): 353−359

    [16]

    Halstead M H. Elements of Software Science (Operating and Programming Systems Series)[M]. New York: Elsevier Science Inc, 1977

    [17]

    Shepperd M, Song Qinbao, Sun Zhongbin, et al. Data quality: Some comments on the NASA software defect datasets[J]. IEEE Transactions on Software Engineering, 2013, 39(9): 1208−1215 doi: 10.1109/TSE.2013.11

    [18]

    Khoshgoftaar T M, Gao Kehan, Napolitano A, et al. A comparative study of iterative and non-iterative feature selection techniques for software defect prediction[J]. Information Systems Frontiers, 2014, 16(5): 801−822 doi: 10.1007/s10796-013-9430-0

    [19]

    Li Zhiqiang, Jing Xiaoyuan, Zhu Xiaoke, et al. Heterogeneous defect prediction through multiple kernel learning and ensemble learning[C]//Proc of 2017 IEEE Int Conf on Software Maintenance and Evolution (ICSME). Piscataway, NJ: IEEE, 2017: 91−102

    [20]

    Kubat M, Matwin S. Addressing the curse of imbalanced training sets: One-sided selection[C]//Proc of the 14th Int Conf on Machine Learning. San Francisco: Morgan Kaufmann, 1997: 179−186

    [21]

    Kotsiantis S B, Pintelas P E. Mixture of expert agents for handling imbalanced data sets[J]. Annals of Mathematics, Computing & Teleinformatics, 2003, 1(1): 46−55

    [22]

    Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: Synthetic minority over-sampling technique[J]. Journal of Artificial Intelligence Research, 2002, 16: 321−357 doi: 10.1613/jair.953

    [23] 饶珍丹. 软件缺陷预测中不平衡数据分类算法研究[D]. 哈尔滨: 哈尔滨师范大学, 2022

    Yao ZhenDan. Research on unbalanced data classification algorithm in software defect prediction[D]. Harbin: Harbin Normal University, 2022(in Chinese)

    [24]

    He Haibo, Bai Yang, Garcia E A, et al. ADASYN: Adaptive synthetic sampling approach for imbalanced learning[C]//Proc of 2008 IEEE Int Joint Conf on Neural Networks (IEEE World Congress on Computational Intelligence). Piscataway, NJ: IEEE, 2008: 1322−1328

    [25]

    Ma Li, Fan Suohai. CURE-SMOTE algorithm and hybrid algorithm for feature selection and parameter optimization based on random forests[J]. BMC Bioinformatics, 2017, 18(1): 1−18 doi: 10.1186/s12859-016-1414-x

    [26]

    Kim S, Zhang Hongyu, Wu Rongxin, et al. Dealing with noise in defect prediction[C]//Proc of 2011 33rd Int Conf on Software Engineering (ICSE). Piscataway, NJ: IEEE, 2011: 481−490

    [27]

    Chen Liu, Fang Bin, Shang Zhaowei, et al. Tackling class overlap and imbalance problems in software defect prediction[J]. Software Quality Journal, 2018, 26(1): 97−125 doi: 10.1007/s11219-016-9342-6

    [28]

    Tang Wei, Khoshgoftaar T M. Noise identification with the k-means algorithm[C]//Proc of 16th IEEE Int Conf on Tools with Artificial Intelligence. Piscataway, NJ: IEEE, 2004: 373−378

    [29]

    Goyal S. Handling class-imbalance with KNN (neighbourhood) under-sampling for software defect prediction[J]. Artificial Intelligence Review, 2022, 55(3): 2023−2064 doi: 10.1007/s10462-021-10044-w

    [30]

    Li Zhiqiang, Jing Xiaoyuan, Wu Fei, et al. Cost-sensitive transfer kernel canonical correlation analysis for heterogeneous defect prediction[J]. Automated Software Engineering, 2018, 25(2): 201−245 doi: 10.1007/s10515-017-0220-7

    [31]

    Yang Zhenyu, Jin Chufeng, Zhang Yue, et al. Software defect prediction: An ensemble learning approach[J]. Journal of Physics:Conf Series, 2022, 2171(1): 012008 doi: 10.1088/1742-6596/2171/1/012008

    [32]

    Jiang Feng, Yu Xu, Gong Dunwei, et al. A random approximate reduct-based ensemble learning approach and its application in software defect prediction[J]. Information Sciences, 2022, 609: 1147−1168 doi: 10.1016/j.ins.2022.07.130

    [33]

    Gong Lina, Jiang Shujuan, Bo Lili, et al. A novel class-imbalance learning approach for both within-project and cross-project defect prediction[J]. IEEE Transactions on Reliability, 2019, 69(1): 40−54

    [34]

    Zhang Shenggang, Jiang Shujuan, Yan Yue. A software defect prediction approach based on BiGAN anomaly detection[J]. Scientific Programming, 2022, 2022(1): 1−13

    [35]

    Rodriguez D, Herraiz I, Harrison R, et al. Preliminary comparison of techniques for dealing with imbalance in software defect prediction[C]//Proc of the 18th Int Conf on Evaluation and Assessment in Software Engineering. New York: ACM, 2014: 1−10

    [36]

    Eivazpour Z, Keyvanpour M R. CSSG: A cost-sensitive stacked generalization approach for software defect prediction[J]. Software Testing, Verification and Reliability, 2021, 31(5): e1761

    [37]

    Kohavi R, John G H. Wrappers for feature subset selection[J]. Artificial Intelligence, 1997, 97(1-2): 273−324 doi: 10.1016/S0004-3702(97)00043-X

    [38]

    He Xiaofei, Cai Deng, Niyogi P. Laplacian score for feature selection[C]//Proc of the 18th Int Conf on Neural Information Processing Systems. Cambridge, MA, USA: MIT Press, 2005

    [39]

    Balogun A O, Basri S, Capretz L F, et al. Software defect prediction using wrapper feature selection based on dynamic re-ranking strategy[J]. Symmetry, 2021, 13(11): 2166−2189 doi: 10.3390/sym13112166

    [40]

    Thirumoorthy K. A feature selection model for software defect prediction using binary Rao optimization algorithm[J]. Applied Soft Computing, 2022, 131: 109737−109753 doi: 10.1016/j.asoc.2022.109737

    [41]

    Bahaweres R B, Suroso A I, Hutomo A W, et al. Tackling feature selection problems with genetic algorithms in software defect prediction for optimization[C]//Proc of 2020 Int Conf on Informatics, Multimedia, Cyber and Information System (ICIMCIS). Piscataway, NJ: IEEE, 2020: 64−69

    [42]

    Miao Linsong, Liu Mingxia, Zhang Daoqiang. Cost-sensitive feature selection with application in software defect prediction[C]//Proc of the 21st Int Conf on Pattern Recognition (ICPR2012). Piscataway, NJ: IEEE, 2012: 967−970

    [43]

    Liu Shulong, Chen Xiang, Liu Wangshu, et al. FECAR: A feature selection framework for software defect prediction[C]//Proc of 2014 IEEE 38th Annual Computer Software and Applications Conf. Piscataway, NJ: IEEE, 2014: 426−435

    [44]

    Nam J, Pan S J, Kim S. Transfer defect learning[C]//Proc of 2013 35th Int Conf on Software Engineering (ICSE). Piscataway, NJ: IEEE, 2013: 382−391

    [45]

    Ni Chao, Liu Wangshu, Chen Xiang, et al. A cluster based feature selection method for cross-project software defect prediction[J]. Journal of Computer Science and Technology, 2017, 32(6): 1090−1107 doi: 10.1007/s11390-017-1785-0

    [46]

    Li Zhiqiang, Qi Chao, Zhang Li, et al. Discriminant subspace alignment for cross-project defect prediction[C]//Proc of 2019 IEEE SmartWorld, Ubiquitous Intelligence & Computing, Advanced & Trusted Computing, Scalable Computing & Communications, Cloud & Big Data Computing, Internet of People and Smart City Innovation (SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI). Piscataway, NJ: IEEE, 2019: 1728−1733

    [47]

    Chen Jinfu, Wang Xiaoli, Cai Saihua, et al. A software defect prediction method with metric compensation based on feature selection and transfer learning[J]. Frontiers of Information Technology & Electronic Engineering, 2022, 23(5): 715−731

    [48]

    Lu Huihua, Kocaguneli E, Cukic B. Defect prediction between software versions with active learning and dimensionality reduction[C]//Proc of 2014 IEEE 25th Int Symp on Software Reliability Engineering. Piscataway, NJ: IEEE, 2014: 312−322

    [49]

    Xu Zhou, Liu Jin, Luo Xiapu, et al. Cross-version defect prediction via hybrid active learning with kernel principal component analysis[C]//Proc of 2018 IEEE 25th Int Conf on Software Analysis, Evolution and Reengineering (SANER). Piscataway, NJ: IEEE, 2018: 209−220

    [50]

    Zhang Jie, Wu Jiajing, Chen C, et al. Cds: A cross–version software defect prediction model with data selection[J]. IEEE Access, 2020, 8: 110059−110072 doi: 10.1109/ACCESS.2020.3001440

    [51]

    Marcus A, Maletic J I. Recovering documentation-to-source-code traceability links using latent semantic indexing[C]//Proc of 25th Int Conf on Software Engineering (ICSE). Piscataway, NJ: IEEE, 2003: 125−135

    [52]

    Menzies T, Dekhtyar A, Distefano J, et al. Problems with precision: A response to “comments on ‘data mining static code attributes to learn defect predictors’”[J]. IEEE Transactions on Software Engineering, 2007, 33(9): 637−640 doi: 10.1109/TSE.2007.70721

    [53]

    Yao Jingxiu, Shepperd M. The impact of using biased performance metrics on software defect prediction research[J]. Information and Software Technology, 2021, 139(11): 1−14

    [54] 乔辉. 软件缺陷预测技术研究[D]. 郑州: 解放军信息工程大学, 2013

    Qiao Hui. Research on software defect prediction techniques[D]. Zhengzhou: Information Engineering University, 2013 (in Chinese)

    [55]

    McCabe T J. A complexity measure[J]. IEEE Transactions on Software Engineering, 1976, 2(4): 308−320

    [56]

    Chidamber S R, Kemerer C F. A metrics suite for object oriented design[J]. IEEE Transactions on Software Engineering, 1994, 20(6): 476−493 doi: 10.1109/32.295895

    [57]

    Brito E A F, Carapuça R. Candidate metrics for object-oriented software within a taxonomy framework[J]. Journal of Systems and Software, 1994, 26(1): 87−96 doi: 10.1016/0164-1212(94)90099-X

    [58]

    Bansiya J, Davis C G. A hierarchical model for object-oriented design quality assessment[J]. IEEE Transactions on Software Engineering, 2002, 28(1): 4−17 doi: 10.1109/32.979986

    [59]

    Sotto-Mayor B, Kalech M. Cross-project smell-based defect prediction[J]. Soft Computing, 2021, 25(22): 14171−14181 doi: 10.1007/s00500-021-06254-7

    [60]

    Khoshgoftaar T M, Szabo R M. Improving code churn predictions during the system test and maintenance phases[C]//Proc of 1994 Int Conf on Software Maintenance. Piscataway, NJ: IEEE, 1994: 58−67

    [61]

    Nagappan N, Ball T. Use of relative code churn measures to predict system defect density[C]//Proc of the 27th Int Conf on Software Engineering. New York: ACM, 2005: 284−292

    [62]

    Moser R, Pedrycz W, Succi G. A comparative analysis of the efficiency of change metrics and static code attributes for defect prediction[C]//Proc of the 30th Int Conf on Software Engineering. New York: ACM, 2008: 181−190

    [63]

    Knab P, Pinzger M, Bernstein A. Predicting defect densities in source code files with decision tree learners[C]//Proc of the 2006 Int Workshop on Mining Software Repositories. New York: ACM, 2006: 119−125

    [64] 王丹丹,王青. 基于演化数据的软件缺陷预测性能改进[J]. 软件学报,2016,27(12):3014−3029 doi: 10.13328/j.cnki.jos.004869

    Wang Dandan, Wang Qing. Improving the performance of defect prediction based on evolution data[J]. Journal of Software, 2016, 27(12): 3014−3029 (in Chinese) doi: 10.13328/j.cnki.jos.004869

    [65]

    Liu Yibin, Li Yanhui, Guo Jianbo, et al. Connecting software metrics across versions to predict defects[C]//Proc of 2018 IEEE 25th Int Conf on Software Analysis, Evolution and Reengineering (SANER). Piscataway, NJ: IEEE, 2018: 232−243

    [66]

    Mockus A, Weiss D M. Predicting risk of software changes[J]. Bell Labs Technical Journal, 2000, 5(2): 169−180

    [67]

    Weyuker E J, Ostrand T J, Bell R M. Using developer information as a factor for fault prediction[C]//Proc of Third Int Workshop on Predictor Models in Software Engineering. Piscataway, NJ: IEEE, 2007: 8−15

    [68]

    Ostrand T J, Weyuker E J, Bell R M. Programmer-based fault prediction[C]//Proc of the 6th Int Conf on Predictive Models in Software Engineering. New York: ACM, 2010: 1−10

    [69]

    Pinzger M, Nagappan N, Murphy B. Can developer-module networks predict failures?[C]//Proc of the 16th ACM SIGSOFT Int Symp on Foundations of Software Engineering. New York: ACM, 2008: 2−12

    [70]

    Nagappan N, Murphy B, Basili V. The influence of organizational structure on software quality[C]//Proc of 2008 ACM/IEEE 30th Int Conf on Software Engineering. New York: ACM, 2008: 521−530

    [71]

    Mockus A. Organizational volatility and its effects on software defects[C]//Proc of the 18th ACM SIGSOFT Int Symp on Foundations of Software Engineering. New York: ACM, 2010: 117−126

    [72]

    Zhou Yuming, Leung H. Empirical analysis of object-oriented design metrics for predicting high and low severity faults[J]. IEEE Transactions on Software Engineering, 2006, 32(10): 771−789 doi: 10.1109/TSE.2006.102

    [73]

    Pai G J, Dugan J B. Empirical analysis of software fault content and fault proneness using Bayesian methods[J]. IEEE Transactions on Software Engineering, 2007, 33(10): 675−686 doi: 10.1109/TSE.2007.70722

    [74]

    Seliya N, Khoshgoftaar T M. Software quality analysis of unlabeled program modules with semisupervised clustering[J]. IEEE Transactions on Systems, Man, and Cybernetics-Part A:Systems and Humans, 2007, 37(2): 201−211 doi: 10.1109/TSMCA.2006.889473

    [75]

    Catal C, Sevim U, Diri B. Clustering and metrics thresholds based software fault prediction of unlabeled program modules[C]//Proc of 2009 6th Int Conf on Information Technology: New Generations. Piscataway, NJ: IEEE, 2009: 199−204

    [76]

    Arisholm E, Briand L C, Johannessen E B. A systematic and comprehensive investigation of methods to build and evaluate fault prediction models[J]. Journal of Systems and Software, 2010, 83(1): 2−17 doi: 10.1016/j.jss.2009.06.055

    [77]

    Gyimóthy T, Ferenc R, Siket I. Empirical validation of object-oriented metrics on open source software for fault prediction[J]. IEEE Transactions on Software Engineering, 2005, 31(10): 897−910 doi: 10.1109/TSE.2005.112

    [78]

    Zheng Jun. Cost-sensitive boosting neural networks for software defect prediction[J]. Expert Systems with Applications, 2010, 37(6): 4537−4543 doi: 10.1016/j.eswa.2009.12.056

    [79]

    Shukla S, Radhakrishnan T, Muthukumaran K, et al. Multi-objective cross-version defect prediction[J]. Soft Computing, 2018, 22(6): 1959−1980 doi: 10.1007/s00500-016-2456-8

    [80]

    Zhao Liuchang, Shang Zhaowei, Zhao Ling, et al. Siamese dense neural network for software defect prediction with small data[J]. IEEE Access, 2018, 7: 7663−7677

    [81]

    Zhang Xian, Ben K, Zeng Jie. Cross-entropy: A new metric for software defect prediction[C]//Proc of 2018 IEEE Int Conf on Software Quality, Reliability and Security (QRS). Piscataway, NJ: IEEE, 2018: 111−122

    [82]

    Yang Xinli, Lo D, Xia Xin, et al. Deep learning for just-in-time defect prediction[C]//Proc of 2015 IEEE Int Conf on Software Quality, Reliability and Security. Piscataway, NJ: IEEE, 2015: 17−26

    [83]

    Wang Song, Liu Taiyue, Tan Lin. Automatically learning semantic features for defect prediction[C]//Proc of 2016 IEEE/ACM 38th Int Conf on Software Engineering (ICSE). Piscataway, NJ: IEEE, 2016: 297−308

    [84]

    Wang Song, Liu Taiyue, Nam J, et al. Deep semantic feature learning for software defect prediction[J]. IEEE Transactions on Software Engineering, 2018, 46(12): 1267−1293

    [85]

    Li Jian, He Pinjia, Zhu Jieming, et al. Software defect prediction via convolutional neural network[C]//Proc of 2017 IEEE Int Conf on Software Quality, Reliability and Security (QRS). Piscataway, NJ: IEEE, 2017: 318−328

    [86]

    Fan Guisheng, Diao Xuyang, Yu Huiqun, et al. Software defect prediction via attention-based recurrent neural network[J]. Scientific Programming, 2019, 2019(4): 1−14

    [87]

    Qiu Shaojian, Lu Lu, Cai Ziyi, et al. Cross-project defect prediction via transferable deep learning-generated and handcrafted features[C]//Proc of the 31st Int Conf on Software Engineering and Knowledge Engineering. Skokie: Knowledge Systems Institute Graduate School, 2019: 431−552

    [88]

    Liu Wangshu, Zhu Yongteng, Chen Xiang, et al. S2 LMMD: Cross-project software defect prediction via statement semantic learning and maximum mean discrepancy[C]//Proc of 2021 28th Asia-Pacific Software Engineering Conf (APSEC). Piscataway, NJ: IEEE, 2021: 369−379

    [89]

    Dam H K, Pham T, Ng S W, et al. A deep tree-based model for software defect prediction[J]. ArXiv Preprint ArXiv: 1802.00921, 2018

    [90]

    Šikić L, Kurdija A S, Vladimir K, et al. Graph neural network for source code defect prediction[J]. IEEE Access, 2022, 10: 10402−10415 doi: 10.1109/ACCESS.2022.3144598

    [91]

    Phan A V, Le Nguyen M, Bui L T. Convolutional neural networks over control flow graphs for software defect prediction[C]//Proc of 2017 IEEE 29th Int Conf on Tools with Artificial Intelligence (ICTAI). Piscataway, NJ: IEEE, 2017: 45−52

    [92]

    Xu Jiaxi, Ai Jun, Liu Jingyu, et al. ACGDP: An augmented code graph-based system for software defect prediction[J]. IEEE Transactions on Reliability, 2022, 71(2): 850−864 doi: 10.1109/TR.2022.3161581

    [93]

    Li Zhen, Zou Deqing, Xu Shouhuai, et al. VulDeePecker: A deep learning-based system for vulnerability detection[J]. ArXiv Preprint ArXiv: 1801.01681, 2018

    [94]

    Huo Xuan, Yang Yang, Li Ming, et al. Learning semantic features for software defect prediction by code comments embedding[C]//Proc of 2018 IEEE Int Conf on Data Mining (ICDM). Piscataway, NJ: IEEE, 2018: 1049−1054

    [95]

    Qu Yu, Liu Ting, Chi Jianlei, et al. Node2defect: Using network embedding to improve software defect prediction[C]//Proc of 2018 33rd IEEE/ACM Int Conf on Automated Software Engineering (ASE). Piscataway, NJ: IEEE, 2018: 844−849

    [96]

    Zeng Cheng, Zhou Chunying, Lv Shengkai, et al. GCN2defect: Graph convolutional networks for smotetomek-based software defect prediction[C]//Proc of 2021 IEEE 32nd Int Symp on Software Reliability Engineering (ISSRE). Piscataway, NJ: IEEE, 2021: 69−79

    [97]

    Zhou Chunying, He Peng, Zeng Cheng, et al. Software defect prediction with semantic and structural information of codes based on graph neural networks[J]. Information and Software Technology, 2022, 152: 107057 doi: 10.1016/j.infsof.2022.107057

    [98]

    Yang Fengyu, Huang Yaxuan, Xu Haoming, et al. Fine-grained software defect prediction based on the method-call sequence[J]. Computational Intelligence and Neuroscience, 2022, 2022(8): 1−15

    [99]

    Uddin M N, Li Bixin, Ali Z, et al. Software defect prediction employing BiLSTM and BERT-based semantic feature[J]. Soft Computing, 2022, 26(16): 7877−7891 doi: 10.1007/s00500-022-06830-5

    [100]

    Shin Y, Williams L. An empirical model to predict security vulnerabilities using code complexity metrics[C]//Proc of the Second ACM-IEEE Int Symp on Empirical Software Engineering and Measurement. New York: ACM, 2008: 315−317

    [101]

    Gegick M, Williams L, Osborne J, et al. Prioritizing software security fortification through code-level security metrics[C]//Proc of Workshop on Quality of Protection. New York: ACM, 2008: 31−38

    [102]

    Meneely A, Williams L. Secure open source collaboration: An empirical study of Linus’ law[C]//Proc of the 16th ACM Conf on Computer and Communications Security. New York: ACM, 2009: 453−462

    [103]

    Shin Y, Meneely A, Williams L, et al. Evaluating complexity, code churn, and developer activity metrics as indicators of software vulnerabilities[J]. IEEE Transactions on Software Engineering, 2010, 37(6): 772−787

    [104]

    Chowdhury I, Zulkernine M. Using complexity, coupling, and cohesion metrics as early indicators of vulnerabilities[J]. Journal of Systems Architecture, 2011, 57(3): 294−313 doi: 10.1016/j.sysarc.2010.06.003

    [105]

    Hovsepyan A, Scandariato R, Joosen W, et al. Software vulnerability prediction using text analysis techniques[C]//Proc of the 4th Int Workshop on Security Measurements and Metrics. New York: ACM, 2012: 7−10

    [106]

    Scandariato R, Walden J, Hovsepyan A, et al. Predicting vulnerable software components via text mining[J]. IEEE Transactions on Software Engineering, 2014, 40(10): 993−1006 doi: 10.1109/TSE.2014.2340398

    [107]

    Yamaguchi F, Lottmann M, Rieck K. Generalized vulnerability extrapolation using abstract syntax trees[C]//Proc of the 28th Annual Computer Security Applications Conf. New York: ACM, 2012: 359−368

    [108]

    Meng Qingkun, Wen Shameng, Feng Chao, et al. Predicting buffer overflow using semi-supervised learning[C]//Proc of 2016 9th Int Congress on Image and Signal Processing, BioMedical Engineering and Informatics (CISP-BMEI). Piscataway, NJ: IEEE, 2016: 1959−1963

    [109]

    Pang Yulei, Xue Xiaozhen, Wang Huaying. Predicting vulnerable software components through deep neural network[C]//Proc of the 2017 Int Conf on Deep Learning Technologies. New York: ACM, 2017: 6−10

    [110]

    Dam H K, Tran T, Pham T, et al. Automatic feature learning for predicting vulnerable software components[J]. IEEE Transactions on Software Engineering, 2018, 47(1): 67−85

    [111]

    Kalouptsoglou I, Siavvas M, Kehagias D, et al. An empirical evaluation of the usefulness of word embedding techniques indeep learning-based vulnerability prediction[C]//Proc of Int ISCIS Security Workshop. Berlin: Springer, 2022: 23−37

    [112] 马倩华. 基于深度学习的软件源码漏洞预测[D]. 北京: 北京邮电大学, 2020

    Ma Qianhua. Deep learning-based software vulnerability prediction[D]. Beijing: Beijing University of Posts and Telecommunications, 2020 (in Chinese)

    [113]

    Zhou Yaqin, Liu Shangqing, Siow J, et al. Devign: Effective vulnerability identification by learning comprehensive program semantics via graph neural networks[C]//Proc of 33rd Conf on Neural Information Processing Systems (NeurIPS). San Diego, CA, USA: NIPS, 2019: 10197−10207

    [114]

    Li Zhen, Zou Deqing, Xu Shouhuai, et al. SySeVR: A framework for using deep learning to detect software vulnerabilities[J]. IEEE Transactions on Dependable and Secure Computing, 2021, 19(4): 2244−2258

    [115]

    Li Yi, Wang Shouhua, Nguyen T N. Vulnerability detection with fine-grained interpretations[C]//Proc of the 29th ACM Joint Meeting on European Software Engineering Conf and Symp on the Foundations of Software Engineering. New York: ACM, 2021: 292−303

    [116]

    Fu M, Tantithamthavorn C. LineVul: A transformer-based line-level vulnerability prediction[C]//Proc of 2022 IEEE/ACM 19th Int Conf on Mining Software Repositories (MSR). Piscataway, NJ: IEEE, 2022: 608−620

    [117]

    Shin Y, Williams L. Is complexity really the enemy of software security?[C]//Proc of the 4th ACM Workshop on Quality of Protection. New York: ACM, 2008: 47−50

    [118]

    Viega J, McGraw G R. Building Secure Software: How to Avoid Security Problems the Right Way, Portable Documents[M]. London: Pearson Education, 2001

    [119] 高志伟,姚尧,饶飞,等. 基于漏洞严重程度分类的漏洞预测模型[J]. 电子学报,2013,41(9):1784−1787 doi: 10.3969/j.issn.0372-2112.2013.09.018

    Gao Zhiwei, Yao Yao, Rao Fei, et al. Prediction model of vulnerabilities based on the type of vulnerability severity[J]. Acta Electronica Sinica, 2013, 41(9): 1784−1787 (in Chinese) doi: 10.3969/j.issn.0372-2112.2013.09.018

    [120]

    Pan Zhixin, Mishra P. A survey on hardware vulnerability analysis using machine learning[J]. IEEE Access, 2022, 10: 49508−49527 doi: 10.1109/ACCESS.2022.3173287

    [121]

    Palix N, Thomas G, Saha S, et al. Faults in Linux: Ten years later[C]//Proc of the 16th Int Conf on Architectural Support for Programming Languages and Operating Systems. New York: ACM, 2011: 305−318

    [122]

    Zimmermann T, Nagappan N, Williams L. Searching for a needle in a haystack: Predicting security vulnerabilities for windows vista[C]//Proc of 2010 3rd Int Conf on Software Testing, Verification and Validation. Piscataway, NJ: IEEE, 2010: 421−428

    [123]

    Shin Y, Williams L A. Can fault prediction models and metrics be used for vulnerability prediction?[R]. North Carolina, USA: North Carolina State University, Department of Computer Science, 2010

    [124]

    Shin Y, Williams L. Can traditional fault prediction models be used for vulnerability prediction?[J]. Empirical Software Engineering, 2013, 18(1): 25−59 doi: 10.1007/s10664-011-9190-8

  • 期刊类型引用(4)

    1. 贾乃征,薛灿,杨骝,王智. 基于融合集成学习的鲁棒近超声室内定位方法. 计算机研究与发展. 2025(02): 488-502 . 本站查看
    2. 马安佳. 数智化背景下城市交通规划研究. 办公自动化. 2024(10): 8-10 . 百度学术
    3. 陈文海,黄智华,周雅欣. 基于边缘计算的继电保护海量数据轻量级传输优化方法. 电气技术与经济. 2024(06): 294-296 . 百度学术
    4. 冯国富,刘桂,王娟. 边-云计算中一种结合服务产生的服务部署策略. 中南大学学报(自然科学版). 2024(07): 2578-2587 . 百度学术

    其他类型引用(2)

图(7)  /  表(11)
计量
  • 文章访问数:  663
  • HTML全文浏览量:  104
  • PDF下载量:  291
  • 被引次数: 6
出版历程
  • 收稿日期:  2023-03-29
  • 修回日期:  2023-06-05
  • 网络出版日期:  2023-07-04
  • 刊出日期:  2023-06-30

目录

/

返回文章
返回