zihaoz96 commited on
Commit
961927f
1 Parent(s): f30c9f1

first commit

Browse files
app.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import numpy as np
3
+ import os
4
+
5
+ from hugsvision.inference.TorchVisionClassifierInference import TorchVisionClassifierInference
6
+
7
+ models_name = [
8
+ "VGG16",
9
+ "ShuffleNetV2",
10
+ "mobilenet_v2"
11
+ ]
12
+
13
+ colname = "mobilenet_v2"
14
+
15
+ radio = gr.inputs.Radio(models_name, default="mobilenet_v2", type="value", label=colname)
16
+ print(radio.label)
17
+
18
+ def predict_image(image):
19
+ image = np.array(image) / 255
20
+ image = np.expand_dims(image, axis=0)
21
+
22
+ classifier = TorchVisionClassifierInference(
23
+ model_path = "./models/" + colname + ".pth",
24
+ )
25
+
26
+ pred = classifier.predict(img=image)
27
+ return pred
28
+
29
+ # open categories.txt in read mode
30
+ categories = open("categories.txt", "r")
31
+ labels = categories.readline().split(";")
32
+
33
+ image = gr.inputs.Image(shape=(300, 300), label="Upload Your Image Here")
34
+ label = gr.outputs.Label(num_top_classes=len(labels))
35
+
36
+ samples = ['./samples/basking.jpg', './samples/blacktip.jpg']
37
+ # , './samples/blacktip.jpg', './samples/blue.jpg', './samples/bull.jpg', './samples/hammerhead.jpg',
38
+ # './samples/lemon.jpg', './samples/mako.jpg', './samples/nurse.jpg', './samples/sand tiger.jpg', './samples/thresher.jpg',
39
+ # './samples/tigre.jpg', './samples/whale.jpg', './samples/white.jpg', './samples/whitetip.jpg']
40
+
41
+ interface = gr.Interface(
42
+ fn=predict_image,
43
+ inputs=[image, radio],
44
+ outputs=label,
45
+ capture_session=True,
46
+ allow_flagging=False,
47
+ examples=samples
48
+ )
49
+ interface.launch()
categories.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ basking;blacktip;blue;bull;hammerhead;lemon;mako;nurse;sand tiger;thresher;tiger;whale;white;whitetip
models/VGG16.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ from tensorflow.keras.callbacks import TensorBoard, EarlyStopping, ModelCheckpoint
3
+ from tensorflow.keras.layers import Conv2D, Dense, Flatten, GlobalMaxPooling2D
4
+ from tensorflow.keras.layers import Dense, Input, MaxPooling2D
5
+ from tensorflow.keras import Model
6
+
7
+
8
+ def VGG16(nbr_class):
9
+ # 224 224 3
10
+ img_input = Input(shape=(224,224,3))
11
+
12
+ # first convolution
13
+ x = Conv2D(64, (3,3), activation='relu', padding='same')(img_input)
14
+ x = Conv2D(64, (3,3), activation='relu', padding='same')(x)
15
+ x = MaxPooling2D((2,2), strides = (2,2))(x)
16
+
17
+ # second convolution
18
+ x = Conv2D(128, (3,3), activation='relu', padding='same')(x)
19
+ x = Conv2D(128, (3,3), activation='relu', padding='same')(x)
20
+ x = MaxPooling2D((2,2), strides = (2,2))(x)
21
+
22
+ # third convolution
23
+ x = Conv2D(256, (3,3), activation='relu', padding='same')(x)
24
+ x = Conv2D(256, (3,3), activation='relu', padding='same')(x)
25
+ x = Conv2D(256, (3,3), activation='relu', padding='same')(x)
26
+ x = MaxPooling2D((2,2), strides = (2,2))(x)
27
+
28
+ x = Flatten()(x)
29
+ x = Dense(1024, activation='relu')(x)
30
+ x = Dense(1024, activation='relu')(x)
31
+ x = Dense(nbr_class, activation='softmax')(x)
32
+
33
+
34
+ return Model(img_input, x, name="vgg16")
models/__pycache__/VGG16.cpython-38.pyc ADDED
Binary file (1.12 kB). View file
 
models/__pycache__/VGG16.cpython-39.pyc ADDED
Binary file (1.11 kB). View file
 
models/__pycache__/modelNet.cpython-38.pyc ADDED
Binary file (941 Bytes). View file
 
models/__pycache__/modelNet.cpython-39.pyc ADDED
Binary file (937 Bytes). View file
 
models/__pycache__/model_v1.cpython-38.pyc ADDED
Binary file (1.36 kB). View file
 
models/__pycache__/model_v1.cpython-39.pyc ADDED
Binary file (1.36 kB). View file
 
models/mobilenet_v2/best_model.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:650c8c31d438caf26c768908e204a0fd8ee48af3f22d157e6eb88237dc103828
3
+ size 9235021
models/mobilenet_v2/config.json ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "num_classes": 14,
3
+ "hidden_size": 1280,
4
+ "id2label": {
5
+ "0": "basking",
6
+ "1": "blacktip",
7
+ "2": "blue",
8
+ "3": "bull",
9
+ "4": "hammerhead",
10
+ "5": "lemon",
11
+ "6": "mako",
12
+ "7": "nurse",
13
+ "8": "sand_tiger",
14
+ "9": "thresher",
15
+ "10": "tiger",
16
+ "11": "whale",
17
+ "12": "white",
18
+ "13": "whitetip"
19
+ },
20
+ "label2id": {
21
+ "basking": "0",
22
+ "blacktip": "1",
23
+ "blue": "2",
24
+ "bull": "3",
25
+ "hammerhead": "4",
26
+ "lemon": "5",
27
+ "mako": "6",
28
+ "nurse": "7",
29
+ "sand_tiger": "8",
30
+ "thresher": "9",
31
+ "tiger": "10",
32
+ "whale": "11",
33
+ "white": "12",
34
+ "whitetip": "13"
35
+ },
36
+ "architectures": [
37
+ "mobilenet_v2"
38
+ ]
39
+ }
models/modelNet.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import tensorflow as tf
3
+ from tensorflow.keras.callbacks import TensorBoard, EarlyStopping, ModelCheckpoint
4
+ from tensorflow.keras.layers import Conv2D, Dense, GlobalMaxPooling2D
5
+ from tensorflow.keras.layers import Dense, MaxPooling2D, BatchNormalization
6
+ from tensorflow.keras.models import Sequential
7
+ from tensorflow.keras import Model
8
+
9
+
10
+ def modelNet(nbr_class):
11
+ mobile_net = tf.keras.applications.MobileNetV2(input_shape=(224,224,3), include_top=False)
12
+ mobile_net.trainable=False
13
+
14
+ model = Sequential([
15
+ mobile_net,
16
+ tf.keras.layers.GlobalAveragePooling2D(),
17
+ tf.keras.layers.Dense(nbr_class, activation = 'softmax')])
18
+
19
+ return model
models/model_v1.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import tensorflow as tf
3
+ from tensorflow.keras.callbacks import TensorBoard, EarlyStopping, ModelCheckpoint
4
+ from tensorflow.keras.layers import Conv2D, Dense, GlobalMaxPooling2D
5
+ from tensorflow.keras.layers import Dense, MaxPooling2D, BatchNormalization
6
+ from tensorflow.keras.models import Sequential
7
+ from tensorflow.keras import Model
8
+
9
+ def model_v1(nbr_class):
10
+ model = Sequential()
11
+ model.add(Conv2D(64,(3,3), activation="relu", input_shape=(224,224,3)))
12
+ model.add(BatchNormalization())
13
+ model.add(Conv2D(64,(3,3), activation="relu"))
14
+ model.add(BatchNormalization())
15
+ model.add(MaxPooling2D())
16
+
17
+ model.add(Conv2D(128,(3,3), activation="relu"))
18
+ model.add(BatchNormalization())
19
+ model.add(Conv2D(128,(3,3), activation="relu"))
20
+ model.add(BatchNormalization())
21
+ model.add(MaxPooling2D())
22
+
23
+ model.add(Conv2D(256,(3,3), activation="relu"))
24
+ model.add(BatchNormalization())
25
+ model.add(Conv2D(256,(3,3), activation="relu"))
26
+ model.add(BatchNormalization())
27
+ model.add(MaxPooling2D())
28
+
29
+ # model.add(Conv2D(512,(3,3), activation="relu"))
30
+ # model.add(BatchNormalization())
31
+ # model.add(Conv2D(512,(3,3), activation="relu"))
32
+ # model.add(BatchNormalization())
33
+ # model.add(MaxPooling2D())
34
+
35
+ # model.add(Conv2D(512,(3,3), activation="relu"))
36
+ # model.add(BatchNormalization())
37
+ # model.add(Conv2D(512,(3,3), activation="relu"))
38
+ # model.add(BatchNormalization())
39
+ # model.add(Conv2D(512,(3,3), activation="relu"))
40
+ # model.add(BatchNormalization())
41
+ # model.add(GlobalMaxPooling2D())
42
+
43
+ model.add(Dense(1024, activation="relu"))
44
+ model.add(BatchNormalization())
45
+ model.add(Dense(nbr_class, activation="softmax"))
46
+
47
+ return model
samples/basking.jpg ADDED
samples/blacktip.jpg ADDED
samples/blue.jpg ADDED
samples/bull.jpg ADDED
samples/hammerhead.jpg ADDED
samples/lemon.jpg ADDED
samples/mako.jpg ADDED
samples/nurse.jpg ADDED
samples/sand tiger.jpg ADDED
samples/thresher.jpg ADDED
samples/tigre.jpg ADDED
samples/whale.jpg ADDED
samples/white.jpg ADDED
samples/whitetip.jpg ADDED