Spaces:
Build error
Build error
| import os | |
| import tensorflow as tf | |
| from config import * | |
| from tensorflow.keras import Model,layers | |
| os.environ['CUDA_VISIBLE_DEVICES'] = '-1' | |
| # custom layer for reshaping last layer | |
| class yolo_dynamic_reshape(tf.keras.layers.Layer): | |
| def __init__(self, **kwargs): | |
| super(yolo_dynamic_reshape,self).__init__() | |
| self.scaler=32 | |
| self.last_item=(5+len(class_names)) | |
| def call(self,input_layer,output_layer): | |
| # print(input_layer.shape) | |
| if input_layer.shape[1] is not None: | |
| return layers.Reshape(((input_layer.shape[1]//self.scaler),(input_layer.shape[2]//self.scaler),num_anchors,self.last_item))(output_layer) | |
| return layers.Reshape((0,0,num_anchors,self.last_item))(output_layer) | |
| def create_model(): | |
| def space_to_depth_x2(x): | |
| return tf.nn.space_to_depth(x,block_size=2) | |
| x_input=layers.Input(shape=(416,416,3)) | |
| x=layers.Lambda(lambda x:x/255.)(x_input) | |
| x=layers.Conv2D(32,(3,3),strides=(1,1),padding='same',name='conv_1',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_1')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.MaxPooling2D(pool_size=(2,2))(x) | |
| x=layers.Conv2D(64,(3,3),strides=(1,1),padding='same',name='conv_2',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_2')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.MaxPooling2D(pool_size=(2,2))(x) | |
| x=layers.Conv2D(128,(3,3),strides=(1,1),padding='same',name='conv_3',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_3')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(64,(1,1),strides=(1,1),padding='same',name='conv_4',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_4')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(128,(3,3),strides=(1,1),padding='same',name='conv_5',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_5')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.MaxPooling2D(pool_size=(2,2))(x) | |
| x=layers.Conv2D(256,(3,3),strides=(1,1),padding='same',name='conv_6',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_6')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(128,(1,1),strides=(1,1),padding='same',name='conv_7',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_7')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(256,(3,3),strides=(1,1),padding='same',name='conv_8',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_8')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.MaxPooling2D(pool_size=(2,2))(x) | |
| x=layers.Conv2D(512,(3,3),strides=(1,1),padding='same',name='conv_9',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_9')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(256,(1,1),strides=(1,1),padding='same',name='conv_10',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_10')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(512,(3,3),strides=(1,1),padding='same',name='conv_11',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_11')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(256,(1,1),strides=(1,1),padding='same',name='conv_12',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_12')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(512,(3,3),strides=(1,1),padding='same',name='conv_13',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_13')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| skip_connection = x | |
| x=layers.MaxPooling2D(pool_size=(2,2))(x) | |
| x=layers.Conv2D(1024,(3,3),strides=(1,1),padding='same',name='conv_14',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_14')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(512,(1,1),strides=(1,1),padding='same',name='conv_15',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_15')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(1024,(3,3),strides=(1,1),padding='same',name='conv_16',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_16')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(512,(1,1),strides=(1,1),padding='same',name='conv_17',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_17')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(1024,(3,3),strides=(1,1),padding='same',name='conv_18',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_18')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(1024,(3,3),strides=(1,1),padding='same',name='conv_19',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_19')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D(1024,(3,3),strides=(1,1),padding='same',name='conv_20',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_20')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| skip_connection=layers.Conv2D(64,(1,1),strides=(1,1),padding='same',name='conv_21',use_bias=False)(skip_connection) | |
| skip_connection=layers.BatchNormalization(name='norm_21')(skip_connection) | |
| skip_connection=layers.LeakyReLU(alpha=0.1)(skip_connection) | |
| skip_connection=layers.Lambda(space_to_depth_x2)(skip_connection) # halfs the resolution and add more depth | |
| x=layers.concatenate([skip_connection,x]) | |
| x=layers.Conv2D(1024,(3,3),strides=(1,1),padding='same',name='conv_22',use_bias=False)(x) | |
| x=layers.BatchNormalization(name='norm_22')(x) | |
| x=layers.LeakyReLU(alpha=0.1)(x) | |
| x=layers.Conv2D((num_anchors*(5+len(class_names))),(1,1),strides=(1,1),padding='same',name='conv_23')(x) | |
| out=yolo_dynamic_reshape()(x_input,x) | |
| model=Model(x_input,out,name='yolo_v2_model') | |
| # model.summary() | |
| return model | |
| def load_model(path): | |
| # model=tf.keras.models.load_model(path,custom_objects={'yolo_dynamic_reshape':yolo_dynamic_reshape},compile=False) | |
| model=create_model() | |
| model.load_weights(path) | |
| # model=tf.keras.models.load_model(path) | |
| return model |