我有一个输入图像416x416。如何创建4x 10的输出,其中4是列数,10是行数?
我的标签数据是4列10行的二维数组。
我知道reshape()
方法,但它要求生成的形状具有与输入相同数量的元素。
使用416 x 416输入大小和最大池层,我可以获得最大13 x 13
输出。
有没有办法在不丢失数据的情况下实现4x10
输出?
例如,我的输入标签数据如下所示
[[ 0 0 0 0]
[ 0 0 0 0]
[ 0 0 0 0]
[ 0 0 0 0]
[ 0 0 0 0]
[ 0 0 0 0]
[ 0 0 0 0]
[116 16 128 51]
[132 16 149 52]
[ 68 31 77 88]
[ 79 34 96 92]
[126 37 147 112]
[100 41 126 116]]
这表示我的图像上有6个对象需要检测,第一个值是xmin,第二个ymin,第三个xmax,第四个ymax。
我的网络的最后一层看起来像
(None, 13, 13, 1024)
我相信最简单的方法来符合你的预测形状和期望的输出是由@Darlyn提出的解决方案。假设您目前拥有的网络被声明为(输出形状张量
(13, 13, 1024)
)如下:您只需要添加一个回归层,该层将尝试预测这些框,然后将这些框重塑为
(10, 4)
:这是可行的,但我并不完全确信直接回归这些值会产生好的结果。我通常看到的目标检测模型使用注意力、区域或显著性来确定目标的位置。您可以尝试以下几种对象检测keras实现:
keras-rcnn
keras-retinanet
首先展平
(None, 13, 13, 1024)
层它将给出
13*13*1024=173056
一维张量
然后添加一个致密层
model.add(Dense(4*10))
它将输出到40这将把你的3D形状转换成1D
然后根据需要调整大小
model.add(Reshape(4,10))
这将起作用,但绝对会破坏数据的空间性质
相关问题 更多 >
编程相关推荐