我试图弄清楚如何将分类模型转换为2d点提取模型。即训练如何检测图像中的4个坐标(不对其进行分类)。
最后删除softmax很有意义,但是我不确定如何训练模型以与N个坐标相匹配。我什至不确定如何构造标签数据。
自定义Mobilenet示例:
...
previous layer definitions
...
# final layer
def pool_and_classify(self):
model = self.model
model.add(AveragePooling2D(pool_size=(7,7),strides=(1,1)))
model.add(Flatten())
model.add(Dense(self.classes))
# model.add(Activation('relu')) #was 'softmax'
def create(self, size):
self.model = Sequential()
self.model.add(Conv2D(32,kernel_size=(3,3),strides=(2,2), padding='same', input_shape=size))
self.mobile_block(32,64)
self.mobile_block(128,128)
self.mobile_block(256,256)
self.separate()
self.final_conv_block()
self.pool_and_classify()
如果我想要4个坐标,那么最后一个密集层可能是8个?
答案 0 :(得分:0)
您可以在最后一层执行回归。为了提取4
点,您需要预测8
值(每个点的x和y坐标)。通常,对于N
点,您将需要预测2N
的值。所以你的最后一层应该是
model.add(Dense(2 * N))
您无需添加任何额外的激活即可进行回归。同样,您将需要使用均方损失而不是分类中使用的交叉熵损失。