cnn 回归 坐标 特征图_Keras CNN坐标回归只给出平均值

在尝试使用Keras构建一个CNN,输入75x75图像来预测源的(x, y)坐标时,发现模型的回归器总是输出训练数据的平均像素值。模型结构包括卷积层、池化层和全连接层,损失函数为均方误差(MSE)。尽管尝试了论文中提到的方法,预测结果依然集中在平均值,而不是覆盖整个探测器的正确范围。目前疑惑如何调整模型使得预测更接近每个样本的真实坐标。" 81943692,5818750,Android NDK调试与Crash定位:LLDB、addr2line与ndk-stack实战,"['Android开发', 'C/C++编程', '移动开发', '调试工具', 'NDK']
摘要由CSDN通过智能技术生成

我一直在尝试实现一个CNN,给定一个探测器的(75x75)图像,它将输出该图像源的(x,y)坐标。每个图像都有一些特性,可以确定源。我要解决的问题是,输出x,y坐标的回归器总是返回所有训练数据的平均像素值。我试图实现本文中概述的回归器:https://arxiv.org/abs/1803.10698,但它仍然给出了所有预测的平均像素值。这里是我的模型的简短版本:model = Sequential()

# Base Conv layer

model.add(Conv2D(32, kernel_size=patch_size, strides=(1, 1),

activation='relu', padding='same',

input_shape=(75, 75, 1)))

model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding=optimizer))

model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

for i in range(num_conv):

model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding='same))

model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding='same))

model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Flatten())

for i in range(num_dense):

model.add(Dense(512, activation='linear'))

model.add(Dropout(dropout_layer))

# Final Dense layer

# 2 so have one for x and one for y

model.add(Dense(2, activation='linear'))

model.compile(optimizer='adam', loss='mse', metrics=['mae'])

我没有代表张贴图片的来源,但这是真相和输出时,它是培训42000图像:

1ac12c5585b9d500a7d0cd3591eb5950.png

533d08b5bc49c44fc4e337ed0bb66bcd.png

4aebb6fdda34d2509517e84b7995ec72.png

73b7e862cc68fa241bcd23bf715f97a8.png

正如你所看到的,它是可怕的错误,所有的估计都在x,y坐标的平均值的一个点上。而实际值会形成一个覆盖整个探测器的圆圈。我不知道如何让它实际输出正确的值。我认为,作为损失的均方误差可能应该使估计成为中心值,因为它是与所有来源的最小平方距离,但我不确定如何尝试它,因为我想最小化每个预测和它各自的标签之间的距离。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值