From 8f089350df2b21cf9f9b3bd836b67e3052e02402 Mon Sep 17 00:00:00 2001 From: wlkjyy <61416807+wlkjyh@users.noreply.github.com> Date: Thu, 17 Aug 2023 14:12:08 +0800 Subject: [PATCH] Add files via upload --- config.py | 38 ++++++++++ model.png | Bin 0 -> 133800 bytes pre.py | 34 +++++++++ predict.py | 182 ++++++++++++++++++++++++++++++++++++++++++++++++ requirement.txt | Bin 0 -> 4732 bytes siamese.py | 24 +++++++ train.py | 159 ++++++++++++++++++++++++++++++++++++++++++ utils.py | 41 +++++++++++ vgg16.py | 72 +++++++++++++++++++ yolov3-tiny.cfg | 182 ++++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 732 insertions(+) create mode 100644 config.py create mode 100644 model.png create mode 100644 pre.py create mode 100644 predict.py create mode 100644 requirement.txt create mode 100644 siamese.py create mode 100644 train.py create mode 100644 utils.py create mode 100644 vgg16.py create mode 100644 yolov3-tiny.cfg diff --git a/config.py b/config.py new file mode 100644 index 0000000..388f1d8 --- /dev/null +++ b/config.py @@ -0,0 +1,38 @@ +""" + 网络相关配置文件 +""" + +# 预训练权重 +weight_model_path = './vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5' + +# 输入图像大小,52*52*3 +input_shape = (52,52,3) + +# 如果不使用GPU训练,则传入列表,多个GPU则传入多个编号 +gpu = [] +# gpu = [0,1,2,3] + +# 训练ecoph数 +epochs = 3000 +# 批次大小 +batch_size = 128 + +# 学习率 +lr = 1e-3 + +# 是否开启tensorboard +tensorboard = True + +# tensorboard日志目录 +tensorboard_log_dir = './logs' + +# 验证集比例 +valid_rate = 0.05 + +sample_path = './sample' + +auto_best_checkpoint_path = './checkpoint/best.h5' + +auto_epoch_checkpoint_path = './checkpoint/epoch_{epoch:03d}.h5' + +model_save_path = './model.h5' \ No newline at end of file diff --git a/model.png b/model.png new file mode 100644 index 0000000000000000000000000000000000000000..3a199d8ead6608a0c63efedf16dce5a148eb783c GIT binary patch literal 133800 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 J96fvW{{x-yd=>xz literal 0 HcmV?d00001 diff --git a/pre.py b/pre.py new file mode 100644 index 0000000..ef917d2 --- /dev/null +++ b/pre.py @@ -0,0 +1,34 @@ +import cv2 +import numpy as np +from keras.models import load_model +from keras.layers import Lambda +from keras import backend as K +import os +import random +from PIL import Image + +input1 = input('请输入图片名称1:') +input2 = input('请输入图片名称2:') + +output = Lambda(lambda x: K.abs(x[0] - x[1])) +weight = "./best.h5" +# 加载模型 +# model = load_model(weight, custom_objects={'contrastive_loss': contrastive_loss, 'binary_accuracy': binary_accuracy}) +model = load_model(weight, custom_objects={'output': output}) + + +resize = 52 +img1 = cv2.imread(input1) +img2 = cv2.imread(input2) + +img1 = cv2.resize(img1, (resize, resize)) / 255 +img2 = cv2.resize(img2, (resize, resize)) / 255 + +img1 = np.expand_dims(img1, axis=0) +img2 = np.expand_dims(img2, axis=0) + +result = model.predict([img1, img2]) + +print(result) + + diff --git a/predict.py b/predict.py new file mode 100644 index 0000000..2075b78 --- /dev/null +++ b/predict.py @@ -0,0 +1,182 @@ +import cv2 +import numpy as np +from keras.models import load_model +from keras.layers import Lambda +from keras import backend as K +import os +import random +from PIL import Image +# 要预测的图片 +# image_path = "./sample/1691156257961.jpg" +image_path = os.listdir("./data") +# 随机选取一张图片 +# inp = input('请输入图片名称:') +image_path = "./data/" + random.choice(image_path) +# image_path = './sample/' + inp +# print(image_path) + +""" + YOLOv3 分割模型 +""" +weight = "./yolov3-tiny_17000.weights" +cfg = "./yolov3-tiny.cfg" + +# 加载模型 +net = cv2.dnn.readNet(weight, cfg) +""" + 孪生网络 对比模型 +""" +resize_height, resize_width,channel = 52,52,3 + +# 自定义的损失和精度 +output = Lambda(lambda x: K.abs(x[0] - x[1])) +def contrastive_loss(y_true, y_pred): + margin = 1 + return K.mean(y_true * K.square(y_pred) + (1 - y_true) * K.square(K.maximum(margin - y_pred, 0))) + +def binary_accuracy(y_true, y_pred): + return K.mean(K.equal(y_true, K.cast(y_pred < 0.5, y_true.dtype))) +weight = "./best.h5" +# 加载模型 +# model = load_model(weight, custom_objects={'contrastive_loss': contrastive_loss, 'binary_accuracy': binary_accuracy}) +model = load_model(weight, custom_objects={'output': output}) + +classes = ["text"] + + +img = cv2.imread(image_path) + +cv2.namedWindow('display') + + +""" + YOLO 分割出内容 +""" +height, width, channels = img.shape +blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False) +net.setInput(blob) +outs = net.forward(net.getUnconnectedOutLayersNames()) +class_ids = [] +confidences = [] +boxes = [] + +for out in outs: + for detection in out: + scores = detection[5:] + class_id = np.argmax(scores) + confidence = scores[class_id] + + if confidence > 0.1: + center_x = int(detection[0] * width) + center_y = int(detection[1] * height) + w = int(detection[2] * width) + h = int(detection[3] * height) + + x = int(center_x - w / 2) + y = int(center_y - h / 2) + + boxes.append([x, y, w, h]) + confidences.append(float(confidence)) + class_ids.append(class_id) + +indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.1, 0.1) + +thickness = 2 +color = (0, 255, 0) +font = cv2.FONT_HERSHEY_PLAIN + +new_boxes = [] + +for i in range(len(boxes)): + if i in indexes: + x, y, w, h = boxes[i] + + new_boxes.append([x, y, w, h]) + +total = len(new_boxes) + +print('>>> 检测出:', total,'个字符') + +top_total = total / 2 +# 如果取出来有小数 +if top_total % 1 != 0: + print('>>> YOLO分割有误,顶部字符数量与点选数量不匹配') + exit() + +top_total = int(top_total) + +# 取出w最大的(需要点选的) +w_max_boxes = sorted(new_boxes, key=lambda x: x[2], reverse=True)[:top_total] + +# 取出剩下的(需要对比的) +w_min_box = sorted(new_boxes, key=lambda x: x[2], reverse=True)[top_total:] + +# 按照从左到右排序w_min_box +w_min_box = sorted(w_min_box, key=lambda x: x[0]) + + +w_max_image = [] +w_min_image = [] + +# 分割出具体图像 +for i in range(top_total): + x, y, w, h = w_max_boxes[i] + p = cv2.resize(img[y:y+h, x:x+w], (resize_height, resize_width)) + + # cv2.imwrite('./1/1_{}.jpg'.format(i), p) + + w_max_image.append(p) + +for i in range(len(w_min_box)): + x, y, w, h = w_min_box[i] + p = cv2.resize(img[y:y+h, x:x+w], (resize_height, resize_width)) + + # cv2.imwrite('./1/2_{}.jpg'.format(i), p) + + w_min_image.append(p) + +# print(w_max_boxes) + +w_max_image_np = np.array(w_max_image) / 255 +w_min_image_np = np.array(w_min_image) / 255 + +select_index = [] + +# 开始挨个对比,取出最相似的 +for i in range(len(w_max_image_np)): + print('>>> 开始对比第', i+1, '个字符') + cv2.imwrite('./1/1_{}.jpg'.format(i), w_max_image_np[i] * 255) + + left_x = w_max_image_np[i] + num_index = 0 + cache_rate = 0 + for k in range(len(w_min_image_np)): + left_y = w_min_image_np[k] + predict = model.predict([left_x.reshape(1, resize_height, resize_width, channel), left_y.reshape(1, resize_height, resize_width, channel)]) + rate = predict[0][0] + if rate > cache_rate: + cv2.imwrite('./1/2_{}.jpg'.format(i), w_min_image_np[k] * 255) + num_index = k + + + + cache_rate = rate + + + select_index.append(num_index) + +print('>>> 对比完成,结果为:', select_index) + +location = [] + +for i in range(len(select_index)): + x, y, w, h = w_max_boxes[select_index[i]] + cv2.rectangle(img, (x, y), (x+w, y+h), color, thickness) + cv2.putText(img, str(i+1), (x, y+h), font, 1, color, thickness) + # 转换为图片坐标中心点 + location.append([x+w/2, y+h/2]) + +print('>>> 位置坐标:', location) + +cv2.imshow('display', img) +cv2.waitKey(0) \ No newline at end of file diff --git a/requirement.txt b/requirement.txt new file mode 100644 index 0000000000000000000000000000000000000000..0feace67424d46464c409dd18825b89e61f247fd GIT binary patch literal 4732 zcmb7|TaOz>5QY00iT}Vma(3;#WI;j#g7Scfv?xLmPb+)uwawaN#~$zP#}m%iXKH#j zau8_cOQx#pa_Ur7JD>g@r%BqURT`vidP+a&ZA)JJs{6&twOk-pa;KK4zWuOKF|878+UDrKvnr`iB3Jq}Z~LpLKeov#U-v z%o>(XbZXYd-lTMki0MjElMR-}=^#(bbgR#mbT|6kDr0<;x9yKw{gpIp zS(~+4f)4RpUddV|zq5?PCfmc#g*3p*Q4-^>^|{P`M#^xMH9&LJSzB~iHOiyT*sk@A zD4x3*uxymbsmju-&Da$nM$3qa3XKzXhz(50^K*@vP(ybvOwb$VEJ`IR$?BZvLH7D= z0TZ*O(pmnf*Q~23@_xK%xCY>lFQkQ6l^91>fw^NSUfxI^)#fyKpyL>(*|T#l?4%-C za7C!sAUz6`m3XkszMQkQY-uJ9YPZd`Bm22BH(&bN=0ey3!>EQiKz7!7D^FwPY0jXJ2w$NH5q9zTb6mFXXGqR$*HoJ5Vroq4U_; z9%Y=&!-Y_xFKg9tr`TrtMi<5;F05YadEI746z93Wm-+Nu=OQn2sxTc5>UYq4)VAbi z>Ag-rcj%Vbm&%S=N__Y*_k(Nh6!ZF5S*X)r(i~+w!B|T@J*f>55aBTM-Wc5J?1NrR z;#IoOe$XQaB6X(pjrYJ>8pvbDnnTEI<+{&vbJnXe7&;Dgo`vm={JO8@-n{osAvi6?R|? zoFjuq@6i|7qH@l3El=!p=7akdG|_PeA!jeZxQ#OUCjF>aOtJ6NN&b72`1Xfz1*^Tj zgWA1pgWo#W{Y0Pmi_aTr7P~jX=2ACI&z7jg zf}QNJE$J}lfGzJ-b7i9}==Un48QYa9FcG>$(BE;yUs&iWzO?XvPN4g!ih-?jFY&YO z28xW1W>2p>Ei{cWla?Jf)?7f(v&AIZorHN2 z87I$#)R%O=e0S@|wU^iMWhU%}_fm*+^BCxzF68EcmN`{?T9-N?MXJb)$4RkqVa@8CYo z8GxzpMaKQOW^ipRd}2>Vzmr|LfA`OO`g$tn?P{lqpUbX`tGu~2O1$j z_p)Pe6#ZjH0|wciCk3asZ$<}uZ$9#~Lm28zt g;>A`zWbE(ci@6s!0Hkrte2^b{uxyU_KLzml2Z?2>%K!iX literal 0 HcmV?d00001 diff --git a/siamese.py b/siamese.py new file mode 100644 index 0000000..522c00b --- /dev/null +++ b/siamese.py @@ -0,0 +1,24 @@ +from tensorflow.keras.layers import Input,Lambda,Dense +from tensorflow.keras.models import Model +from vgg16 import VGG16 + +def siamese(input_shape): + # 基础VGG,因为两个网络共享参数,所以需要是同一个实例 + base_network = VGG16() + + left_input = Input(shape = input_shape) + right_input = Input(shape = input_shape) + + left_output = base_network.call(left_input) + right_output = base_network.call(right_input) + + # l1距离 + output = Lambda(lambda x:abs(x[0]-x[1]))([left_output,right_output]) + + # 全连接层1 + output = Dense(512,activation = 'relu')(output) + + # 全连接层2 + output = Dense(1,activation = 'sigmoid')(output) + + return Model([left_input,right_input],output) \ No newline at end of file diff --git a/train.py b/train.py new file mode 100644 index 0000000..92d0420 --- /dev/null +++ b/train.py @@ -0,0 +1,159 @@ + +import os +import config +import tensorflow as tf +from siamese import siamese +from tensorflow.python.keras.utils.multi_gpu_utils import multi_gpu_model +from tensorflow.keras.optimizers import SGD +from tensorflow.keras.callbacks import * +import cv2 +import random +import numpy as np +import utils + + +if len(config.gpu) >= 1: + # 设置显存分配方式 + gpus = tf.config.experimental.list_physical_devices('GPU') + for gpu in gpus: + tf.config.experimental.set_memory_growth(gpu, True) + + os.environ['CUDA_VISIBLE_DEVICES'] = ','.join(str(i) for i in config.gpu) + print('>>> GPU:',os.environ['CUDA_VISIBLE_DEVICES']) +input_shape = config.input_shape + +model = siamese(input_shape=(input_shape[0],input_shape[1],input_shape[2])) + +if config.weight_model_path != False: + """ + by_name=True:设置为 True 时,表示根据层的名称进行权重的匹配和加载。这意味着只有具有相同名称的层才会被加载权重,其他层将被忽略。这在微调模型时非常有用,可以只加载与预训练权重文件中的层名称匹配的部分权重。 + + skip_mismatch=True:设置为 True 时,表示如果层数量不匹配或找不到对应的层,则跳过权重加载的错误。这在模型的结构发生变化时很有用,可以避免由于层数不匹配而导致的加载错误。请注意,在层数量不匹配的情况下,任何未匹配的层都不会加载权重。 + """ + model.load_weights(config.weight_model_path,by_name=True,skip_mismatch=True) + +# 如果是多个GPU需要设置 +if len(config.gpu) > 1: + model = multi_gpu_model(model,gpus=len(config.gpu)) + +opt = SGD(lr=config.lr,momentum=0.9) + +min_lr = config.lr * 0.01 + +nbs = 64 +lr_limit_max = 1e-3 +lr_limit_min = 3e-4 +Init_lr_fit = min(max(config.batch_size / nbs * config.lr, lr_limit_min), lr_limit_max) +Min_lr_fit = min(max(config.batch_size / nbs * min_lr, lr_limit_min * 1e-2), lr_limit_max * 1e-2) + +# 准备数据 +sample = os.listdir(config.sample_path) +data = [] +hasOne = [] +for i in sample: + t = i.split('_')[0] + if t not in hasOne: + hasOne.append(t) + data.append([1, config.sample_path + '/' + t + '_1.jpg', config.sample_path + '/' + t + '_2.jpg']) + # 需要做数据增强的部分,到时候会把2转换成1 + data.append([2, config.sample_path + '/' + t + '_1.jpg', config.sample_path + '/' + t + '_2.jpg']) + data.append([2, config.sample_path + '/' + t + '_1.jpg', config.sample_path + '/' + t + '_2.jpg']) + data.append([2, config.sample_path + '/' + t + '_1.jpg', config.sample_path + '/' + t + '_2.jpg']) + + # 随机负样本 + for j in range(3): + f = random.choice(sample) + while f.split('_')[0] == t: + f = random.choice(sample) + + data.append([0, config.sample_path + '/' + t + '_1.jpg', config.sample_path + '/' + f]) + +# 打乱数据 +random.shuffle(data) + +train_x_left = np.zeros((len(data),input_shape[0],input_shape[1],input_shape[2])) +train_x_right = np.zeros((len(data),input_shape[0],input_shape[1],input_shape[2])) + +train_y = np.zeros((len(data),1)) + +total = len(data) +now = 0 +for i in data: + now += 1 + left = cv2.imread(i[1]) + left = cv2.resize(left,(input_shape[0],input_shape[1])) + + right = cv2.imread(i[2]) + right = cv2.resize(right,(input_shape[0],input_shape[1])) + + label = i[0] + + # 数据增强操作 + if label == 2: + label = 1 + # 随机翻转 + if random.random() > 0.5: + left = cv2.flip(left,1) + right = cv2.flip(right,1) + + # 随机噪声 + for h in range(5): + # 加上随机线条 + if random.random() > 0.5: + cv2.line(left,(random.randint(0,input_shape[0]),random.randint(0,input_shape[1])),(random.randint(0,input_shape[0]),random.randint(0,input_shape[1])),(0,0,0),random.randint(1,3)) + cv2.line(right,(random.randint(0,input_shape[0]),random.randint(0,input_shape[1])),(random.randint(0,input_shape[0]),random.randint(0,input_shape[1])),(0,0,0),random.randint(1,3)) + + # 加上随机点 + if random.random() > 0.5: + cv2.circle(left,(random.randint(0,input_shape[0]),random.randint(0,input_shape[1])),random.randint(1,3),(0,0,0),-1) + cv2.circle(right,(random.randint(0,input_shape[0]),random.randint(0,input_shape[1])),random.randint(1,3),(0,0,0),-1) + + # 色域变换 + if random.random() > 0.5: + left = cv2.cvtColor(left,cv2.COLOR_BGR2HSV) + right = cv2.cvtColor(right,cv2.COLOR_BGR2HSV) + + left[:,:,0] = left[:,:,0] + random.randint(-10,10) + right[:,:,0] = right[:,:,0] + random.randint(-10,10) + + left = cv2.cvtColor(left,cv2.COLOR_HSV2BGR) + right = cv2.cvtColor(right,cv2.COLOR_HSV2BGR) + + if not os.path.exists('./1.jpg'): + cv2.imwrite('./1.jpg',left) + cv2.imwrite('./2.jpg',right) + + + # 归一化 + left = left / 255.0 + right = right / 255.0 + + train_x_left[now-1] = left + train_x_right[now-1] = right + train_y[now-1] = label + + + + print('>>> 正在处理第',now,'/',total,'张图片',end='\r') + + +lr_scheduler_func = utils.get_lr_scheduler('cos', Init_lr_fit, Min_lr_fit, config.epochs) + +if config.tensorboard: + tb = TensorBoard(log_dir=config.tensorboard_log_dir,write_graph=True,write_images=True) + +best_checkpoint = ModelCheckpoint(config.auto_best_checkpoint_path,save_weights_only=False,save_best_only=True,verbose=1,period=1) +epoch_checkpoint = ModelCheckpoint(config.auto_epoch_checkpoint_path,save_weights_only=False,save_best_only=False,verbose=1,period=10) +lr_scheduler = LearningRateScheduler(lr_scheduler_func, verbose=1) + +callback = [best_checkpoint,epoch_checkpoint,lr_scheduler] + +if config.tensorboard: + callback.append(tb) + + +model.compile(loss='binary_crossentropy',optimizer=opt,metrics=['binary_accuracy']) + + +model.fit([train_x_left,train_x_right],train_y,batch_size=config.batch_size,epochs=config.epochs,validation_split=config.valid_rate,callbacks=callback) +model.save_weights(config.model_save_path) \ No newline at end of file diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..d99ad5e --- /dev/null +++ b/utils.py @@ -0,0 +1,41 @@ +import math +from functools import partial + +def get_lr_scheduler(lr_decay_type, lr, min_lr, total_iters, warmup_iters_ratio = 0.05, warmup_lr_ratio = 0.1, no_aug_iter_ratio = 0.05, step_num = 10): + def yolox_warm_cos_lr(lr, min_lr, total_iters, warmup_total_iters, warmup_lr_start, no_aug_iter, iters): + if iters <= warmup_total_iters: + # lr = (lr - warmup_lr_start) * iters / float(warmup_total_iters) + warmup_lr_start + lr = (lr - warmup_lr_start) * pow(iters / float(warmup_total_iters), 2 + ) + warmup_lr_start + elif iters >= total_iters - no_aug_iter: + lr = min_lr + else: + lr = min_lr + 0.5 * (lr - min_lr) * ( + 1.0 + + math.cos( + math.pi + * (iters - warmup_total_iters) + / (total_iters - warmup_total_iters - no_aug_iter) + ) + ) + return lr + + def step_lr(lr, decay_rate, step_size, iters): + if step_size < 1: + raise ValueError("step_size must above 1.") + n = iters // step_size + out_lr = lr * decay_rate ** n + return out_lr + + if lr_decay_type == "cos": + warmup_total_iters = min(max(warmup_iters_ratio * total_iters, 1), 3) + warmup_lr_start = max(warmup_lr_ratio * lr, 1e-6) + no_aug_iter = min(max(no_aug_iter_ratio * total_iters, 1), 15) + func = partial(yolox_warm_cos_lr ,lr, min_lr, total_iters, warmup_total_iters, warmup_lr_start, no_aug_iter) + else: + decay_rate = (min_lr / lr) ** (1 / (step_num - 1)) + step_size = total_iters / step_num + func = partial(step_lr, lr, decay_rate, step_size) + + return func + diff --git a/vgg16.py b/vgg16.py new file mode 100644 index 0000000..f0593f9 --- /dev/null +++ b/vgg16.py @@ -0,0 +1,72 @@ +from tensorflow.keras.layers import Conv2D, Flatten, MaxPooling2D +""" + VGG16代码来源于https://github.com/bubbliiiing/Siamese-keras + + 也可以使用tensorflow.keras.applications.VGG16实现 +""" + +class VGG16: + def __init__(self): + # 第一个卷积部分 + # 105, 105, 3 -> 105, 105, 64 -> 52, 52, 64 + self.block1_conv1 = Conv2D(64, (3,3), activation = 'relu', padding = 'same',name = 'block1_conv1') + self.block1_conv2 = Conv2D(64, (3,3), activation = 'relu', padding = 'same',name = 'block1_conv2') + self.block1_pool = MaxPooling2D((2,2), strides = (2,2), name = 'block1_pool') + + # 第二个卷积部分 + # 52, 52, 64 -> 52, 52, 128 -> 26, 26, 128 + self.block2_conv1 = Conv2D(128, (3,3), activation = 'relu', padding = 'same',name = 'block2_conv1') + self.block2_conv2 = Conv2D(128, (3,3), activation = 'relu', padding = 'same',name = 'block2_conv2') + self.block2_pool = MaxPooling2D((2,2), strides = (2,2), name = 'block2_pool') + + # 第三个卷积部分 + # 26, 26, 128-> 26, 26, 256 -> 13, 13, 256 + self.block3_conv1 = Conv2D(256, (3,3), activation = 'relu', padding = 'same',name = 'block3_conv1') + self.block3_conv2 = Conv2D(256, (3,3), activation = 'relu', padding = 'same',name = 'block3_conv2') + self.block3_conv3 = Conv2D(256, (3,3), activation = 'relu', padding = 'same',name = 'block3_conv3') + self.block3_pool = MaxPooling2D((2,2), strides = (2,2), name = 'block3_pool') + + # 第四个卷积部分 + # 13, 13, 256-> 13, 13, 512 -> 6, 6, 512 + self.block4_conv1 = Conv2D(512, (3,3), activation = 'relu', padding = 'same', name = 'block4_conv1') + self.block4_conv2 = Conv2D(512, (3,3), activation = 'relu', padding = 'same', name = 'block4_conv2') + self.block4_conv3 = Conv2D(512, (3,3), activation = 'relu', padding = 'same', name = 'block4_conv3') + self.block4_pool = MaxPooling2D((2,2), strides = (2,2), name = 'block4_pool') + + # 第五个卷积部分 + # 6, 6, 512-> 6, 6, 512 -> 3, 3, 512 + self.block5_conv1 = Conv2D(512, (3,3), activation = 'relu', padding = 'same', name = 'block5_conv1') + self.block5_conv2 = Conv2D(512, (3,3), activation = 'relu', padding = 'same', name = 'block5_conv2') + self.block5_conv3 = Conv2D(512, (3,3), activation = 'relu', padding = 'same', name = 'block5_conv3') + self.block5_pool = MaxPooling2D((2,2), strides = (2,2), name = 'block5_pool') + + # 3*3*512 = 4500 + 90 + 18 = 4608 + self.flatten = Flatten(name = 'flatten') + + def call(self, inputs): + x = inputs + x = self.block1_conv1(x) + x = self.block1_conv2(x) + x = self.block1_pool(x) + + x = self.block2_conv1(x) + x = self.block2_conv2(x) + x = self.block2_pool(x) + + x = self.block3_conv1(x) + x = self.block3_conv2(x) + x = self.block3_conv3(x) + x = self.block3_pool(x) + + x = self.block4_conv1(x) + x = self.block4_conv2(x) + x = self.block4_conv3(x) + x = self.block4_pool(x) + + x = self.block5_conv1(x) + x = self.block5_conv2(x) + x = self.block5_conv3(x) + x = self.block5_pool(x) + + outputs = self.flatten(x) + return outputs diff --git a/yolov3-tiny.cfg b/yolov3-tiny.cfg new file mode 100644 index 0000000..d8a8b02 --- /dev/null +++ b/yolov3-tiny.cfg @@ -0,0 +1,182 @@ +[net] +# Testing +# batch=1 +# subdivisions=1 +# Training +batch=64 +subdivisions=8 +width=416 +height=416 +channels=3 +momentum=0.9 +decay=0.0005 +angle=0 +saturation = 1.5 +exposure = 1.5 +hue=.1 + +learning_rate=0.001 +burn_in=1000 +max_batches = 30000 +policy=steps +steps=400000,450000 +scales=.1,.1 + +[convolutional] +batch_normalize=1 +filters=16 +size=3 +stride=1 +pad=1 +activation=leaky + +[maxpool] +size=2 +stride=2 + +[convolutional] +batch_normalize=1 +filters=32 +size=3 +stride=1 +pad=1 +activation=leaky + +[maxpool] +size=2 +stride=2 + +[convolutional] +batch_normalize=1 +filters=64 +size=3 +stride=1 +pad=1 +activation=leaky + +[maxpool] +size=2 +stride=2 + +[convolutional] +batch_normalize=1 +filters=128 +size=3 +stride=1 +pad=1 +activation=leaky + +[maxpool] +size=2 +stride=2 + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[maxpool] +size=2 +stride=2 + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[maxpool] +size=2 +stride=1 + +[convolutional] +batch_normalize=1 +filters=1024 +size=3 +stride=1 +pad=1 +activation=leaky + +########### + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[convolutional] +size=1 +stride=1 +pad=1 +filters=18 +activation=linear + + + +[yolo] +mask = 3,4,5 +anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319 +classes=1 +num=6 +jitter=.3 +ignore_thresh = .7 +truth_thresh = 1 +random=1 + +[route] +layers = -4 + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[upsample] +stride=2 + +[route] +layers = -1, 8 + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[convolutional] +size=1 +stride=1 +pad=1 +filters=18 +activation=linear + +[yolo] +mask = 0,1,2 +anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319 +classes=1 +num=6 +jitter=.3 +ignore_thresh = .7 +truth_thresh = 1 +random=1