-
[问题求助] 求助大佬这个错误应该怎么解决:ImportError: cannot import name ‘adam‘ from ‘tensorflow.python.keras.optimizers‘求助大佬这个错误应该怎么解决:ImportError: cannot import name ‘adam‘ from ‘tensorflow.python.keras.optimizers‘
-
作者 | yishun@知乎来源丨https://zhuanlan.zhihu.com/p/53683453注:本文所有资料均来自Keras之父、Google人工智能研究员Francois Chollet的大作:《Python深度学习》,建议大家直接去看原文,这里只是结合楼主的理解做点笔记。引言有一些同学认为深度学习、神经网络什么的就是一个黑盒子,没办法、也不需要分析其内部的工作方式。个人认为这种说法“谬之千里”。首先,站在自动特征提取或表示学习的角度来看,深度学习还是很好理解,即通过一个层级结构,由简单到复杂逐步提取特征,获得易于处理的高层次抽象表示。其次,现在也已经有很多方法对神经网络进行分析了,特别是一些可视化方法,可以很直观的展示深度模型的特征提取过程。对神经网络进行可视化分析不管是在学习上还是实际应用上都有很重要的意义,基于此,本文将介绍以下3种CNN的可视化方法:可视化中间特征图。可视化卷积核。可视化图像中类激活的热力图。可视化中间特征图这种方法很简单,把网络中间某层的输出的特征图按通道作为图片进行可视化展示即可,如下述代码所示:import matplotlib.pyplot as plt #get feature map of layer_activation plt.matshow(layer_activation[0, :, :, 4], cmap='viridis')把多个特征图可视化后堆叠在一起可以得到与下述类似的图片。上图为某CNN 5-8 层输出的某喵星人的特征图的可视化结果(一个卷积核对应一个小图片)。可以发现越是低的层,捕捉的底层次像素信息越多,特征图中猫的轮廓也越清晰。越到高层,图像越抽象,稀疏程度也越高。这符合我们一直强调的特征提取概念。可视化卷积核想要观察卷积神经网络学到的过滤器,一种简单的方法是获取每个过滤器所响应的视觉模式。我们可以将其视为一个优化问题,即从空白输入图像开始,将梯度上升应用于卷积神经网络的输入图像,让某个过滤器的响应最大化,最后得到的图像是选定过滤器具有较大响应的图像。核心代码如下所示(利用Keras框架):def generate_pattern(layer_name, filter_index, size=150): layer_output = model.get_layer(layer_name).output loss = K.mean(layer_output[:, :, :, filter_index]) grads = K.gradients(loss, model.input)[0] grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5) iterate = K.function([model.input], [loss, grads]) input_img_data = np.random.random((1, size, size, 3)) * 20 + 128. step = 1. for i in range(40): loss_value, grads_value = iterate([input_img_data]) input_img_data += grads_value * step img = input_img_data[0] return deprocess_image(img)将输入图片张量转换回图片后进行可视化,可以得到与下述类似的图片:随着层数的加深,卷积神经网络中的过滤器变得越来越复杂,越来越精细。模型第一层( block1_conv1 )的过滤器对应简单的方向边缘和颜色,高层的过滤器类似于自然图像中的纹理:羽毛、眼睛、树叶等。可视化图像中类激活的热力图即显示原始图片的不同区域对某个CNN输出类别的“贡献”程度,如下面图片所示:可以看到,大象头部对“大象”这个类别的“贡献”程度较高,而且这种方法似乎可以在一定程度上进行无监督的目标检测。下面是书中原文,可能有点绕口。我们将使用的具体实现方式是“Grad-CAM: visual explanations from deep networks via gradient-based localization”这篇论文中描述的方法。这种方法非常简单:给定一张输入图像,对于一个卷积层的输出特征图,用类别相对于通道的梯度对这个特征图中的每个通道进行加权。直观上来看,理解这个技巧的一种方法是,你是用“每个通道对类别的重要程度”对“输入图像对不同通道的激活强度”的空间图进行加权,从而得到了“输入图像对类别的激活强度”的空间图。这里谈一下我的理解,给定线性函数 ,y为类别, 等等为输入。可以看到这里 对y的贡献为 ,恰好为 。当然了,深度模型中有非线性激活函数,不能简化为一个线性模型,所以这只是启发性的理解。代码如下所示:african_elephant_output = model.output[:, 386] last_conv_layer = model.get_layer('block5_conv3') grads = K.gradients(african_elephant_output, last_conv_layer.output)[0] pooled_grads = K.mean(grads, axis=(0, 1, 2)) iterate = K.function([model.input], [pooled_grads, last_conv_layer.output[0]]) pooled_grads_value, conv_layer_output_value = iterate([x]) for i in range(512): conv_layer_output_value[:, :, i] *= pooled_grads_value[i] heatmap = np.mean(conv_layer_output_value, axis=-1) heatmap = np.maximum(heatmap, 0) heatmap /= np.max(heatmap) plt.matshow(heatmap)得到的热力图如下所示经下述代码处理后,可以得到本节开始时的图片。import cv2 img = cv2.imread(img_path) heatmap = cv2.resize(heatmap, (img.shape[1], img.shape[0])) heatmap = np.uint8(255 * heatmap) heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) superimposed_img = heatmap * 0.4 + img cv2.imwrite('/Users/fchollet/Downloads/elephant_cam.jpg', superimposed_img)
-
Interactive Self-Training with Mean Teachers for Semi-supervised Object Detection这篇文章揭示了之前利用 pseudo label 的方法忽略了同一张图片在不同的迭代的检测结果之间的差异性,而且不同的模型对同一张图像的检测结果也有差异。图七 不同迭代的模型对同一张图像的预测结果(a)(b),不同 ROIHead 的检测结果因此作者提出一个基于 Mean Teacher 的 Interactive form of self-training 的半监督目标检测算法:解决不同训练迭代检测结果的不稳定问题,作者使用 NMS 将不同迭代的检测结果进行融合。同时利用两个检测头部 ROIHead 生成 pseudo label,两个检测头部可以相互提供有用的互补信息。图八 Interactive Self-Training 的算法步骤IST 算法的主要步骤如图八所示:使用 labeled data 训练一个拥有两个 ROIHead 的预训练模型利用预训练模型生成两个对应的伪标签利用 labeled data 和 unlabeled data 进行监督学习,图八中 Pseudo Labels Memory 用来使用 NMS 融合不同迭代的检测结果。该步骤详情如图九所示,利用 Mean Teacher 的结构,teacher 生成 pseudo label 并与 Memory 中的 pseudo label 进行融合,并更新 Memory。作者使用 Dropblock 模块确保不同的 ROIHead 能够独立收敛,并提供互补的信息,即图九中的 D。
-
Unbiased Teacher for Semi-Supervised Object Detection这篇文章发表在 ICLR 2021, 主要思想还是说现在的半监督目标检测算法生成的标签具有 bias,这里作者主要 argue 的点在于目标检测中存在天然的类别不平衡问题,包括 RPN 前景和背景的分类,ROIHead 的多类别分类,因此作者提出了一个 Unbiased Teacher 方法,来解决此问题。图六 Unbiased Teacher 示意图从方法上来说,非常的简单,首先是 Burn-IN stage,即在 labeled data 上训练一个预训练模型,然后利用 Mean Teacher 的结构,Teacher 生成 Pseudo label 来同时监督 RPN 和 ROIHead。不同的点在于,作者只利用 pseudo label 更新 RPN 和 ROIHead 的 classification 分支,主要原因在于由 confidence score 生成的 pseudo label 与 bounding box 位置的质量关系不大。除此之外,作者将原本的 cross entropy loss 替换为 Focal loss 来解决 pseudo label bias 问题,即 class imbalance 。
-
Instant-Teaching: An End-to-End Semi-Supervised Object Detection FrameworkInstant-Teaching 主要的 motivation 在于 STAC 仅生成一次的 pseudo label,即离线生成,在训练的过程中不会更新。这样的模式存在一个问题是,当训练的模型精度逐步提升,超过原本的模型,继续使用原来模型生成的 pseudo label 会限制模型精度进一步提升。因此作者提出 Instant-Teaching,以及 Instant-Teaching*。图四 Instant-Teaching 和 Instant-Teaching* 示意图Instant-Teaching 采用即时生成 pseudo label 的模式,在每一个迭代中,包括两个步骤:生成 pseudo label: 对 unlabeled image 进行 weak augmentation,送入模型中得到 hard label;利用生成的 pseudo label 进行 strong augmentation,除了 在 STAC 中的数据增强,还包括了 Mixup 和 Mosaic,利用增强后的数据训练模型;Instant-Teaching 主要提出了一个 co-rectify scheme 来解决 pseudo label 的 confirmation bias 的问题(噪声 pseudo label 的错误累计效应)。因此,作者利用两个模型,给予不同的初始化参数,输入不同的数据增强的样本,分别彼此纠正和检测对方生成的 pseudo label,形式如图四右半部分。文章转载自 小白学视觉
-
文章转载自 小白学视觉A Simple Semi-Supervised Learning Framework for Object DetectionSTAC 提出了一个基于 hard pseudo label 的半监督目标检测算法,如图三所示,该方法包含四个步骤:首先利用 labeled data 训练一个 Teacher 模型;生成 pseudo label, 将 unlabeled data 输入进 Teacher 网络中,得到大量的目标框预测结果,利用 NMS 消除大量的冗余框,最后使用阈值来挑选高置信度的 pseudo label;应用 strong data augmentation。得到 pseudo label 后与 unlabeled image 图像相结合,包括图像级别的颜色抖动、geometric transformation(平移、旋转、剪切)、box-level transformation(小幅度的平移、旋转、剪切);计算无监督 loss (pseudo label)和监督学习 loss;图三 STAC 半监督目标检测算法示意图
-
Consistency-based Semi-supervised Learning for Object Detection, NeurIPS 19CSD 这篇文章是比较早期的半监督目标检测方法,非常简单,该文章提出了一个 Consistency-based 半监督目标检测算法,可以同时在单阶段和双阶段检测器上工作。.图二 CSD 半监督目标检测算法结构图CSD 的结构如图二所示,以单阶段目标检测器为例,训练的损失函数主要包括两个部分,labeled sample 的监督损失和 unlabeled samples 的 Consistency loss。针对 unlabeled samples,首先将图像水平翻转,然后分别送入网络当中,得到对应的 Feature map,由于两张翻转的图像的空间位置是可以一一对应的,因此可以在对应的位置计算一致性损失。分类部分,利用 JS 散度作为 consistency loss;定位部分,利用 L2 loss 作为 consistency loss。双阶段检测器的部分与单阶段检测器类似,差别主要在于 RPN(Region Proposal Network) 对于不同的输入可能产生不同的 proposals,因此在计算 consistency loss 时无法一一对应。解决此问题也很简单,两张图像使用同一个 RPN 生成同一组 RoI (Region of Interest) 来提取特征得到 proposals。作者还提出了一个 Background elimination 方法来消除大量背景部分的损失主导训练过程的问题,因此作者定义了一个 mask 来过滤大量的背景样本:其中,当该实例的类别不等于背景类时等于1,否则为 0。
-
文章转载自 小白学视觉什么是半监督目标检测?传统机器学习根据训练数据集中的标注情况,有着不同的场景,主要包括:监督学习、弱监督学习、弱半监督学习、半监督学习。由于目标检测任务的特殊性,在介绍半监督目标检测方法之前,我们查看一下目标检测在这四个方向下的具体设定,如下图所示(不包括无监督学习):图一 目标检测的不同的 setting总而言之,我们可以讲目标检测的 setting 分为四个部分:有监督目标检测: 拥有大规模带标签的数据,包括完整的实例级别的标注,即包含坐标和类别信息;弱监督目标检测: 数据集中的标注仅包含类别信息,不包含坐标信息,如图一 b 所示;弱半监督目标检测: 数据集中拥有部分实例级别的标注,大量弱标注数据,模型希望利用大规模的弱标注数据提升模型的检测能力;半监督目标检测: 数据集中拥有部分实例级别的标注,大量未标注数据,模型希望利用大规模的无标注的数据提升模型的检测能力;半监督目标检测方法的核心在于,如何充分利用大量未标注、多样性的数据提升模型在测试集上的性能,目前的半监督目标检测方法主要有两个方向:一致性学习(Consistency based Learning)伪标签(Pseudo-label based Learning)前者利用两个深度卷积神经网络学习同一张 unlabeled 图像不同扰动(比如水平翻转,不同的对比度,亮度等)之间的一致性,充分利用 unlabeled data的信息。后者利用在 labeled data 上学习的预训练模型对 unlabeled data 进行推理,经过 NMS 后减少大量冗余框后,利用一个阈值去挑选伪标签,最后利用伪标签训练模型。个人认为这两种方法没有本质的区别,本身都是伪标签技术,一致性学习可以认为是一种 soft pseudo label,而后者是一种 hard pseudo label。
-
文章来源于深度学习与计算机视觉 ,作者磐怼怼边缘检测是非常常见和广泛使用的图像处理,对于许多不同的计算机视觉应用非常必要,如数据提取,图像分割,在更细粒度的特征提取和模式识别中。它降低了图像中的噪声和细节数量,但保留了图像的结构。Python中的Canny边缘检测是计算机视觉中最流行的边缘检测方法之一。以下是Canny边缘检测的步骤:1.使用高斯平滑来减少噪声2.计算梯度3.应用非极大值抑制以减少噪声4.找到上下阈值5.应用阈值。幸运的是,OpenCV库有cv2.canny()函数,可为我们执行Canny边缘检测。在本文中,我们将直接使用OpenCV执行边缘检测。import cv2 import matplotlib.pyplot as plt 我们将使用以下图片进行今天的教程Canny边缘检测的第一步是应用高斯模糊。在模糊之前,将图像转换为灰度也很重要:image = cv2.imread("meter.jpg") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0)现在,我们可以直接将cv2.Canny()方法应用于这个模糊的图像。很简单。它需要三个参数:图像本身,较低的阈值和较高的阈值。选择这些阈值是棘手的。对于每个图像,这些阈值都将是不同的。对于此图像,我们将尝试三个不同的范围并观察发生了什么:wide = cv2.Canny(blurred, 50, 200) mid = cv2.Canny(blurred, 30, 150) tight = cv2.Canny(blurred, 210, 250)在这里,我使用了三种不同类型的范围。在wide中,阈值的值具有宽范围。在mid中,阈值的值在中间范围内,在tight中,阈值的值具有紧密的范围,仅为210到250,非常接近。为了检查图像,我只保存了这三个图像(wide,mid和tight)。以下是wide的结果:记住,你不能一概而论这些范围。对于不同的图像,可能需要使用不同的范围。这就是为什么这么棘手的原因。好消息是,有一些可用的统计技巧可以用来找到下限和上限阈值,而不需要像我们之前看到的试错方法那样。这是自动边缘检测的函数:def auto_canny_edge_detection(image, sigma=0.33): md = np.median(image) lower_value = int(max(0, (1.0-sigma) * md)) upper_value = int(min(255, (1.0+sigma) * md)) return cv2.Canny(image, lower_value, upper_value)在上面的函数中,首先找到图像数组中的中位像素值。然后使用这个中位数和一个常数sigma值,可以找到下限和上限阈值。这里使用了一个sigma值为0.33。在大多数应用程序中,0.33作为sigma值是有效的。但在某些情况下,如果它不能给出好的结果,请尝试一些其他的sigma值。这是我们之前创建的模糊图像上使用auto_canny_edge_detection方法的结果:auto_edge = auto_canny_edge_detection(blurred) cv2.imwrite("auto.jpg", auto_edge)这就是auto.jpg的样子:正如你所看到的,边缘在这里很清晰地出现了,而不需要尝试太多的阈值。
-
三角函数和对数函数Numpy中包含了一些最常用的三角函数包括Numpy .sin()、Numpy .cos()、Numpy .tan()、Numpy .arcsin()、Numpy .arccos()、Numpy .arctan()或Numpy .log()。numpy.sin()的例子: import numpy as np a = np.array([0, 30, 45, 60, 90]) b = np.sin(a) print(b) # Output: [ 0. 0.5 0.70710678 0.8660254 1. ]numpy.log计算自然对数是指数函数的倒数,因此log(exp(x)) = x。自然对数是以e为底的对数。 import numpy as np np.log([1, np.e, np.e**2, 0]) #array([ 0., 1., 2., -Inf])以上就是Numpy中常用的数学函数的总结。,另外就是Numpy的文档非常详尽,如果你想寻找什么函数,可以直接进行查询:https://numpy.org/doc/
-
线性代数函数最常见的是线性代数函数有点积numpy.dot()函数可用于计算两个数组的点积。例如,要计算两个1-D数组a和b的点积,可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.dot(a, b) print(c) # Output: 32或者直接使用@操作符 c = a @ b print(c) # Output: 32矩阵乘法numpy.matmul()函数可用于执行两个数组的矩阵乘法。例如,要执行两个2-D数组a和b的矩阵乘法,可以使用以下代码: import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) c = np.matmul(a, b) print(c) # Output: # [[19 22] # [43 50]]可以使用@运算符来执行矩阵乘法: c = a @ b print(c) # Output: # [[19 22] # [43 50]]转置numpy.transpose()函数可用于转置数组。例如,要转置一个2-D数组a,你可以使用以下代码: import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.transpose(a) print(b) # Output: # [[1 3] # [2 4]]也可以直接使用.T属性来转置数组: b = a.T print(b) # Output: # [[1 3] # [2 4]]行列式numpy.linalg.det()函数可用于计算正方形数组的行列式。例如,要计算二维数组a的行列式,可以使用以下代码: import numpy as np a = np.array([[1, 2], [3, 4]]) d = np.linalg.det(a) print(d) # Output: -2.000000000000000注意,输入数组必须是正方形数组,即它必须有相同的行数和列数。逆numpy.linalg.inv()函数可用于计算正方形数组的逆inverse 。例如,要计算一个2-D数组a的逆,你可以使用以下代码: import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.linalg.inv(a) print(b) # Output: # [[-2. 1. ] # [ 1.5 -0.5]]需要注意的是,输入数组必须是方阵,而且行列式必须非零。否则,numpy将引发LinAlgError。以上就是我们常用的线性代数函数,还有更多函数来计算矩阵和数组上的线性代数运算,可以查看Numpy文档。
-
我们将介绍基本的数学运算:加法使用numpy.add()逐个添加两个数组元素。例如,要添加两个数组a和b,可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.add(a, b) print(c) # Output: [5, 7, 9]也可以使用+运算符: c = a + b print(c) # Output: [5, 7, 9]减法numpy.subtract()可用于从另一个元素中减去一个数组。例如,要从数组a中减去数组b,可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.subtract(a, b) print(c) # Output: [-3, -3, -3]也可以使用-运算符: c = a - b print(c) # Output: [-3, -3, -3]乘法numpy.multiply()函数可用于按元素将两个数组相乘。例如,要将两个数组a和b相乘,可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.multiply(a, b) print(c) # Output: [4, 10, 18]也可以使用*运算符: c = a * b print(c) # Output: [4, 10, 18]要说明的一点是,这个是逐元素乘法,点积乘法使用dot,在后面会介绍。所以这个操作要求两个变量的维度相同,如果不同则会首先进行广播操作。除法numpy.divide()函数可用于将一个数组除以另一个元素。例如,要用数组a除以数组b,你可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.divide(a, b) print(c) # Output: [0.25, 0.4, 0.5]也可以使用/运算符: c = a / b print(c) # Output: [0.25, 0.4, 0.5]再次说明:上述所有函数都是在输入数组上以element wise的方式应用的,也就是逐元素方式,所以它们返回一个与输入形状相同的数组。
-
文章转载自小白学视觉Numpy 是一个强大的 Python 计算库。它提供了广泛的数学函数,可以对数组和矩阵执行各种操作。本文中将整理一些基本和常用的数学操作。基本数学运算:Numpy 提供了许多基本数学函数,用于对数组执行加、减、乘、除等运算。这些函数包括 numpy.add()、numpy.subtract()、numpy.multiply() 和 numpy.divide()。线性代数函数:Numpy 还提供了许多线性代数函数,用于执行矩阵乘法、行列式和求逆等运算。这些函数包括 numpy.dot()、numpy.linalg.det() 和 numpy.linalg.inv()。统计和概率函数:Numpy 提供了许多统计和概率函数,用于执行均值、中位数、标准差和相关性等操作。这些函数包括 numpy.mean()、numpy.median()、numpy.std() 和 numpy.corrcoef()。三角函数和对数函数:Numpy 还提供了许多三角函数和对数函数,用于执行正弦、余弦、正切和对数等运算。这些函数包括 numpy.sin()、numpy.cos()、numpy.tan() 和 numpy.log()。
-
文章来源于计算机视觉研究院 ,作者计算机视觉研究院项目落地效果项目中,我们使用Ubuntu 20.04作为操作系统,Python 3.8、PyTorch 1.16.0和Cuda 11.6作为软件环境。实验采用NVIDIA 3080ti图形卡作为硬件。神经网络的实现代码是在Ultralytics 8.0.105版本的基础上修改的。在项目中的训练、测试和验证过程中使用的超参数保持一致。训练epoch被设置为300,并且输入到网络中的图像被重新缩放到640×640。在下面列出的一些结果中,所有YOLOv8和我们提出的Drone-YOLO网络都具有来自我们检测结果。在这些落地中,这些网络都没有使用预训练参数。在嵌入式应用实验中,我们使用NVIDIA Tegra TX2作为实验环境,该环境具有256核NVIDIA Pascal架构GPU,提供1.33 TFLOPS的峰值计算性能和8GB的内存。软件环境为Ubuntu 18.04 LTS操作系统、NVIDIA JetPack 4.4.1、CUDA 10.2和cuDNN 8.0.0。在VisDrone2019-test测试效果左边是Yolov8的结果,可以看出红色框中大部分目标没有检测出来
-
文章来源于计算机视觉研究院 ,作者计算机视觉研究院新框架设计介绍下图显示了我们提出的Drone-YOLO(L)网络模型的架构。该网络结构是对YOLOv8-l模型的改进。在网络的主干部分,我们使用RepVGG结构的重新参数化卷积模块作为下采样层。在训练过程中,这种卷积结构同时训练3×3和1×1卷积。在推理过程中,两个卷积核被合并为一个3×3卷积层。这种机制使网络能够在不影响推理速度或扩大模型大小的情况下学习更稳健的特征。在颈部,我们将PAFPN结构扩展到三层,并附加了一个小尺寸的物体检测头。通过结合所提出的三明治融合模块,从网络主干的三个不同层特征图中提取空间和信道特征。这种优化增强了多尺度检测头收集待检测对象的空间定位信息的能力。如下图所示,我们提出了sandwich-fusion(SF),这是一种三尺寸特征图的新融合模块,它优化了目标的空间和语义信息,用于检测头。该模块应用于颈部自上而下的层。该模块的灵感来自YOLOv6 3.0【YOLOv6 v3.0: A Full-Scale Reloading】中提出的BiC模型。SF的输入如图所示,包括主干较低阶段、相应阶段和较高阶段的特征图。目标是平衡低级特征的空间信息和高级特征的语义信息,以优化网络头部对目标位置的识别和分类。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签