def build(self, weights_path="open_nsfw-weights.npy", input_type=InputType.TENSOR): self.weights = np.load(weights_path, encoding="latin1").item() self.input_tensor = None if input_type == InputType.TENSOR: self.input = tf.placeholder( tf.float32, shape=[None, 224, 224, 3], name="input") self.input_tensor = self.input elif input_type == InputType.BASE64_JPEG: from image_utils import load_base64_tensor self.input = tf.placeholder( tf.string, shape=(None, ), name="input") self.input_tensor = load_base64_tensor(self.input) else: raise ValueError("invalid input type '{}'".format(input_type)) x = self.input_tensor x = tf.pad(x, [[0, 0], [3, 3], [3, 3], [0, 0]], 'CONSTANT') x = self.__conv2d( "conv_1", x, filter_depth=64, kernel_size=7, stride=2, padding='valid') x = self.__batch_norm("bn_1", x) x = tf.nn.relu(x) x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, padding='same') x = self.__conv_block( stage=0, block=0, inputs=x, filter_depths=[32, 32, 128], kernel_size=3, stride=1) x = self.__identity_block( stage=0, block=1, inputs=x, filter_depths=[32, 32, 128], kernel_size=3) x = self.__identity_block( stage=0, block=2, inputs=x, filter_depths=[32, 32, 128], kernel_size=3) x = self.__conv_block( stage=1, block=0, inputs=x, filter_depths=[64, 64, 256], kernel_size=3, stride=2) x = self.__identity_block( stage=1, block=1, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__identity_block( stage=1, block=2, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__identity_block( stage=1, block=3, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__conv_block( stage=2, block=0, inputs=x, filter_depths=[128, 128, 512], kernel_size=3, stride=2) x = self.__identity_block( stage=2, block=1, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block( stage=2, block=2, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block( stage=2, block=3, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block( stage=2, block=4, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block( stage=2, block=5, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__conv_block( stage=3, block=0, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3, stride=2) x = self.__identity_block( stage=3, block=1, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3) x = self.__identity_block( stage=3, block=2, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3) x = tf.layers.average_pooling2d( x, pool_size=7, strides=1, padding="valid", name="pool") x = tf.reshape(x, shape=(-1, 1024)) self.logits = self.__fully_connected( name="fc_nsfw", inputs=x, num_outputs=2) self.predictions = tf.nn.softmax(self.logits, name="predictions")
def build(self, input_type=InputType.TENSOR): #self.weights = np.load(weights_path, encoding="latin1").item() self.input_tensor = None self.training = tf.placeholder(tf.bool, name='training_mode') self.learning_rate = tf.placeholder(tf.float32, name='learning_rate') if input_type == InputType.TENSOR: self.input = tf.placeholder(tf.float32, shape=[None, 224, 224, 3], name="input") self.input_tensor = self.input elif input_type == InputType.BASE64_JPEG: from image_utils import load_base64_tensor self.input = tf.placeholder(tf.string, shape=(None, ), name="input") self.input_tensor = load_base64_tensor(self.input) else: raise ValueError("invalid input type '{}'".format(input_type)) x = self.input_tensor self.y = tf.placeholder(tf.int32, (None)) one_hot_y = tf.one_hot(self.y, self.num_classes) x = tf.pad(x, [[0, 0], [3, 3], [3, 3], [0, 0]], 'CONSTANT') x = self.__conv2d("conv_1", x, filter_depth=64, kernel_size=7, stride=2, padding='valid') x = self.__batch_norm("bn_1", x) x = tf.nn.relu(x) x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, padding='same') x = self.__conv_block(stage=0, block=0, inputs=x, filter_depths=[32, 32, 128], kernel_size=3, stride=1) x = self.__identity_block(stage=0, block=1, inputs=x, filter_depths=[32, 32, 128], kernel_size=3) x = self.__identity_block(stage=0, block=2, inputs=x, filter_depths=[32, 32, 128], kernel_size=3) x = self.__conv_block(stage=1, block=0, inputs=x, filter_depths=[64, 64, 256], kernel_size=3, stride=2) x = self.__identity_block(stage=1, block=1, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__identity_block(stage=1, block=2, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__identity_block(stage=1, block=3, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__conv_block(stage=2, block=0, inputs=x, filter_depths=[128, 128, 512], kernel_size=3, stride=2) x = self.__identity_block(stage=2, block=1, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block(stage=2, block=2, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block(stage=2, block=3, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block(stage=2, block=4, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block(stage=2, block=5, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__conv_block(stage=3, block=0, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3, stride=2) x = self.__identity_block(stage=3, block=1, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3) x = self.__identity_block(stage=3, block=2, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3) x = tf.layers.average_pooling2d(x, pool_size=7, strides=1, padding="valid", name="pool") x = tf.reshape(x, shape=(-1, 1024), name='nsfw_features') # output self.logits = self.__fully_connected(name="fc_nsfw", inputs=x, num_outputs=self.num_classes) self.loss = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits_v2(labels=one_hot_y, logits=self.logits)) self.optimizer = tf.train.AdamOptimizer( learning_rate=self.learning_rate).minimize(self.loss) ## accuracy self.correct_prediction = tf.equal( tf.cast(tf.argmax(self.logits, 1), tf.int32), self.y) self.accuracy_operation = tf.reduce_mean( tf.cast(self.correct_prediction, tf.float32)) ## recall toxic_predicts = tf.equal(tf.cast(tf.argmax(self.logits, 1), tf.int32), tf.cast(2, tf.int32)) toxic_labels = tf.equal(self.y, tf.cast(2, tf.int32)) self.toxic_recall = tf.metrics.recall(toxic_labels, toxic_predicts) self.toxic_label_sum = tf.reduce_sum(tf.cast(toxic_labels, tf.int32)) ## precision self.toxic_precision = tf.metrics.precision(toxic_labels, toxic_predicts) self.toxic_predict_sum = tf.reduce_sum( tf.cast(toxic_predicts, tf.int32))
def build(self, weights_path="open_nsfw-weights.npy", input_type=InputType.TENSOR): self.weights = np.load(weights_path, encoding="latin1").item() self.input_tensor = None if input_type == InputType.TENSOR: self.input = tf.placeholder(tf.float32, shape=[None, 224, 224, 3], name="input") self.input_tensor = self.input elif input_type == InputType.BASE64_JPEG: from image_utils import load_base64_tensor self.input = tf.placeholder(tf.string, shape=(None,), name="input") self.input_tensor = load_base64_tensor(self.input) else: raise ValueError("invalid input type '{}'".format(input_type)) x = self.input_tensor x = tf.pad(x, [[0, 0], [3, 3], [3, 3], [0, 0]], 'CONSTANT') x = self.__conv2d("conv_1", x, filter_depth=64, kernel_size=7, stride=2, padding='valid') x = self.__batch_norm("bn_1", x) x = tf.nn.relu(x) x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, padding='same') x = self.__conv_block(stage=0, block=0, inputs=x, filter_depths=[32, 32, 128], kernel_size=3, stride=1) x = self.__identity_block(stage=0, block=1, inputs=x, filter_depths=[32, 32, 128], kernel_size=3) x = self.__identity_block(stage=0, block=2, inputs=x, filter_depths=[32, 32, 128], kernel_size=3) x = self.__conv_block(stage=1, block=0, inputs=x, filter_depths=[64, 64, 256], kernel_size=3, stride=2) x = self.__identity_block(stage=1, block=1, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__identity_block(stage=1, block=2, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__identity_block(stage=1, block=3, inputs=x, filter_depths=[64, 64, 256], kernel_size=3) x = self.__conv_block(stage=2, block=0, inputs=x, filter_depths=[128, 128, 512], kernel_size=3, stride=2) x = self.__identity_block(stage=2, block=1, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block(stage=2, block=2, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block(stage=2, block=3, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block(stage=2, block=4, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__identity_block(stage=2, block=5, inputs=x, filter_depths=[128, 128, 512], kernel_size=3) x = self.__conv_block(stage=3, block=0, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3, stride=2) x = self.__identity_block(stage=3, block=1, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3) x = self.__identity_block(stage=3, block=2, inputs=x, filter_depths=[256, 256, 1024], kernel_size=3) x = tf.layers.average_pooling2d(x, pool_size=7, strides=1, padding="valid", name="pool") x = tf.reshape(x, shape=(-1, 1024)) self.logits = self.__fully_connected(name="fc_nsfw", inputs=x, num_outputs=2) self.predictions = tf.nn.softmax(self.logits, name="predictions")