HS-ResNet,模型涨点的新方案

前言

近几年的模型结构的改进,越来越偏向于宽度的改进,如SKnet以及ResNeSt,都获得了不错的结果,本文讨论的是百度所提出的HS-ResNet,通过对网络的复现以及论文的阅读,感觉本片paper是把Res2Net思想和ResNeSt结合到一起了。

模型介绍

在这里插入图片描述
网络模型如图所示,先像ResNeSt一样,在channel这个层级上把结构split为5分,每一份都和前面的一份concat(类似Res2Net)操作,后进行卷积,最后再把得到的特征进行concat。

代码实现

import tensorflow as tf

x = tf.placeholder(tf.float32,[None, 500, 500, 3])#输入图片大小

def Hierarchical_split(x, channel):
    channel_begin=x.get_shape().as_list()[-1]
    ##第一阶段
    layer1=tf.nn.relu(tf.layers.batch_normalization(tf.layers.conv2d(x,channel,1,strides=1, padding='same'),axis=-1,momentum=0.99,epsilon=0.001, center=True, scale=True,))
    layer1_0,layer1_1,layer1_2,layer1_3,layer1_4=tf.split(layer1,5,-1)
    ##第二阶段
    channel1=layer1_1.get_shape().as_list()[-1]*2
    layer1_1=tf.nn.relu(tf.layers.batch_normalization(tf.layers.conv2d(layer1_1,channel1,3,strides=1, padding='same'),axis=-1,momentum=0.99,epsilon=0.001, center=True, scale=True,))
    layer1_1_0,layer1_1_1=tf.split(layer1_1,2,-1)    
    ##第三阶段
    channel2=layer1_2.get_shape().as_list()[-1]*2

    layer1_2=tf.concat([layer1_2,layer1_1_1],-1)
    layer1_2=tf.nn.relu(tf.layers.batch_normalization(tf.layers.conv2d(layer1_2,channel2,3,strides=1, padding='same'),axis=-1,momentum=0.99,epsilon=0.001, center=True, scale=True,))
    layer1_2_0,layer1_2_1=tf.split(layer1_2,2,-1)          
    ##第四阶段
    channel3=layer1_3.get_shape().as_list()[-1]*2
    layer1_3=tf.concat([layer1_3,layer1_2_1],-1)
    layer1_3=tf.nn.relu(tf.layers.batch_normalization(tf.layers.conv2d(layer1_3,channel3,3,strides=1, padding='same'),axis=-1,momentum=0.99,epsilon=0.001, center=True, scale=True,))
    layer1_3_0,layer1_3_1=tf.split(layer1_3,2,-1)             
    ##第五阶段
    channel4=layer1_4.get_shape().as_list()[-1]*2
    layer1_4=tf.concat([layer1_4,layer1_3_1],-1)
    layer1_4=tf.nn.relu(tf.layers.batch_normalization(tf.layers.conv2d(layer1_4,channel4,3,strides=1, padding='same'),axis=-1,momentum=0.99,epsilon=0.001, center=True, scale=True,))      
    ##第六阶段
    layer_all=tf.concat([layer1_0, layer1_1_0, layer1_2_0, layer1_3_0, layer1_4],-1)  
    layer_all=tf.nn.relu(tf.layers.batch_normalization(tf.layers.conv2d(layer_all,channel_begin,1,strides=1, padding='same'),axis=-1,momentum=0.99,epsilon=0.001, center=True, scale=True,))
    return x+layer_all
layer1=tf.nn.relu(tf.layers.conv2d(x,256,3,strides=1, padding='same'))
layer2=Hierarchical_split(layer1,250)
print(layer2)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值