CVPR2024:完全测试时域适应(Test-time Adaptation)的目标检测

原文标题:Fully Test-time Adaptation for Object Detection

中文标题:完全测试时间适应目标检测

论文地址: https://pan.baidu.com/s/1EQQFcRsB1A1VYWv0cyL_Qg?pwd=yrvz

提取码:yrvz

代码地址: https://github.com/XiaoqianRuan1/IoU-filter

1 Abstract

虽然目标检测性能在过去十年中有了很大的提高,但目前的目标检测器往往容易在训练数据和测试图像之间受到域转移的影响。领域自适应技术的发展是为了使在源领域训练的目标检测器适应目标领域。然而,他们假设目标领域是已知且固定的,并且目标数据集是可用于训练的,这在许多现实世界的应用中是无法满足的。为了弥补这一差距,本文对目标检测的测试时间自适应进行了全面的研究。这意味着在进行预测之前,在单个测试图像上更新已经训练好的目标检测器,而无需访问训练数据。通过对基线自我训练框架的诊断研究,我们发现该任务的一个巨大挑战是由域漂移引起的伪标签的不可靠性。然后,我们提出了一个简单而有效的方法,称为IoU过滤器,以解决这一挑战。它由两个新的基于IoU的指标组成,这两个指标都是对检测置信度的补充。在五个数据集上的实验结果表明,我们的方法可以有效地使训练好的检测器适应测试时的各种域移位,并带来可观的性能提升。

2 、Introduction

目标检测是计算机视觉中的一项基本任务,它处理识别和定位图像中的目标。尽管深度学习方法在标准基准上极大地推动了最先进的目标检测性能,但目前的目标检测器通常容易受到训练数据和测试图像之间的域转移的影响,例如看不见的风格、天气、照明条件和噪声。

2.1 、域适应面临的挑战

领域自适应(Domain adaptation)技术是将在源域训练的目标检测器适应到目标域,使其对领域偏移具有鲁棒性。无监督域自适应(UDA)方法需要标记的源数据和未标记的目标数据。这是不可取的,因为出于隐私和利润考虑,源数据通常不可用。无源域自适应(source - free domain adaptation, SFDA)方法就是为了克服这一限制而开发的,它能使得在源数据上训练的检测器无需访问源数据即可适应目标域。UDA 和 SFDA 都假设目标域已知且固定,并且从该域采样的目标数据集可用于训练。然而现实世界是复杂且非平稳的,不可能被任何固定的数据集覆盖。 在测试时,检测器必须动态适应未知和变化的域偏移。 这在许多现实世界的应用中都是需要的,从帮助视障人士阅读图像的智能助手和自动标记用户上传照片的社交媒体,到随着地点、天气和行人密度变化而安全行驶的自动驾驶汽车。

2.2 、测试时间适应 TTA

1 **)**测试时间适应(Test-time adaptation,TTA)的发展就是为了解决这个具有挑战性但很重要的问题。它不预测分布的变化,而是在测试时从中学习:在进行预测之前,会根据单个测试样本来更新已经训练好的模型。然而,这一工作的重点是图像分类,需要访问源数据。最近,TENT 解决了完全测试时自适应问题,这是无源的,但它依赖于一批测试样本来估计归一化统计数据,并且仍然专注于图像分类。

2 **)**为了弥补这一差距,本文对目标检测的测试时间自适应进行了全面的研究。如图1所示,它意味着在不访问训练数据的情况下,在进行预测之前,在单个测试图像上更新已训练好的目标检测器,例如FasterRCNN。与UDA和SFDA相比,我们既没有假设一个固定和已知的目标域,也没有目标数据集。它将促进许多应用,例如针对社交媒体和视障人士的图像理解系统,其中目标域因图像而异,因此只能从一个样本中学习适应。

3 **)**我们首先介绍该任务的基线方法,该方法建立在经典的自我训练框架之上。它根据检测置信度迭代地获得测试图像上的伪标签,并使用伪标签来更新检测器。 最后,检测器会在最后一次迭代的时候对测试图像进​​行预测。我们的诊断研究表明,该框架很有前途,但其性能很大程度上受到域转移引起的低质量伪标签的瓶颈。即使在高置信度阈值下,伪标签也非常嘈杂。

2.3 、本文提出的办法

1 **)**我们提出了一种新的方法,称为IoU(Intersection over Union)过滤器,用于在存在域移位的情况下获得更高质量的伪标签。它由两个新的基于IoU的指标组成,这两个指标都是对检测置信度的补充。第一个指标是连续迭代之间的 IoU (IoU-CI),根据类别和位置将当前自训练迭代中的目标检测与上一次迭代中的目标检测进行匹配。然后在这些匹配成功的检测IoU之中选择伪标签。第二个指标是重叠检测之间的IoU (IoU- od),它消除了在域移位下由于分类模糊而导致的相同实例却被当作不同类别的重复检测。我们的统计结果表明,这两个指标都增加了正确伪标签的百分比,从而显著提高了测试时的目标检测性能。

2 **)**值得注意的是,我们的任务设置不同于一次性无监督跨域检测(one-shot unsupervised cross-domain detection,OSHOT)和在线域自适应目标检测(online domain adaptive,ODA)。OSHOT通过在测试时只对一个目标样本求解自监督辅助任务(即旋转分类)来执行跨域的无监督自适应。但是它需要在检测模型中加入一个辅助的预测头,并在训练数据上学习自监督任务,因此它不是无源的。此外,我们表明本文提出的方法在这种情况下也是有效的,这表明了其多功能性。ODA 以在线方式使检测器适应目标数据集,每个样本依次到达并不断更新模型,在源模型对目标数据集中的所有样本进行训练后,进行测试和评估。此外,他们方法的核心是一种新颖的内存模块(MemXformer),它存储目标分布的原型模式以避免遗忘。添加的 MemXformer 是在源数据上进行预训练的,因此不是无源的。

2.4 、本文贡献

本文的贡献总结如下:

1 **)**据我们所知,这是第一个针对目标检测进行完全测试时间适应的工作。与流行的 UDA 和 SFDA 相比,它既不假设固定且已知的目标域,也不需要访问目标数据集。这在许多图像理解应用中是需要的,其中目标域事先未知并且因图像而异。

2 **)**通过对基线自我训练框架的诊断研究,我们表明该任务的巨大挑战是域转移引起的伪标签的不可靠性。我们提出了一种简单而有效的方法,即 IoU Filter 来应对这一挑战。它包括两个新的基于 IoU 的指标,并在存在域转移的情况下选择更高质量的伪标签。

3 **)**五个数据集的实验结果表明,我们的方法可以有效地使训练有素的检测器适应测试时的各种域转换,并带来显著的性能提升。

3 、Related Work

3.1 、Test-time Adaptation

测试时间适应或训练的目的是在进行预测之前,在单个未标记测试样本上更新已经训练好的模型,以提高模型对分布变化的鲁棒性。有研究通过创建一个自监督辅助任务(旋转分类)在这个单个测试样本上训练模型。有研究提出了基于自监督对比学习和在线伪标记方案的AdaContrast。有研究通过利用事件的时间结构,专注于基于事件的目标识别的测试时间适应。然而这些方法需要访问训练数据。为了解决这一限制,TENT 引入了完全的测试时间自适应,它直接最小化了模型在测试时间预测的熵。最近,也有研究将TENT扩展到不断变化的环境中,他们运用加权和增强平均预测来减少误差积累,并随机恢复权重以避免灾难性遗忘。所有这些测试时间自适应方法都集中在分类任务上。

3.2 、Domain-adaptive Object Detection

人们已经开发了多种方法来使在源域中训练的目标检测器适应目标域,如基于对抗性特征学习,自训练,图像到 -图像翻译 和域随机化。然而它们通常需要源数据,而在某些实际场景中,源数据是不可用的。这种限制激发了无源无监督域自适应目标检测的工作。有些方法是建立在自我训练框架之上的。有研究将预测不确定性视为自熵,并提出了一种称为自熵下降(self-entropy descent,SED)的新度量来搜索最佳置信度阈值。有研究引入了一种用于噪声过滤和伪标签细化的负集成学习(Negative Ensemble Learning,NEL)技术,该技术通过增强集成成员的多样性来处理噪声伪标签。有研究提出联合模型数据结构(Joint Model-Data Structure,JMDS)评分,包括对数概率间隙(Log Probability Gap,LPG)和伪标签模型概率(Model Probability of Pseudo-Label,MPPL)评分,来衡量样本的重要性。然而这一系列工作假设目标域已知且固定,并且从该域采样的目标数据集可用于训练。

与现有工作不同,我们既不假设固定且已知的目标域,也不需要访问目标数据集。 相反,我们的目标是在进行预测之前在单个测试图像上更新经过训练的目标检测器,而无需访问训练数据。此外,我们提出了一种新方法,即 IoU 滤波器,来有效解决这一具有挑战性但重要的任务。

4 、Method

4.1 、Problem Setting

我们正式引入目标检测的完全测试时间适应。在测试时,我们提供一个训练好的目标检测器,例如Faster RCNN,参数为θ 0 ,和单个测试图像I,并且无法获得检测器最初训练的源数据,也无法获得从已知目标域采样的目标数据集。然后我们在测试图像I上调整目标检测器,得到更新后的参数θ T 。遵循以往在分类任务中的测试时间适应设置,我们允许模型在此单个测试图像I上多次迭代更新。最后,我们将使用更新后的检测器θ T对测试图像I进行预测。

4.2 、Self-training Baseline: A Diagnostic Study

我们将首先介绍建立在经典自我训练框架上的基线方法,因为它已被证明可以有效地从未标记的数据中学习。然后我们将在我们的任务中对其有效性进行实证研究。

4.2.1 、Self-training Baseline

它是一种迭代算法。在第 t 次迭代时 (t ∈ {1, . . . , T}),当前检测器 θ t−1 对测试图像 I 做出预测 D t = {(b t,i ,p t,i ) : i} ,其中 b t,i 是第 i 个目标实例的边界框,p t,i ∈ [0, 1]K 是 K 个类的预测概率分布。p t,i 内的最大概率及其索引分别定义了检测置信度 c t,i ∈ [0, 1] 和目标类别 y t,i ∈ {1, ......,K}。然后,我们收集置信度大于阈值的检测结果作为伪标签:P t = {(b t,i , y t,i ) : c t,i > λ conf } ,其中 λ conf 是置信度阈值。最后,我们通过梯度下降步骤,在伪标签上调整当前检测器的参数 θ t−1 并获得更新后的模型 θ t

在第一次迭代时,即 t = 1时,当前检测器θ t−1 被初始化为在源数据上训练的模型 θ 0 。最后一次迭代后,即t = T,模型θ T将用于对测试图像 I 进行最终的预测。显然,这个自训练框架不会修改网络架构,并且是无源的。

4.2.2 、Diagnostic Study

1 **)**我们在任务中验证了该基线的有效性。源检测器是在 Pascal VOC 数据集上训练好的 Faster RCNN。它对来自不同领域的三个数据集的每个单独的测试图像执行完全的测试时域适应。并且不使用 RoI 分类损失,这会带来更好的性能。表1显示了使用最优置信阈值得到的mAP结果。可以看到随着迭代次数的增加,模型在某些情况下性能有所提升,这表明测试时适应有助于提高模型对新领域(domain)的适应能力。

1 ,"t=0" 表示原始的Faster R-CNN检测器在Pascal VOC数据集上训练后,没有经过测试时适应(test-time adaptation)直接在测试数据集上的 mAP 性能。而"t=1" 和 "t=5" 表示经过1次和5次迭代的测试时适应后的性能。

"All detections":表示将所有的目标检测结果作为伪标签。

"Detection confidence":表示仅将置信度高于某个阈值的目标检测结果作为伪标签。

2 **)**我们有两个观察结果。首先,基线持续提高了原始检测器的性能。这证明了自我训练框架在任务中的潜力。其次,在大多数情况下,使用检测置信度来选择伪标签会产生与使用所有检测作为伪标签相似的性能。同时图 2 显示,即使在高置信度阈值下,伪标签也是有噪声的。这些观察结果促使我们假设由域转移引起的伪标签质量低下是我们任务中自我训练框架面临的主要挑战。

2 :在 Comic2k 数据集上获得的不同检测置信区间下正确预测和错误预测的数量。

4.3 、IoU Filter

我们引入了一种新的方法,称为IoU滤波器,能在存在域移位的情况下获得更高质量的伪标签。它由两个新的基于 IoU 的指标组成,与检测置信度互补。

4.3.1 、IoU between Consecutive Iterations (IoU-CI)

1 **)**这个指标源于我们的观察,即在两个连续的自我训练迭代中一致的目标检测比不一致的目标检测更有可能是正确的,如图3所示。

图3:在两个连续的自我训练迭代之间一致和不一致的目标检测的说明。IoU阈值设置为0.9。

绿色方框表示一致且正确的检测结果,这意味着在连续两次迭代中,模型对同一个目标的检测结果一致且正确的。

红框表示一致但错误的检测结果。这是指模型在两次迭代中对同一个目标的检测结果是一致的,但这些检测结果都是错误的。

黄框表示不一致且错误的检测。这意味着模型在两次迭代中对同一个目标的检测结果是不一致的,并且这些检测结果都是错误的。

蓝框是不一致但正确的检测。这是指模型在两次迭代中对同一个目标的检测结果是不一致的,但这些检测结果部分是正确的。

绿色和黄色的边框是我们需要的,但红色和蓝色的边框不是。

2 形式上,在第 t 次迭代 (t ∈ {2, ..., T}) 时,D t = {(b t,i ,p t,i ) : i} 表示当前检测器 θ t−1 对测试图像 I 所做的预测。对于 D t 中的每个目标实例,我们将其与 D t−1 中具有相同类别和最小 IoU 的实例进行匹配。D t−1 是上一次迭代中所做的预测。然后,D t 中实例的 IoU-CI 分数被定义为当前实例与其在 D t−1 中的匹配实例之间的 IoU。对于上一次迭代中没有匹配的实例,它们的 IoU-CI 分数为零。

3 下图a比较了不同检测置信度区间和不同IoU-CI评分区间下正确伪标签的百分比。我们可以看到,当 IoU-CI 分数高于 0.7 时,它提高了大多数检测置信区间的伪标签的质量,证明了IoU-CI滤波器的有效性。因此,我们用 IoU-CI 阈值 λ IoU-CI 过滤伪标签。

第一行数值代表在没有任何IoU过滤的情况下,基于不同检测置信度区间,模型预测正确的伪标签的概率。

第二行至最后一行代表应用IoU- CI filter后,基于不同检测置信度区间,模型预测正确的伪标签的概率。

4.3.2 、IoU between Overlapped Detections (IoU-OD)

我们发现,在存在域移位的情况下,检测器倾向于重复检测相同的目标实例作为不同对象类,如下图所示。在这种情况下,具有最高置信度的检测最有可能是正确的,而其他检测则是假阳性。这一观察结果促使我们定义一个IoU-OD过滤器。

在第 t 次迭代 (t ∈ {1, ..., T}) 时,我们得到了所有目标检测结果集合Dt。对于 Dt 中的目标实例 i,我们将其检测置信度c i 与那些与实例 i 的IoU(交并比)高于某个阈值λ IoU-OD的其他实例的检测置信度进行比较。IoU是一个衡量两个边界框重叠程度的指标,值越高表示重叠越多。

如果实例i的置信度c i 是所有其他这些IoU高于阈值λ IoU-OD的实例中最高的,那么实例 i 就通过 IoU-OD 过滤器,否则,将其排除在伪标签之外。

IoU-OD 滤波器类似于类别无关的非极大值抑制 (NMS),它不考虑类别,它关注的是所有重叠检测中置信度最高的那个,旨在处理由域转移引起的模糊目标分类。

举个例子,假设在第t次迭代中,对一张目标 i 进行目标检测,得到了三个检测结果A类别(c=0.8)、B类别(c=0.6)、C类别(c=0.5),假设阈值λ IoU-OD =0.7,A与 i 的交并比IoU=0.8大于0.7,C和 i 的IoU值也超过这个阈值,而B和 i 的IoU值没有超过这个阈值,在IoU-OD过滤器看来,检测结果A和C是重叠的,B被排除,然后A的置信度更高,所以这个目标最终的伪标签就是A。

下图b比较了应用IoU-OD滤波器后,在不同置信度和IoU-CI区间内,正确伪标签的百分比。我们可以看到,b图相较于a图,大部分数值都有所提升,证明IoU-OD滤波器进一步提高了伪标签的质量。

第一行数值代表在没有任何IoU过滤的情况下,基于不同检测置信度区间,模型预测正确的伪标签的概率。

第二行至最后一行代表应用IoU- CI filter且应用IoU-OD filter后,基于不同检测置信度区间,模型预测正确的伪标签的概率。

5 、Experiments

5.1 、Experimental Setting

5.1.1 、Datasets

我们使用不同领域的五个数据集进行评估。Clipart1k、Comic2k 和 Watercolor2k 是三个艺术媒体数据集,包含各种风格的艺术图像;当源数据集是 Pascal-VOC 时,它们通常用于对域自适应目标检测方法进行基准测试。Clipart1k 包含与 Pascal-VOC 相同的 20 个对象类别。 Comic2k 和 Watercolor2k 都包含 6 个类,它们是 Pascal-VOC 20 个类的子集类。它们三个数据集都包含 1000 个训练图像和 1000 个测试图像。Foggy Cityscapes 和 Rainy Cityscapes 是通过在原始 Cityscapes 图像(即源数据)中添加不同级别的合成雾和雨而得到的两个数据集。仅考虑最高级别的雾和雨。Foggy Cityscapes 数据集包含 492 个用于评估的图像,而 Rainy Cityscapes 数据集包含 99 个测试图像。仅使用这五个数据集的测试test集进行评估。IoU 阈值 0.5 的平均精度 (mAP) 用作性能指标。

5.1.2 、Implementation Details

目标检测器是 Faster-RCNN,主干网络是在 ImageNet 上预训练的 RseNet50,无需对其网络架构进行任何修改。其区域提案网络 (RPN) 基于三个尺度(128、256、512)和三个长宽比(1:1、1:2、2:1)的锚点,在非极大值抑制(NMS)之后生成 300 个顶级提案 。源训练模型分别在 PascalVOC 上迭代训练 70k 次,在 Cityscapes 上迭代训练 30k 次,使用动量设置为 0.9 的 SGD,初始学习率设置为 0.001,批量大小设置为 1。对于每个测试图像,我们使用 SGD 更新训练模型 5 次迭代,动量设置为 0.9,学习率为 0.001。对于所有五个测试数据集,检测置信度阈值设置为0.6,IoU-CI阈值设置为0.6,IoU-OD阈值设置为0.9。我们仅使用检测置信度阈值来过滤几乎占据整个图像(即超过 90% 像素)的检测,这在经验上会带来更好的性能。

5.1.3 、Benchmark Methods

我们将把我们提出的方法与CoTTA(一种完全测试时间适应的分类方法)和之前介绍的自训练基线(仅使用检测置信度来选择伪标签)进行比较。最近有研究证明,在半监督目标检测中,边界框的不确定性有助于去除低质量的伪标签。我们将其整合到自我训练基线中,并将其与我们的方法进行比较。

5.1.4 、OSHOT Setting

这是一次无监督跨域检测的场景,它与辅助任务(即图像旋转分类)一起训练Faster-RCNN。训练时,将辅助任务的权值设为0.05。在测试时,检测器根据检测损失loss和自监督损失loss进行更新。对于这三个数据集,检测损失的权值设为1.0,自监督损失的权值设为0.2。由于网络架构被修改,并且需要在源数据上训练自监督头,因此该设置不是无源的。

5.2 、Experiment Results

5.2.1 、Fully Test-time Adaptation

下表显示了在完全测试时间适应设置下,五个测试数据集上的目标检测结果。比较了四种方法,包括CoTTA、自训练基线、与不确定性建模的集成以及我们提出的方法。T是自我训练迭代的次数。大多数情况下,我们的方法优于其他方法。从表中可以看出,每个方法的性能不一定会随着迭代次数的增加而提高。

左边的源数据集是Pascal-VOC数据集,右边的源数据集是原始的Cityscapes数据集。自训练+U表示自训练基线与不确定性建模的集成。

5.2.2 、OSHOT

下表显示了在OSHOT设置(第5.1.4节)下使用五个测试数据集获得的结果。我们可以看到,使用IoU Filter来选择伪标签可以在大多数设置下提高其性能。在OSHOT设置下获得的性能普遍优于完全测试时间适应下获得的性能。这是意料之中的,因为在OSHOT设置下假设训练数据是可用的,并且它们可以为测试时间适应提供有用的信息。

左边的源数据集是Pascal-VOC数据集,右边的源数据集是原始的Cityscapes数据集。

5.3 、Ablation study

我们首先验证了每个模型组件的贡献,然后研究了不同阈值对性能的影响,最后展示了五次以上自训练迭代后得到的结果。所有结果在第五次自训练迭代时报告。

5.3.1 、Component Analysis

结果如下表所示。 我们可以看到,IoU-CI和IoU-OD这两个指标都提高了自训练基线的性能,因为它们可以获得更高质量的伪标签。此外,这两个指标是相辅相成的,它们的组合得到了最佳的效果。

5.3.2 、Impact of Different Thresholds

我们研究了不同阈值对性能的影响,包括 IoU-CI 阈值和 IoU-OD 阈值。我们在每个实验中仅更改一个阈值,并保持其他阈值与第 5.1.2 节中所述相同。结果如下图所示。我们可以看到,尽管存在一些性能扰动,但所提出的方法始终优于自训练基线。

5.3.3 、Self-training Iterations

图7显示了每种方法的性能在不同迭代次数中的变化。它描述了所有这些方法在最初的5或6次迭代中性能得到改进,但在更多的迭代中会退化。这可以归结为两个原因;首先,由于只有一个测试图像来执行自适应,太多的迭代可能导致过拟合;其次,检测误差会在伪标签中积累,对测试时间训练产生不利影响。

5.4 、Qualitative Results

下图比较了不同方法以及原始Faster RCNN获得的定性结果。检测到的目标定位为绿色框。错误分类和目标漏报是域转移存在的两个主要问题。我们的方法可以有效地解决这些问题。例如,如下图第四列所示,我们提出的方法可以有效地检测丢失的目标,例如小而模糊的对象。

完全测试时间适应目标检测的定性结果。 第一行是每张图像的真实情况,第二行是预训练检测器的结果,第三行是自训练基线的结果,最后一行是我们提出的方法的结果。目标检测结果定位为绿色方框。

6、Discussion of Limitation

我们的方法的主要限制是,所提出的IoU过滤器可以排除一些不正确的检测,但同时也会从伪标签中排除一些正确的检测。它增加了正确伪标签的百分比,但减少了伪标签的绝对数量。虽然我们的方法可以明显改善存在域移位的目标检测,但我们相信如果能提高伪标签质量的同时减少正确伪标签的误删,性能可以进一步提高。

7、Conclusion

本文提出了第一种解决目标检测的完全测试时间自适应问题的方法。与目前的领域自适应目标检测器相比,它既不假设目标分布是固定的且已知的,也不需要访问目标数据集,而这在许多应用中是需要的。我们首先研究了一个基线自训练框架,但发现它的性能受到由域移位引起的低质量伪标签的瓶颈。为了克服这个障碍,我们引入了IoU滤波器;它包括两个基于iou的指标,可以在存在域移位的情况下选择更高质量的伪标签。在三个数据集上的实验结果表明,我们的方法可以有效地使训练好的检测器适应测试时的各种域移位,并带来可观的性能提升。通过消融研究,我们发现每个指标都是有效的,并且它们是互补的,阈值可能会影响性能,并且训练过多的迭代可能会降低测试时的完全适应性。

相关推荐
deephub24 分钟前
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
人工智能·深度学习·transformer·大语言模型·注意力机制
搏博36 分钟前
神经网络问题之二:梯度爆炸(Gradient Explosion)
人工智能·深度学习·神经网络
KGback41 分钟前
【论文解析】HAQ: Hardware-Aware Automated Quantization With Mixed Precision
人工智能
电子手信1 小时前
知识中台在多语言客户中的应用
大数据·人工智能·自然语言处理·数据挖掘·知识图谱
不高明的骗子1 小时前
【深度学习之一】2024最新pytorch+cuda+cudnn下载安装搭建开发环境
人工智能·pytorch·深度学习·cuda
Chef_Chen1 小时前
从0开始学习机器学习--Day33--机器学习阶段总结
人工智能·学习·机器学习
搏博1 小时前
神经网络问题之:梯度不稳定
人工智能·深度学习·神经网络
GL_Rain1 小时前
【OpenCV】Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR)
人工智能·opencv·计算机视觉
shansjqun1 小时前
教学内容全覆盖:航拍杂草检测与分类
人工智能·分类·数据挖掘
狸克先生1 小时前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互