Kers版本FCN8实现

原文链接:https://blog.csdn.net/TYtangyan/article/details/90445814?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

 按照网上找到的一个FCN8 实现的:如下

代码:


 
 
  1. def FCN_8S(nClasses, input_height=512, input_width=256, nChannels=1):
  2. inputs = Input((input_height, input_width, nChannels))
  3. conv1 = Conv2D(filters= 32, input_shape=(input_height, input_width, nChannels),
  4. kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  5. name= 'block1_conv1')(inputs)
  6. conv1 = Conv2D(filters= 32, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  7. name= 'block1_conv2')(conv1)
  8. pool1 = MaxPooling2D(pool_size=( 2, 2), name= 'block1_pool')(conv1)
  9. conv2 = Conv2D(filters= 64, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  10. name= 'block2_conv1')(pool1)
  11. conv2 = Conv2D(filters= 64, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  12. name= 'block2_conv2')(conv2)
  13. pool2 = MaxPooling2D(pool_size=( 2, 2), name= 'block2_pool')(conv2)
  14. conv3 = Conv2D(filters= 128, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  15. name= 'block3_conv1')(pool2)
  16. conv3 = Conv2D(filters= 128, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  17. name= 'block3_conv2')(conv3)
  18. conv3 = Conv2D(filters= 128, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  19. name= 'block3_conv3')(conv3)
  20. pool3 = MaxPooling2D(pool_size=( 2, 2), name= 'block3_pool')(conv3)
  21. score_pool3 = Conv2D(filters= 3, kernel_size=( 3, 3),padding= 'same',
  22. activation= 'relu', name= 'score_pool3')(pool3)
  23. conv4 = Conv2D(filters= 256, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  24. name= 'block4_conv1')(pool3)
  25. conv4 = Conv2D(filters= 256, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  26. name= 'block4_conv2')(conv4)
  27. conv4 = Conv2D(filters= 256, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  28. name= 'block4_conv3')(conv4)
  29. pool4 = MaxPooling2D(pool_size=( 2, 2), name= 'block4_pool')(conv4)
  30. score_pool4 = Conv2D(filters= 3, kernel_size=( 3, 3),padding= 'same',
  31. activation= 'relu', name= 'score_pool4')(pool4)
  32. conv5 = Conv2D(filters= 256, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  33. name= 'block5_conv1')(pool4)
  34. conv5 = Conv2D(filters= 256, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  35. name= 'block5_conv2')(conv5)
  36. conv5 = Conv2D(filters= 256, kernel_size=( 3, 3), padding= 'same', activation= 'relu',
  37. name= 'block5_conv3')(conv5)
  38. pool5 = MaxPooling2D(pool_size=( 2, 2), name= 'block5_pool')(conv5)
  39. fc6 = Conv2D(filters= 1024, kernel_size=( 1, 1), padding= 'same', activation= 'relu',
  40. name= 'fc6')(pool5)
  41. fc6 = Dropout( 0.3, name= 'dropout_1')(fc6)
  42. fc7 = Conv2D(filters= 1024, kernel_size=( 1, 1), padding= 'same', activation= 'relu',
  43. name= 'fc7')(fc6)
  44. fc7 = Dropout( 0.3, name= 'dropour_2')(fc7)
  45. score_fr = Conv2D(filters=nClasses, kernel_size=( 1, 1), padding= 'same',
  46. activation= 'relu',name= 'score_fr')(fc7)
  47. score2 = Conv2DTranspose(filters=nClasses, kernel_size=( 2, 2), strides=( 2, 2),
  48. padding= "valid", activation= None,
  49. name= "score2")(score_fr)
  50. add1 = add(inputs=[score2,score_pool4], name= "add_1")
  51. score4 = Conv2DTranspose(filters=nClasses, kernel_size=( 2, 2), strides=( 2, 2),
  52. padding= "valid", activation= None,
  53. name= "score4")(add1)
  54. add2 = add(inputs=[score4,score_pool3], name= "add_2")
  55. UpSample = Conv2DTranspose(filters=nClasses, kernel_size=( 8, 8), strides=( 8, 8),
  56. padding= "valid", activation= None,
  57. name= "UpSample")(add2)
  58. outputs = core.Activation( 'softmax')(UpSample)
  59. model = Model(inputs=inputs, outputs=outputs)
  60. adam = optimizers.Adam(lr= 0.0001, beta_1= 0.9, beta_2= 0.999, epsilon= None,
  61. decay= 0.0, amsgrad= False)
  62. model.compile(loss= 'categorical_crossentropy', optimizer=adam,
  63. metrics=[ 'accuracy'])
  64. model.summary()
  65. return model

 

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值