我在 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 的任何资源中都找不到输出层的激活函数。
如果你参考原始论文,他们对最后一层使用线性激活。在"2.2.培训"您可以找到:
我们对最后一层使用线性激活函数和 所有其他层使用以下泄漏整流线性激活...