YOLO算法输出层激活功能

时间:2019-08-10 14:36:02

标签: tensorflow keras classification object-detection yolo

我已经在Keras中建立了一个简单的YOLO本地化模型,

model_layers = [
    keras.layers.Conv2D( 32 , input_shape=( input_dim , input_dim , 3 ) , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.Conv2D( 32 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.MaxPooling2D( pool_size=( 2 , 2 ) , strides=2 ),
    keras.layers.Conv2D( 64 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.Conv2D( 64 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.MaxPooling2D( pool_size=( 2 , 2 ) , strides=2 ),
    keras.layers.Conv2D( 64 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.Conv2D( 64 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.MaxPooling2D( pool_size=( 2 , 2 ) , strides=2 ),
    keras.layers.Conv2D( 128 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.Conv2D( 128 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.Conv2D( 64 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.Conv2D( 64 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.Conv2D( 32 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
    keras.layers.Conv2D( 8 , kernel_size=( 3 , 3 ) , strides=1 ),
]

model = keras.models.Sequential( model_layers ) 
model.compile( loss=yolo_keras_loss , optimizer=keras.optimizers.Adam( lr=0.0001 ) )
model.summary()

正如所观察到的,最后一层的激活函数是“线性的”。

  

但是关于YOLO的输出,所有值(置信度得分,   边界框坐标和类概率()被标准化。所以   我应该使用S型激活函数还是线性激活   功能?

在涉及YOLO的任何资源中都找不到输出层的激活功能。

1 个答案:

答案 0 :(得分:0)

如果您参考 original paper,他们对最后一层使用线性激活。在“2.2. 培训”部分,您可以找到:

<块引用>

我们对最后一层使用线性激活函数 所有其他层使用以下泄漏整流线性激活...