arrays - 具有 RGB 输入和 BW 二进制输出的 CNN

标签 arrays tensorflow keras

我是深度学习的初学者,我正在使用基于 Tensorflow 构建的 Keras。我正在尝试使用 RGB 图像 (540 x 360) 分辨率来预测边界框。

我的标签是二进制(黑/白)二维 np 维度数组(540, 360),其中除框边缘为 1 外,所有像素均为 0。 像这样:

   [[0 0 0 0 0 0 ... 0]
    [0 1 1 1 1 0 ... 0]
    [0 1 0 0 1 0 ... 0]
    [0 1 0 0 1 0 ... 0]
    [0 1 1 1 1 0 ... 0]
    [0 0 0 0 0 0 ... 0]]

每张图片中可以有多个边界框。典型的图像可能如下所示:FRCBox

所以,我的输入的尺寸为 (None, 540, 360, 3),输出的尺寸为 (None, 540, 360) 但如果我添加一个内部数组我可以将形状更改为 (None, 540, 360, 1)

如何定义 CNN 模型以使我的模型符合此标准?如何设计具有这些输入和输出的 CNN?

最佳答案

您必须区分对象检测和对象分割。虽然两者都可以用于解决类似的问题,但底层的 CNN 架构看起来非常不同。

对象检测模型使用 CNN 分类/回归架构,其中输出指的是边界框的坐标。通常的做法是使用属于每个边界框的垂直中心、水平中心、宽度和高度的 4 个值。搜索 Faster R-CNN、SSD 或 YOLO 以查找 keras 的流行对象检测模型。在您的情况下,您需要定义一个函数,将当前标签转换为我提到的 4 个坐标。

对象分割模型通常使用一种称为编码器-解码器网络的架构,其中原始图像在前半部分被缩小和压缩,然后恢复到其原始分辨率以预测完整的图像。图像。搜索 SegNet、U-Net 或 Tiramisu 以查找 keras 的流行对象分割模型。我自己的U-Net实现可以找到here 。在您的情况下,您需要定义一个自定义函数,用 1 填充边界框内的所有 0。了解此解决方案不会预测边界框本身,而是预测显示感兴趣区域的分割图。

什么适合您,取决于您想要实现的目标。为了获得实际的边界框,您需要执行对象检测。但是,如果您有兴趣突出显示超出矩形窗口的感兴趣区域,则分段可能更适合。理论上,您可以使用矩形标签进行分割,只要您有足够的数据,网络将学习创建比地面实况的不准确分割更好的掩模。

关于arrays - 具有 RGB 输入和 BW 二进制输出的 CNN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48257205/

相关文章:

JQuery - 分割字符串(对于每个)

python - TensorFlow 相当于 PyTorch 的 transforms.Normalize()

python - tensorflow 和广播数学运算中的分段激活函数

tensorflow - 为什么在 keras 中训练 convlstm 层时,每个 epoch 的准确率都会下降到零?

PHP artisan循环数组错误

php - 在 PHP 中删除数组项的最佳方法是什么?

tensorflow - 为可变大小的输入和固定大小的输入创建 TensorFlow 占位符有什么缺点吗?

python - TensorFlow 扩展 |训练器从 GenericExecutor 和 Keras 模型开始并不热心

Javascript 到 Perl 数组/哈希转换

python - 忽略具有计算能力 3.0 的可见 gpu 设备。最低要求的 Cuda 功能是 3.5