【深度学习】#12 计算机视觉

主要参考学习资料:

《动手学深度学习》阿斯顿·张 等 著

【动手学深度学习 PyTorch版】哔哩哔哩@跟李沐学AI

目录

在卷积神经网络和现代卷积神经网络两章中,我们只介绍了图像分类模型。由于深度神经网络可以有效地表示多个层次的图像,现今其已被成功应用于更多计算机视觉任务。本章将讨论目标检测、语义分割和风格迁移三种任务,在有限的篇幅内,重点介绍目标检测部分基础模型的设计思路,简要介绍语义分割和风格迁移的基本原理。

目标检测

图像分类假定图像中只有一个目标,我们只关注如何识别其类别。然而,很多时候图像中有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置,这类任务称为目标检测

在目标检测中,我们通常使用边界框 来描述对象的空间位置。边界框是矩形的,由左上角以及右下角的 x x x坐标或 y y y坐标确定,也可用边界框中心的轴坐标 ( x , y ) (x,y) (x,y)以及框的宽度和高度表示。

下图中狗和猫的边界框左上角以及右下角的坐标分别为 [ ( 60 , 45 ) , ( 378 , 516 ) ] [(60,45),(378,516)] [(60,45),(378,516)]和 [ ( 400 , 112 ) , ( 655 , 493 ) ] [(400,112),(655,493)] [(400,112),(655,493)]

锚框

目标检测算法通常会在输入图像中抽样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界,从而更准确地预测目标的真实边界框 。其中一种方法是以每个像素为中心,生成多个缩放比和宽高比不同的边界框,这些边界框被称为锚框(先验框)。

基于锚框的目标检测算法流程如下:

  1. 提出多个锚框区域;
  2. 预测每个锚框里是否含有关注的物体;
  3. 如果是,预测从这个锚框到真实边缘框的偏移。

假设输入图像的高度为 h h h,宽度为 w w w。对于缩放比为 s ∈ ( 0 , 1 ] s\in(0,1] s∈(0,1]、宽高比为 r > 0 r>0 r>0的锚框,其宽度和高度分别为 h s r hs\sqrt r hsr 和 h s / r hs/\sqrt r hs/r 。我们只需设置一系列缩放比取值 s 1 , ⋯   , s n s_1,\cdots,s_n s1,⋯,sn和宽高比取值 r 1 , ⋯   , r m r_1,\cdots,r_m r1,⋯,rm,就能以每个像素为中心生成多个不同形状的锚框。

但是如果将缩放比和宽高比的取值两两组合,将会在输入图像中生成 w ⋅ h ⋅ n ⋅ m w\cdot h\cdot n\cdot m w⋅h⋅n⋅m个锚框,很容易导致过高的计算复杂度,在实践中,我们只考虑包含 s 1 s_1 s1或 r 1 r_1 r1的组合

( s 1 , r 1 ) , ( s 1 , r 2 ) , ⋯   , ( s 1 , r m ) , ( s 2 , r 1 ) , ( s 3 , r 1 ) , ⋯   , ( s n , r 1 ) (s_1,r_1),(s_1,r_2),\cdots,(s_1,r_m),(s_2,r_1),(s_3,r_1),\cdots,(s_n,r_1) (s1,r1),(s1,r2),⋯,(s1,rm),(s2,r1),(s3,r1),⋯,(sn,r1)

此时对于整个输入图像将生成 w h ( n + m − 1 ) wh(n+m-1) wh(n+m−1)个锚框。

下图以 ( 250 , 250 ) (250,250) (250,250)为中心生成了一系列不同缩放比和宽高比的锚框:

交并比(IoU)

对于生成的锚框,如果已知目标的真实边界框,我们需要度量二者之间的相似性。杰卡德指数 可以度量两个集合的相似性,给定集合 A A A和 B B B,它们的杰卡德指数是它们交集的大小除以它们并集的大小

J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B)=\frac{|A\cap B|}{|A\cup B|} J(A,B)=∣A∪B∣∣A∩B∣

通过将任何边界框的像素区域视为像素的集合,我们可以通过其像素集的杰卡德指数来度量两个边界框的相似性。通常两个边界框的杰卡德指数被称为交并比 (IoU),即两个边界框相交面积与相并面积之比。交并比的范围在 0 0 0到 1 1 1之间,交并比越大,两个边界框重合面积占比越大,相似性越高。

锚框标注

在开始训练之前,我们需要为训练集进行标注,每个锚框都是训练集的一个训练样本。样本的标签包括类别偏移量。标注的流程大致如下:

  1. 根据IoU为每个锚框分配一个真实边界框,或视为背景,不分配真实边界框。
  2. 根据真实边界框的分配情况为每个锚框打上类别标签,非背景锚框被称为正类 锚框,并且被打上其对应真实边界框的类别,而背景锚框被称为负类锚框。
  3. 对于非背景锚框,计算并标注其与对应真实边界框之间的偏移量。
真实边界框分配

下面介绍分配真实边界框的一种方法。

给定图像,假设锚框为 A 1 , A 2 , ⋯   , A n a A_1,A_2,\cdots,A_{n_a} A1,A2,⋯,Ana,真实边界框为 B 1 , B 2 , ⋯   , B n b B_1,B_2,\cdots,B_{n_b} B1,B2,⋯,Bnb,其中 n a ⩾ n b n_a\geqslant n_b na⩾nb,则分配真实边界框的步骤为:

  1. 遍历并计算所有锚框与真实边界框之间的IoU,得到一个矩阵 X ∈ R n a × n b X\in\mathbb R^{n_a\times n_b} X∈Rna×nb,其中第 i i i行、第 j j j列的元素 x i j x_{ij} xij是锚框 A i A_i Ai和真实边界框 B j B_j Bj的IoU。
  2. 保证 n b n_b nb个真实边界框都至少被分配到一个锚框。
    1. 在矩阵 X X X中找到最大的元素,其行索引和列索引记为 i 1 i_1 i1和 j 1 j_1 j1,然后将真实边界框 B j 1 B_{j_1} Bj1分配给锚框 A i 1 A_{i_1} Ai1,并丢弃矩阵中第 i 1 i_1 i1行和第 j 1 j_1 j1列中的所有元素(防止锚框和真实边界框被重复分配)。
    2. 在矩阵 X X X的剩余元素中找到最大的元素,其行索引和列索引记为 i 2 i_2 i2和 j 2 j_2 j2,然后采取同样的操作。
    3. 延续上述操作,直至矩阵 X X X中的所有元素都被丢弃,此时 n b n_b nb个真实边界框都被分配到了一个锚框。
  3. 遍历并分配剩余的 n a − n b n_a-n_b na−nb个锚框。对于锚框 A i A_i Ai,在矩阵 X X X的第 i i i行中找到与 A i A_i Ai的IoU最大的真实边界框 B j B_j Bj,如果这个IoU大于预定义的阈值,则将 B j B_j Bj分配给 A i A_i Ai,否则将 A i A_i Ai视为背景。

下图展示了第二大步的操作,蓝色格子为剩余的元素,标记出的元素为被分配的锚框-真实边界框:

偏移量计算

给定锚框 A A A和真实边界框 B B B,它们的中心坐标分别为 ( x a , y a ) (x_a,y_a) (xa,ya)和 ( x b , y b ) (x_b,y_b) (xb,yb),宽度分别为 w a w_a wa和 w b w_b wb,高度分别为 h a h_a ha和 h b h_b hb,则 A A A的偏移量 ( Δ x , Δ y , Δ w , Δ h ) (\Delta x,\Delta y,\Delta w,\Delta h) (Δx,Δy,Δw,Δh)为

( x b − x a w a − μ x σ x , y b − y a h a − μ y σ y , log ⁡ w b w a − μ w σ w , log ⁡ h b h a − μ h σ h , ) \left(\frac{\displaystyle\frac{x_b-x_a}{w_a}-\mu_x}{\sigma_x},\frac{\displaystyle\frac{y_b-y_a}{h_a}-\mu_y}{\sigma_y},\frac{\log\displaystyle\frac{w_b}{w_a}-\mu_w}{\sigma_w},\frac{\log\displaystyle\frac{h_b}{h_a}-\mu_h}{\sigma_h},\right) σxwaxb−xa−μx,σyhayb−ya−μy,σwlogwawb−μw,σhloghahb−μh,

四个数值分别衡量 A A A与 B B B的横坐标偏移、纵坐标偏移、宽度比和高度比。 μ \mu μ和 σ \sigma σ用于规范化,其默认值为 μ x = μ y = μ w = μ h = 0 \mu_x=\mu_y=\mu_w=\mu_h=0 μx=μy=μw=μh=0, σ x = σ y = 0.1 \sigma_x=\sigma_y=0.1 σx=σy=0.1, σ w = σ h = 0.2 \sigma_w=\sigma_h=0.2 σw=σh=0.2。

损失函数

锚框的损失函数 L L L由类别标签的分类损失 L c l s L_{cls} Lcls和偏移量标签的回归损失 L r e g L_{reg} Lreg组成,可计算如下

L = L c l s + λ L r e g L=L_{cls}+\lambda L_{reg} L=Lcls+λLreg

分类损失可使用交叉熵损失计算,回归损失可使用平滑L1损失计算。

非极大值抑制预测

在预测时,我们先为图像生成多个锚框,再为这些锚框一一预测类别。如果锚框被预测为非背景锚框,则进一步计算它的偏移量,并根据偏移量对锚框进行偏移得到真正的预测框。对于锚框 A A A的初始位置和大小 ( x a , y a , w a , h a ) (x_a,y_a,w_a,h_a) (xa,ya,wa,ha)及其偏移量 ( Δ x , Δ y , Δ w , Δ h ) (\Delta x,\Delta y,\Delta w,\Delta h) (Δx,Δy,Δw,Δh),调整后的预测框位置和大小计算如下

x = x a + w a Δ x y = y a + h a Δ y w = w a e Δ w h = h a e Δ h \begin{split} x&=x_a+w_a\Delta x\\ y&=y_a+h_a\Delta y\\ w&=w_ae^{\Delta w}\\ h&=h_ae^{\Delta h} \end{split} xywh=xa+waΔx=ya+haΔy=waeΔw=haeΔh

最终,模型可能会输出许多相似的具有明显重叠的预测框,它们都围绕同一个目标。为了简化输出,我们可以使用非极大值抑制合并属于同一目标的相似的预测框,其步骤如下:

  1. 对每个预测框 B B B,取其对每个类别预测概率的最大值 p p p作为其置信度,该概率对应的类别即为预测类别。
  2. 将所有预测框根据置信度按降序排序,生成列表 L L L。
  3. 从 L L L中选取置信度最高的预测框 B 1 B_1 B1作为基准,将所有与 B 1 B_1 B1的IoU超过预定阈值 ϵ \epsilon ϵ的预测框从 L L L中移除,即移除了与 B 1 B_1 B1相似但置信度低于 B 1 B_1 B1的预测框。
  4. 从 L L L中选取置信度次高的预测框 B 2 B_2 B2作为基准,然后采取同样的操作。
  5. 重复上述过程,直至 L L L中剩余的预测框都曾被选为基准,此时 L L L中任意一对预测框的IoU都小于阈值 ϵ \epsilon ϵ,即没有一对预测框过于相似。
  6. 输出 L L L中的所有预测框。

下图展示了非极大值抑制的操作效果:

多尺度目标检测

即使我们已经缩减了锚框缩放比和高宽比的组合,但是为每个像素都生成锚框仍会导致过大的计算量。一个进一步减少图像上锚框数量的方法是多尺度锚框

多尺度锚框考虑到,在不同尺度下,较小的目标相对于较大的目标在图像上出现的可能性更为多样,例如在一张 2 × 2 2\times2 2×2像素的图像中, 1 × 1 1\times1 1×1像素、 1 × 2 1\times2 1×2像素和 2 × 2 2\times2 2×2像素的目标可以分别以 4 4 4种、 2 2 2种和 1 1 1种可能的方式出现。因此,当使用较小的锚框检测较小的目标时,我们可以抽样较多的取区域,而对于较大的目标,我们可以抽样较少的区域。

一种控制不同尺度抽样数量的方法是对于不同的尺度,根据尺度的大小在图像上选取一系列均匀分布的像素点作为锚框中心,并生成该尺度下一系列高宽比的锚框。

下图分别展示了尺度 s s s为 0.15 0.15 0.15、 0.4 0.4 0.4和 0.8 0.8 0.8时选取的像素中心及生成的锚框:

基于卷积神经网络的多尺度目标检测方法通常不直接在输入图像上生成不同尺度的锚框,而是利用卷积层提取输入图像不同尺度的特征,相应的特征输出被称为特征图。越靠后的卷积层输出的特征图的每个单元在输入图像上具有更大的感受野,因此不同特征图的一个单元就对应着输入图像上不同尺度的锚框。

单发多框检测(SSD)

单发多框检测(SSD)是一种简单、快速且被广泛使用的目标检测模型,其主要由一个基础网络块和若干多尺度特征块组成:

基础网络块用于从输入图像中提取特征,因此可以使用深度卷积神经网络(其设计者使用VGG块,现在也常用ResNet块)。基础网络块的输出将设置较大的高和宽,以便生成更多的锚框用于检测较小的目标。接下来的每个多尺度特征块将上一层提供的特征图的高和宽缩小,使得特征图中每个单元在输入图像上的感受野变大,从而检测更大的目标。

类别预测层

假设特征图的高和宽分别为 h h h和 w w w,以其中每个单元为中心生成 a a a个锚框,则我们需要对 h w a hwa hwa个锚框进行分类。又假设目标类别的数量为 q q q,则加上背景类别 0 0 0,锚框共有 q + 1 q+1 q+1个类别。如果使用全连接层分类很容易导致庞大的参数,因此我们使用NiN提供的思路(参见现代卷积神经网络一章),将通道维度视为特征维度,使用卷积层分类。卷积层要求输入和输出的特征图大小一致,以保证二者的坐标一一对应,而输出特征图上坐标 ( x , y ) (x,y) (x,y)的通道将包含以输入特征图上坐标 ( x , y ) (x,y) (x,y)为中心生成的 a a a个锚框关于 q + 1 q+1 q+1个类别的预测,因此输出通道数为 a ( q + 1 ) a(q+1) a(q+1),其中第 i ( q + 1 ) + j ( 0 ⩽ j ⩽ q ) i(q+1)+j(0\leqslant j\leqslant q) i(q+1)+j(0⩽j⩽q)个通道代表第 i i i个锚框被预测为类别 j j j的概率。

边界框预测层

边界框预测层的设计与类别预测层类似,只是其输出通道是对每个锚框的四个偏移量的预测,因此输出通道数为 4 a 4a 4a。

简而言之,SSD的预测过程如下:

  1. 输入图像经基础网络块和一系列多尺度特征块,得到一系列不同尺度的输出特征图。
  2. 在每个输出特征图上以每个单元为中心生成 a a a个锚框,并对这些锚框进行类别和偏移量预测得到一系列预测框。
  3. 对所有预测框进行非极大值抑制处理,得到最终输出的预测框。

区域卷积神经网络(R-CNN)

R-CNN及其一系列改进方法是将深度模型应用于目标检测的另一个开创性工作。限于篇幅本节对部分方法只作简要解释。

R-CNN

R-CNN的预测过程如下:

  1. 对输入图像使用选择性搜索选取多个高质量的提议区域。
  2. 通过各向异性缩放(直接拉伸)或各向同性缩放(先填充再按比例拉伸)将提议区域缩放为固定大小。
  3. 选择一个预训练的卷积神经网络,提取每个提议区域的特征。
  4. 类别预测:为每个类别(除了背景类别)训练一个二分类支持向量机,使用每个支持向量机根据提议区域的特征判断其是否属于某个类别。
  5. 边界框预测:使用线性回归模型根据提议区域的特征预测每个提议区域的偏移量,进而得到每个提议区域的预测框。
  6. 对所有预测框进行非极大值抑制处理,得到最终输出的预测框。
选择性搜索

选择性搜索是一种传统计算机视觉算法,其目标是生成可能包含物体的候选区域。选择性搜索的过程为:

  1. 使用Felzenswalb图像分割算法(基于图像边缘信息)将图像分割为超像素(像素集),得到一系列初始区域的集合 R = { r 1 , r 2 , ⋯   , r n } R=\{r_1,r_2,\cdots,r_n\} R={r1,r2,⋯,rn}。
  2. 对每个相邻区域 ( r i , r j ) (r_i,r_j) (ri,rj),分别计算它们的颜色、纹理、大小和形状相似度。
  3. 每次迭代选择综合相似度最高的区域将相邻区域合并为新区域并更新新区域的特征,直到整张图像成为一个区域。
  4. 在合并过程中记录所有中间区域的边界框作为候选区域,最后使用非极大值抑制移除高度重叠的冗余框(通常保留约2000个候选区域)。
支持向量机

支持向量机是一种非神经网络的机器学习分类模型,其原理为:

  1. 通过核函数将数据集映射到高维空间,使之线性可分(能用一个超平面将不同类别的特征分割)。
  2. 找到一个超平面将两类特征分开,并最大化支持向量(距离超平面最近的样本点)到超平面的距离。
  3. 使用超平面作为决策边界对输入进行分类。

Fast R-CNN

R-CNN的缺点在于,其第二步的卷积神经网络对每个提议区域独立处理,因此对于提议区域中相互重叠的部分会重复计算。Fast R-CNN采取的改进是通过直接对整张图像进行处理来减少不必要的计算,其步骤如下:

  1. 对输入图像使用选择性搜索生成多个提议区域。
  2. 将整个输入图像作为卷积神经网络的输入提取共享特征。
  3. 由提议区域在共享特征上标出一系列兴趣区域,使用兴趣区域汇聚层将其处理为固定形状。
  4. 通过全连接层进一步调整形状后进行预测。
兴趣区域汇聚层

兴趣区域汇聚层接收整张图像的特征和候选区域为输入,输出固定大小的候选区域特征,其步骤如下:

  1. 将候选区域按坐标比例缩放后投影到特征图上,选出共享特征中与候选区域对应的部分。
  2. 将投影区域平均划分为 m × n m\times n m×n的网格。
  3. 每个网格进行最大汇聚操作(取最大值作为输出),得到 m × n m\times n m×n的固定形状输出。

Faster R-CNN

Faster R-CNN在Fast R-CNN的基础上,将生成提议区域的方法由选择性搜索替换为区域提议网络(RPN),进一步减少了提议区域生成的数量,并确保目标检测的精确度。

RPN本质上是一个轻量级目标检测模型,以更低的计算成本快速对可能包含物体的区域进行粗筛(只对是否包含物体进行二元分类),相当于在仔细观察之前先进行了一次扫视。

使用RPN让R-CNN更加近似地实现了端到端的学习范式,即从输入到输出由统一的模型完成,所有模块可以联合训练。而在R-CNN和Fast R-CNN中,选择性搜索、支持向量机模块脱离了神经网络,都需要独立训练。除此之外,神经网络相较其他方式可以利用GPU实现高效计算,运行在CPU的选择性搜索算法生成2000个候选框需要约2秒,而RPN仅需约10ms。

YOLO

YOLO是目标检测领域最具影响力的算法之一,以极快的速度和端到端的设计著称。和R-CNN系列的双阶段检测不同,YOLO将检测任务视为单次回归问题,直接在图像上预测边界框和类别,实现了真正的实时检测。

YOLO的核心思路为将图像划分为 S × S S\times S S×S的网格,每个网格负责预测中心落在该区域的目标,直接生成 B B B个预测框的坐标和置信度,无需生成候选框。YOLO经过数年迭代,融入许多改进点,其系列已演进到YOLOv8,本文暂不深入展开。

语义分割

语义分割重点关注如何将图像分割成属于不同语义类别的区域。与目标检测不同,语义分割可以识别并理解图像中每个像素的内容,其语义区域的标注和预测是像素级的。

转置卷积

我们目前介绍的卷积神经网络层通常会减少下采样输入图像的空间维度(高和宽),如果输入图像和输出图像的空间维度相同,在以像素级分类的语义分割中将会很方便。转置卷积可以逆转下采样导致的空间维度减小,增加上采样中间层特征图的空间维度。

基本操作

转置卷积可以理解为卷积的逆操作。在转置卷积中,卷积核并不是和输入图像上与之形状相同的区域做按元素乘法并求和的运算,而是每次选中一个元素,该元素分别和卷积核的每个元素做乘法得到和卷积核形状相同的输出。将输入图像中每个元素和卷积核运算的输出按步幅叠加即可得到放大的输出。

填充、步幅和多通道

与常规卷积不同,转置卷积的填充被应用于输出,且填充操作实际上是裁剪输出边缘对应数量的行和列,这也可以从卷积的逆操作来理解。

同样地,步幅也是为输出而非输入指定的,其表示每次卷积核操作之后输出位置的滑移量,下图展示了步幅为2的转置卷积:

对于多输入输出通道,转置卷积与常规卷积以相同的方式操作,即每个输入通道都会被分配与输出通道数目相同的卷积核,每个卷积核负责一个输入通道到一个输出通道的计算。

全卷积网络(FCN)

全卷积网络(FCN)通过引入转置卷积,采用卷积神经网络实现了从图像像素到像素类别的转换。FCN开创了全卷积架构的先河,奠定了现代分割网络的基础。

FCN的核心改进在于将传统卷积神经网络的全连接层替换为了转置卷积层。FCN先使用卷积神经网络提取图像特征,然后通过 1 × 1 1\times1 1×1卷积层将通道数转换为类别数,再通过转置卷积层将特征图的高和宽转换为输入图像的大小,而每个像素的每个输出通道表示该像素被预测为对应类别的概率。

风格迁移

风格迁移是一种将艺术风格与图像内容相结合的计算机视觉技术,它接收两张图像作为输入,一张是内容图像,另一张是风格图像。模型将修改内容图像,使其在风格上接近风格图像。

一种基于卷积神经网络的风格迁移模型如下图所示,实线箭头和虚线箭头分别表示前向传播和反向传播:

该模型中,每个图像都由一个预训练好的卷积神经网络处理,在训练中无需更新。该卷积神经网络凭借多个层逐级提取图像的特征,其中某些层被指定输出内容特征或风格特征。

模型在风格迁移过程中所需迭代的模型参数即合成图像,其迭代流程如下:

  1. 初始化合成图像,通常使用内容图像,合成图像将在内容图像的基础上不断演进。
  2. 使用卷积神经网络提取内容图像和风格图像的内容特征和风格特征。
  3. 迭代合成图像:
    1. 使用卷积神经网络提取合成图像的内容特征和风格特征。
    2. 计算合成图像与内容图像之间的内容损失 、合成图像与风格图像之间的风格损失 和合成图像的全变分损失(总变差损失)。
    3. 三个损失通过反向传播对合成图像进行优化。
    4. 重复上述操作。
  4. 迭代一定次数后得到最终的合成图像。

其中,内容(风格)损失均通过平方误差函数度量合成图像与内容(风格)图像在特征上的差异得到。而全变分损失度量邻近像素值的差异,用于去除合成图像中大量的高频噪点,即特别亮或特别暗的像素。假设 x i , j x_{i,j} xi,j表示坐标 ( i , j ) (i,j) (i,j)处的像素值,则全变分损失计算如下:

∑ i , j ∣ x i , j − x i + 1 , j ∣ + ∣ x i , j − x i , j + 1 ∣ \sum_{i,j}|x_{i,j}-x_{i+1,j}|+|x_{i,j}-x_{i,j+1}| i,j∑∣xi,j−xi+1,j∣+∣xi,j−xi,j+1∣

相关推荐
小袁拒绝摆烂5 分钟前
OpenCV-几何变化和图像形态学
人工智能·opencv·计算机视觉
摆烂仙君18 分钟前
南京邮电大学金工实习答案
人工智能·深度学习·aigc
视觉语言导航31 分钟前
中科院自动化研究所通用空中任务无人机!基于大模型的通用任务执行与自主飞行
人工智能·深度学习·无人机·具身智能
moonsims31 分钟前
道通龙鱼系列-混合翼无人机:垂直起降+长时续航
人工智能·无人机
视觉语言导航36 分钟前
南航无人机大规模户外环境视觉导航框架!SM-CERL:基于语义地图与认知逃逸强化学习的无人机户外视觉导航
人工智能·深度学习·无人机·具身智能
学算法的程霖38 分钟前
CVPR2025 | 首个多光谱无人机单目标跟踪大规模数据集与统一框架, 数据可直接下载
人工智能·深度学习·目标检测·机器学习·计算机视觉·目标跟踪·研究生
DisonTangor1 小时前
阿里巴巴开源移动端多模态LLM工具——MNN
人工智能·开源·aigc
界面开发小八哥1 小时前
「Java EE开发指南」如何使用MyEclipse的可视化JSF编辑器设计JSP?(二)
java·ide·人工智能·java-ee·myeclipse
Tiny番茄1 小时前
归一化函数 & 激活函数
人工智能·算法·机器学习
今天也想MK代码2 小时前
基于WebRTC的实时语音对话系统:从语音识别到AI回复
人工智能·webrtc·语音识别