论文题目:Bag-of-local-features Model for Multi-modal Face Anti-spoofing
论文地址:FaceBagNet
代码地址:https://github.com/SeuTao/CVPR19-Face-Anti-spoofing

摘要

人脸反欺骗检测是人脸生物识别系统中的一个重要环节。最新的(SOTA)基于卷积神经网络(CNNs)的方法在该领域取得了良好的效果。然而,以前的工作集中在单一的模态数据和数量有限的数据。最近发布的CASIA-SURF数据集是最大的数据集,包含1000名受试者和21000个视频剪辑,有3种模态(RGB、Depth和IR)。在本文中,我们提出了一个称为FaceBagNet的多流CNN架构来充分利用这一数据。FaceBagNet的输入是patch-level图像,有助于提取特定于欺骗的判别信息。此外,为了防止过拟合和更好地学习融合特征,我们在多模态特征上设计了模态特征擦除(Model Feature Erasing,MFE)操作,在训练过程中擦除随机选择的一个模态特征。我们的方法在CVPR 2019 ChaLearn Face Anti-spoofing攻击检测挑战中获得第二名。我们最终提交的成绩是99.8052% (TPR@FPR = 10e-4)。

1. 引言

人脸图像是最容易获得的生物特征模态,用于高精度的人脸识别系统,但它容易受到许多不同类型的呈现攻击[7,1]。因此,人脸反欺骗是计算机视觉领域的一个重要任务,其在人脸识别系统中的应用引起了人们的广泛关注[20,24,6]。它的目的是确定捕捉到的脸是否真实。
       对于传统的方法,大多数研究者使用手工制作的特征,如LBP[19,29,6,17], HoG [29], SIFT[21], SURF和DoG[13]来学习真实人脸和假的人脸之间不同的特征分布。Boulkenafet等人[3]使用LBP特征来表征颜色-纹理。利用支持向量机(SVM)对这些颜色纹理特征向量进行分类。
       最近,在人脸呈现攻击检测(PAD)社区中提出了基于cnn的方法[9,22]。他们将PAD视为一个二元分类问题。一些研究人员将CNN作为特征提取器[21],提取有区别的特征来区分真实和欺骗。Yang等人[28]提出了一种与ImageNet具有相同架构的CNN。Atoum等人[18]比较了三种不同CNN架构的性能,分别是:Inception-v3[23]和两个版本的ResNet[10],即ResNet50(一个50层的ResNet)和ResNet152(152层版本)。[2]在面部解锁系统中采用了基于patch和基于深度的CNN的集成。Feng等人[9]提出使用多个线索作为CNN输入进行真/假分类。在[25]中,Tu等人提出了一种LSTM-CNN架构,对视频的多帧进行联合预测。
       所有这些方法都证明了CNNs[28, 16, 12]通过自动从训练数据中提取有用的特征,可以非常有效地用于人脸反欺骗。不幸的是,现有的人脸反欺骗数据集数量有限[31,6,4],这大大降低了这些方法的泛化能力。以往发表的著作主要基于这些数据集,很难满足实际应用的要求。最近发表的CASIA-SURF[30,15]数据集包括1000名受试者和21000个视频剪辑,有3种模态(RGB、Depth和IR)。从受试者数量和视频数量来看,该数据集是最大的人脸反欺骗干扰数据集。利用CASIA-SURF[30,15]数据集,我们设计了一种基于图像patches的多流网络来对多模态人脸图像进行分类。我们的方法的动机是BagNets[5],它通过使用小的局部图像patchs分类图像。虽然这种策略忽略了一些空间信息,但在ImageNet上却达到了令人惊讶的高精度。本文的主要工作和贡献如下:
       (1)一种基于patch的特征学习方法。该方法基于局部小特征的出现对人脸图像进行分类,具有较强的分类性能。
       (2)一种多流的模态特征擦除(Model Feature Erasing,MFE)式融合方法,该方法整合了子特征所涉及的多种信息。结果表明,该方法是一种有效的多模态人脸反欺骗方法。

2. 相关工作

现有的人脸反欺骗方法一般可分为两类:(1)传统的人脸反欺骗方法;(2)基于CNN的人脸反欺骗方法。
       (1)传统的人脸抗欺骗方法:以往的很多工作都是利用手工制作的特征,如LBP、HoG、SIFT和SURF,通常采用传统的分类器,如SVM和LDA。为了克服光照变化的影响,Zhang等人利用多个DoG滤波器去除噪声和低频信息。他们使用SVM分类器来区分真脸和假脸。佩雷拉等[8]使用空间和时间描述符来编码丰富的信息。Chingovska等[6]使用LBP描述符从灰度图像中提取判别特征,然后使用3个分类器将其作为分类问题进行处理。由于传统的方法对不同的光照、姿态和特定的身份敏感,这些方法不能捕捉到判别表示,泛化能力较差。
       (2)基于CNN的人脸抗欺骗方法:近年来,在目标检测、图像分类、图像字幕和语义分割等视觉信息处理领域,CNN已经被证明是一种有效的方法。因此,CNN被广泛应用于人脸反欺骗和活体检测。Atoum等[27]提出了基于双流CNN的人脸反欺骗方法,包括基于patch和基于深度的方法。Li等人[14]提取特征,应用主成分分析提高人脸识别系统的鲁棒性。在[9]中,Feng等人设计了不同的人脸图像,将其输入CNN,然后直接对人脸是否真实进行分类。在[14]中,Li等人通过人脸反欺骗数据集对CNN进行了微调,并取得了较高的性能。在[27]中,Xu等人首先引入了人脸反欺骗区域的LSTM,他们都使用了可以在LSTM单元中学习和排序的局部特征和时间特征。Liu等人[16]设计了一种网络架构,将深度图和rPPG信号作为监督,以提高泛化能力。Amin等人[12]通过将欺骗人脸反分解为真实人脸和欺骗噪声模式,提出了一种解决人脸反欺骗的新视角。
       总的来说,以前的方法将人脸抗欺骗作为一个二值分类问题,由于对训练数据过拟合而不能很好地泛化。在[5]中,Brendel等人从输入图像中提取了patch特征,在数据集上取得了显著的改进。这项工作使我们认识到,我们需要涉及到局部特征,以解决人脸反欺骗问题。

3. 方法

3.1 整体架构

在这项工作中,我们提出了一种多流(multii-stream)的具有模态特征擦除(Model Feature Erasing,MFE)CNN架构,称为FaceBagNet,用于多模态人脸反欺骗检测。该方法由两个部分组成,(1)基于patch的特征学习,(2)多流模态擦除式融合。对于基于patch的特征学习,我们使用从人脸图像中随机提取的patch训练深度神经网络来学习丰富的外观特征。在多流融合中,在训练过程中随机去除不同模态的特征,然后进行融合分类。图1展示了三个流的high-level图,以及用于组合它们的融合策略。

3.2 基于patch的特征学习

在整个人脸区域中存在欺骗特有的判别信息。因此,我们可以使用patch级图像强制CNN提取这些信息。通常基于patch的方法将全脸分割成几个固定的不重叠区域。然后每个patch用来训练一个独立的子网络。在本文中,对于每个模态,我们在从人脸提取的随机小块上训练一个单一的CNN。我们使用自己设计的ResNext[26]网络来提取深度特征。该网络由五组卷积块、一个全局平均池化层和一个softmax层组成。表1给出了网络的层次结构,即卷积核的大小、输出特征图的数量、groups的数量,以及stride的大小。我们的实验表明,基于patch的特征在不同的攻击中具有高度的区别性。在实验部分,将会给出比较不同大小patch的定量结果。

3.3 多流的模态特征擦除式融合

由于不同模态的特征分布是不同的,所提出的模型也努力利用不同模态之间的相互依赖性。如图1所示,我们使用一个包含三个子网络的多流架构来进行多模态特征融合。我们在第三个卷积块(res3)之后连接三个子网络的特征图。
       正如[30]中所研究的,直接连接每个子网络的特征并不能充分利用不同模态之间的特征。为了防止过拟合和更好地学习融合特征,我们设计了一种多模态特征擦除操作。对于一个batch的输入,连接的特征张量由三个子网络计算。在训练期间,一个随机选择的模态子网络的特征被擦除,并且被擦除的区域被设置为0。融合网络从头开始训练,同时将RGB、Depth和IR数据分别输入到每个子网络中。

4. 实验

4.1 数据集和评价指标

CASIA-SURF[30,15]数据集是目前最大的人脸反欺骗干扰数据集,它包括RGB、Depth和IR三种模式,如图2所示。这个数据集包含1000个中国人的21000个视频,每个样本包含在不同的攻击方式下1个实时视频剪辑,6个假视频剪辑。数据集由6次攻击生成。在不同的攻击方式下,眼睛,鼻子,嘴巴区域或它们的组合被移除。除了脸部区域,复杂的背景从原始视频中移除。数据集分为训练集、验证集和测试集。训练集、验证集和测试集分别有300、100和600个受试者。三个模态图像被裁剪和对齐。本数据集中RGB图像的分辨率为1280×720,Depth、IR和对齐图像的分辨率为640×480。它是人脸反欺骗领域中最具挑战性的数据集。

训练后,使用攻击表现分类错误率(APCER),正常表现分类错误率(NPCER)然后计算平均分类错误率(ACER)统计数据作为我们所提出模型的评估结果。根据实际应用的需要,使用受试者操作特性(ROC)来选择阈值,以权衡假阳性率(FPR)和真阳性率(TPR)。

4.2 实现细节

完整的人脸图像大小调整为112×112。我们使用随机翻转、旋转、调整大小、裁剪来增强数据。从112×112大小的人脸图像中随机提取Patches。所有模型都使用Titan X(Pascal) GPU进行训练,batch size大小为512。我们使用随机梯度下降(SGD)优化器与周期余弦退火调整学习率[11]。整个训练过程有250个epoch,大约需要3个小时。weight decay和momentum分别设置为0.0005和0.9,使用Pytorch作为深度学习框架。

4.3 实验结果

为了评估我们提出的模型的有效性,我们设计了几个不同构型的实验来进行比较。对比实验细节如下:
       (1)Patch大小和模态的影响:在这个设置中,我们在我们的模型中使用不同的Patch大小,即16×16, 32×32, 48×48和64×64。为了比较性能,所有的模型都用9个不重叠的图像块和4个翻转输入进行了36次推断。如表3所示,对于单模态输入,三种模态中,深度数据表现最好,为0.8% (ACER), TPR=99.3% @FPR=10e-4。具体地说,融合所有三种模式在所有patch大小上都有很强的性能。结果表明,采用融合模态的方法取得了较好的效果。

(2)模态特征擦除的效果和训练策略:我们研究了随机模态特征擦除和训练策略对人脸抗欺骗模型性能的影响。“w.o CLR”表示我们使用带有标准衰减学习率计划的常规SGD训练直到收敛,而不是使用周期学习率。“w.o MFE”表示不应用随机模态特征擦除。如表4所示,周期学习率和随机模态特征擦除策略对于实现高性能都是至关重要的。在对融合模型进行训练后,我们从一个模态中删除特征,然后对其性能进行评估。我们对训练后的融合模型进行了单模态特征擦除的性能评估。在表4中,从验证得分可以得出结论,可以学习不同模式之间的互补性,以获得更好的结果。

(3)在ChaLearn Face Antispoofing attack detection challenge中,与其他团队相比:我们最终提交的是三个模型在不同patch大小(32×32, 48×48和64×64)下的输出的集成的结果,最终排名第二。我们是唯一一个没有使用整张人脸图像作为模型输入的团队。FN = 1的结果表明,我们的基于patch的学习方法通过与其他排名靠前的团队进行比较,可以有效防止模型将真实人脸误分类为攻击人脸。如表2所示,前三名团队在测试集上的结果明显优于其他团队。特别是我们团队的TPR@FPR=10e4值与VisionLabs比较接近。然而,VisionLabs应用了大量来自其他任务的数据来预训练模型,而我们的团队只使用了一个单阶段和端到端的训练策略。因此,证明了我们的解决方案的优越性。

5. 结论

本文提出了一种基于Bag-of-local-features的人脸反欺骗网络(FaceBagNet)来判断捕获的多模态人脸图像是否真实。采用基于patch的特征学习方法提取判别信息。采用MFE层的多流融合技术提高了性能。研究表明,基于patch的特征学习方法和基于MFE的多流融合方法都是有效的人脸反欺骗方法。总体而言,我们的解决方案简单有效,易于在实际应用场景中使用。因此,我们的方法在CVPR 2019 ChaLearn Face Anti-spoofing attack detection challenge中获得第二名。在测试机上我们最终提交的成绩是99.8052% (TPR@FPR = 10e-4)。

参考文献

[1] A. Alotaibi and A. Mahmood. Deep face liveness detection based on nonlinear diffusion using convolution neural network. Signal, Image and Video Processing, 11(4):713–720,2017.
[2] Y . Atoum, Y . Liu, A. Jourabloo, and X. Liu. Face anti-spoofing using patch and depth-based cnns. In 2017 IEEE International Joint Conference on Biometrics, IJCB 2017,Denver , CO, USA, October 1-4, 2017, pages 319–328, 2017.
[3] P . L. Bartlett, F. C. N. Pereira, C. J. C. Burges, L. Bottou, and K. Q. Weinberger, editors. Advances in Neural Information Processing Systems 25: 26th Annual Conference on Neural Information Processing Systems 2012. Proceedings of a meeting held December 3-6, 2012, Lake Tahoe, Nevada, United States, 2012.
[4] Z. Boulkenafet, J. Komulainen, L. Li, X. Feng, and A. Hadid. OULU-NPU: A mobile face presentation attack database with real-world variations. In 12th IEEE International Conference on Automatic Face & Gesture Recognition, FG 2017,Washington, DC, USA, May 30 - June 3, 2017, pages 612–618, 2017.
[5] W. Brendel and M. Bethge. Approximating cnns with bag-of-local-features models works surprisingly well on imagenet. International Conference on Learning Representations, 2019.
[6] I. Chingovska, A. Anjos, and S. Marcel. On the effectiveness of local binary patterns in face anti-spoofing. In 2012 BIOSIG-Proceedings of the International Conference of Biometrics Special Interest Group, Darmstadt, Germany, September 6-7, 2012, pages 1–7, 2012.
[7] A. da Silva Pinto, W. R. Schwartz, H. Pedrini, and A. de Rezende Rocha. Using visual rhythms for detecting video-based facial spoof attacks. IEEE Trans. Information F orensics and Security, 10(5):1025–1038, 2015.
[8] T. de Freitas Pereira, A. Anjos, J. M. D. Martino, and S. Marcel. LBP - TOP based countermeasure against face spoofing attacks. In Computer Vision - ACCV 2012 Workshops - ACCV 2012 International Workshops, Daejeon, Korea, November 5-6, 2012, Revised Selected Papers, Part I, pages 121–132, 2012.
[9] L. Feng, L. Po, Y . Li, X. Xu, F. Y uan, T. C. Cheung, and K. Cheung. Integration of image quality and motion cues for face anti-spoofing: A neural network approach. J. Visual Communication and Image Representation, 38:451–460, 2016.
[10] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In 2016 IEEE Conference on Computer Vision and Pattern Recognition, CVPR 2016, Las V egas, NV , USA, June 27-30, 2016, pages 770–778, 2016.
[11] G. Huang, Y . Li, G. Pleiss, Z. Liu, J. E. Hopcroft, and K. Q. Weinberger. Snapshot ensembles: Train 1, get M for free. In 5th International Conference on Learning Representations, ICLR 2017, Toulon, France, April 24-26, 2017, Conference Track Proceedings, 2017.
[12] A. Jourabloo, Y . Liu, and X. Liu. Face de-spoofing: Anti-spoofing via noise modeling. In Computer Vision - ECCV 2018 - 15th European Conference, Munich, Germany, September 8-14, 2018, Proceedings, Part XIII, pages 297–315, 2018.
[13] W. Kim, S. Suh, and J. Han. Face liveness detection from a single image via diffusion speed model. IEEE Trans. Image Processing, 24(8):2456–2465, 2015.
[14] L. Li, X. Feng, Z. Boulkenafet, Z. Xia, M. Li, and A. Ha-did. An original face anti-spoofing approach using partial convolutional neural network. In Sixth International Conference on Image Processing Theory, Tools and Applications,IPTA 2016, Oulu, Finland, December 12-15, 2016, pages 1–6, 2016.
[15] A. Liu, J. Wan, S. Escalera, H. J. Escalante, Z. Tan, Q. Y uan, K. Wang, G. Guo, I. Guyon, and S. Z. Li. Multi-modal face anti-spoong attack detection challenge at cvpr2019. CVPR workshop, 2019.
[16] Y . Liu, A. Jourabloo, and X. Liu. Learning deep models for face anti-spoofing: Binary or auxiliary supervision. CoRR, abs/1803.11097, 2018.
[17] J. Määttä, A. Hadid, and M. Pietikäinen. Face spoofing detection from single images using texture and local shape analysis. IET Biometrics, 1(1):3–10, 2012.
[18] C. Nagpal and S. R. Dubey. A performance evaluation of convolutional neural networks for face anti spoofing. CoRR,
abs/1805.04176, 2018.
[19] T. Ojala, M. Pietikäinen, and T. Mäenpää. Multiresolution gray-scale and rotation invariant texture classification with local binary patterns. IEEE Trans. Pattern Anal. Mach. Intell., 24(7):971–987, 2002.
[20] G. Pan, L. Sun, Z. Wu, and S. Lao. Eyeblink-based anti-spoofing in face recognition from a generic webcamera. In
IEEE 11th International Conference on Computer Vision, ICCV 2007, Rio de Janeiro, Brazil, October 14-20, 2007, pages 1–8, 2007.
[21] K. Patel, H. Han, and A. K. Jain. Secure face unlock: Spoof detection on smartphones. IEEE Trans. Information Forensics and Security, 11(10):2268–2283, 2016.
[22] K. Patel, H. Han, and A. K. Jain. Secure face unlock: Spoof detection on smartphones. IEEE Trans. Information Forensics and Security, 11(10):2268–2283, 2016.
[23] C. Szegedy, V . V anhoucke, S. Ioffe, J. Shlens, and Z. Wojna. Rethinking the inception architecture for computer vision. In 2016 IEEE Conference on Computer Vision and Pattern Recognition, CVPR 2016, Las V egas, NV , USA, June 27-30, 2016, pages 2818–2826, 2016.
[24] X. Tan, Y . Li, J. Liu, and L. Jiang. Face liveness detection from a single image with sparse low rank bilinear discriminative model. In Computer Vision - ECCV 2010 - 11th European Conference on Computer Vision, Heraklion, Crete, Greece, September 5-11, 2010, Proceedings, Part VI, pages 504–517, 2010.
[25] X. Tu, H. Zhang, M. Xie, Y . Luo, Y . Zhang, and Z. Ma.Enhance the motion cues for face anti-spoofing using CNN-LSTM architecture. CoRR, abs/1901.05635, 2019.
[26] S. Xie, R. B. Girshick, P . Dollár, Z. Tu, and K. He. Aggregated residual transformations for deep neural networks. In 2017 IEEE Conference on Computer Vision and Pattern Recognition, CVPR 2017, Honolulu, HI, USA, July 21-26, 2017, pages 5987–5995, 2017.
[27] Z. Xu, S. Li, and W. Deng. Learning temporal features using LSTM-CNN architecture for face anti-spoofing. In 3rd IAPR Asian Conference on Pattern Recognition, ACPR 2015, Kuala Lumpur , Malaysia, November 3-6, 2015, pages 141–
145, 2015.
[28] J. Y ang, Z. Lei, and S. Z. Li. Learn convolutional neural network for face anti-spoofing. CoRR, abs/1408.5601, 2014.
[29] J. Y ang, Z. Lei, S. Liao, and S. Z. Li. Face liveness detection with component dependent descriptor. In International Conference on Biometrics, ICB 2013, 4-7 June, 2013, Madrid, Spain, pages 1–6, 2013.
[30] S. Zhang, X. Wang, A. Liu, C. Zhao, J. Wan, S. Escalera, H. Shi, Z. Wang, and S. Z. Li. CASIA-SURF: A dataset and benchmark for large-scale multi-modal face anti-spoofing. CVPR, 2019.
[31] Z. Zhang, J. Y an, S. Liu, Z. Lei, D. Yi, and S. Z. Li. A face antispoofing database with diverse attacks. In 5th IAPR International Conference on Biometrics, ICB 2012, New Delhi, India, March 29 - April 1, 2012, pages 26–31, 2012.

【活体人脸识别】FaceBagNet论文翻译详解相关推荐

  1. 人脸识别算法原理过程详解

    本文为转载内容,由于找不到源作者链接,故特此说明. 人脸识别各算法详解 最近,由于工作需要,为了找到一款高效的人脸识别算法,对各种人脸识别算法都研究了一番,以下记录的是各算法的理论基础. 一.MTCN ...

  2. 【人脸识别】L2_Softmax Loss详解

    论文题目:<L2-constrained Softmax Loss for Discriminative Face Verification> 论文地址:https://arxiv.org ...

  3. 人脸识别:arcFace Loss详解

    论文链接:ArcFace: Additive Angular Margin Loss for Deep Face Recognition  作者开源代码:https://github.com/deep ...

  4. YOLOv2论文翻译详解

    YOLO9000:Better, Faster, Stronger 论文地址:代码地址 摘要: We introduce YOLO9000, a state-of-the-art, real-time ...

  5. 【人脸识别】Center Loss详解

    论文题目:<A Discriminative Feature Learning Approach for Deep Face Recognition> 论文地址:http://ydwen. ...

  6. SIFT特征点提取及描述论文算法详解

    SIFT特征点提取及描述论文算法详解 1. 尺度空间极值检测(Scale-space extrema detection) 1.1 尺度空间和极值 1.2 DoG和LoG的关系 1.3 构建高斯尺度差 ...

  7. android动态贴纸实现原理,人脸动态贴纸sdk算法详解,人脸动态贴纸功能如何实现...

    原标题:人脸动态贴纸sdk算法详解,人脸动态贴纸功能如何实现 泛娱乐行业在互联网领域中发展趋势逐渐增强,而直播.短视频.视频社交等作为头部产品受到了众多用户的关注和喜爱.为了能够更好的满足用户体验,众 ...

  8. AidLux “人脸测试”案例源码详解

    "人脸检测"案例源码详解 testface.py用于进行人脸检测 构建APP框架和添加主要控件 人脸关键点识别的方法 打开人脸测试案例 1.在VScode中进入代码编辑状态. 2. ...

  9. 人脸识别系统设计 -- 基于J2判据和FLDA的多分类器的人脸识别系统设计论文报告(三)(附matlab)

    目录 4 数据提取算法 4.1 数据提取目的 4.2 数据提取算法 5 交叉验证 5.1 交叉验证原理 A.交叉验证 B.交叉验证的用途 C.K-folds cross validation 5.2 ...

  10. 百度AI图片识别亲测成功详解

    百度AI图片识别亲测成功详解 1.浏览器输入网址http://ai.baidu.com/或者百度一下搜索'百度ai'点击第一个. 2.点击控制台,有百度账号的直接登录,没有的注册后登录. 3.点击左侧 ...

最新文章

  1. python爬虫天气实例scrapy_python爬虫之利用scrapy框架抓取新浪天气数据
  2. python输出特别的矩阵
  3. 在Mono/Linux上使用PerformanceCounter
  4. 漫谈C++ Builder多线程编程技术
  5. linux 历史命令列表,fc – 显示历史列表中的命令或修改指定的历史命令并执行。 - Linux 命令大全...
  6. 从知识图谱到文本:结合局部和全局图信息生成更高质量的文本
  7. 比较Java 8中的命令式和功能性算法
  8. python椭圆曲线加密_如何理解椭圆曲线加密并对其进行编码
  9. Silverlight在IE中无法显示但在Firefox中正常的原因和解决办法
  10. linux 各文件夹的作用
  11. 单片机破解方法(摘录)
  12. 蓝桥杯-算法训练 印章
  13. 计组_定点数一位乘_布斯公式
  14. Java zip解压工具类
  15. sws_getContext和sws_scale分析
  16. 理财收益天基实业选择投资理财快速改变人生轨迹
  17. 通用引用、引用折叠与完美转发问题
  18. Java实现简单的图书管理系统(讲解清晰,代码齐全,能正常运行)
  19. Bruker AXS布鲁克衍射仪电源维修XRD高压发生器维修概述
  20. CLRS 13.3插入

热门文章

  1. 论文笔记——分布式深度学习框架下基于性能感知的DBS—SGD算法
  2. 运筹优化(五)--线性规划之内点法
  3. Windows下本地安装SVN客户端
  4. ASPICE总结2——软件详细设计与软件测试过程
  5. WiFi基础知识解析
  6. FIT2CLOUD混合云管理平台实现可扩展架构升级
  7. tcpdf html 支持css吗,TCPDF - 内部css无效
  8. 重邮数据结构实验课全部代码目录
  9. 【Pytorch教程】:激励函数
  10. Makefile编写实例