python - 用 CNN 预测图像中多个圆的半径
问题描述
我正在尝试使用卷积神经网络计算图像中圆的半径。我只有图像作为输入和输出端的半径,所以映射是[图像]->[圆的半径]。
输入维度和神经网络架构如下:
from tensorflow.keras import layers
from tensorflow.keras import Model
img_input = layers.Input(shape=(imgsize, imgsize, 1))
x = layers.Conv2D(16, (3,3), activation='relu', strides =1, padding = 'same')(img_input)
x = layers.Conv2D(32, (3,3), activation='relu', strides = 2)(x)
x = layers.Conv2D(128, (3,3), activation='relu', strides = 2)(x)
x = layers.MaxPool2D(pool_size=2)(x)
x = layers.Conv2D(circle_per_box, 1, activation='linear', strides = 2)(x)
output = layers.Flatten()(x)
model_CNN = Model(img_input, output)
model_CNN.summary()
model_CNN.compile(loss='mean_squared_error',optimizer= 'adam', metrics=['mse'])
X_train, X_test, Y_train, Y_test = train_test_split(image, radii, test_size=0.2, random_state=0)
print(X_train.shape, X_test.shape, Y_train.shape, Y_test.shape)
(8000, 12, 12, 1) (2000, 12, 12, 1) (8000, 1) (2000, 1)
Y_train
array([[1.01003947],
[1.32057104],
[0.34507285],
...,
[1.53130402],
[0.69527609],
[1.85973669]])
如果我为每个图像计算一个圆圈,我会得到一个可靠的结果:
然而,每张图片有更多的圆圈(见图片),同一个网络崩溃了,我得到以下结果:
2 个圆圈的 Y.train 形状为:
Y_train.shape
(10000, 2)
Y.train
array([[1.81214007, 0.68388911],
[1.47920612, 1.04222943],
[1.90827465, 1.43238623],
...,
[1.40865229, 1.65726638],
[0.52878558, 1.94234548],
[1.57923437, 1.19544775]])
为什么神经网络会这样?如果我尝试如上所述分别计算图像中两个生成的圆的半径,我会再次获得良好的结果,但如果图像中同时存在两个圆则不会。
有没有人有任何想法/建议?
解决方案
推荐阅读
- ruby-on-rails - 在引发错误的方法中调用 RSpec 测试 Rollbar
- ios - 表格视图中的行不会扩展它的宽度并且是堆叠的 Swift
- eclipse-cdt - Eclipse CDT 将 #ifndef 下的错误部分代码变灰
- r - 读取 csv 文件,其中一个变量的值针对 R 中的每个观察值扩展为多行
- c# - 如何使用 C# HttpClient 发送未编码的表单数据
- java - 检查大写、小写、数字、符号和空格
- java - 如何在运行 junit4 集成测试之前通过 maven 部署战争?
- r - 执行 keras CNN 模型不断让我的电脑崩溃
- kubernetes - 是否可以使用 liveness probe 或任何其他方式将 Pod 强制标记为“终止”
- c++ - 在 C++ 中以指数形式打印素数分解