def inference_conv(dataset): dataset_reshaped = tf.reshape(dataset, [-1, 28, 28, 1]) with tf.name_scope("conv1") as scope: W_conv1 = utils.weight_variable([5, 5, 1, 32], name="W_conv1") bias1 = utils.bias_variable([32], name="bias1") tf.histogram_summary("W_conv1", W_conv1) tf.histogram_summary("bias1", bias1) h_conv1 = tf.nn.relu( utils.conv2d_basic(dataset_reshaped, W_conv1, bias1)) h_norm1 = utils.local_response_norm(h_conv1) h_pool1 = utils.max_pool_2x2(h_norm1) with tf.name_scope("conv2") as scope: W_conv2 = utils.weight_variable([3, 3, 32, 64], name="W_conv2") bias2 = utils.bias_variable([64], name="bias2") tf.histogram_summary("W_conv2", W_conv2) tf.histogram_summary("bias2", bias2) h_conv2 = tf.nn.relu(utils.conv2d_basic(h_pool1, W_conv2, bias2)) h_norm2 = utils.local_response_norm(h_conv2) h_pool2 = utils.max_pool_2x2(h_norm2) with tf.name_scope("fc1") as scope: h_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64]) W_fc1 = utils.weight_variable([7 * 7 * 64, 10], name="W_fc1") bias_fc1 = utils.bias_variable([10], name="bias_fc1") tf.histogram_summary("W_fc1", W_fc1) tf.histogram_summary("bias_fc1", bias_fc1) logits = tf.matmul(h_flat, W_fc1) + bias_fc1 return logits
def inference_simple(dataset): with tf.name_scope("conv1") as scope: W1 = utils.weight_variable([5, 5, 1, 32], name="W1") b1 = utils.bias_variable([32], name="b1") tf.histogram_summary("W1", W1) tf.histogram_summary("b1", b1) h_conv1 = tf.nn.relu(utils.conv2d_basic(dataset, W1, b1), name="h_conv1") h_pool1 = utils.max_pool_2x2(h_conv1) with tf.name_scope("conv2") as scope: W2 = utils.weight_variable([3, 3, 32, 64], name="W2") b2 = utils.bias_variable([64], name="b2") tf.histogram_summary("W2", W2) tf.histogram_summary("b2", b2) h_conv2 = tf.nn.relu(utils.conv2d_basic(h_pool1, W2, b2), name="h_conv2") h_pool2 = utils.max_pool_2x2(h_conv2) with tf.name_scope("fc") as scope: image_size = IMAGE_SIZE // 4 h_flat = tf.reshape(h_pool2, [-1, image_size * image_size * 64]) W_fc = utils.weight_variable([image_size * image_size * 64, NUM_LABELS], name="W_fc") b_fc = utils.bias_variable([NUM_LABELS], name="b_fc") tf.histogram_summary("W_fc", W_fc) tf.histogram_summary("b_fc", b_fc) pred = tf.matmul(h_flat, W_fc) + b_fc return pred
def inference(image, keep_prob): print("setting up vgg initialized conv layers ...") model_data = utils.get_model_data(FLAGS.model_dir, MODEL_URL) mean = model_data['normalization'][0][0][0] mean_pixel = np.mean(mean, axis=(0, 1)) weights = np.squeeze(model_data['layers']) processed_image = utils.process_image(image, mean_pixel) with tf.variable_scope("inference"): image_net = vgg_net(weights, processed_image) conv_final_layer = image_net["conv5_3"] pool5 = utils.max_pool_2x2(conv_final_layer) W6 = utils.weight_variable([7, 7, 512, 4096], name="W6") b6 = utils.bias_variable([4096], name="b6") conv6 = utils.conv2d_basic(pool5, W6, b6) relu6 = tf.nn.relu(conv6, name="relu6") if FLAGS.debug: utils.add_activation_summary(relu6) relu_dropout6 = tf.nn.dropout(relu6, keep_prob=keep_prob) W7 = utils.weight_variable([1, 1, 4096, 4096], name="W7") b7 = utils.bias_variable([4096], name="b7") conv7 = utils.conv2d_basic(relu_dropout6, W7, b7) relu7 = tf.nn.relu(conv7, name="relu7") if FLAGS.debug: utils.add_activation_summary(relu7) relu_dropout7 = tf.nn.dropout(relu7, keep_prob=keep_prob) W8 = utils.weight_variable([1, 1, 4096, NUM_OF_CLASSESS], name="W8") b8 = utils.bias_variable([NUM_OF_CLASSESS], name="b8") conv8 = utils.conv2d_basic(relu_dropout7, W8, b8) deconv_shape1 = image_net["pool4"].get_shape() W_t1 = utils.weight_variable([4, 4, deconv_shape1[3].value, NUM_OF_CLASSESS], name="W_t1") b_t1 = utils.bias_variable([deconv_shape1[3].value], name="b_t1") conv_t1 = utils.conv2d_transpose_strided(conv8, W_t1, b_t1, output_shape=tf.shape(image_net["pool4"])) fuse_1 = tf.add(conv_t1, image_net["pool4"], name="fuse_1") deconv_shape2 = image_net["pool3"].get_shape() W_t2 = utils.weight_variable([4, 4, deconv_shape2[3].value, deconv_shape1[3].value], name="W_t2") b_t2 = utils.bias_variable([deconv_shape2[3].value], name="b_t2") conv_t2 = utils.conv2d_transpose_strided(fuse_1, W_t2, b_t2, output_shape=tf.shape(image_net["pool3"])) fuse_2 = tf.add(conv_t2, image_net["pool3"], name="fuse_2") shape = tf.shape(image) deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], NUM_OF_CLASSESS]) W_t3 = utils.weight_variable([16, 16, NUM_OF_CLASSESS, deconv_shape2[3].value], name="W_t3") b_t3 = utils.bias_variable([NUM_OF_CLASSESS], name="b_t3") conv_t3 = utils.conv2d_transpose_strided(fuse_2, W_t3, b_t3, output_shape=deconv_shape3, stride=8) annotation_pred = tf.argmax(conv_t3, dimension=3, name="prediction") return tf.expand_dims(annotation_pred, dim=3), conv_t3
def deepscores_cnn(image, nr_class): # placeholder for dropout input keep_prob = tf.placeholder(tf.float32) # five layers of 3x3 convolutions, followed by relu, 2x2-maxpool and dropout W1 = utils.weight_variable([3, 3, 1, 32], name="W1") b1 = utils.bias_variable([32], name="b1") conv1 = utils.conv2d_basic(image, W1, b1, name="conv1") relu1 = tf.nn.relu(conv1, name="relu1") pool1 = utils.max_pool_2x2(relu1) dropout1 = tf.nn.dropout(pool1, keep_prob=keep_prob) W2 = utils.weight_variable([3, 3, 32, 64], name="W2") b2 = utils.bias_variable([64], name="b2") conv2 = utils.conv2d_basic(dropout1, W2, b2, name="conv2") relu2 = tf.nn.relu(conv2, name="relu2") pool2 = utils.max_pool_2x2(relu2) dropout2 = tf.nn.dropout(pool2, keep_prob=keep_prob) W3 = utils.weight_variable([3, 3, 64, 128], name="W3") b3 = utils.bias_variable([128], name="b3") conv3 = utils.conv2d_basic(dropout2, W3, b3, name="conv3") relu3 = tf.nn.relu(conv3, name="relu3") pool3 = utils.max_pool_2x2(relu3) dropout3 = tf.nn.dropout(pool3, keep_prob=keep_prob) W4 = utils.weight_variable([3, 3, 128, 256], name="W4") b4 = utils.bias_variable([256], name="b4") conv4 = utils.conv2d_basic(dropout3, W4, b4, name="conv4") relu4 = tf.nn.relu(conv4, name="relu4") pool4 = utils.max_pool_2x2(relu4) dropout4 = tf.nn.dropout(pool4, keep_prob=keep_prob) W5 = utils.weight_variable([3, 3, 256, 512], name="W5") b5 = utils.bias_variable([512], name="b5") conv5 = utils.conv2d_basic(dropout4, W5, b5, name="conv5") relu5 = tf.nn.relu(conv5, name="relu5") pool5 = utils.max_pool_2x2(relu5) dropout5 = tf.nn.dropout(pool5, keep_prob=keep_prob) # to fully connected layers # downsampled 5 times so feature maps should be 32 times smaller # size is 7*4*512 W_fc1 = utils.weight_variable([7*4*512, 1024]) b_fc1 = utils.bias_variable([1024]) dropout5_flat = tf.reshape(dropout5, [-1, 7*4*512]) h_fc1 = tf.nn.relu(tf.matmul(dropout5_flat, W_fc1) + b_fc1) W_fc2 = utils.weight_variable([1024, nr_class]) b_fc2 = utils.bias_variable([nr_class]) y_conv = tf.matmul(h_fc1, W_fc2) + b_fc2 return y_conv, keep_prob
def inference(dataset): with tf.name_scope("conv1") as scope: W1 = utils.weight_variable([5, 5, 1, 32], name="W1") b1 = utils.bias_variable([32], name="b1") tf.histogram_summary("W1", W1) tf.histogram_summary("b1", b1) h_conv1 = utils.conv2d_basic(dataset, W1, b1) h_norm1 = utils.local_response_norm(h_conv1) h_1 = tf.nn.relu(h_norm1, name="conv1") h_pool1 = utils.max_pool_2x2(h_1) with tf.name_scope("conv2") as scope: W2 = utils.weight_variable([3, 3, 32, 64], name="W2") b2 = utils.bias_variable([64], name="b2") tf.histogram_summary("W2", W2) tf.histogram_summary("b2", b2) h_conv2 = utils.conv2d_basic(h_pool1, W2, b2) h_norm2 = utils.local_response_norm(h_conv2) h_2 = tf.nn.relu(h_norm2, name="conv2") h_pool2 = utils.max_pool_2x2(h_2) with tf.name_scope("conv3") as scope: W3 = utils.weight_variable([3, 3, 64, 128], name="W3") b3 = utils.bias_variable([128], name="b3") tf.histogram_summary("W3", W3) tf.histogram_summary("b3", b3) h_conv3 = utils.conv2d_basic(h_pool2, W3, b3) h_norm3 = utils.local_response_norm(h_conv3) h_3 = tf.nn.relu(h_norm3, name="conv3") h_pool3 = utils.max_pool_2x2(h_3) with tf.name_scope("conv4") as scope: W4 = utils.weight_variable([3, 3, 128, 256], name="W4") b4 = utils.bias_variable([256], name="b4") tf.histogram_summary("W4", W4) tf.histogram_summary("b4", b4) h_conv4 = utils.conv2d_basic(h_pool3, W4, b4) h_norm4 = utils.local_response_norm(h_conv4) h_4 = tf.nn.relu(h_norm4, name="conv4") with tf.name_scope("fc1") as scope: image_size = IMAGE_SIZE // 8 h_flat = tf.reshape(h_4, [-1, image_size * image_size * 256]) W_fc1 = utils.weight_variable([image_size * image_size * 256, 512], name="W_fc1") b_fc1 = utils.bias_variable([512], name="b_fc1") tf.histogram_summary("W_fc1", W_fc1) tf.histogram_summary("b_fc1", b_fc1) h_fc1 = tf.nn.relu(tf.matmul(h_flat, W_fc1) + b_fc1) with tf.name_scope("fc2") as scope: W_fc2 = utils.weight_variable([512, NUM_LABELS], name="W_fc2") b_fc2 = utils.bias_variable([NUM_LABELS], name="b_fc2") tf.histogram_summary("W_fc2", W_fc2) tf.histogram_summary("b_fc2", b_fc2) pred = tf.matmul(h_fc1, W_fc2) + b_fc2 return pred
def vgg_net(weights, image): layers = ('conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4') ''' weights[i][0][0][0][0]: <tf.Variable 'inference/conv1_1_w:0' shape=(3, 3, 3, 64) dtype=float32_ref> <tf.Variable 'inference/conv1_1_b:0' shape=(64,) dtype=float32_ref> <tf.Variable 'inference/conv1_2_w:0' shape=(3, 3, 64, 64) dtype=float32_ref> <tf.Variable 'inference/conv1_2_b:0' shape=(64,) dtype=float32_ref> <tf.Variable 'inference/conv2_1_w:0' shape=(3, 3, 64, 128) dtype=float32_ref> <tf.Variable 'inference/conv2_1_b:0' shape=(128,) dtype=float32_ref> <tf.Variable 'inference/conv2_2_w:0' shape=(3, 3, 128, 128) dtype=float32_ref> <tf.Variable 'inference/conv2_2_b:0' shape=(128,) dtype=float32_ref> ''' net = {} current = image for i, name in enumerate( layers ): # 对于一个可迭代/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值 kind = name[:4] num = name[4:] if kind == 'conv' and num == '1_1': W = utils.weight_variable( [3, 3, 4, 64], name=name + "_w") # [patch 7*7,insize 512, outsize 4096] b = utils.bias_variable([64], name=name + "_b") current = utils.conv2d_basic(current, W, b) elif kind == 'conv' and num != '1_1': kernels, bias = weights[i][0][0][0][0] # print("kernels:",i,kernels) # print kernels # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") # print(kernels) bias = utils.get_variable(bias.reshape(-1), name=name + "_b") # print(bias) current = utils.conv2d_basic(current, kernels, bias) elif kind == 'relu': current = tf.nn.relu(current, name=name) if FLAGS.debug: utils.add_activation_summary(current) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current return net
def fcn(inputs, keep_prob): with slim.arg_scope( [slim.conv2d, slim.fully_connected], activation_fn=tf.nn.relu, weights_initializer=tf.truncated_normal_initializer(0.0, 0.01), weights_regularizer=slim.l2_regularizer(0.0005) ): net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1') pool1 = slim.max_pool2d(net, [2, 2], scope='pool1') net = slim.repeat(pool1, 2, slim.conv2d, 128, [3, 3], scope='conv2') pool2 = slim.max_pool2d(net, [2, 2], scope='pool2') net = slim.repeat(pool2, 3, slim.conv2d, 256, [3, 3], scope='conv3') pool3 = slim.max_pool2d(net, [2, 2], scope='pool3') net = slim.repeat(pool3, 3, slim.conv2d, 512, [3, 3], scope='conv4') pool4 = slim.max_pool2d(net, [2, 2], scope='pool4') net = slim.repeat(pool4, 3, slim.conv2d, 512, [3, 3], scope='conv5') pool5 = slim.max_pool2d(net, [2, 2], scope='pool5') W6 = utils.weight_variable([7, 7, 512, 4096], name="W6") b6 = utils.bias_variable([4096], name="b6") conv6 = utils.conv2d_basic(pool5, W6, b6) relu6 = tf.nn.relu(conv6, name="relu6") relu_dropout6 = tf.nn.dropout(relu6, keep_prob=keep_prob) W7 = utils.weight_variable([1, 1, 4096, 4096], name="W7") b7 = utils.bias_variable([4096], name="b7") conv7 = utils.conv2d_basic(relu_dropout6, W7, b7) relu7 = tf.nn.relu(conv7, name="relu7") relu_dropout7 = tf.nn.dropout(relu7, keep_prob=keep_prob) W8 = utils.weight_variable([1, 1, 4096, NUM_OF_CLASSESS], name="W8") b8 = utils.bias_variable([NUM_OF_CLASSESS], name="b8") conv8 = utils.conv2d_basic(relu_dropout7, W8, b8) # now to upscale to actual image size deconv_shape1 = pool4.get_shape() W_t1 = utils.weight_variable([4, 4, deconv_shape1[3].value, NUM_OF_CLASSESS], name="W_t1") b_t1 = utils.bias_variable([deconv_shape1[3].value], name="b_t1") conv_t1 = utils.conv2d_transpose_strided(conv8, W_t1, b_t1, output_shape=tf.shape(pool4)) fuse_1 = tf.add(conv_t1, pool4, name="fuse_1") deconv_shape2 = pool3.get_shape() W_t2 = utils.weight_variable([4, 4, deconv_shape2[3].value, deconv_shape1[3].value], name="W_t2") b_t2 = utils.bias_variable([deconv_shape2[3].value], name="b_t2") conv_t2 = utils.conv2d_transpose_strided(fuse_1, W_t2, b_t2, output_shape=tf.shape(pool3)) fuse_2 = tf.add(conv_t2, pool3, name="fuse_2") shape = tf.shape(inputs) deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], NUM_OF_CLASSESS]) W_t3 = utils.weight_variable([16, 16, NUM_OF_CLASSESS, deconv_shape2[3].value], name="W_t3") b_t3 = utils.bias_variable([NUM_OF_CLASSESS], name="b_t3") conv_t3 = utils.conv2d_transpose_strided(fuse_2, W_t3, b_t3, output_shape=deconv_shape3, stride=8) annotation_pred = tf.argmax(conv_t3, dimension=3, name="prediction") return tf.expand_dims(annotation_pred, dim=3), conv_t3
def inference(image, keep_prob): """ Semantic segmentation network definition :param image: input image. Should have values in range 0-255 :param keep_prob: :return: """ print("setting up vgg initialized conv layers ...") model_data = utils.get_model_data(model_dir, MODEL_URL) mean = model_data['normalization'][0][0][0] mean_pixel = np.mean(mean, axis=(0, 1)) weights = np.squeeze(model_data['layers']) processed_image = utils.process_image(image, mean_pixel) with tf.variable_scope("inference"): image_net = vgg_net(weights, processed_image) conv_final_layer = image_net["conv4_3"] W6 = utils.weight_variable([1, 1, 512, 1024], name="W6", init=weight_init) b6 = utils.bias_variable([1024], name="b6") conv6 = utils.conv2d_basic(conv_final_layer, W6, b6) relu6 = tf.nn.relu(conv6, name="relu6") if debug: utils.add_activation_summary(relu6) relu_dropout6 = tf.nn.dropout(relu6, keep_prob=keep_prob) W7 = utils.weight_variable([1, 1, 1024, NUM_OF_CLASSESS], name="W7", init=weight_init) b7 = utils.bias_variable([NUM_OF_CLASSESS], name="b7") conv7 = utils.conv2d_basic(relu_dropout6, W7, b7) # now to upscale to actual image size deconv_shape1 = image_net["pool2"].get_shape() W_t1 = utils.weight_variable([4, 4, deconv_shape1[3].value, NUM_OF_CLASSESS], name="W_t1", init=weight_init) b_t1 = utils.bias_variable([deconv_shape1[3].value], name="b_t1") conv_t1 = utils.conv2d_transpose_strided(conv7, W_t1, b_t1, output_shape=tf.shape(image_net["pool2"])) fuse_1 = tf.add(conv_t1, image_net["pool2"], name="fuse_1") deconv_shape2 = image_net["pool1"].get_shape() W_t2 = utils.weight_variable([4, 4, deconv_shape2[3].value, deconv_shape1[3].value], name="W_t2", init=weight_init) b_t2 = utils.bias_variable([deconv_shape2[3].value], name="b_t2") conv_t2 = utils.conv2d_transpose_strided(fuse_1, W_t2, b_t2, output_shape=tf.shape(image_net["pool1"])) fuse_2 = tf.add(conv_t2, image_net["pool1"], name="fuse_1") shape = tf.shape(image) deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], NUM_OF_CLASSESS]) W_t3 = utils.weight_variable([4, 4, NUM_OF_CLASSESS, deconv_shape2[3].value], name="W_t3", init=weight_init) b_t3 = utils.bias_variable([NUM_OF_CLASSESS], name="b_t3") conv_t3 = utils.conv2d_transpose_strided(fuse_2, W_t3, b_t3, output_shape=deconv_shape3, stride=2) return conv_t3
def build_centers_layers(self, image, keep_prob): with tf.variable_scope("centers"): pool5 = utils.max_pool_2x2(self.image_net["conv5_3"]) W6 = utils.weight_variable([7, 7, 512, 4096], name="W6") b6 = utils.bias_variable([4096], name="b6") conv6 = utils.conv2d_basic(pool5, W6, b6) relu6 = tf.nn.relu(conv6, name="relu6") if self.debug: utils.add_activation_summary(relu6) relu_dropout6 = tf.nn.dropout(relu6, keep_prob=keep_prob) W7 = utils.weight_variable([1, 1, 4096, 4096], name="W7") b7 = utils.bias_variable([4096], name="b7") conv7 = utils.conv2d_basic(relu_dropout6, W7, b7) relu7 = tf.nn.relu(conv7, name="relu7") if self.debug: utils.add_activation_summary(relu7) relu_dropout7 = tf.nn.dropout(relu7, keep_prob=keep_prob) W8 = utils.weight_variable([1, 1, 4096, self.n_classes], name="W8") b8 = utils.bias_variable([self.n_classes], name="b8") conv8 = utils.conv2d_basic(relu_dropout7, W8, b8) # annotation_pred1 = tf.argmax(conv8, dimension=3, name="prediction1") deconv_shape1 = self.image_net["pool4"].get_shape() W_t1 = utils.weight_variable([4, 4, deconv_shape1[3].value, self.n_classes], name="W_t1") b_t1 = utils.bias_variable([deconv_shape1[3].value], name="b_t1") conv_t1 = utils.conv2d_transpose_strided(conv8, W_t1, b_t1, output_shape=tf.shape(self.image_net["pool4"])) fuse_1 = tf.add(conv_t1, self.image_net["pool4"], name="fuse_1") deconv_shape2 = self.image_net["pool3"].get_shape() W_t2 = utils.weight_variable([4, 4, deconv_shape2[3].value, deconv_shape1[3].value], name="W_t2") b_t2 = utils.bias_variable([deconv_shape2[3].value], name="b_t2") conv_t2 = utils.conv2d_transpose_strided(fuse_1, W_t2, b_t2, output_shape=tf.shape(self.image_net["pool3"])) fuse_2 = tf.add(conv_t2, self.image_net["pool3"], name="fuse_2") shape = tf.shape(image) #deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], self.n_classes]) deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], 3 * (self.n_classes - 1)]) W_t3 = utils.weight_variable([16, 16, 3 * (self.n_classes - 1), deconv_shape2[3].value], name="W_t3") b_t3 = utils.bias_variable([3 * (self.n_classes - 1)], name="b_t3") conv_t3 = utils.conv2d_transpose_strided(fuse_2, W_t3, b_t3, output_shape=deconv_shape3, stride=8) #tanh_t3 = tf.math.sigmoid(conv_t3) for i in range(0, 3 * (self.n_classes - 1), 3): current = tf.math.sigmoid(conv_t3[:, :, :, i:i+2]) if i == 0: tanh_t3 = current else: tanh_t3 = tf.concat([tanh_t3, current], axis=-1) tanh_t3 = tf.concat([tanh_t3, tf.nn.relu(conv_t3[:, :, :, i+2:i+3])], axis=-1) return tanh_t3
def inference_res(input_image): W1 = utils.weight_variable([3, 3, 3, 32]) b1 = utils.bias_variable([32]) hconv_1 = tf.nn.relu(utils.conv2d_basic(input_image, W1, b1)) h_norm = utils.local_response_norm(hconv_1) bottleneck_1 = utils.bottleneck_unit(h_norm, 16, 16, down_stride=True, name="res_1") bottleneck_2 = utils.bottleneck_unit(bottleneck_1, 8, 8, down_stride=True, name="res_2") bottleneck_3 = utils.bottleneck_unit(bottleneck_2, 16, 16, up_stride=True, name="res_3") bottleneck_4 = utils.bottleneck_unit(bottleneck_3, 32, 32, up_stride=True, name="res_4") W5 = utils.weight_variable([3, 3, 32, 3]) b5 = utils.bias_variable([3]) out = tf.nn.tanh(utils.conv2d_basic(bottleneck_4, W5, b5)) return out
def vgg_net(weights, image): layers = ('relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4') net = {} current = image #grayiterstart = 0 if GRAY_MODE: i = 0 name = 'conv1_1' # layers[0] kind = name[:4] #=conv bias = weights[0][0][0][0][0][1] kernels = weights[0][0][0][0][0][0] #put the in_channels first, select 1st channel #[w,h,in_channels,out_channels] kernelstrans = np.array([np.transpose(kernels, (2, 0, 1, 3))[0]]) #[in_channels,w,h,out_channels] kernels = np.transpose(kernelstrans, (2, 1, 0, 3)) #after line above : [h,w,in_channels,out_channels] kernels = utils.get_variable(kernels, name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) # for i, name in enumerate(layers): kind = name[:4] if kind == 'conv': kernels, bias = weights[i + 1][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) elif kind == 'relu': current = tf.nn.relu(current, name=name) if FLAGS.debug: utils.add_activation_summary(current) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current return net
def inference_conv(image): # incomplete :/ image_reshaped = tf.reshape(image, [-1, IMAGE_SIZE, IMAGE_SIZE, 1]) with tf.name_scope("conv1") as scope: W_conv1 = utils.weight_variable([3, 3, 1, 32], name="W_conv1") b_conv1 = utils.bias_variable([32], name="b_conv1") add_to_reg_loss_and_summary(W_conv1, b_conv1) h_conv1 = tf.nn.tanh(utils.conv2d_basic(image_reshaped, W_conv1, b_conv1)) with tf.name_scope("conv2") as scope: W_conv2 = utils.weight_variable([3, 3, 32, 64], name="W_conv2") b_conv2 = utils.bias_variable([64], name="b_conv2") add_to_reg_loss_and_summary(W_conv2, b_conv2) h_conv2 = tf.nn.tanh(utils.conv2d_strided(h_conv1, W_conv2, b_conv2)) with tf.name_scope("conv3") as scope: W_conv3 = utils.weight_variable([3, 3, 64, 128], name="W_conv3") b_conv3 = utils.bias_variable([128], name="b_conv3") add_to_reg_loss_and_summary(W_conv3, b_conv3) h_conv3 = tf.nn.tanh(utils.conv2d_strided(h_conv2, W_conv3, b_conv3)) with tf.name_scope("conv4") as scope: W_conv4 = utils.weight_variable([3, 3, 128, 256], name="W_conv4") b_conv4 = utils.bias_variable([256], name="b_conv4") add_to_reg_loss_and_summary(W_conv4, b_conv4) h_conv4 = tf.nn.tanh(utils.conv2d_strided(h_conv3, W_conv4, b_conv4))
def vgg_net(weights, image): layers = ('conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4') net = {} current = image for i, name in enumerate(layers): kind = name[:4] if kind == 'conv': kernels, bias = weights[i][0][0][0][0] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) elif kind == 'relu': current = tf.nn.relu(current, name=name) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current return net
def inference_conv(image): # incomplete :/ image_reshaped = tf.reshape(image, [-1, IMAGE_SIZE, IMAGE_SIZE, 1]) with tf.name_scope("conv1") as scope: W_conv1 = utils.weight_variable([3, 3, 1, 32], name="W_conv1") b_conv1 = utils.bias_variable([32], name="b_conv1") add_to_reg_loss_and_summary(W_conv1, b_conv1) h_conv1 = tf.nn.tanh( utils.conv2d_basic(image_reshaped, W_conv1, b_conv1)) with tf.name_scope("conv2") as scope: W_conv2 = utils.weight_variable([3, 3, 32, 64], name="W_conv2") b_conv2 = utils.bias_variable([64], name="b_conv2") add_to_reg_loss_and_summary(W_conv2, b_conv2) h_conv2 = tf.nn.tanh(utils.conv2d_strided(h_conv1, W_conv2, b_conv2)) with tf.name_scope("conv3") as scope: W_conv3 = utils.weight_variable([3, 3, 64, 128], name="W_conv3") b_conv3 = utils.bias_variable([128], name="b_conv3") add_to_reg_loss_and_summary(W_conv3, b_conv3) h_conv3 = tf.nn.tanh(utils.conv2d_strided(h_conv2, W_conv3, b_conv3)) with tf.name_scope("conv4") as scope: W_conv4 = utils.weight_variable([3, 3, 128, 256], name="W_conv4") b_conv4 = utils.bias_variable([256], name="b_conv4") add_to_reg_loss_and_summary(W_conv4, b_conv4) h_conv4 = tf.nn.tanh(utils.conv2d_strided(h_conv3, W_conv4, b_conv4))
def inference_resnet(dataset): dataset_reshaped = tf.reshape(dataset, [-1, 28, 28, 1]) with tf.name_scope("conv1") as scope: W_conv1 = utils.weight_variable([5, 5, 1, 32], name="W_conv1") bias1 = utils.bias_variable([32], name="bias1") tf.histogram_summary("W_conv1", W_conv1) tf.histogram_summary("bias1", bias1) h_conv1 = tf.nn.relu( utils.conv2d_basic(dataset_reshaped, W_conv1, bias1)) h_norm1 = utils.local_response_norm(h_conv1) bottleneck_1 = utils.bottleneck_unit(h_norm1, 32, 32, down_stride=True, name="res1") bottleneck_2 = utils.bottleneck_unit(bottleneck_1, 64, 64, down_stride=True, name="res2") with tf.name_scope("fc1") as scope: h_flat = tf.reshape(bottleneck_2, [-1, 7 * 7 * 64]) W_fc1 = utils.weight_variable([7 * 7 * 64, 10], name="W_fc1") bias_fc1 = utils.bias_variable([10], name="bias_fc1") tf.histogram_summary("W_fc1", W_fc1) tf.histogram_summary("bias_fc1", bias_fc1) logits = tf.matmul(h_flat, W_fc1) + bias_fc1 return logits
def vgg_net(weights, image): layers = ( 'conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3' # 'conv3_4', 'relu3_4', 'pool3', # 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', # 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', # # 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', # 'relu5_3', 'conv5_4', 'relu5_4' ) net = {} current = image for i, name in enumerate(layers): kind = name[:4] if kind == 'conv': kernels, bias = weights[i][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] kernels = np.transpose(kernels, (1, 0, 2, 3)) bias = bias.reshape(-1) current = utils.conv2d_basic(current, kernels, bias) elif kind == 'relu': current = tf.nn.relu(current) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current assert len(net) == len(layers) return net
def inference(image, keep_prob): """ Semantic segmentation network definition :param image: input image. Should have values in range 0-255 :param keep_prob: :return: """ print("setting up vgg initialized conv layers ...") model_data = utils.get_model_data(FLAGS.model_dir, FLAGS.MODEL_NAME) #mean = model_data['normalization'][0][0][0] #mean_pixel = np.mean(mean, axis=(0, 1)) weights = np.squeeze(model_data['params'][0]) #processed_image = utils.process_image(image, mean_pixel) with tf.variable_scope("inference"): image_net = res_net(weights, image) #conv_final_layer = image_net["res5c"] conv_final_layer = image_net fc_w = utils.weight_variable([1, 1, 2048, FLAGS.NUM_OF_CLASSESS], name="fc_w") fc_b = utils.bias_variable([FLAGS.NUM_OF_CLASSESS], name="fc_b") fc = utils.conv2d_basic(conv_final_layer, fc_w, fc_b) fc_dropout = tf.nn.dropout(fc, keep_prob) logits = tf.squeeze(fc_dropout, [1, 2]) #logits = tf.squeeze(utils.conv2d_basic(conv_final_layer, fc_w, fc_b), [1,2]) print('logits shape', logits.shape) annotation_pred = tf.argmax(logits, dimension=1, name="prediction") return tf.expand_dims(annotation_pred, dim=1), logits
def vgg_net(weights, image): layers = ('conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4') net = {} current = image for i, name in enumerate(layers): kind = name[:4] # Convolution 레이어일 경우 if kind == 'conv': kernels, bias = weights[i][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] # MATLAB 파일의 행렬 순서를 tensorflow 행렬의 순서로 변환합니다. kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) # Activation 레이어일 경우 elif kind == 'relu': current = tf.nn.relu(current, name=name) # Pooling 레이어일 경우 elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current return net
def vgg_net(weights, image): layers = ('conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4') net = {} current = image for i, name in enumerate(layers): kind = name[:4] if kind == 'conv': kernels, bias = weights[i][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) elif kind == 'relu': current = tf.nn.relu(current, name=name) if FLAGS.debug: utils.add_activation_summary(current) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current return net
def conv_layer(input, r_field, input_c, out_c, nr): W = utils.weight_variable([r_field, r_field, input_c, out_c], name="W" + str(nr)) b = utils.bias_variable([out_c], name="b" + str(nr)) conv = utils.conv2d_basic(input, W, b, name="conv" + str(nr)) relu = tf.nn.relu(conv, name="relu" + str(nr)) return relu
def build_labels_layers(self, image, keep_prob): with tf.variable_scope("labels"): pool5 = utils.max_pool_2x2(self.image_net["conv5_3"]) W6 = utils.weight_variable([7, 7, 512, 4096], name="W6") b6 = utils.bias_variable([4096], name="b6") conv6 = utils.conv2d_basic(pool5, W6, b6) relu6 = tf.nn.relu(conv6, name="relu6") if self.debug: utils.add_activation_summary(relu6) relu_dropout6 = tf.nn.dropout(relu6, keep_prob=keep_prob) W7 = utils.weight_variable([1, 1, 4096, 4096], name="W7") b7 = utils.bias_variable([4096], name="b7") conv7 = utils.conv2d_basic(relu_dropout6, W7, b7) relu7 = tf.nn.relu(conv7, name="relu7") if self.debug: utils.add_activation_summary(relu7) relu_dropout7 = tf.nn.dropout(relu7, keep_prob=keep_prob) W8 = utils.weight_variable([1, 1, 4096, self.n_classes], name="W8") b8 = utils.bias_variable([self.n_classes], name="b8") conv8 = utils.conv2d_basic(relu_dropout7, W8, b8) # annotation_pred1 = tf.argmax(conv8, dimension=3, name="prediction1") deconv_shape1 = self.image_net["pool4"].get_shape() W_t1 = utils.weight_variable([4, 4, deconv_shape1[3].value, self.n_classes], name="W_t1") b_t1 = utils.bias_variable([deconv_shape1[3].value], name="b_t1") conv_t1 = utils.conv2d_transpose_strided(conv8, W_t1, b_t1, output_shape=tf.shape(self.image_net["pool4"])) fuse_1 = tf.add(conv_t1, self.image_net["pool4"], name="fuse_1") deconv_shape2 = self.image_net["pool3"].get_shape() W_t2 = utils.weight_variable([4, 4, deconv_shape2[3].value, deconv_shape1[3].value], name="W_t2") b_t2 = utils.bias_variable([deconv_shape2[3].value], name="b_t2") conv_t2 = utils.conv2d_transpose_strided(fuse_1, W_t2, b_t2, output_shape=tf.shape(self.image_net["pool3"])) fuse_2 = tf.add(conv_t2, self.image_net["pool3"], name="fuse_2") shape = tf.shape(image) deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], self.n_classes]) W_t3 = utils.weight_variable([16, 16, self.n_classes, deconv_shape2[3].value], name="W_t3") b_t3 = utils.bias_variable([self.n_classes], name="b_t3") conv_t3 = utils.conv2d_transpose_strided(fuse_2, W_t3, b_t3, output_shape=deconv_shape3, stride=8) annotation_pred = tf.argmax(conv_t3, dimension=3, name="prediction") return tf.expand_dims(annotation_pred, dim=3), conv_t3
def vgg_net(weights, image): layers = ( 'conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', # output: 112*112*64 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', # output: 56*56*128 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', # output: 28*28*256 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', # output: 14*14*512 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', # output: 7*7*512 'relu5_3', 'conv5_4', 'relu5_4') # followed by three FN net = {} current = image for i, name in enumerate(layers): kind = name[:4] if kind == 'conv': kernels, bias = weights[i][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) elif kind == 'relu': current = tf.nn.relu(current, name=name) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current return net
def generator(images, train_phase): print("setting up vgg initialized conv layers ...") model_data = utils.get_model_data(FLAGS.model_dir, MODEL_URL) weights = np.squeeze(model_data['layers']) with tf.variable_scope("generator") as scope: W0 = utils.weight_variable([3, 3, 1, 64], name="W0") b0 = utils.bias_variable([64], name="b0") conv0 = utils.conv2d_basic(images, W0, b0) hrelu0 = tf.nn.relu(conv0, name="relu") image_net = vgg_net(weights, hrelu0) vgg_final_layer = image_net["relu5_3"] pool5 = utils.max_pool_2x2(vgg_final_layer) # now to upscale to actual image size deconv_shape1 = image_net["pool4"].get_shape() W_t1 = utils.weight_variable( [4, 4, deconv_shape1[3].value, pool5.get_shape()[3].value], name="W_t1") b_t1 = utils.bias_variable([deconv_shape1[3].value], name="b_t1") conv_t1 = utils.conv2d_transpose_strided(pool5, W_t1, b_t1, output_shape=tf.shape( image_net["pool4"])) fuse_1 = tf.add(conv_t1, image_net["pool4"], name="fuse_1") deconv_shape2 = image_net["pool3"].get_shape() W_t2 = utils.weight_variable( [4, 4, deconv_shape2[3].value, deconv_shape1[3].value], name="W_t2") b_t2 = utils.bias_variable([deconv_shape2[3].value], name="b_t2") conv_t2 = utils.conv2d_transpose_strided(fuse_1, W_t2, b_t2, output_shape=tf.shape( image_net["pool3"])) fuse_2 = tf.add(conv_t2, image_net["pool3"], name="fuse_2") shape = tf.shape(images) deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], 2]) W_t3 = utils.weight_variable([16, 16, 2, deconv_shape2[3].value], name="W_t3") b_t3 = utils.bias_variable([2], name="b_t3") pred = utils.conv2d_transpose_strided(fuse_2, W_t3, b_t3, output_shape=deconv_shape3, stride=8) # return tf.concat(concat_dim=3, values=[images, pred], name="pred_image") return tf.concat([images, pred], 3, "pred_image")
def vgg_net(weights, image): # def vgg_net(image): layers = ( 'conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4' ) net = {} current = image # [n,224,224,3] for i, name in enumerate(layers): kind = name[:4] # kind2=name[:5] if kind=='conv':#kind2 == 'conv1': # ''' kernels, bias = weights[i][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) ''' current=tf.layers.conv2d(current,64,3,padding='same') elif kind2=='conv2': current = tf.layers.conv2d(current, 128, 3, padding='same') elif kind2=='conv3': current = tf.layers.conv2d(current, 256, 3, padding='same') elif kind2=='conv4': current = tf.layers.conv2d(current, 512, 3, padding='same') elif kind2=='conv5': current = tf.layers.conv2d(current, 512, 3, padding='same') else: pass # ''' if kind == 'relu': current = tf.nn.relu(current, name=name) if FLAGS.debug: utils.add_activation_summary(current) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current return net # [n,14,14,512]
def inference_strided(input_image): W1 = utils.weight_variable([9, 9, 3, 32]) b1 = utils.bias_variable([32]) tf.histogram_summary("W1", W1) tf.histogram_summary("b1", b1) h_conv1 = tf.nn.relu(utils.conv2d_basic(input_image, W1, b1)) W2 = utils.weight_variable([3, 3, 32, 64]) b2 = utils.bias_variable([64]) tf.histogram_summary("W2", W2) tf.histogram_summary("b2", b2) h_conv2 = tf.nn.relu(utils.conv2d_strided(h_conv1, W2, b2)) W3 = utils.weight_variable([3, 3, 64, 128]) b3 = utils.bias_variable([128]) tf.histogram_summary("W3", W3) tf.histogram_summary("b3", b3) h_conv3 = tf.nn.relu(utils.conv2d_strided(h_conv2, W3, b3)) # upstrides W4 = utils.weight_variable([3, 3, 64, 128]) b4 = utils.bias_variable([64]) tf.histogram_summary("W4", W4) tf.histogram_summary("b4", b4) # print h_conv3.get_shape() # print W4.get_shape() h_conv4 = tf.nn.relu(utils.conv2d_transpose_strided(h_conv3, W4, b4)) W5 = utils.weight_variable([3, 3, 32, 64]) b5 = utils.bias_variable([32]) tf.histogram_summary("W5", W5) tf.histogram_summary("b5", b5) h_conv5 = tf.nn.relu(utils.conv2d_transpose_strided(h_conv4, W5, b5)) W6 = utils.weight_variable([9, 9, 32, 3]) b6 = utils.bias_variable([3]) tf.histogram_summary("W6", W6) tf.histogram_summary("b6", b6) pred_image = tf.nn.tanh(utils.conv2d_basic(h_conv5, W6, b6)) return pred_image
def inferece(dataset, prob): with tf.name_scope("conv1") as scope: W_conv1 = utils.weight_variable([5, 5, 1, 32]) b_conv1 = utils.bias_variable([32]) tf.histogram_summary("W_conv1", W_conv1) tf.histogram_summary("b_conv1", b_conv1) h_conv1 = utils.conv2d_basic(dataset, W_conv1, b_conv1) h_1 = tf.nn.relu(h_conv1) h_pool1 = utils.max_pool_2x2(h_1) add_to_regularization_loss(W_conv1, b_conv1) with tf.name_scope("conv2") as scope: W_conv2 = utils.weight_variable([3, 3, 32, 64]) b_conv2 = utils.bias_variable([64]) tf.histogram_summary("W_conv2", W_conv2) tf.histogram_summary("b_conv2", b_conv2) h_conv2 = utils.conv2d_basic(h_pool1, W_conv2, b_conv2) h_2 = tf.nn.relu(h_conv2) h_pool2 = utils.max_pool_2x2(h_2) add_to_regularization_loss(W_conv2, b_conv2) with tf.name_scope("fc_1") as scope: image_size = IMAGE_SIZE / 4 h_flat = tf.reshape(h_pool2, [-1, image_size * image_size * 64]) W_fc1 = utils.weight_variable([image_size * image_size * 64, 256]) b_fc1 = utils.bias_variable([256]) tf.histogram_summary("W_fc1", W_fc1) tf.histogram_summary("b_fc1", b_fc1) h_fc1 = tf.nn.relu(tf.matmul(h_flat, W_fc1) + b_fc1) h_fc1_dropout = tf.nn.dropout(h_fc1, prob) with tf.name_scope("fc_2") as scope: W_fc2 = utils.weight_variable([256, NUM_LABELS]) b_fc2 = utils.bias_variable([NUM_LABELS]) tf.histogram_summary("W_fc2", W_fc2) tf.histogram_summary("b_fc2", b_fc2) pred = tf.matmul(h_fc1, W_fc2) + b_fc2 return pred
def vgg_net(weights, image): layers = ( 'conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4' ) net = {} current = image for i, name in enumerate(layers): kind = name[:4] if kind == 'conv': kernels, bias = weights[i][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, # out_channels] kernels = Utils.get_variable(np.transpose( kernels, (1, 0, 2, 3)), name=name + "_w") bias = Utils.get_variable(bias.reshape(-1), name=name + "_b") current = Utils.conv2d_basic(current, kernels, bias) # 前向传播结果 current elif kind == 'relu': current = tf.nn.relu(current, name=name) # if FLAGS.debug: # util.add_activation_summary(current) elif kind == 'pool': # vgg 的前5层的stride都是2,也就是前5层的size依次减小1倍 # 这里处理了前4层的stride,用的是平均池化 # 第5层的pool在下文的外部处理了,用的是最大池化 # pool1 size缩小2倍 # pool2 size缩小4倍 # pool3 size缩小8倍 # pool4 size缩小16倍 current = Utils.avg_pool_2x2(current) net[name] = current # added for resume better global_iter_counter = tf.Variable(0, name='global_step', trainable=False) net['global_step'] = global_iter_counter # 每层前向传播结果放在net中, 是一个字典 return net
def vgg_net(weights, image): layers = ( 'conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4' ) net = {} current = image for i, name in enumerate(layers): kind = name[:4] if kind == 'conv': kernels, bias = weights[i][0][0][0][0] if (name == 'conv1_1'): kernel_shape = kernels.shape[:2] + (4, ) + kernels.shape[3:] else: kernel_shape = kernels.shape bias_shape = bias.shape # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] new_kernel = np.zeros(kernel_shape) new_kernel_shape = np.transpose(new_kernel, (1, 0, 2, 3)).shape # print(f"new kernel shape: {new_kernel_shape}") new_bias = np.zeros(bias_shape) new_bias_shape = new_bias.reshape(-1).shape[0] # print(f"new bias shape: {new_bias_shape}") kernels = utils.weight_variable(shape=new_kernel_shape, name=name + "_w" ) bias = utils.bias_variable(shape=[new_bias_shape], name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) elif kind == 'relu': current = tf.nn.relu(current, name=name) if FLAGS.debug: utils.add_activation_summary(current) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current # print(f"VGG-19 {name} layer: {current.shape}") return net
def inference(self, images, inference_name, channel, keep_prob): """ Semantic segmentation network definition :param image: input image. Should have values in range 0-255 :param keep_prob: :return: """ print("setting up resnet101 initialized conv layers ...") #mean_pixel = np.mean(mean, axis=(0, 1)) processed_images = utils.process_image(images, cfgs.mean_pixel) processed_images = tf.nn.dropout(processed_images, self.input_keep_prob) with tf.variable_scope(inference_name): conv1 = utils_layers.conv2d_layer(processed_images, '1', [7, 7, cfgs.cur_channel+cfgs.seq_num, 64], pool_=3) #Resnet conv_final_layer, image_net = self.resnet.resnet_op(conv1, if_avg_pool=0) #dropout conv_final_layer = tf.nn.dropout(conv_final_layer, keep_prob) W_last = utils.weight_variable([1, 1, 2048, 2], name='W_last') b_last = utils.bias_variable([2], name='b8') conv_last = utils.conv2d_basic(conv_final_layer, W_last, b_last) print('conv_last: ', conv_last.get_shape()) #Deconv operator #1. output_shape=[self.batch_size, 14, 14, 1024] conv_t1 = utils_layers.deconv2d_layer(conv_last, 't1', [4,4,1024,2], output_shape=tf.shape(image_net['block3_b22'])) fuse_1 = tf.add(conv_t1, image_net['block3_b22'], name="fuse_1") #2. output_shape=[self.batch_size, 28, 28, 512] conv_t2 = utils_layers.deconv2d_layer(fuse_1, 't2', [4,4,512,1024], output_shape=tf.shape(image_net['block2_b3'])) fuse_2 = tf.add(conv_t2, image_net['block2_b3'], name="fuse_2") #3. output_shape = [self.batch_size, 56, 56, 256] conv_t3 = utils_layers.deconv2d_layer(fuse_2, 't3', [4,4,256,512], output_shape=tf.shape(image_net['block1_b2'])) fuse_3 = tf.add(conv_t3, image_net['block1_b2'], name='fuse_3') #4. output_shape=[self.batch_size, 224, 224, 2] shape = tf.shape(images) conv_t4 = utils_layers.deconv2d_layer(fuse_3, 't4', [16, 16, 2, 256], output_shape=[shape[0], shape[1], shape[2], 2], stride=4) annotation_pred = tf.argmax(conv_t4, dimension=3, name="prediction") logits = conv_t4 print('logits shape', logits.shape) return logits
def inference_fully_convolutional(dataset): ''' Fully convolutional inference on notMNIST dataset :param datset: [batch_size, 28*28*1] tensor :return: logits ''' dataset_reshaped = tf.reshape(dataset, [-1, 28, 28, 1]) with tf.name_scope("conv1") as scope: W_conv1 = utils.weight_variable_xavier_initialized([3, 3, 1, 32], name="W_conv1") b_conv1 = utils.bias_variable([32], name="b_conv1") h_conv1 = tf.nn.relu( utils.conv2d_strided(dataset_reshaped, W_conv1, b_conv1)) with tf.name_scope("conv2") as scope: W_conv2 = utils.weight_variable_xavier_initialized([3, 3, 32, 64], name="W_conv2") b_conv2 = utils.bias_variable([64], name="b_conv2") h_conv2 = tf.nn.relu(utils.conv2d_strided(h_conv1, W_conv2, b_conv2)) with tf.name_scope("conv3") as scope: W_conv3 = utils.weight_variable_xavier_initialized([3, 3, 64, 128], name="W_conv3") b_conv3 = utils.bias_variable([128], name="b_conv3") h_conv3 = tf.nn.relu(utils.conv2d_strided(h_conv2, W_conv3, b_conv3)) with tf.name_scope("conv4") as scope: W_conv4 = utils.weight_variable_xavier_initialized([3, 3, 128, 256], name="W_conv4") b_conv4 = utils.bias_variable([256], name="b_conv4") h_conv4 = tf.nn.relu(utils.conv2d_strided(h_conv3, W_conv4, b_conv4)) with tf.name_scope("conv5") as scope: # W_conv5 = utils.weight_variable_xavier_initialized([2, 2, 256, 512], name="W_conv5") # b_conv5 = utils.bias_variable([512], name="b_conv5") # h_conv5 = tf.nn.relu(utils.conv2d_strided(h_conv4, W_conv5, b_conv5)) h_conv5 = utils.avg_pool_2x2(h_conv4) with tf.name_scope("conv6") as scope: W_conv6 = utils.weight_variable_xavier_initialized([1, 1, 256, 10], name="W_conv6") b_conv6 = utils.bias_variable([10], name="b_conv6") logits = tf.nn.relu(utils.conv2d_basic(h_conv5, W_conv6, b_conv6)) print logits.get_shape() logits = tf.reshape(logits, [-1, 10]) return logits
def inference(image, keep_prob): """ Semantic segmentation network definition :param image: input image. Should have values in range 0-255 :param keep_prob: :return: """ print("setting up vgg initialized conv layers ...") model_data = utils.get_model_data(FLAGS.model_dir, MODEL_URL) mean = model_data['normalization'][0][0][0] mean_pixel = np.mean(mean, axis=(0, 1)) weights = np.squeeze(model_data['layers']) processed_image = utils.process_image(image, mean_pixel) with tf.variable_scope("inference"): vgg_end_layer = 'conv4_4' image_net = vgg_net(weights, processed_image, end_layer=vgg_end_layer) conv_final_layer = image_net[vgg_end_layer] dropout = tf.nn.dropout(conv_final_layer, keep_prob=keep_prob) W_final = utils.weight_variable([1, 1, 512, NUM_OF_CLASSES], name="W_final") b_final = utils.bias_variable([NUM_OF_CLASSES], name="b_final") conv_final = utils.conv2d_basic(dropout, W_final, b_final) if FLAGS.debug: utils.add_activation_summary(conv_final) # now to upscale to actual image size deconv_shape2 = image_net["pool2"].get_shape() W_t2 = utils.weight_variable([4, 4, deconv_shape2[3].value, NUM_OF_CLASSES], name="W_t2") b_t2 = utils.bias_variable([deconv_shape2[3].value], name="b_t2") conv_t2 = utils.conv2d_transpose_strided(conv_final, W_t2, b_t2, output_shape=tf.shape(image_net["pool2"])) fuse_2 = tf.add(conv_t2, image_net["pool2"], name="fuse_2") shape = tf.shape(image) deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], NUM_OF_CLASSES]) W_t3 = utils.weight_variable([8, 8, NUM_OF_CLASSES, deconv_shape2[3].value], name="W_t3") b_t3 = utils.bias_variable([NUM_OF_CLASSES], name="b_t3") conv_t3 = utils.conv2d_transpose_strided(fuse_2, W_t3, b_t3, output_shape=deconv_shape3, stride=4) annotation_pred = tf.argmax(conv_t3, axis=3, name="prediction", output_type=tf.int32) return tf.expand_dims(annotation_pred, axis=3), conv_t3
def vgg_net(weights, image): layers = ( 'conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4' ) net = {} current = image for i, name in enumerate(layers): kind = name[:4] # layer的类型,是conv还是relu或者pool. if kind == 'conv': kernels, bias = weights[i][0][0][0][0] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") if name[4:5] == '5': # conv5开始使用atrous_conv2d卷积. current = utils.atrous_conv2d_basic(current, kernels, bias, 2) # rate=2,也即pad=2. current = utils.batch_norm_layer(current, FLAGS.mode, scope_bn=name) # BN处理. else: # conv1-4 current = utils.conv2d_basic(current, kernels, bias) current = utils.batch_norm_layer(current, FLAGS.mode, scope_bn=name) # BN处理. elif kind == 'relu': current = tf.nn.relu(current, name=name) if FLAGS.debug: utils.add_activation_summary(current) elif kind == 'pool': if name[4:5] == '4': current = utils.max_pool_1x1(current) else: current = utils.max_pool_3x3(current) net[name] = current return net
def inference_fully_convolutional(dataset): ''' Fully convolutional inference on notMNIST dataset :param datset: [batch_size, 28*28*1] tensor :return: logits ''' dataset_reshaped = tf.reshape(dataset, [-1, 28, 28, 1]) with tf.name_scope("conv1") as scope: W_conv1 = utils.weight_variable_xavier_initialized([3, 3, 1, 32], name="W_conv1") b_conv1 = utils.bias_variable([32], name="b_conv1") h_conv1 = tf.nn.relu(utils.conv2d_strided(dataset_reshaped, W_conv1, b_conv1)) with tf.name_scope("conv2") as scope: W_conv2 = utils.weight_variable_xavier_initialized([3, 3, 32, 64], name="W_conv2") b_conv2 = utils.bias_variable([64], name="b_conv2") h_conv2 = tf.nn.relu(utils.conv2d_strided(h_conv1, W_conv2, b_conv2)) with tf.name_scope("conv3") as scope: W_conv3 = utils.weight_variable_xavier_initialized([3, 3, 64, 128], name="W_conv3") b_conv3 = utils.bias_variable([128], name="b_conv3") h_conv3 = tf.nn.relu(utils.conv2d_strided(h_conv2, W_conv3, b_conv3)) with tf.name_scope("conv4") as scope: W_conv4 = utils.weight_variable_xavier_initialized([3, 3, 128, 256], name="W_conv4") b_conv4 = utils.bias_variable([256], name="b_conv4") h_conv4 = tf.nn.relu(utils.conv2d_strided(h_conv3, W_conv4, b_conv4)) with tf.name_scope("conv5") as scope: # W_conv5 = utils.weight_variable_xavier_initialized([2, 2, 256, 512], name="W_conv5") # b_conv5 = utils.bias_variable([512], name="b_conv5") # h_conv5 = tf.nn.relu(utils.conv2d_strided(h_conv4, W_conv5, b_conv5)) h_conv5 = utils.avg_pool_2x2(h_conv4) with tf.name_scope("conv6") as scope: W_conv6 = utils.weight_variable_xavier_initialized([1, 1, 256, 10], name="W_conv6") b_conv6 = utils.bias_variable([10], name="b_conv6") logits = tf.nn.relu(utils.conv2d_basic(h_conv5, W_conv6, b_conv6)) print logits.get_shape() logits = tf.reshape(logits, [-1, 10]) return logits
def vgg_net(weights, image): # VGG网络前五大部分 layers = ('conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4') net = {} current = image # 预测图像 for i, name in enumerate(layers): kind = name[:4] if kind == 'conv': kernels, bias = weights[i][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") # conv1_1_w bias = utils.get_variable(bias.reshape(-1), name=name + "_b") # conv1_1_b current = utils.conv2d_basic(current, kernels, bias) # 前向传播结果 current elif kind == 'relu': current = tf.nn.relu(current, name=name) # relu1_1 if FLAGS.debug: # 是否开启debug模式 true / false utils.add_activation_summary(current) # 画图 elif kind == 'pool': # vgg 的前5层的stride都是2,也就是前5层的size依次减小1倍 # 这里处理了前4层的stride,用的是平均池化 # 第5层的pool在下文的外部处理了,用的是最大池化 # pool1 size缩小2倍 # pool2 size缩小4倍 # pool3 size缩小8倍 # pool4 size缩小16倍 current = utils.avg_pool_2x2(current) net[name] = current # 每层前向传播结果放在net中, 是一个字典 return net
def vgg_net(weights, image): layers = ( 'conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1', 'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2', 'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2', 'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3', 'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2', 'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4', 'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2', 'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4' ) net = {} current = image for i, name in enumerate(layers): if name in ['conv3_4', 'relu3_4', 'conv4_4', 'relu4_4', 'conv5_4', 'relu5_4']: continue kind = name[:4] if kind == 'conv': kernels, bias = weights[i][0][0][0][0] # matconvnet: weights are [width, height, in_channels, out_channels] # tensorflow: weights are [height, width, in_channels, out_channels] kernels = utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name + "_w") bias = utils.get_variable(bias.reshape(-1), name=name + "_b") current = utils.conv2d_basic(current, kernels, bias) elif kind == 'relu': current = tf.nn.relu(current, name=name) if FLAGS.debug: utils.add_activation_summary(current) elif kind == 'pool': current = utils.avg_pool_2x2(current) net[name] = current return net
def inference(image, keep_prob): """ Semantic segmentation network definition :param image: input image. Should have values in range 0-255 :param keep_prob: :return: """ print("setting up vgg initialized conv layers ...") model_data = utils.get_model_data(FLAGS.model_dir, MODEL_URL) mean = model_data['normalization'][0][0][0] mean_pixel = np.mean(mean, axis=(0, 1)) weights = np.squeeze(model_data['layers']) #processed_image = utils.process_image(image, mean_pixel) with tf.variable_scope("inference"): image_net = vgg_net(weights, image) conv_final_layer = image_net["conv5_3"] pool5 = utils.max_pool_2x2(conv_final_layer) W6 = utils.weight_variable([7, 7, 512, 4096], name="W6") b6 = utils.bias_variable([4096], name="b6") conv6 = utils.conv2d_basic(pool5, W6, b6) relu6 = tf.nn.relu(conv6, name="relu6") if FLAGS.debug: utils.add_activation_summary(relu6) relu_dropout6 = tf.nn.dropout(relu6, keep_prob=keep_prob) W7 = utils.weight_variable([1, 1, 4096, 4096], name="W7") b7 = utils.bias_variable([4096], name="b7") conv7 = utils.conv2d_basic(relu_dropout6, W7, b7) relu7 = tf.nn.relu(conv7, name="relu7") if FLAGS.debug: utils.add_activation_summary(relu7) relu_dropout7 = tf.nn.dropout(relu7, keep_prob=keep_prob) W8 = utils.weight_variable([1, 1, 4096, NUM_OF_CLASSESS], name="W8") b8 = utils.bias_variable([NUM_OF_CLASSESS], name="b8") conv8 = utils.conv2d_basic(relu_dropout7, W8, b8) # annotation_pred1 = tf.argmax(conv8, dimension=3, name="prediction1") # now to upscale to actual image size deconv_shape1 = image_net["pool4"].get_shape() W_t1 = utils.weight_variable([4, 4, deconv_shape1[3].value, NUM_OF_CLASSESS], name="W_t1") b_t1 = utils.bias_variable([deconv_shape1[3].value], name="b_t1") conv_t1 = utils.conv2d_transpose_strided(conv8, W_t1, b_t1, output_shape=tf.shape(image_net["pool4"])) fuse_1 = tf.add(conv_t1, image_net["pool4"], name="fuse_1") deconv_shape2 = image_net["pool3"].get_shape() W_t2 = utils.weight_variable([4, 4, deconv_shape2[3].value, deconv_shape1[3].value], name="W_t2") b_t2 = utils.bias_variable([deconv_shape2[3].value], name="b_t2") conv_t2 = utils.conv2d_transpose_strided(fuse_1, W_t2, b_t2, output_shape=tf.shape(image_net["pool3"])) fuse_2 = tf.add(conv_t2, image_net["pool3"], name="fuse_2") shape = tf.shape(image) deconv_shape3 = tf.stack([shape[0], shape[1], shape[2], NUM_OF_CLASSESS]) W_t3 = utils.weight_variable([16, 16, NUM_OF_CLASSESS, deconv_shape2[3].value], name="W_t3") b_t3 = utils.bias_variable([NUM_OF_CLASSESS], name="b_t3") conv_t3 = utils.conv2d_transpose_strided(fuse_2, W_t3, b_t3, output_shape=deconv_shape3, stride=8) annotation_pred = tf.argmax(conv_t3, dimension=3, name="prediction") return tf.expand_dims(annotation_pred, dim=3), conv_t3