ocr-程序解析

1,tensorflow部分
注意backbone利用了mobilenetv2,其中tf使用注意事项:

  1. 使用 tf.variable_scope(‘mv2’,reuse=tf.AUTOREUSE):
    其中reuse可以节省图空间,一样的scope可以利用这个scope省资源。

  2. 使用kernal卷积核,tf中格式是(kh,kw,kc,outputnum):即
    w = tf.get_variable(‘w’, [k_h, k_w, input_.get_shape()[-1], output_dim],
    regularizer=tf.contrib.layers.l2_regularizer(weight_decay),
    initializer=tf.truncated_normal_initializer(stddev=stddev))
    而卷积过程是[1,stridey,stridex,1]如下:
    conv = tf.nn.conv2d(input_, w, strides=[1, d_h, d_w, 1], padding=‘SAME’)

  3. 而卷积偏置是与通道无关的:
    biases = tf.get_variable(‘bias’,[output_dim],initializer=tf.constant_initializer(0.0))
    conv = tf.nn.bias_add(conv, biases)

2.mobilenetv2部分:
原版mobilenet
注意点:c是输出通道,n是此步骤的单个res_block数量,s是stride,对应stride=1和stride=2 不用架构,t是膨胀系数,可以认为升维减少relu损失用。
其中每个bottleneck中有n个res_block残差块,而每个残差块有如下组成(res_block),
在这里插入图片描述
这里一个res_block中t=6,表示维度的增广到原来的input维度的6倍,而其中第一次bottleneck是t=1,个人认为前期不需要做6倍的放大,后面每次都做了expansion,即t=6.每个res_block如上图,这里注意 stride=1是add了残差,而stride=2做了缩放没有做+的动作,cv1_relu , dwise3_stride_relu,cv1,
注意最后convlution 1X1没有做relu,减少损失。
其中:注意:
def res_block(input, expansion_ratio, output_dim, stride, is_train, name, bias=False, shortcut=True):
with tf.name_scope(name), tf.variable_scope(name):
# pw
bottleneck_dim = round(expansion_ratio*input.get_shape().as_list()[-1])
net = conv_1x1(input, bottleneck_dim, name=‘pw’, bias=bias)
net = batch_norm(net, train=is_train, name=‘pw_bn’)
net = relu(net)
# dw
net = dwise_conv(net, strides=[1, stride, stride, 1], name=‘dw’, bias=bias)
net = batch_norm(net, train=is_train, name=‘dw_bn’)
net = relu(net)
# pw & linear
net = conv_1x1(net, output_dim, name=‘pw_linear’, bias=bias)
net = batch_norm(net, train=is_train, name=‘pw_linear_bn’)

    # element wise add, only for stride==1
    if shortcut and stride == 1:
        in_dim = int(input.get_shape().as_list()[-1])
        if in_dim != output_dim:
            ins = conv_1x1(input, output_dim, name='ex_dim')
            net = ins+net
        else:
            net = input+net

    return net

所有通过如上7个bottleneck(每个中又有1234331个res_block,每个res_block中又有stride=1和2的组合,而每个res_block中又有cv1_t_bn_relu - dwisecv3_bn_relu-cv1_bn (stride=1再+)组合)
最终将224到了7,变为原来的1/32.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值