文章目录

  • Kernel Density (KD)
  • Local Intrinsic Dimensionality (LID)
  • Gaussian Discriminant Analysis (GDA)
  • Gaussian Mixture Model (GMM)
  • SelectiveNet
  • Combined Abstention Robustness Learning (CARL)
    • Adversarial Training with a Rejection Option
  • Energy-based Out-of-distribution Detection
  • Confidence-Calibrated Adversarial Training: Generalizing to Unseen Attacks (CCAT)

Kernel Density (KD)

Feinman R., Curtin R. R., Shintre S. and Gardner A. B. Detecting Adversarial Samples from Artifacts. arXiv preprint arXiv:1703.00410, 2017.

原文代码

作者认为普通样本的特征和对抗样本的特征位于不同的流形中, 故可以通过密度估计的方法, 估计出普通样本的密度函数, 然后求得样本各自的置信度, 选择合适的阈值(通过ROC-AUC之类的), 便有了区分普通样本和对抗样本的方法.

假设
z = h ( x ) ∈ R d . z = h(x) \in \mathbb{R}^d. z=h(x)∈Rd.
为将样本 x x x提取为特征 z z z

  1. 选取合适的样本数目 x 1 , ⋯ , x N x_1, \cdots, x_N x1​,⋯,xN​;
  2. 提取特征 z 1 , ⋯ , z N z_1, \cdots, z_N z1​,⋯,zN​;
  3. 构建核密度估计函数:
    f ^ ( x ) = 1 N ∑ i = 1 N k σ ( z i , h ( x ) ) , k σ ( z , z ′ ) = 1 ( 2 π ) d 2 σ d exp ⁡ ( − ∥ z ′ − z ∥ 2 2 σ 2 ) . \hat{f}(x) = \frac{1}{N} \sum_{i=1}^N k_{\sigma}(z_i, h(x)), \\ k_{\sigma}(z, z') = \frac{1}{(2\pi)^{\frac{d}{2}}\sigma^d}\exp (-\frac{\|z' - z\|^2}{2\sigma^2}). f^​(x)=N1​i=1∑N​kσ​(zi​,h(x)),kσ​(z,z′)=(2π)2d​σd1​exp(−2σ2∥z′−z∥2​).

选择合适的阈值 t t t, 对于样本 x x x, 判定其为对抗样本, 若 f ^ ( x ) < t \hat{f}(x) < t f^​(x)<t.

有些时候, 可以对每一类构建一个 f ^ ( x ) \hat{f}(x) f^​(x), 但这个情况也就只能用在ROC-AUC了.

Local Intrinsic Dimensionality (LID)

LID

Gaussian Discriminant Analysis (GDA)

Lee K., Lee K., Lee H. and Shin J. A simple unified framework for detecting out-of-distribution samples and adversarial attacks. In Advances in Neural Information Processing Systems (NIPS), 2018.

原文代码

作者假设特征 z = h ( x ) z=h(x) z=h(x)(所属类别为 c c c)满足后验分布:
z ∣ y = c ∼ N ( μ c , Σ ) , z|y=c \sim \mathcal{N}(\mu_c, \Sigma), z∣y=c∼N(μc​,Σ),

p ( h ( x ) ∣ y = c ) = N ( h ( x ) ∣ μ c , Σ ) , p(h(x)|y=c) = \mathcal{N}(h(x)|\mu_c, \Sigma), p(h(x)∣y=c)=N(h(x)∣μc​,Σ),
注意到对于不同的 c c c, 协方差矩阵 Σ \Sigma Σ是一致的(这个假设是为了便于直接用于分类, 但是与detection无关, 便不多赘述).

均值和协方差矩阵通过如下方式估计:
μ ^ c = 1 N c ∑ i : y i = c h ( x i ) , Σ ^ = 1 N ∑ c ∑ i : y i = c ( h ( x i ) − μ ^ c ) ( h ( x i ) − μ ^ c ) T . \hat{\mu}_c = \frac{1}{N_c} \sum_{i:y_i=c}h(x_i), \: \widehat{\Sigma} = \frac{1}{N}\sum_c \sum_{i:y_i=c}(h(x_i) - \hat{\mu}_c) (h(x_i) - \hat{\mu}_c)^T. μ^​c​=Nc​1​i:yi​=c∑​h(xi​),Σ =N1​c∑​i:yi​=c∑​(h(xi​)−μ^​c​)(h(xi​)−μ^​c​)T.

故可以用
f ^ ( x ) : = max ⁡ c N ( h ( x ) ∣ μ ^ c , Σ ^ ) , \hat{f}(x) := \max_c \mathcal{N}(h(x)| \hat{\mu}_c, \widehat{\Sigma}), f^​(x):=cmax​N(h(x)∣μ^​c​,Σ ),
来区分 x x x是否为abnormal的样本(对抗的或者偏离训练分布的样本).

在文中用的是log化(且去掉比例系数)的指标:
M ( x ) = max ⁡ c − ( h ( x ) − μ ^ c ) T Σ ^ ( h ( x ) − μ ^ c ) . M(x) = \max_c -(h(x) - \hat{\mu}_c)^T \widehat{\Sigma}(h(x) - \hat{\mu}_c). M(x)=cmax​−(h(x)−μ^​c​)TΣ (h(x)−μ^​c​).

改方法可以进一步拓展(实际上光用这个指标看实验结果似乎并不理想):

  1. Input pre-processing:

对于输入的样本进行如下变换:
x ^ = x + ϵ s i g n ( ∇ x M ( x ) ) . \hat{x} = x + \epsilon \mathrm{sign}(\nabla_x M(x)). x^=x+ϵsign(∇x​M(x)).
有点像fgsm生成对抗样本, 但感觉这么做的原因是让 f ^ ( x ) \hat{f}(x) f^​(x)之间的区别大一点.

  1. Feature ensemble:

即对不同层的特征 h l ( x ) h_l(x) hl​(x)都进行如上的操作, 然后得到 f ^ 1 , ⋯ , f ^ L \hat{f}_1, \cdots, \hat{f}_L f^​1​,⋯,f^​L​, 并通过SVM来训练得到权重 α l \alpha_l αl​, 最后的score为
∑ l α f ^ l ( x ) . \sum_l \alpha \hat{f}_l(x). l∑​αf^​l​(x).

注: 文中实际为 M l ( x ) M_l(x) Ml​(x).

Gaussian Mixture Model (GMM)

Zheng Z. and Hong P. Robust detection of adversarial attacks by modeling the intrinsic properties of deep neural networks. In Advances in Neural Information Processing Systems (NIPS), 2018.

类似的, 对于特征 z = h ( x ) z=h(x) z=h(x), 假设其服从GMM:
p ( h ( x ) ∣ y = c ; θ ) = ∑ k = 1 K w i N ( h ( x ) ∣ μ c k , Σ c k ) , p(h(x)|y=c;\theta) = \sum_{k=1}^K w_i \mathcal{N}(h(x)|\mu_{ck}, \Sigma_{ck}), p(h(x)∣y=c;θ)=k=1∑K​wi​N(h(x)∣μck​,Σck​),
并用EM算法来估计.

注: 对每一个类别都需要估计一个GMM模型.

于是
f ^ c ( x ) = p ( h ( x ) ∣ y = c ; θ ) , \hat{f}_c(x) = p(h(x)|y=c;\theta), f^​c​(x)=p(h(x)∣y=c;θ),
当其小于给定的threshold的时候, 便认为其不属于类别 c c c.

问: 所以当所有的 c c c都被拒绝的时候, 就可以认为是对抗样本了?

SelectiveNet

Geilman Y., El-Yaniv R. SelectiveNet: A deep neural network with an integrated reject option. In International Conference on Machine Learning (ICML), 2019.

原文代码

本文的模型解释起来有点复杂, 在一个普通的判别网络 f f f的基础上:
( f , g ) ( x ) : = { f ( x ) if  g ( x ) = 1 , don’t know if  g ( x ) = 0. (f, g)(x) := \left \{ \begin{array}{ll} f(x) & \text{if } g(x) = 1, \\ \text{don't know} & \text{if } g(x) = 0. \end{array} \right . (f,g)(x):={f(x)don’t know​if g(x)=1,if g(x)=0.​
其中 g g g是一个用来选择是否判断的模块.
作者给出了两个指标:

Coverage:
ϕ ( g ) : = E P [ g ( x ) ] , \phi(g) := E_P [g(x)], ϕ(g):=EP​[g(x)],
以及
Selective Risk:
R ( f , g ) : = E P [ ℓ ( f ( x ) , y ) g ( x ) ] ϕ ( g ) . R(f, g) := \frac{E_P[\ell(f(x), y) g(x)]}{\phi(g)}. R(f,g):=ϕ(g)EP​[ℓ(f(x),y)g(x)]​.
Coverage不能太低, 因为如果全部拒绝判断模型就没有意义了, 然后 R ( f , g ) R(f, g) R(f,g)自然是越低越好, 但是注意到, 虽然一味拒绝回答能够使得分子接近0, 但是分母也会接近0, 所以需要一个平衡.
二者的经验估计如下:
r ^ ( f , g ∣ S N ) : = 1 N ∑ i = 1 N ℓ ( f ( x i ) , y i ) g ( x i ) ϕ ( g ∣ S N ) , ϕ ( g ∣ S N ) : = 1 N ∑ i = 1 N g ( x i ) . \hat{r}(f,g|S_N) := \frac{\frac{1}{N}\sum_{i=1}^N \ell(f(x_i), y_i)g(x_i)}{\phi(g|S_N)}, \\ \phi(g|S_N):= \frac{1}{N}\sum_{i=1}^N g(x_i). r^(f,g∣SN​):=ϕ(g∣SN​)N1​∑i=1N​ℓ(f(xi​),yi​)g(xi​)​,ϕ(g∣SN​):=N1​i=1∑N​g(xi​).

注: 在实际使用中, g g g的取值往往在 [ 0 , 1 ] [0, 1] [0,1]间, 此时可以选取threshold t来选择是否判断.

作者设计了一个结构如下:

其中:
Prediction: f f f;
Selection: g g g;
Auxiliary: h h h, 作者说此为别的任务来帮助训练的.

最后的损失:
L = α L ( f , g ) + ( 1 − α ) L h L ( f , g ) = r ^ ℓ ( f , g ∣ S N ) + λ Ψ ( c − ϕ ^ ( g ∣ S N ) ) Ψ ( a ) = max ⁡ ( 0 , a ) 2 L h = r ^ ( h ∣ S N ) = 1 N ∑ i = 1 N ℓ ( h ( x i ) , y i ) . \mathcal{L} = \alpha \mathcal{L}_{(f, g)} + (1 - \alpha) \mathcal{L}_h \\ \mathcal{L}_{(f, g)} = \hat{r}_{\ell} (f, g|S_N) + \lambda \Psi(c - \hat{\phi}(g | S_N)) \\ \Psi(a) = \max(0, a)^2 \\ \mathcal{L}_h = \hat{r}(h|S_N) = \frac{1}{N}\sum_{i=1}^N \ell (h(x_i), y_i). L=αL(f,g)​+(1−α)Lh​L(f,g)​=r^ℓ​(f,g∣SN​)+λΨ(c−ϕ^​(g∣SN​))Ψ(a)=max(0,a)2Lh​=r^(h∣SN​)=N1​i=1∑N​ℓ(h(xi​),yi​).

Combined Abstention Robustness Learning (CARL)

Laidlaw C., Feizi S. Playing it safe: adversarial robustness with an abstain option. arXiv preprint arXiv:1911.11253, 2019.

原文代码

假设 f f f将样本 x x x映射为 Y ⋃ { a } \mathcal{Y} \bigcup \{a\} Y⋃{a}, 其中 a a a表示弃权(don’t know).

则我们可以定义:
R n a t ( f ) : = E ( x , y ) ∼ D 1 { f ( x ) ≠ y } R a d v ( f ) : = E ( x , y ) ∼ D max ⁡ x ~ ∈ B ϵ ( x ) 1 { f ( x ~ ≠ y and  f ( x ~ ) ≠ a } . \mathcal{R}_{nat} (f) := \mathbb{E}_{(x, y) \sim \mathcal{D}} \mathbf{1}\{f(x) \not = y\} \\ \mathcal{R}_{adv}(f) := \mathbb{E}_{(x, y) \sim \mathcal{D}} \max_{\tilde{x} \in \mathcal{B}_{\epsilon}(x)} \mathbf{1}\{f(\tilde{x} \not = y \text{ and } f(\tilde{x}) \not = a\}. Rnat​(f):=E(x,y)∼D​1{f(x)​=y}Radv​(f):=E(x,y)∼D​x~∈Bϵ​(x)max​1{f(x~​=y and f(x~)​=a}.

很自然的, 我们可以通过优化下列损失
R ( f ) = R n a t ( f ) + c R a d v ( f ) , \mathcal{R}(f) = \mathcal{R}_{nat}(f) + c \mathcal{R}_{adv}(f), R(f)=Rnat​(f)+cRadv​(f),
来获得一个带有弃权功能的判别器. 并且通过权重 c c c我们可以选择更好的natural精度或者更保守但更加安全的策略.

直接优化上面的损失是困难的, 故选择损失来替换. 作者采用普通的交叉熵损失来代替nat:
L n a t ( f ) = E ( x , y ) ∼ D − log ⁡ p y ( x ) , \mathcal{L}_{nat}(f) = \mathbb{E}_{(x, y) \sim \mathcal{D}} -\log p_y(x), Lnat​(f)=E(x,y)∼D​−logpy​(x),
用下列之一替代adv:
L a d v ( f ) E ( x , y ) ∼ D max ⁡ x ~ ∈ B ϵ ( x ) ℓ ( f , x ~ , y ) , ℓ = { ℓ ( 1 ) , ℓ ( 2 ) } ℓ ( 1 ) = − log ⁡ ( p y ( x ~ ) + p a ( x ~ ) ) ℓ ( 2 ) = ( − log ⁡ ( p y ( x ~ ) ) ⋅ ( − log ⁡ p a ( x ~ ) ) \mathcal{L}_{adv}(f) \mathbb{E}_{(x, y) \sim \mathcal{D}} \max_{\tilde{x} \in \mathcal{B}_{\epsilon}(x)} \ell(f, \tilde{x}, y), \\ \ell = \{\ell^{(1)}, \ell^{(2)}\} \\ \ell^{(1)} = -\log (p_y (\tilde{x}) + p_a (\tilde{x})) \\ \ell^{(2)} = (-\log (p_y (\tilde{x})) \cdot (-\log p_a (\tilde{x})) \\ Ladv​(f)E(x,y)∼D​x~∈Bϵ​(x)max​ℓ(f,x~,y),ℓ={ℓ(1),ℓ(2)}ℓ(1)=−log(py​(x~)+pa​(x~))ℓ(2)=(−log(py​(x~))⋅(−logpa​(x~))

Adversarial Training with a Rejection Option

Kato M., Cui Z., Fukuhara Y. ATRO: Adversarial training with a rejection option. arXiv preprint arXiv:2010.12905, 2020.

凸relax.

Energy-based Out-of-distribution Detection

Liu W., Wang X., Owens J. D., Li Y. Energy-based out-of-distribution detection. In Advances in Neural Information Processing Systems (NIPS), 2020.

普通的softmax分类网络可以从energy-based model的角度考虑:
p ( y ∣ x ) = e − E ( x , y ) / T ∫ y ′ e − E ( x , y ′ ) / T , E ( x , y ) = − f y ( x ) , p(y|x) = \frac{e^{-E(x, y) / T}}{\int_{y'}e^{-E(x, y') / T}},\\ E(x, y) = -f_y(x), \\ p(y∣x)=∫y′​e−E(x,y′)/Te−E(x,y)/T​,E(x,y)=−fy​(x),
Helmholtz free energy:
E ( x ; f ) : = − T ⋅ log ⁡ ∫ y ′ e − E ( x , y ′ ) / T = − T ⋅ log ⁡ ∑ i K e f i ( x ) / T . E(x;f):=-T \cdot \log \int_{y'}e^{-E(x, y') / T} = -T \cdot \log \sum_{i}^K e^{f_i(x)}/T. E(x;f):=−T⋅log∫y′​e−E(x,y′)/T=−T⋅logi∑K​efi​(x)/T.

实际上, 通过 E ( x ; f ) E(x;f) E(x;f)我们可以构建 x x x的能量模型:
p ( x ) = e − E ( x ; f ) / T ∫ x e − E ( x ; f ) / T , p(x) = \frac{e^{-E(x;f)/T}}{\int_x e^{-E(x;f)/T}}, p(x)=∫x​e−E(x;f)/Te−E(x;f)/T​,
故我们可以通过 p ( x ) p(x) p(x)来判断一个样本是不是OOD的.

特别的, 由于对于所有的 x x x
Z = ∫ x e − E ( x ; f ) / T Z = \int_x e^{-E(x;f)/T} Z=∫x​e−E(x;f)/T
都是一致的, 所以我们只需要比较
e − E ( x ; f ) / T e^{-E(x;f)/T} e−E(x;f)/T
的大小就可以了.

特别的, 作者指出为什么用 p ( y ∣ x ) p(y|x) p(y∣x)来作为判断是否OOD的依据不合适:
log ⁡ max ⁡ y p ( y ∣ x ) = log ⁡ max ⁡ y e f y ( x ) ∑ i e f i ( x ) = log ⁡ e f max ⁡ ( x ) ∑ i e f i ( x ) = E ( x ; f ( x ) − f max ⁡ ( x ) ) = E ( x ; f ) + f m a x ( x ) = − log ⁡ p ( x ) + f m a x ( x ) − log ⁡ Z ∝̸ − log ⁡ p ( x ) . \begin{array}{ll} \log \max_y p(y|x) &= \log \max_y \frac{e^{f_y(x)}}{\sum_i e^{f_i(x)}} \\ &= \log \frac{e^{f_{\max}(x)}}{\sum_i e^{f_i(x)}} \\ &= E(x;f(x) - f^{\max}(x)) \\ &= E(x;f) + f^{max}(x) \\ &= -\log p(x) + f^{max}(x) - \log Z \\ &\not\propto -\log p(x). \end{array} logmaxy​p(y∣x)​=logmaxy​∑i​efi​(x)efy​(x)​=log∑i​efi​(x)efmax​(x)​=E(x;f(x)−fmax(x))=E(x;f)+fmax(x)=−logp(x)+fmax(x)−logZ​∝−logp(x).​

WOW!

Confidence-Calibrated Adversarial Training: Generalizing to Unseen Attacks (CCAT)

Stutz D., Hein M. and Schiele B. Confidence-calibrated adversarial training: generalizing to unseen attacks. In International Conference on Machine Learning (ICML), 2020.

原文代码

假设 f ( x ) f(x) f(x)为预测的概率向量, CCAT通过如下算法优化:

  1. 输入: ( x 1 , y 1 ) , ⋯ , ( x B , y B ) (x_1, y_1), \cdots, (x_B, y_B) (x1​,y1​),⋯,(xB​,yB​);
  2. 将其中一半用于对抗训练, 一半用于普通训练:
    min ⁡ ∑ b = 1 B / 2 L ( f ( x ~ b , y ~ b ) ) + ∑ b = B / 2 + 1 B L ( f ( x b ) , y b ) . \min \quad \sum_{b=1}^{B/2} \mathcal{L}(f(\tilde{x}_b, \tilde{y}_b)) + \sum_{b=B/2+1}^B \mathcal{L}(f(x_b), y_b). minb=1∑B/2​L(f(x~b​,y~​b​))+b=B/2+1∑B​L(f(xb​),yb​).
  3. 其中
    x ~ b = x b + δ b , y ~ b = λ ( δ b ) one_hot ( y b ) + ( 1 − λ ( δ b ) ) 1 K , δ b = arg ⁡ max ⁡ δ ∞ ≤ ϵ max ⁡ k ≠ y b f k ( x b + δ ) , λ ( δ b ) : = ( 1 − min ⁡ ( 1 , ∥ δ b ∥ ∞ ϵ ) ) ρ . \tilde{x}_b = x_b + \delta_b, \\ \tilde{y}_b = \lambda(\delta_b) \text{ one\_hot}(y_b) + (1 - \lambda(\delta_b)) \frac{1}{K}, \\ \delta_b = \mathop{\arg \max} \limits_{\delta_{\infty} \le \epsilon} \max_{k \not= y_b} f_k(x_b + \delta), \\ \lambda (\delta_b) := (1 - \min(1, \frac{\|\delta_b\|_{\infty}}{\epsilon}))^{\rho}. \\ x~b​=xb​+δb​,y~​b​=λ(δb​) one_hot(yb​)+(1−λ(δb​))K1​,δb​=δ∞​≤ϵargmax​k​=yb​max​fk​(xb​+δ),λ(δb​):=(1−min(1,ϵ∥δb​∥∞​​))ρ.

y ~ \tilde{y} y~​是真实标签和均匀分布的一个凸组合, 这个还是挺有道理的.

最后, 倘若如果
max ⁡ k f k ( x ) , \max_k f_k(x), kmax​fk​(x),
即置信度比较小的话, 拒绝判断(这个可靠的原因是目标函数让对抗样本趋于均匀分布).

Adversarial Detection methods相关推荐

  1. 【论文笔记】A Survey on Masked Facial Detection Methods and Datasets for Fighting Against COVID-19

    声明 不定期更新自己精度论文,通俗易懂,初级小白也可以理解 涉及范围:深度学习方向,包括 CV.NLP.Data Fusion.Digital Twin 论文标题:A Survey on Masked ...

  2. 对抗样本检测adversarial detection techniques

    1.<CHARACTERIZING ADVERSARIAL SUBSPACES USING LOCAL INTRINSIC DIMENSIONALITY> 该方法背后的原理:对于对抗性子空 ...

  3. A Survey of Robust LiDAR-based 3D Object Detection Methods for Autonomous Driving(激光雷达3D目标检测方法)论文笔记

    原文链接:https://arxiv.org/pdf/2204.00106.pdf III. SotA 将基于点云的3D目标检测分为4类,即基于点的.基于体素的.基于前视图的和基于多视图的方法. A. ...

  4. 【论文合集】Awesome Backdoor Learning

    关于后门攻击&防御的博客与论文. ECCV2022对抗攻击&防御论文汇总 | Li's Blog (tuoli9.github.io) ICLR2022对抗攻击&防御论文汇总 ...

  5. Object Detection(目标检测神文)

    目标检测神文,非常全而且持续在更新.转发自:https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html,如 ...

  6. Simple Contrastive Representation Adversarial Learning for NLP Tasks

    论文目的 对比学习是自监督学习在NLP中的应用,本文使用对抗方法生成对比学习需要的训练样本对,对比学习提升了对抗训练的泛华能力,对抗训练也增强了对比学习的鲁棒性,提出了两种结构:supervised ...

  7. <A Tale of Evil Twins: Adversarial Inputs versus Poisoned Models>阅读笔记

    A Tale of Evil Twins: Adversarial Inputs versus Poisoned Models Abstract: 其中对对抗样本的定义是会欺骗DNN模型:对poiso ...

  8. Object Detection经典代码与文章

    转载自Object Detection Papers Deep Neural Networks for Object Detection paper: http://papers.nips.cc/pa ...

  9. 【论文学习】《Who is Real Bob? Adversarial Attacks on Speaker Recognition Systems》

    <Who is Real Bob? Adversarial Attacks on Speaker Recognition Systems>论文学习 文章目录 <Who is Real ...

最新文章

  1. 轻量函数式 JavaScript:八、列表操作
  2. es的query及filter
  3. linux控制命令使用限制,【L-shell】Linux 系统下 限制用户的活动目录,控制用户使用命令的权限。...
  4. 中英文怎么算 字符长度_钢材长度怎么算,只有1%的人才懂!
  5. PHP面向对象(OOP)编程入门教程
  6. GM6 pageset - DB get scenario
  7. vue router 参数_Vue.js项目开发技术解析
  8. [NOI2019]回家路线
  9. 功能安全 李艳文_中国汽车功能安全测试库首次成果发布会成功召开
  10. LVS DR模型详解
  11. php 横杠箭头,为什么我的箭头下面有一横线?
  12. 用mysql创建图书信息表_数据库创建图书管理系统
  13. 跟小海一起看下雪——用HTML、CSS和JS实现简单的下雪特效
  14. 小工具 | 全站仪图根测量平差excel计算表格
  15. MySql -- 数据库备份工具xtrabackup
  16. 【word毕业论文排版(1)】尾注的删除
  17. 如何使用万用表测量二极管的阻值
  18. 微信小程序开发语言(微信小程序开发教程)详细步骤
  19. 关于actor模型的优缺点分析(1)
  20. C++ 0xc0000417 错误

热门文章

  1. failure xmlns=urn:ietf:params:xml:ns:xmpp-saslnot-authorized//failure
  2. 工程图字体宋体仿宋_曾在中国辉煌一时的“仿宋体”,为什么现今很少有人用了?...
  3. 读书百客:《白雪歌送武判官归京》赏析二
  4. Orserg NEL项目组 A-1项目训练文档
  5. 德勤软件定义汽车2020
  6. API_Day04_文本操作-IO流
  7. 电脑老是安装一些来路不明的软件(如何解决)?
  8. TCP连接的3次握手和4次挥手
  9. 实体店店员收银不得不掌握的技巧在这里
  10. 点云目标检测:open3d多窗口联动可视化