[bc8010]: / SegNet / SegNetCMR / inference.py

Download this file

80 lines (63 with data), 3.7 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import tensorflow as tf
import tensorflow.contrib.slim as slim
from .layers import unpool_with_argmax
def inference_scope(is_training, batch_norm_decay=0.9):
with slim.arg_scope([slim.conv2d],
activation_fn=tf.nn.relu,
weights_initializer=tf.truncated_normal_initializer(stddev=0.01),
normalizer_fn=slim.batch_norm,
stride=1,
padding='SAME'):
with slim.arg_scope([slim.batch_norm],
is_training=is_training,
decay=batch_norm_decay) as sc:
return sc
def inference(images, class_inc_bg = None):
tf.summary.image('input', images, max_outputs=3)
with tf.variable_scope('pool1'):
net = slim.conv2d(images, 64, [3, 3], scope='conv1_1')
net = slim.conv2d(net, 64, [3, 3], scope='conv1_2')
net, arg1 = tf.nn.max_pool_with_argmax(net, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='maxpool1')
with tf.variable_scope('pool2'):
net = slim.conv2d(net, 128, [3, 3], scope='conv2_1')
net = slim.conv2d(net, 128, [3, 3], scope='conv2_2')
net, arg2 = tf.nn.max_pool_with_argmax(net, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='maxpool2')
with tf.variable_scope('pool3'):
net = slim.conv2d(net, 256, [3, 3], scope='conv3_1')
net = slim.conv2d(net, 256, [3, 3], scope='conv3_2')
net = slim.conv2d(net, 256, [3, 3], scope='conv3_3')
net, arg3 = tf.nn.max_pool_with_argmax(net, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='maxpool3')
with tf.variable_scope('pool4'):
net = slim.conv2d(net, 512, [3, 3], scope='conv4_1')
net = slim.conv2d(net, 512, [3, 3], scope='conv4_2')
net = slim.conv2d(net, 512, [3, 3], scope='conv4_3')
net, arg4 = tf.nn.max_pool_with_argmax(net, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='maxpool4')
with tf.variable_scope('pool5'):
net = slim.conv2d(net, 512, [3, 3], scope='conv5_1')
net = slim.conv2d(net, 512, [3, 3], scope='conv5_2')
net = slim.conv2d(net, 512, [3, 3], scope='conv5_3')
net, arg5 = tf.nn.max_pool_with_argmax(net, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='maxpool5')
with tf.variable_scope('unpool5'):
net = unpool_with_argmax(net, arg5, name='maxunpool5')
net = slim.conv2d(net, 512, [3, 3], scope='uconv5_3')
net = slim.conv2d(net, 512, [3, 3], scope='uconv5_2')
net = slim.conv2d(net, 512, [3, 3], scope='uconv5_1')
with tf.variable_scope('unpool4'):
net = unpool_with_argmax(net, arg4, name='maxunpool4')
net = slim.conv2d(net, 512, [3, 3], scope='uconv4_3')
net = slim.conv2d(net, 512, [3, 3], scope='uconv4_2')
net = slim.conv2d(net, 256, [3, 3], scope='uconv4_1')
with tf.variable_scope('unpool3'):
net = unpool_with_argmax(net, arg3, name='maxunpool3')
net = slim.conv2d(net, 256, [3, 3], scope='uconv3_3')
net = slim.conv2d(net, 256, [3, 3], scope='uconv3_2')
net = slim.conv2d(net, 128, [3, 3], scope='uconv3_1')
with tf.variable_scope('unpool2'):
net = unpool_with_argmax(net, arg2, name='maxunpool2')
net = slim.conv2d(net, 128, [3, 3], scope='uconv2_2')
net = slim.conv2d(net, 64, [3, 3], scope='uconv2_1')
with tf.variable_scope('unpool1'):
net = unpool_with_argmax(net, arg1, name='maxunpool1')
net = slim.conv2d(net, 64, [3, 3], scope='uconv1_2')
logits = slim.conv2d(net, class_inc_bg, [3, 3], scope='uconv1_1')
return logits