├── Alexnet.py ├── Figure_1.png ├── Model.py ├── README.md ├── Resnet_50_101_152.py ├── VGG_19.py ├── data ├── 001 │ ├── 000679_001.jpg │ ├── 000686_001.jpg │ ├── 000696_001.jpg │ ├── 000703_001.jpg │ ├── 000705_001.jpg │ ├── 000711_001.jpg │ ├── 000712_001.jpg │ ├── 000713_001.jpg │ ├── 000715_001.jpg │ └── 000718_001.jpg ├── 002 │ ├── 000009_001.jpg │ ├── 000018_001.jpg │ ├── 000020_001.jpg │ ├── 000024_001.jpg │ ├── 000026_001.jpg │ ├── 000029_001.jpg │ ├── 000031_001.jpg │ ├── 000037_001.jpg │ ├── 000062_001.jpg │ └── 000063_001.jpg ├── 003 │ ├── 000285_001.jpg │ ├── 000287_001.jpg │ ├── 000293_001.jpg │ ├── 000294_001.jpg │ ├── 000295_001.jpg │ ├── 000296_001.jpg │ ├── 000299_001.jpg │ ├── 000300_001.jpg │ ├── 000302_001.jpg │ └── 000304_001.jpg ├── 004 │ ├── 000385_001.jpg │ ├── 000392_001.jpg │ ├── 000394_001.jpg │ ├── 000395_001.jpg │ ├── 000402_001.jpg │ ├── 000418_001.jpg │ ├── 000419_001.jpg │ ├── 000422_001.jpg │ ├── 000423_001.jpg │ └── 000424_001.jpg ├── 005 │ ├── 000500_001.jpg │ ├── 000502_001.jpg │ ├── 000504_001.jpg │ ├── 000505_001.jpg │ ├── 000506_001.jpg │ ├── 000508_001.jpg │ ├── 000511_001.jpg │ ├── 000515_001.jpg │ ├── 000518_001.jpg │ └── 000519_001.jpg ├── 006 │ ├── 000523_001.jpg │ ├── 000524_001.jpg │ ├── 000525_001.jpg │ ├── 000530_001.jpg │ ├── 000533_001.jpg │ ├── 000539_001.jpg │ ├── 000540_001.jpg │ ├── 000542_001.jpg │ ├── 000544_001.jpg │ └── 000549_001.jpg ├── 007 │ ├── 000523_001.jpg │ ├── 000524_001.jpg │ ├── 000525_001.jpg │ ├── 000530_001.jpg │ ├── 000533_001.jpg │ ├── 000539_001.jpg │ ├── 000540_001.jpg │ ├── 000542_001.jpg │ ├── 000544_001.jpg │ └── 000549_001.jpg ├── 008 │ ├── 000523_001.jpg │ ├── 000524_001.jpg │ ├── 000525_001.jpg │ ├── 000530_001.jpg │ ├── 000533_001.jpg │ ├── 000539_001.jpg │ ├── 000540_001.jpg │ ├── 000542_001.jpg │ ├── 000544_001.jpg │ └── 000549_001.jpg └── 009 │ ├── 000160_001.jpg │ ├── 000162_001.jpg │ ├── 000168_001.jpg │ ├── 000175_001.jpg │ ├── 000176_001.jpg │ ├── 000178_001.jpg │ ├── 000181_001.jpg │ ├── 000183_001.jpg │ ├── 000190_001.jpg │ └── 000195_001.jpg ├── dataload.py ├── inception_V4.py └── main.py /Alexnet.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Time : 2020/3/3 19:59 3 | # @Author : YYLin 4 | # @Email : 854280599@qq.com 5 | # @File : Alexnet.py 6 | import tensorflow as tf 7 | 8 | 9 | # 定义一个最大池化层 10 | def maxPoolLayer(x, kHeight, kWidth, strideX, strideY, name, padding="SAME"): 11 | return tf.nn.max_pool(x, ksize=[1, kHeight, kWidth, 1], 12 | strides=[1, strideX, strideY, 1], padding=padding, name=name) 13 | 14 | 15 | # 使用dropout 随机丢包 16 | def dropout(x, keepPro, name=None): 17 | return tf.nn.dropout(x, keepPro, name) 18 | 19 | 20 | # 定义一个局部正则化 21 | def LRN(x, r, alpha, beta, name=None, bias=1.0): 22 | return tf.nn.local_response_normalization(x, depth_radius=r, alpha=alpha, beta=beta, bias=bias, name=name) 23 | 24 | 25 | # 定义一个全连接层的函数 其实可以修改成之前我写的那个 26 | def fcLayer(x, inputD, outputD, reluFlag, name): 27 | with tf.variable_scope(name) as scope: 28 | w = tf.get_variable("w", shape=[inputD, outputD], dtype="float") 29 | b = tf.get_variable("b", [outputD], dtype="float") 30 | out = tf.nn.xw_plus_b(x, w, b, name=scope.name) 31 | 32 | if reluFlag: 33 | return tf.nn.relu(out) 34 | else: 35 | return out 36 | 37 | 38 | def convLayer(x, kHeight, kWidth, strideX, strideY, featureNum, name, padding="SAME", groups=1): 39 | channel = int(x.get_shape()[-1]) 40 | conv = lambda a, b: tf.nn.conv2d(a, b, strides=[1, strideY, strideX, 1], padding=padding) 41 | with tf.variable_scope(name) as scope: 42 | w = tf.get_variable("w", shape=[kHeight, kWidth, channel / groups, featureNum]) 43 | b = tf.get_variable("b", shape=[featureNum]) 44 | 45 | xNew = tf.split(value=x, num_or_size_splits=groups, axis=3) 46 | wNew = tf.split(value=w, num_or_size_splits=groups, axis=3) 47 | 48 | featureMap = [conv(t1, t2) for t1, t2 in zip(xNew, wNew)] 49 | mergeFeatureMap = tf.concat(axis=3, values=featureMap) 50 | # print mergeFeatureMap.shape 51 | out = tf.nn.bias_add(mergeFeatureMap, b) 52 | return tf.nn.relu(tf.reshape(out, mergeFeatureMap.get_shape().as_list()), name=scope.name) 53 | 54 | 55 | # 定义一个alexNet类别 方便之后调用 56 | class AlexNet(object): 57 | def __init__(self, x, classNum, keepPro): 58 | self.X = x 59 | self.KEEPPRO = keepPro 60 | self.CLASSNUM = classNum 61 | self.begin_alexNet() 62 | 63 | def begin_alexNet(self): 64 | conv1 = convLayer(self.X, 11, 11, 4, 4, 96, "conv1", "VALID") 65 | lrn1 = LRN(conv1, 2, 2e-05, 0.75, "norm1") 66 | pool1 = maxPoolLayer(lrn1, 3, 3, 2, 2, "pool1", "VALID") 67 | 68 | conv2 = convLayer(pool1, 5, 5, 1, 1, 256, "conv2", groups=2) 69 | lrn2 = LRN(conv2, 2, 2e-05, 0.75, "lrn2") 70 | pool2 = maxPoolLayer(lrn2, 3, 3, 2, 2, "pool2", "VALID") 71 | 72 | conv3 = convLayer(pool2, 3, 3, 1, 1, 384, "conv3") 73 | 74 | conv4 = convLayer(conv3, 3, 3, 1, 1, 384, "conv4", groups=2) 75 | 76 | conv5 = convLayer(conv4, 3, 3, 1, 1, 256, "conv5", groups=2) 77 | pool5 = maxPoolLayer(conv5, 3, 3, 2, 2, "pool5", "VALID") 78 | 79 | fcIn = tf.reshape(pool5, [-1, 256 * 2 * 2]) 80 | fc1 = fcLayer(fcIn, 256 * 2 * 2, 4096, True, "fc6") 81 | dropout1 = dropout(fc1, self.KEEPPRO) 82 | 83 | fc2 = fcLayer(dropout1, 4096, 4096, True, "fc7") 84 | dropout2 = dropout(fc2, self.KEEPPRO) 85 | 86 | self.fc3 = fcLayer(dropout2, 4096, self.CLASSNUM, True, "fc8") 87 | 88 | -------------------------------------------------------------------------------- /Figure_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/Figure_1.png -------------------------------------------------------------------------------- /Model.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Time : 2020/3/3 20:07 3 | # @Author : YYLin 4 | # @Email : 854280599@qq.com 5 | # @File : Model.py 6 | from dataload import * 7 | import tensorflow as tf 8 | from Alexnet import AlexNet 9 | from sklearn.model_selection import train_test_split 10 | import Resnet_50_101_152 11 | from VGG_19 import VGG19 12 | import inception_V4 13 | import matplotlib.pyplot as plt 14 | 15 | class Model(object): 16 | def __init__(self, sess, type_of_model, epoch, dataset_name, batch_size, img_size, y_dim, resnet_type): 17 | self.sess = sess 18 | self.type_of_model = type_of_model 19 | self.epoch = epoch 20 | self.dataset_name = dataset_name 21 | self.batch_size = batch_size 22 | self.img_size = img_size 23 | self.y_dim = y_dim 24 | self.resnet_type = resnet_type 25 | 26 | # load dataset 27 | if self.dataset_name == 'satellite': 28 | print('loading satellite .............') 29 | self.data_X, self.data_Y = load_satetile_image(self.img_size, y_dim=self.y_dim) 30 | # split the data into train set and valid set 31 | self.X_train, self.X_val, self.y_train, self.y_val = train_test_split(self.data_X, self.data_Y, 32 | shuffle=True, test_size=0.1, 33 | random_state=2019) 34 | print('self.X_train, self.y_train:',self.X_train.shape, self.y_train.shape, self.X_val.shape, self.y_val.shape) 35 | 36 | def build_model(self): 37 | 38 | # the placeholder of image and label 39 | self.y = tf.placeholder(tf.float32, [self.batch_size, self.y_dim], name='y') 40 | self.inputs = tf.placeholder(tf.float32, [self.batch_size, self.img_size, self.img_size, 3], name='img') 41 | self.keep_prob = tf.placeholder("float") 42 | 43 | # chose the model 44 | if self.type_of_model == 'Alexnet': 45 | network = AlexNet(self.inputs, self.y_dim, self.keep_prob) 46 | score = network.fc3 47 | elif self.type_of_model == 'ResNet': 48 | network = Resnet_50_101_152.resnet(self.inputs, self.resnet_type, self.y_dim) 49 | score = tf.squeeze(network, axis=(1, 2)) 50 | elif self.type_of_model == 'VGG19': 51 | network = VGG19(self.inputs, self.keep_prob, self.y_dim) 52 | score = network.fc8 53 | elif self.type_of_model == 'inception_V4': 54 | score = inception_V4.inference(self.inputs, self.batch_size, self.y_dim) 55 | else: 56 | print('these is no %s'%self.type_of_model) 57 | 58 | softmax_result = tf.nn.softmax(score) 59 | 60 | # 定义损失函数 以及相对应的优化器 61 | cross_entropy = -tf.reduce_sum(self.y * tf.log(softmax_result)) 62 | self.Optimizer = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) 63 | 64 | # 用于判断验证集的结果是否正确 65 | correct_prediction = tf.equal(tf.argmax(softmax_result, 1), tf.argmax(self.y, 1)) 66 | self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 67 | 68 | def plot_acc(self, train_acc, val_acc): 69 | fig, ax = plt.subplots() 70 | plt.xlabel('Iter') 71 | plt.ylabel('Accuracy') 72 | 73 | x = [i for i in range(len(train_acc))] 74 | plt.plot(x, train_acc, "x-", label="Train Accuracy") 75 | plt.plot(x, val_acc, "+-", label="Valid Accuracy") 76 | 77 | """open the grid""" 78 | plt.grid(True) 79 | 80 | plt.legend(bbox_to_anchor=(1.0, 1), loc=1, borderaxespad=0.) 81 | 82 | plt.show() 83 | 84 | def train(self): 85 | print('begin training ...........') 86 | tf.global_variables_initializer().run() 87 | train_acc_list = [] 88 | valid_acc_list = [] 89 | 90 | for k in range(self.epoch): 91 | for i in range(len(self.X_train) // self.batch_size): 92 | if (i+1) == (len(self.X_train) // self.batch_size): 93 | print('Reload Imaging') 94 | self.data_X, self.data_Y = load_satetile_image(self.img_size, y_dim=self.y_dim) 95 | # split the data into train set and valid set 96 | self.X_train, self.X_val, self.y_train, self.y_val = train_test_split(self.data_X, self.data_Y, shuffle=True, test_size=0.1, 97 | random_state=2019) 98 | 99 | dropout_rate = 0.5 100 | _, train_acc = self.sess.run([self.Optimizer, self.accuracy], feed_dict={self.inputs: self.X_train[i*self.batch_size:(i+1)*self.batch_size], 101 | self.y: self.y_train[i*self.batch_size:(i+1)*self.batch_size], self.keep_prob: dropout_rate}) 102 | 103 | # 输出验证集上的结果 104 | all_val_acc = 0 105 | for j in range((len(self.X_val) // self.batch_size) - 1): 106 | dropout_rate = 0 107 | val_acc = self.sess.run(self.accuracy, feed_dict={ 108 | self.inputs: self.X_val[j * self.batch_size:(j + 1) * self.batch_size], 109 | self.y: self.y_val[j * self.batch_size:(j + 1) * self.batch_size], 110 | self.keep_prob: dropout_rate}) 111 | all_val_acc += val_acc 112 | 113 | print("step %d, train accuracy %f valid accuracy %f:" % (i,train_acc, all_val_acc / (j + 1))) 114 | train_acc_list.append(train_acc) 115 | valid_acc_list.append(all_val_acc) 116 | self.plot_acc(train_acc_list, valid_acc_list) 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Image recognition model collection 2 | Collection of classic image recognition models, e.g.ResNet, Alexnet, VGG19, inception_V4 in Tensorflow. 3 | 4 | 5 | ## The format of dataset 6 | Firstly, Use unzip data.zip to unzipped it, and then images belonging to different categories are placed in different folders. 7 | 8 | 9 | ## Training networks 10 | | models | paper | commands | introduction | 11 | | ---------- | :-----------: | :-----------: | :-----------: | 12 | | Alexnet | [Alexnet](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)| `python main.py --type_of_model Alexnet` | [Alexnet](https://blog.csdn.net/qq_41776781/article/details/94437671) 13 | | | | | 14 | | VGG19 | [VGG19](https://arxiv.org/abs/1801.01401)| `python main.py --type_of_model VGG19` | [VGG19](https://blog.csdn.net/qq_41776781/article/details/94452085) 15 | | | | | 16 | |Inception_V4 | [Inception_V4](https://arxiv.org/abs/1606.03498) | `python main.py --type_of_model inception_V4` | [Inception_V4](https://blog.csdn.net/qq_41776781/article/details/94476538) 17 | | | | | 18 | | ResNet | [ResNet](https://arxiv.org/abs/1606.03498) | `python main.py --type_of_model ResNet --resnet_type 50` | [ResNet](https://blog.csdn.net/qq_41776781/article/details/94459299) 19 | 20 | ## The Accuracy of training and validing images 21 | ![](https://github.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/blob/master/Figure_1.png) 22 | 23 | ## An explanation 24 | It's easy to use the above recognition models with kears, but by reading papers and analyzing source code, which could help in improving programming ability. If you want to know basic something about these models, you can visit my [CSDN](https://blog.csdn.net/qq_41776781/category_9291732.html), 25 | 26 | -------------------------------------------------------------------------------- /Resnet_50_101_152.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Time : 2020/3/3 22:30 3 | # @Author : YYLin 4 | # @Email : 854280599@qq.com 5 | # @File : Resnet_50_101_152.py 6 | import tensorflow as tf 7 | 8 | UNITS = {'50': [3, 4, 6, 3], '101': [3, 4, 23, 3], 9 | '152': [3, 8, 36, 3]} 10 | CHANNELS = [64, 128, 256, 512] 11 | 12 | 13 | def bottleneck(net, channel, holes=1, c_name='pretrain', stride=1, 14 | shortcut_conv=False, key=tf.GraphKeys.GLOBAL_VARIABLES): 15 | with tf.variable_scope('bottleneck_v2', reuse=tf.AUTO_REUSE): 16 | # define initializer for weights and biases 17 | w_initializer = tf.contrib.layers.xavier_initializer() 18 | b_initializer = tf.zeros_initializer() 19 | regularizer = tf.contrib.layers.l2_regularizer(scale=0.0001) 20 | # batch normalization 21 | net = tf.layers.batch_normalization(inputs=net, axis=-1, name='preact') 22 | net = tf.nn.relu(net) 23 | 24 | # shortcut 25 | if shortcut_conv: 26 | with tf.variable_scope('shortcut', reuse=tf.AUTO_REUSE): 27 | kernel = tf.get_variable(initializer=w_initializer, 28 | shape=[1, 1, net.shape[-1], 29 | channel * 4], 30 | name='weights', 31 | regularizer=regularizer, 32 | collections=['pretrain', key]) 33 | # convolution for shortcut in order to output size 34 | shortcut = tf.nn.conv2d(input=net, filter=kernel, 35 | strides=[1, stride, stride, 1], 36 | padding='SAME') 37 | biases = tf.get_variable(initializer=b_initializer, 38 | shape=channel * 4, name='biases', 39 | regularizer=regularizer, 40 | collections=['pretrain', key]) 41 | shortcut = tf.nn.bias_add(shortcut, biases) 42 | else: 43 | # shortcut 44 | shortcut = net 45 | 46 | # convolution 1 47 | with tf.variable_scope('conv1', reuse=tf.AUTO_REUSE): 48 | kernel = tf.get_variable(initializer=w_initializer, 49 | shape=[1, 1, net.shape[-1], channel], 50 | name='weights', regularizer=regularizer, 51 | collections=['pretrain', key]) 52 | net = tf.nn.atrous_conv2d(value=net, filters=kernel, rate=holes, 53 | padding='SAME') 54 | biases = tf.get_variable(initializer=b_initializer, 55 | shape=channel, name='biases', 56 | regularizer=regularizer, 57 | collections=['non_pretrain', key]) 58 | net = tf.nn.bias_add(net, biases) 59 | # batch normalization 60 | net = tf.layers.batch_normalization(inputs=net, axis=-1, 61 | name='preact') 62 | net = tf.nn.relu(net) 63 | 64 | # convolution 2 65 | with tf.variable_scope('conv2', reuse=tf.AUTO_REUSE): 66 | kernel = tf.get_variable(initializer=w_initializer, 67 | shape=[3, 3, channel, channel], 68 | name='weights', regularizer=regularizer, 69 | collections=['pretrain', key]) 70 | net = tf.nn.conv2d(input=net, filter=kernel, 71 | strides=[1, stride, stride, 1], padding='SAME') 72 | biases = tf.get_variable(initializer=b_initializer, 73 | shape=channel, name='biases', 74 | regularizer=regularizer, 75 | collections=['non_pretrain', key]) 76 | net = tf.nn.bias_add(net, biases) 77 | # batch normalization 78 | net = tf.layers.batch_normalization(inputs=net, axis=-1, 79 | name='preact') 80 | net = tf.nn.relu(net) 81 | 82 | # convolution 3 83 | with tf.variable_scope('conv3', reuse=tf.AUTO_REUSE): 84 | kernel = tf.get_variable(initializer=w_initializer, 85 | shape=[1, 1, channel, channel * 4], 86 | name='weights', regularizer=regularizer, 87 | collections=['pretrain', key]) 88 | net = tf.nn.atrous_conv2d(value=net, filters=kernel, rate=holes, 89 | padding='SAME') 90 | biases = tf.get_variable(initializer=b_initializer, 91 | shape=channel * 4, name='biases', 92 | regularizer=regularizer, 93 | collections=['pretrain', key]) 94 | net = tf.nn.bias_add(net, biases) 95 | 96 | return net, shortcut 97 | 98 | 99 | def block(net, name, unit, channel): 100 | with tf.variable_scope(name, reuse=tf.AUTO_REUSE): 101 | for i in range(unit): 102 | with tf.variable_scope('unit_' + str(i + 1), reuse=tf.AUTO_REUSE): 103 | # block1 i=0 stride=1 104 | if i == 0: 105 | if name != 'block1': 106 | net, shortcut = bottleneck(net, channel, 107 | stride=2, 108 | shortcut_conv=True) 109 | else: 110 | net, shortcut = bottleneck(net, channel, 111 | stride=1, 112 | shortcut_conv=True) 113 | else: 114 | net, shortcut = bottleneck(net, channel) 115 | net = tf.add(net, shortcut) 116 | 117 | return net 118 | 119 | 120 | def resnet(input_, resnet_v2, classes): 121 | key = tf.GraphKeys.GLOBAL_VARIABLES 122 | with tf.variable_scope(resnet_v2, reuse=tf.AUTO_REUSE): 123 | # define initializer for weights and biases 124 | w_initializer = tf.contrib.layers.xavier_initializer() 125 | b_initializer = tf.zeros_initializer() 126 | regularizer = tf.contrib.layers.l2_regularizer(scale=0.0001) 127 | # convolution 1 128 | with tf.variable_scope('conv1', reuse=tf.AUTO_REUSE): 129 | kernel = tf.get_variable(initializer=w_initializer, 130 | shape=[7, 7, 3, 64], 131 | name='weights', regularizer=regularizer, 132 | collections=['pretrain', key]) 133 | net = tf.nn.conv2d(input=input_, filter=kernel, 134 | strides=[1, 2, 2, 1], padding='SAME') 135 | biases = tf.get_variable(initializer=b_initializer, shape=64, 136 | name='biases', regularizer=regularizer, 137 | collections=['pretrain', key]) 138 | net = tf.nn.bias_add(net, biases) 139 | net = tf.nn.max_pool(value=net, ksize=[1, 3, 3, 1], 140 | strides=[1, 2, 2, 1], padding='SAME') 141 | 142 | for i in range(4): 143 | net = block(net, 'block' + str(i + 1), UNITS[resnet_v2][i], 144 | CHANNELS[i]) 145 | 146 | net = tf.layers.batch_normalization(inputs=net, axis=-1, name='postnorm') 147 | net = tf.nn.relu(net) 148 | 149 | h, w = net.shape[1:3] 150 | net = tf.nn.avg_pool(value=net, ksize=[1, h, w, 1], 151 | strides=[1, 1, 1, 1], padding='VALID') 152 | 153 | # logits is not in scope 'resnet_v2' in order to fine-tune 154 | with tf.variable_scope('logits', reuse=tf.AUTO_REUSE): 155 | kernel = tf.get_variable(initializer=w_initializer, 156 | shape=[1, 1, 2048, classes], name='weights', 157 | regularizer=regularizer, 158 | collections=['non_pretrain', key]) 159 | net = tf.nn.conv2d(input=net, filter=kernel, 160 | strides=[1, 1, 1, 1], padding='VALID') 161 | biases = tf.get_variable(initializer=b_initializer, shape=classes, 162 | name='biases', regularizer=regularizer, 163 | collections=['non_pretrain', key]) 164 | net = tf.nn.bias_add(net, biases) 165 | return net 166 | 167 | -------------------------------------------------------------------------------- /VGG_19.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Time : 2020/3/3 22:52 3 | # @Author : YYLin 4 | # @Email : 854280599@qq.com 5 | # @File : VGG_19.py 6 | # -*- coding: utf-8 -*- 7 | import tensorflow as tf 8 | 9 | 10 | def maxPoolLayer(x, kHeight, kWidth, strideX, strideY, name, padding="SAME"): 11 | return tf.nn.max_pool(x, ksize=[1, kHeight, kWidth, 1], 12 | strides=[1, strideX, strideY, 1], padding=padding, name=name) 13 | 14 | 15 | def dropout(x, keepPro, name=None): 16 | return tf.nn.dropout(x, keepPro, name) 17 | 18 | 19 | def fcLayer(x, inputD, outputD, reluFlag, name): 20 | with tf.variable_scope(name) as scope: 21 | w = tf.get_variable("w", shape=[inputD, outputD], dtype="float") 22 | b = tf.get_variable("b", [outputD], dtype="float") 23 | out = tf.nn.xw_plus_b(x, w, b, name=scope.name) 24 | if reluFlag: 25 | return tf.nn.relu(out) 26 | else: 27 | return out 28 | 29 | 30 | def convLayer(x, kHeight, kWidth, strideX, strideY, featureNum, name, padding="SAME"): 31 | channel = int(x.get_shape()[-1]) 32 | with tf.variable_scope(name) as scope: 33 | w = tf.get_variable("w", shape=[kHeight, kWidth, channel, featureNum]) 34 | b = tf.get_variable("b", shape=[featureNum]) 35 | featureMap = tf.nn.conv2d(x, w, strides=[1, strideY, strideX, 1], padding=padding) 36 | out = tf.nn.bias_add(featureMap, b) 37 | return tf.nn.relu(tf.reshape(out, featureMap.get_shape().as_list()), name=scope.name) 38 | 39 | 40 | class VGG19(object): 41 | def __init__(self, x, keepPro, classNum): 42 | self.X = x 43 | self.KEEPPRO = keepPro 44 | self.CLASSNUM = classNum 45 | self.begin_VGG_19() 46 | 47 | def begin_VGG_19(self): 48 | """build model""" 49 | conv1_1 = convLayer(self.X, 3, 3, 1, 1, 64, "conv1_1") 50 | conv1_2 = convLayer(conv1_1, 3, 3, 1, 1, 64, "conv1_2") 51 | pool1 = maxPoolLayer(conv1_2, 2, 2, 2, 2, "pool1") 52 | 53 | conv2_1 = convLayer(pool1, 3, 3, 1, 1, 128, "conv2_1") 54 | conv2_2 = convLayer(conv2_1, 3, 3, 1, 1, 128, "conv2_2") 55 | pool2 = maxPoolLayer(conv2_2, 2, 2, 2, 2, "pool2") 56 | 57 | conv3_1 = convLayer(pool2, 3, 3, 1, 1, 256, "conv3_1") 58 | conv3_2 = convLayer(conv3_1, 3, 3, 1, 1, 256, "conv3_2") 59 | conv3_3 = convLayer(conv3_2, 3, 3, 1, 1, 256, "conv3_3") 60 | conv3_4 = convLayer(conv3_3, 3, 3, 1, 1, 256, "conv3_4") 61 | pool3 = maxPoolLayer(conv3_4, 2, 2, 2, 2, "pool3") 62 | 63 | conv4_1 = convLayer(pool3, 3, 3, 1, 1, 512, "conv4_1") 64 | conv4_2 = convLayer(conv4_1, 3, 3, 1, 1, 512, "conv4_2") 65 | conv4_3 = convLayer(conv4_2, 3, 3, 1, 1, 512, "conv4_3") 66 | conv4_4 = convLayer(conv4_3, 3, 3, 1, 1, 512, "conv4_4") 67 | pool4 = maxPoolLayer(conv4_4, 2, 2, 2, 2, "pool4") 68 | 69 | conv5_1 = convLayer(pool4, 3, 3, 1, 1, 512, "conv5_1") 70 | conv5_2 = convLayer(conv5_1, 3, 3, 1, 1, 512, "conv5_2") 71 | conv5_3 = convLayer(conv5_2, 3, 3, 1, 1, 512, "conv5_3") 72 | conv5_4 = convLayer(conv5_3, 3, 3, 1, 1, 512, "conv5_4") 73 | pool5 = maxPoolLayer(conv5_4, 2, 2, 2, 2, "pool5") 74 | 75 | fcIn = tf.reshape(pool5, [-1, 4 * 4 * 512]) 76 | fc6 = fcLayer(fcIn, 4 * 4 * 512, 4096, True, "fc6") 77 | dropout1 = dropout(fc6, self.KEEPPRO) 78 | 79 | fc7 = fcLayer(dropout1, 4096, 4096, True, "fc7") 80 | dropout2 = dropout(fc7, self.KEEPPRO) 81 | 82 | self.fc8 = fcLayer(dropout2, 4096, self.CLASSNUM, True, "fc8") 83 | 84 | -------------------------------------------------------------------------------- /data/001/000679_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000679_001.jpg -------------------------------------------------------------------------------- /data/001/000686_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000686_001.jpg -------------------------------------------------------------------------------- /data/001/000696_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000696_001.jpg -------------------------------------------------------------------------------- /data/001/000703_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000703_001.jpg -------------------------------------------------------------------------------- /data/001/000705_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000705_001.jpg -------------------------------------------------------------------------------- /data/001/000711_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000711_001.jpg -------------------------------------------------------------------------------- /data/001/000712_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000712_001.jpg -------------------------------------------------------------------------------- /data/001/000713_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000713_001.jpg -------------------------------------------------------------------------------- /data/001/000715_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000715_001.jpg -------------------------------------------------------------------------------- /data/001/000718_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/001/000718_001.jpg -------------------------------------------------------------------------------- /data/002/000009_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000009_001.jpg -------------------------------------------------------------------------------- /data/002/000018_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000018_001.jpg -------------------------------------------------------------------------------- /data/002/000020_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000020_001.jpg -------------------------------------------------------------------------------- /data/002/000024_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000024_001.jpg -------------------------------------------------------------------------------- /data/002/000026_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000026_001.jpg -------------------------------------------------------------------------------- /data/002/000029_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000029_001.jpg -------------------------------------------------------------------------------- /data/002/000031_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000031_001.jpg -------------------------------------------------------------------------------- /data/002/000037_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000037_001.jpg -------------------------------------------------------------------------------- /data/002/000062_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000062_001.jpg -------------------------------------------------------------------------------- /data/002/000063_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/002/000063_001.jpg -------------------------------------------------------------------------------- /data/003/000285_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000285_001.jpg -------------------------------------------------------------------------------- /data/003/000287_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000287_001.jpg -------------------------------------------------------------------------------- /data/003/000293_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000293_001.jpg -------------------------------------------------------------------------------- /data/003/000294_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000294_001.jpg -------------------------------------------------------------------------------- /data/003/000295_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000295_001.jpg -------------------------------------------------------------------------------- /data/003/000296_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000296_001.jpg -------------------------------------------------------------------------------- /data/003/000299_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000299_001.jpg -------------------------------------------------------------------------------- /data/003/000300_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000300_001.jpg -------------------------------------------------------------------------------- /data/003/000302_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000302_001.jpg -------------------------------------------------------------------------------- /data/003/000304_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/003/000304_001.jpg -------------------------------------------------------------------------------- /data/004/000385_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000385_001.jpg -------------------------------------------------------------------------------- /data/004/000392_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000392_001.jpg -------------------------------------------------------------------------------- /data/004/000394_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000394_001.jpg -------------------------------------------------------------------------------- /data/004/000395_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000395_001.jpg -------------------------------------------------------------------------------- /data/004/000402_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000402_001.jpg -------------------------------------------------------------------------------- /data/004/000418_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000418_001.jpg -------------------------------------------------------------------------------- /data/004/000419_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000419_001.jpg -------------------------------------------------------------------------------- /data/004/000422_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000422_001.jpg -------------------------------------------------------------------------------- /data/004/000423_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000423_001.jpg -------------------------------------------------------------------------------- /data/004/000424_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/004/000424_001.jpg -------------------------------------------------------------------------------- /data/005/000500_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000500_001.jpg -------------------------------------------------------------------------------- /data/005/000502_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000502_001.jpg -------------------------------------------------------------------------------- /data/005/000504_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000504_001.jpg -------------------------------------------------------------------------------- /data/005/000505_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000505_001.jpg -------------------------------------------------------------------------------- /data/005/000506_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000506_001.jpg -------------------------------------------------------------------------------- /data/005/000508_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000508_001.jpg -------------------------------------------------------------------------------- /data/005/000511_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000511_001.jpg -------------------------------------------------------------------------------- /data/005/000515_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000515_001.jpg -------------------------------------------------------------------------------- /data/005/000518_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000518_001.jpg -------------------------------------------------------------------------------- /data/005/000519_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/005/000519_001.jpg -------------------------------------------------------------------------------- /data/006/000523_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000523_001.jpg -------------------------------------------------------------------------------- /data/006/000524_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000524_001.jpg -------------------------------------------------------------------------------- /data/006/000525_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000525_001.jpg -------------------------------------------------------------------------------- /data/006/000530_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000530_001.jpg -------------------------------------------------------------------------------- /data/006/000533_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000533_001.jpg -------------------------------------------------------------------------------- /data/006/000539_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000539_001.jpg -------------------------------------------------------------------------------- /data/006/000540_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000540_001.jpg -------------------------------------------------------------------------------- /data/006/000542_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000542_001.jpg -------------------------------------------------------------------------------- /data/006/000544_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000544_001.jpg -------------------------------------------------------------------------------- /data/006/000549_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/006/000549_001.jpg -------------------------------------------------------------------------------- /data/007/000523_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000523_001.jpg -------------------------------------------------------------------------------- /data/007/000524_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000524_001.jpg -------------------------------------------------------------------------------- /data/007/000525_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000525_001.jpg -------------------------------------------------------------------------------- /data/007/000530_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000530_001.jpg -------------------------------------------------------------------------------- /data/007/000533_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000533_001.jpg -------------------------------------------------------------------------------- /data/007/000539_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000539_001.jpg -------------------------------------------------------------------------------- /data/007/000540_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000540_001.jpg -------------------------------------------------------------------------------- /data/007/000542_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000542_001.jpg -------------------------------------------------------------------------------- /data/007/000544_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000544_001.jpg -------------------------------------------------------------------------------- /data/007/000549_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/007/000549_001.jpg -------------------------------------------------------------------------------- /data/008/000523_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000523_001.jpg -------------------------------------------------------------------------------- /data/008/000524_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000524_001.jpg -------------------------------------------------------------------------------- /data/008/000525_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000525_001.jpg -------------------------------------------------------------------------------- /data/008/000530_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000530_001.jpg -------------------------------------------------------------------------------- /data/008/000533_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000533_001.jpg -------------------------------------------------------------------------------- /data/008/000539_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000539_001.jpg -------------------------------------------------------------------------------- /data/008/000540_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000540_001.jpg -------------------------------------------------------------------------------- /data/008/000542_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000542_001.jpg -------------------------------------------------------------------------------- /data/008/000544_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000544_001.jpg -------------------------------------------------------------------------------- /data/008/000549_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/008/000549_001.jpg -------------------------------------------------------------------------------- /data/009/000160_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000160_001.jpg -------------------------------------------------------------------------------- /data/009/000162_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000162_001.jpg -------------------------------------------------------------------------------- /data/009/000168_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000168_001.jpg -------------------------------------------------------------------------------- /data/009/000175_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000175_001.jpg -------------------------------------------------------------------------------- /data/009/000176_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000176_001.jpg -------------------------------------------------------------------------------- /data/009/000178_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000178_001.jpg -------------------------------------------------------------------------------- /data/009/000181_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000181_001.jpg -------------------------------------------------------------------------------- /data/009/000183_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000183_001.jpg -------------------------------------------------------------------------------- /data/009/000190_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000190_001.jpg -------------------------------------------------------------------------------- /data/009/000195_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YYlin/Collection-of-Image-Recognition-Models-in-Tensorflow/38eb48df5fca5a0027b364b29c055bb5805f83a2/data/009/000195_001.jpg -------------------------------------------------------------------------------- /dataload.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Time : 2020/3/3 20:33 3 | # @Author : YYLin 4 | # @Email : 854280599@qq.com 5 | # @File : dataload.py 6 | import os 7 | import cv2 8 | import numpy as np 9 | from keras.utils import to_categorical 10 | 11 | 12 | def load_satetile_image(img_size=100, y_dim=10): 13 | img_list = [] 14 | label_list = [] 15 | dir_counter = 0 16 | 17 | path = 'data' 18 | 19 | # 对路径下的所有子文件夹中的所有jpg文件进行读取并存入到一个list中 20 | for child_dir in os.listdir(path): 21 | child_path = os.path.join(path, child_dir) 22 | for dir_image in os.listdir(child_path): 23 | img = cv2.imread(os.path.join(child_path, dir_image)) 24 | img = cv2.resize(img, (img_size, img_size), interpolation=cv2.INTER_LANCZOS4) 25 | img = img / 255.0 26 | img_list.append(img) 27 | label_list.append(dir_counter) 28 | 29 | dir_counter += 1 30 | 31 | X_train = np.array(img_list) 32 | Y_train = to_categorical(label_list, y_dim) 33 | return X_train, Y_train 34 | -------------------------------------------------------------------------------- /inception_V4.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Time : 2020/3/3 22:57 3 | # @Author : YYLin 4 | # @Email : 854280599@qq.com 5 | # @File : inception_V4.py 6 | import tensorflow as tf 7 | 8 | 9 | # 定义变量函数初始化函数 10 | def define_variable(shape, name): 11 | return tf.Variable(tf.truncated_normal(shape, stddev=0.1), name) 12 | 13 | 14 | # 最大下采样操作 15 | def max_pool(name, l_input, k1, k2): 16 | return tf.nn.max_pool(l_input, ksize=[1, k1, k1, 1], strides=[1, k2, k2, 1], padding='SAME', name=name) 17 | 18 | 19 | # network structure: inception_A 20 | def inception_A(input): 21 | p1f11 = 96 22 | p2f11 = 64 23 | p2f22 = 96 24 | p3f11 = 64 25 | p3f22 = 96 26 | p3f33 = 96 27 | p4f11 = 96 28 | path1 = tf.layers.conv2d(input, p1f11, 1, padding='same', activation=tf.nn.relu) 29 | path2 = tf.layers.conv2d(input, p2f11, 1, padding='same', activation=tf.nn.relu) 30 | path2 = tf.layers.conv2d(path2, p2f22, 3, padding='same', activation=tf.nn.relu) 31 | path3 = tf.layers.conv2d(input, p3f11, 1, padding='same', activation=tf.nn.relu) 32 | path3 = tf.layers.conv2d(path3, p3f22, 3, padding='same', activation=tf.nn.relu) 33 | path3 = tf.layers.conv2d(path3, p3f33, 3, padding='same', activation=tf.nn.relu) 34 | path4 = tf.layers.average_pooling2d(input, pool_size=3, strides=1, padding='same') 35 | path4 = tf.layers.conv2d(path4, p4f11, 1, padding='same', activation=tf.nn.relu) 36 | out = tf.concat((path1, path2, path3, path4), axis=-1) 37 | return out 38 | 39 | 40 | # network structure: Reduction_A 41 | def reduction_A(input): 42 | channel = 384 43 | path1 = tf.layers.max_pooling2d(input, pool_size=3, strides=2, padding='same') 44 | path2 = tf.layers.conv2d(input, channel, 3, strides=2, padding='same', activation=tf.nn.relu) 45 | path3 = tf.layers.conv2d(input, channel, 1, padding='same', activation=tf.nn.relu) 46 | path3 = tf.layers.conv2d(path3, channel, 3, padding='same', activation=tf.nn.relu) 47 | path3 = tf.layers.conv2d(path3, channel, 3, strides=2, padding='same', activation=tf.nn.relu) 48 | out = tf.concat((path1, path2, path3), axis=-1) 49 | return out 50 | 51 | 52 | # network structure: inception_B 53 | def inception_B(input): 54 | p1f11 = 384 55 | p2f11 = 192 56 | p2f22 = 224 57 | p2f33 = 256 58 | p3f11 = 192 59 | p3f22 = 192 60 | p3f33 = 224 61 | p3f44 = 224 62 | p3f55 = 256 63 | p4f11 = 128 64 | path1 = tf.layers.conv2d(input, p1f11, 1, padding='same', activation=tf.nn.relu) 65 | path2 = tf.layers.conv2d(input, p2f11, 1, padding='same', activation=tf.nn.relu) 66 | path2 = tf.layers.conv2d(path2, p2f22, [1, 7], padding='same', activation=tf.nn.relu) 67 | path2 = tf.layers.conv2d(path2, p2f33, [7, 1], padding='same', activation=tf.nn.relu) 68 | path3 = tf.layers.conv2d(input, p3f11, 1, padding='same', activation=tf.nn.relu) 69 | path3 = tf.layers.conv2d(path3, p3f22, [1, 7], padding='same', activation=tf.nn.relu) 70 | path3 = tf.layers.conv2d(path3, p3f33, [7, 1], padding='same', activation=tf.nn.relu) 71 | path3 = tf.layers.conv2d(path3, p3f44, [1, 7], padding='same', activation=tf.nn.relu) 72 | path3 = tf.layers.conv2d(path3, p3f55, [7, 1], padding='same', activation=tf.nn.relu) 73 | path4 = tf.layers.average_pooling2d(input, pool_size=3, strides=1, padding='same') 74 | path4 = tf.layers.conv2d(path4, p4f11, 1, padding='same', activation=tf.nn.relu) 75 | out = tf.concat((path1, path2, path3, path4), axis=-1) 76 | return out 77 | 78 | 79 | # network structure: Reduction_B 80 | def reduction_B(input): 81 | p2f11 = 192 82 | p2f22 = 192 83 | p3f11 = 256 84 | p3f22 = 256 85 | p3f33 = 320 86 | p3f44 = 320 87 | path1 = tf.layers.max_pooling2d(input, pool_size=3, strides=2, padding='same') 88 | path2 = tf.layers.conv2d(input, p2f11, 1, padding='same', activation=tf.nn.relu) 89 | path2 = tf.layers.conv2d(path2, p2f22, 3, strides=2, padding='same', activation=tf.nn.relu) 90 | path3 = tf.layers.conv2d(input, p3f11, 1, padding='same', activation=tf.nn.relu) 91 | path3 = tf.layers.conv2d(path3, p3f22, [1, 7], padding='same', activation=tf.nn.relu) 92 | path3 = tf.layers.conv2d(path3, p3f33, [7, 1], padding='same', activation=tf.nn.relu) 93 | path3 = tf.layers.conv2d(path3, p3f44, 3, strides=2, padding='same', activation=tf.nn.relu) 94 | out = tf.concat((path1, path2, path3), axis=-1) 95 | return out 96 | 97 | 98 | # network structure: inception_C 99 | def inception_C(input): 100 | p1f11 = 256 101 | p2f11 = 384 102 | p2f11_1 = 256 103 | p2f11_2 = 256 104 | p3f11 = 384 105 | p3f22 = 448 106 | p3f33 = 512 107 | p3f33_1 = 256 108 | p3f33_2 = 256 109 | p4f11 = 256 110 | path1 = tf.layers.conv2d(input, p1f11, 1, padding='same', activation=tf.nn.relu) 111 | path2 = tf.layers.conv2d(input, p2f11, 1, padding='same', activation=tf.nn.relu) 112 | path2_1 = tf.layers.conv2d(path2, p2f11_1, [1, 3], padding='same', activation=tf.nn.relu) 113 | path2_2 = tf.layers.conv2d(path2, p2f11_2, [3, 1], padding='same', activation=tf.nn.relu) 114 | path3 = tf.layers.conv2d(input, p3f11, 1, padding='same', activation=tf.nn.relu) 115 | path3 = tf.layers.conv2d(path3, p3f22, [1, 3], padding='same', activation=tf.nn.relu) 116 | path3 = tf.layers.conv2d(path3, p3f33, [3, 1], padding='same', activation=tf.nn.relu) 117 | path3_1 = tf.layers.conv2d(path3, p3f33_1, [3, 1], padding='same', activation=tf.nn.relu) 118 | path3_2 = tf.layers.conv2d(path3, p3f33_2, [1, 3], padding='same', activation=tf.nn.relu) 119 | path4 = tf.layers.average_pooling2d(input, pool_size=3, strides=1, padding='same') 120 | path4 = tf.layers.conv2d(path4, p4f11, 1, padding='same', activation=tf.nn.relu) 121 | out = tf.concat((path1, path2_1, path2_2, path3_1, path3_2, path4), axis=-1) 122 | return out 123 | 124 | 125 | # 输入参数:images,image batch、4D tensor、tf.float32、[batch_size, width, height, channels] 126 | # 返回参数:logits, float、 [batch_size, n_classes] 127 | def inference(images, batch_size, n_classes): 128 | w_conv1 = define_variable([3, 3, 3, 192], name="W") 129 | b_conv1 = define_variable([192], name="B") 130 | conv1 = tf.nn.conv2d(images, w_conv1, strides=[1, 1, 1, 1], padding='SAME') 131 | relu1 = tf.nn.relu(conv1 + b_conv1) 132 | 133 | pool1 = tf.nn.max_pool(relu1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME') 134 | 135 | # inception_A 136 | # 35*35 grid 137 | inception_a1 = inception_A(pool1) 138 | inception_a2 = inception_A(inception_a1) 139 | inception_a3 = inception_A(inception_a2) 140 | inception_a4 = inception_A(inception_a3) 141 | 142 | # reduction_A 143 | # from 35*35 to 17*17 144 | reduction_a = reduction_A(inception_a4) 145 | 146 | # inception_B 147 | # 17*17 grid 148 | inception_b1 = inception_B(reduction_a) 149 | inception_b2 = inception_B(inception_b1) 150 | inception_b3 = inception_B(inception_b2) 151 | inception_b4 = inception_B(inception_b3) 152 | inception_b5 = inception_B(inception_b4) 153 | inception_b6 = inception_B(inception_b5) 154 | inception_b7 = inception_B(inception_b6) 155 | 156 | # reduction_B 157 | # from 17*17 to 8*8 158 | reduction_b = reduction_B(inception_b7) 159 | 160 | # inception_C 161 | # 8*8 grid 162 | inception_c1 = inception_C(reduction_b) 163 | inception_c2 = inception_C(inception_c1) 164 | inception_c3 = inception_C(inception_c2) 165 | 166 | net = tf.layers.average_pooling2d(inception_c3, 7, 1, name="avgpool") # -> [batch, 1, 1, 768] 167 | 168 | # dropout层 169 | with tf.variable_scope('dropout') as scope: 170 | drop_out = tf.nn.dropout(net, 0.8) 171 | 172 | reshape = tf.reshape(drop_out, shape=[batch_size, -1]) 173 | dim = reshape.get_shape()[1].value 174 | weights1 = tf.Variable(tf.truncated_normal(shape=[dim, 1024], stddev=0.005, dtype=tf.float32), name='weights', 175 | dtype=tf.float32) 176 | biases1 = tf.Variable(tf.constant(value=0.1, dtype=tf.float32, shape=[1024]), name='biases', dtype=tf.float32) 177 | local6 = tf.nn.relu(tf.matmul(reshape, weights1) + biases1) 178 | 179 | weights = tf.Variable(tf.truncated_normal(shape=[1024, n_classes], stddev=0.005, dtype=tf.float32), 180 | name='softmax_linear', dtype=tf.float32) 181 | biases = tf.Variable(tf.constant(value=0.1, dtype=tf.float32, shape=[n_classes]), name='biases', dtype=tf.float32) 182 | logits = tf.add(tf.matmul(local6, weights), biases, name='softmax_linear') 183 | 184 | return logits 185 | 186 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Time : 2020/3/3 20:02 3 | # @Author : YYLin 4 | # @Email : 854280599@qq.com 5 | # @File : main.py 6 | import argparse 7 | import sys 8 | import tensorflow as tf 9 | from Model import Model 10 | 11 | 12 | # parsing and configuration 13 | def parse_args(): 14 | desc = "Tensorflow implementation of StarGAN" 15 | parser = argparse.ArgumentParser(description=desc) 16 | parser.add_argument('--dataset', type=str, default='satellite', help='dataset_name') 17 | parser.add_argument('--type_of_model', type=str, default='inception_V4', help='ResNet Alexnet VGG19 inception_V4') 18 | 19 | parser.add_argument('--epoch', type=int, default=20, help='The number of epochs to run') 20 | parser.add_argument('--img_size', type=int, default=100, help='The size of image') 21 | parser.add_argument('--batch_size', type=int, default=4, help='The size of batch size') 22 | parser.add_argument('--y_dim', type=int, default=9, help='The classification of dataset') 23 | 24 | parser.add_argument('--resnet_type', type=str, default='50', help='The 50 101 152 layer can be chose') 25 | 26 | return parser.parse_args() 27 | 28 | 29 | def main(): 30 | # parse arguments 31 | args = parse_args() 32 | if args is None: 33 | print('The args is None') 34 | sys.exit() 35 | else: 36 | print('args:', args) 37 | 38 | with tf.Session(config=tf.ConfigProto(allow_soft_placement=True)) as sess: 39 | if args.type_of_model == 'Alexnet': 40 | print('****** Using Alexnet ******') 41 | model = Model(sess, type_of_model=args.type_of_model, epoch=args.epoch, dataset_name=args.dataset, batch_size=args.batch_size, 42 | img_size=args.img_size, y_dim=args.y_dim, resnet_type=args.resnet_type) 43 | elif args.type_of_model == 'ResNet': 44 | print('****** Using ResNet ******') 45 | model = Model(sess, type_of_model=args.type_of_model, epoch=args.epoch, dataset_name=args.dataset, 46 | batch_size=args.batch_size, 47 | img_size=args.img_size, y_dim=args.y_dim, resnet_type=args.resnet_type) 48 | elif args.type_of_model == 'VGG19': 49 | print('****** Using VGG19 ******') 50 | model = Model(sess, type_of_model=args.type_of_model, epoch=args.epoch, dataset_name=args.dataset, 51 | batch_size=args.batch_size, 52 | img_size=args.img_size, y_dim=args.y_dim, resnet_type=args.resnet_type) 53 | elif args.type_of_model == 'inception_V4': 54 | print('****** Using inception_V4 ******') 55 | model = Model(sess, type_of_model=args.type_of_model, epoch=args.epoch, dataset_name=args.dataset, 56 | batch_size=args.batch_size, 57 | img_size=args.img_size, y_dim=args.y_dim, resnet_type=args.resnet_type) 58 | else: 59 | print('these is no %s'%args.type_of_model) 60 | sys.exit() 61 | 62 | # build graph 63 | model.build_model() 64 | 65 | model.train() 66 | 67 | 68 | if __name__ == '__main__': 69 | main() 70 | 71 | --------------------------------------------------------------------------------