问题标签 [siamese-network]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
80 浏览

machine-learning - 我有 2 个文件夹。一个图像在 1 个文件夹中,另一个图像在另一个文件夹中。我必须比较两张图片并找出不同之处

我有 2 个文件夹。一个图像在 1 个文件夹中,另一个图像在另一个文件夹中。我必须比较两个图像并找到不同之处,但代码是随机文件夹编写的。

我从 GitHub 获取了这段代码,当我尝试比较两个图像的差异时,它是随机选择图像。输入文件夹是 2。一个图像应该在一个文件夹中,另一个图像应该在另一个文件夹中。当我尝试测试它时,它会在同一张图像上进行测试,有时我的意思是它没有检查另一个文件夹中的另一个图像。

0 投票
0 回答
611 浏览

python - UnimplementedError:不支持将字符串转换为浮点数

UnimplementedError Traceback(最近一次调用最后一次)

UnimplementedError:发现 2 个根本错误。(0) 未实现:不支持将字符串转换为浮点数 [[node functional_11/Cast (defined at :1)]] (1) 已取消:函数在启动前已取消 0 次成功操作。0 派生错误被忽略。[操作:__inference_train_function_47870]

函数调用栈:train_function -> train_function

这是我的代码。知道我在做什么错吗?

0 投票
3 回答
440 浏览

python - 如何配对另一个numpy数组中大致相同的矩阵

背景

我有以下代码,它就像一个魅力,用于为连体网络配对:

好的,此代码通过为 MNIST 数据集中的每个图像选择对来工作。它通过随机选择同一类(标签)的另一张图像和不同类(标签)的另一个补丁来制作另一对来为该图像构建一对。通过运行代码,返回的两个矩阵的最终形状为:

我的数据集

我想对另一个数据集做一些不同的事情。假设我有另一个 5600 个 RGB 图像的数据集,尺寸为 28x28x3,如下所示:

我有另一个数组,我们称之为labels2,它有 8 个标签用于所有 5600 个图像,每个标签有 700 个图像,如下所示:

我想做什么

我的数据集不是 MNIST 数据集,因此来自同一类的图像不太相似。我想以以下方式构建大致相同的对:

  1. 对于我的数据集中的每个图像,我想要执行以下操作:

    1.1。通过 MSE 计算该图像与数据集中所有其他图像之间的相似度。

    1.2 对于与该图像具有相同标签的图像的 MSE 集合,选择具有 7 个最小 MSE 的图像并构建 7 对,包含该图像加上 7 个最接近的 MSE 图像。这些对代表我的 Siamese Network 的同一类的图像。

    1.3 对于具有不同标签的图像的 MSE 集合,从该图像中选择,对于每个不同的标签,只有一个具有最小 MSE 的图像。因此,由于有 7 个标签与该图像的标签不同,因此该图像还有 7 个对。

由于我的数据集有 5600 张28x28x3的图像,并且对于每张图像,我构建了 14 对(7 个相同的类,7 个不同的类)我期望有一个大小为 (78400, 2, 28, 28, 3)

我做了什么

我有以下代码完全符合我的要求:

我的问题

我的代码的问题在于,当我为图像编号 2200 运行对构造时,它只是冻结了我的计算机,我试图在每个循环之后清理变量,如您在上面的代码中看到的那样(del image_to_pair,currentImage,label,mse_that_class ,imgs,indices_sorted,idxs,mse_all)。问题是,一个 (120000, 2, 28, 28) pairImages 矩阵并不难构建,但一个 (78400,2,28,28,3) 是。所以:

  1. 这是一个可能的内存问题吗?
  2. 我可以清理代码中的更多变量以使其正常工作吗?
  3. 我是否应该考虑我的 pairImages 矩阵的最后一个维度,使其具有比第一个示例更小的维度,从而可以工作?
  4. 有没有更简单的方法来解决我的问题?

您可以在此处找到功能代码和输入矩阵

0 投票
1 回答
136 浏览

numpy - 如何使用 Keras 将输入和输出数据拟合到连体网络中?

我正在尝试使用野外标记的面孔(Kaggle 中的 LFW 数据集)来实现人脸识别连体网络。

训练数据图像对以以下格式存储:

ndarray[ndarray[image1,image2],ndarray[image1,image2]...] 等等。图像为 224*224 大小的 RGB 通道。

有 2200 个训练对,1100 个匹配图像对和 1100 个不匹配图像对。此外,还有 1000 个测试对,其中 500 个匹配图像对和 500 个不匹配图像对。

我设计了具有 VGG-16 架构的连体网络。模型总结如下:

模型摘要

但是,当我尝试为数据拟合模型时,出现此错误:

错误图片

网络的代码是:

在下面的代码片段中,train_nparr_pairs 有 2200 个匹配和不匹配的图像,而 test_nparr_pairs 有 1000 个匹配和不匹配的图像。train_labels 和 test_labels 有 0 和 1 基于正对和负对。

有什么我在这里想念的吗?

0 投票
1 回答
84 浏览

numpy - 如何设置连体网络的图像大小?

我正在开发一个用于人脸识别的连体神经网络。图像是 RGB 通道,大小为 224*224。有 2200 对训练图像和 1000 对测试图像。

在训练这个模型的过程中,我得到了这个错误:

错误图像

形状和 model.fit 代码如下:

神经网络的架构:

我知道这与 train 和 test numpy arrays 的形状有关。我尝试使用 expand dims 和 reshape 来调整尺寸,但错误仍然保持不变。有没有办法调试这个错误?

0 投票
1 回答
1613 浏览

python - 如何在 Keras 中使用预训练的 CNN 实现连体网络?

我正在使用 Keras 为 224x224x3 大小的图像开发一个用于人脸识别的连体网络。Siamese Network 的架构是这样的:

连体网络结构

对于 CNN 模型,我正在考虑使用已经在 Keras.applications 模块中预训练的 InceptionV3 模型。

由于模型是预训练的,我得到了错误,我现在被困在为孪生网络实现距离层。

为了使这个连体网络正常工作,我应该在两者之间添加什么?

0 投票
1 回答
243 浏览

tensorflow - 为什么我的 CNN 没有按预期预测标签?

我对相似性学习的概念很陌生。我目前正在使用 Siamese Neural Network 为 Wild Dataset 中的标记人脸做一个人脸识别模型。

连体网络模型的代码(将每个代码片段视为 Colab 中的一个单元格):

连体网络图

在输出中,可以注意到整个会话中的损失和准确性是相同的。val_loss 的值正好是 0.5。此外,val_accuracy 在整个会话期间保持不变。我已经对图像进行了标准化,但仍然会发生这种情况。这个输出背后有什么原因吗?

0 投票
1 回答
192 浏览

tensorflow - 形状与 vgg16 keras 不匹配:预期 ndim=4,发现 ndim=2,收到形状 [无,无]

在尝试学习 keras 和深度学习时,我想创建一个图像抠图算法,该算法使用类似于修改后的自动编码器的架构,它需要两个图像输入(一个源图像和一个用户生成的 trimap)并产生一个图像输出(图像前景的 alpha 值)。编码器部分(两个输入)是使用预训练的 VGG16 进行简单的特征提取。我想使用低分辨率 alphamatting.com 数据集训练解码器。

运行附加的代码会产生错误: ValueError: Input 0 of layer block1_conv1 is incompatible with the layer: expected ndim=4, found ndim=2. Full shape received: [None, None]

我无法理解这个错误。我验证了我的 twin_gen 闭包正在为两个输入生成形状 (22, 256,256,3) 的图像批次,所以我猜问题是我以某种方式创建了错误的模型,但我看不出错误在哪里. 任何人都可以帮助阐明我如何看到这个错误吗?

0 投票
0 回答
85 浏览

python - 使用两个输入作为字符串构建连体网络

我正在尝试构建一个接收两个输入字符串的连体网络。我正在使用字符串类型,因为我加载了一个我想要训练的 USE 层。

当我尝试

如果我尝试使用浮点数,模型可以正确看到两个输入。

知道发生了什么吗?我确定这与输入的形状有关

0 投票
1 回答
84 浏览

tensorflow - 基于 Resnet 的(Tensorflow Keras)连体模型在使用 TripletHardLoss(Semi 也是)时在训练中提供“nan”验证损失

我有一个基于ResNet. 我正在使用 25k 类似类型的图像。我的图像有文字和一些图表。当我使用欧几里得距离 + 二元损失时,我得到了 95% 的准确度,Inception但与 Triplet Hard/Semi Hard Loss 相同,我得到了损失,准确nan度几乎为 0。请告诉我代码结构是否有问题。

group的值像 1,2,3 [不按顺序和一些缺失] 代表相同类型的数据。我Sparse在将值转换为str(1), str(3)等后使用。

我的DataFrame样子是这样的:

在此处输入图像描述