实现原理就不写了,之前参考的是https://www.jianshu.com/p/7f30b5935f3f这篇文章的内容。本来想着自己实现一下SPP空间池化金字塔,但是这篇文章虽然有贴了SPP的python实现方式,但在实际应用中还是会出现问题,这里贴上我自己的解决办法。
这是网络的输入结构,由于是做多尺寸输入的,所以输入shpae是(None,None,3),这两个None也是参考链接中代码无法直接使用的原因。
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(None, None, 3)))
这是修改后的代码,我的网络中这一层的输入shape是(None,None,None,3)
import tensorflow as tf
import numpy as np
# 4*4+3*3+2*2+1 = 30
class SPP_layer(tf.keras.layers.Layer):
def __init__(self, num_levels=4, pool_type='max_pool'):
super(SPP_layer, self).__init__()
self.num_levels = num_levels
self.pool_type = pool_typ