Coding style changes
This commit is contained in:
@@ -3,41 +3,33 @@ YOLO v3 object detection with Keras
|
|||||||
|
|
||||||
Source: https://towardsdatascience.com/yolo-v3-object-detection-with-keras-461d2cfccef6
|
Source: https://towardsdatascience.com/yolo-v3-object-detection-with-keras-461d2cfccef6
|
||||||
"""
|
"""
|
||||||
# import os
|
|
||||||
# import scipy.io
|
|
||||||
# import scipy.misc
|
|
||||||
import numpy as np
|
|
||||||
# import pandas as pd
|
|
||||||
# import PIL
|
|
||||||
import struct
|
import struct
|
||||||
# import cv2
|
import glob
|
||||||
|
import numpy as np
|
||||||
from numpy import expand_dims
|
from numpy import expand_dims
|
||||||
# import tensorflow as tf
|
from keras.layers import Input, Conv2D, BatchNormalization, LeakyReLU, ZeroPadding2D, UpSampling2D
|
||||||
# from skimage.transform import resize
|
from keras.models import Model
|
||||||
from keras import backend as K
|
|
||||||
from keras.layers import Input, Lambda, Conv2D, BatchNormalization, LeakyReLU, ZeroPadding2D, UpSampling2D
|
|
||||||
from keras.models import load_model, Model
|
|
||||||
from keras.layers.merge import add, concatenate
|
from keras.layers.merge import add, concatenate
|
||||||
from keras.preprocessing.image import load_img
|
from keras.preprocessing.image import load_img
|
||||||
from keras.preprocessing.image import img_to_array
|
from keras.preprocessing.image import img_to_array
|
||||||
from matplotlib import pyplot
|
from matplotlib import pyplot
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
from matplotlib.pyplot import imshow
|
|
||||||
from matplotlib.patches import Rectangle
|
from matplotlib.patches import Rectangle
|
||||||
# %matplotlib inline
|
|
||||||
|
|
||||||
"""**Step 1:** `WeightReader` class is used to parse the "yolov3.weights" file and load the model weights into memory in a format that we can set into keras model"""
|
|
||||||
|
|
||||||
|
# Step 1:
|
||||||
|
# WeightReader class is used to parse the "yolov3.weights" file and load the model weights into
|
||||||
|
# memory in a format that we can set into keras model
|
||||||
class WeightReader:
|
class WeightReader:
|
||||||
def __init__(self, weight_file):
|
def __init__(self, weight_file):
|
||||||
with open(weight_file, 'rb') as w_f:
|
with open(weight_file, 'rb') as w_f:
|
||||||
major, = struct.unpack('i', w_f.read(4))
|
major, = struct.unpack('i', w_f.read(4))
|
||||||
minor, = struct.unpack('i', w_f.read(4))
|
minor, = struct.unpack('i', w_f.read(4))
|
||||||
revision, = struct.unpack('i', w_f.read(4))
|
revision, = struct.unpack('i', w_f.read(4))
|
||||||
|
|
||||||
if (major*10 + minor) >= 2 and major < 1000 and minor < 1000:
|
if (major*10 + minor) >= 2 and major < 1000 and minor < 1000:
|
||||||
w_f.read(8)
|
w_f.read(8)
|
||||||
else:
|
else:
|
||||||
w_f.read(4)
|
w_f.read(4)
|
||||||
|
|
||||||
transpose = (major > 1000) or (minor > 1000)
|
transpose = (major > 1000) or (minor > 1000)
|
||||||
binary = w_f.read()
|
binary = w_f.read()
|
||||||
self.offset = 0
|
self.offset = 0
|
||||||
@@ -52,6 +44,7 @@ class WeightReader:
|
|||||||
try:
|
try:
|
||||||
conv_layer = model.get_layer('conv_' + str(i))
|
conv_layer = model.get_layer('conv_' + str(i))
|
||||||
print("loading weights of convolution #" + str(i))
|
print("loading weights of convolution #" + str(i))
|
||||||
|
|
||||||
if i not in [81, 93, 105]:
|
if i not in [81, 93, 105]:
|
||||||
norm_layer = model.get_layer('bnorm_' + str(i))
|
norm_layer = model.get_layer('bnorm_' + str(i))
|
||||||
size = np.prod(norm_layer.get_weights()[0].shape)
|
size = np.prod(norm_layer.get_weights()[0].shape)
|
||||||
@@ -60,6 +53,7 @@ class WeightReader:
|
|||||||
mean = self.read_bytes(size) # mean
|
mean = self.read_bytes(size) # mean
|
||||||
var = self.read_bytes(size) # variance
|
var = self.read_bytes(size) # variance
|
||||||
weights = norm_layer.set_weights([gamma, beta, mean, var])
|
weights = norm_layer.set_weights([gamma, beta, mean, var])
|
||||||
|
|
||||||
if len(conv_layer.get_weights()) > 1:
|
if len(conv_layer.get_weights()) > 1:
|
||||||
bias = self.read_bytes(np.prod(conv_layer.get_weights()[1].shape))
|
bias = self.read_bytes(np.prod(conv_layer.get_weights()[1].shape))
|
||||||
kernel = self.read_bytes(np.prod(conv_layer.get_weights()[0].shape))
|
kernel = self.read_bytes(np.prod(conv_layer.get_weights()[0].shape))
|
||||||
@@ -71,110 +65,135 @@ class WeightReader:
|
|||||||
kernel = kernel.reshape(list(reversed(conv_layer.get_weights()[0].shape)))
|
kernel = kernel.reshape(list(reversed(conv_layer.get_weights()[0].shape)))
|
||||||
kernel = kernel.transpose([2,3,1,0])
|
kernel = kernel.transpose([2,3,1,0])
|
||||||
conv_layer.set_weights([kernel])
|
conv_layer.set_weights([kernel])
|
||||||
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print("no convolution #" + str(i))
|
print("no convolution #" + str(i))
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.offset = 0
|
self.offset = 0
|
||||||
|
|
||||||
"""**Step 2:**
|
# Step 2:
|
||||||
- `_conv_block(input, convs, skip=True)` is a function to create convolutional layer
|
# _cb(input, convs, skip=True) is a function to create convolutional layer
|
||||||
- `make_yolov3_model()` is a function to create layers of convoluational and stack together as a whole yolo model
|
def _cb(inp, convs, skip=True):
|
||||||
"""
|
|
||||||
|
|
||||||
def _conv_block(inp, convs, skip=True):
|
|
||||||
x = inp
|
x = inp
|
||||||
count = 0
|
count = 0
|
||||||
for conv in convs:
|
for conv in convs:
|
||||||
if count == (len(convs) - 2) and skip:
|
if count == (len(convs) - 2) and skip:
|
||||||
skip_connection = x
|
skip_connection = x
|
||||||
count += 1
|
count += 1
|
||||||
if conv['stride'] > 1: x = ZeroPadding2D(((1,0),(1,0)))(x) # peculiar padding as darknet prefer left and top
|
if conv['stride'] > 1: x = ZeroPadding2D(((1,0),(1,0)))(x) # peculiar padding as darknet
|
||||||
|
# prefer left and top
|
||||||
x = Conv2D(conv['filter'],
|
x = Conv2D(conv['filter'],
|
||||||
conv['kernel'],
|
conv['kernel'],
|
||||||
strides=conv['stride'],
|
strides=conv['stride'],
|
||||||
padding='valid' if conv['stride'] > 1 else 'same', # peculiar padding as darknet prefer left and top
|
padding='valid' if conv['stride'] > 1 else 'same', # peculiar padding as darknet
|
||||||
|
# prefer left and top
|
||||||
name='conv_' + str(conv['layer_idx']),
|
name='conv_' + str(conv['layer_idx']),
|
||||||
use_bias=False if conv['bnorm'] else True)(x)
|
use_bias=False if conv['bnorm'] else True)(x)
|
||||||
if conv['bnorm']: x = BatchNormalization(epsilon=0.001, name='bnorm_' + str(conv['layer_idx']))(x)
|
|
||||||
if conv['leaky']: x = LeakyReLU(alpha=0.1, name='leaky_' + str(conv['layer_idx']))(x)
|
if conv['bnorm']: x = BatchNormalization(epsilon=0.001, name='bnorm_'
|
||||||
|
+ str(conv['layer_idx']))(x)
|
||||||
|
if conv['leaky']: x = LeakyReLU(alpha=0.1, name='leaky_'
|
||||||
|
+ str(conv['layer_idx']))(x)
|
||||||
|
|
||||||
return add([skip_connection, x]) if skip else x
|
return add([skip_connection, x]) if skip else x
|
||||||
|
|
||||||
|
# make_yolov3_model() is a function to create layers of convoluational and stack together as a
|
||||||
|
# whole yolo model
|
||||||
def make_yolov3_model():
|
def make_yolov3_model():
|
||||||
input_image = Input(shape=(None, None, 3))
|
input_image = Input(shape=(None, None, 3))
|
||||||
|
|
||||||
# Layer 0 => 4
|
# Layer 0 => 4
|
||||||
x = _conv_block(input_image, [{'filter': 32, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 0},
|
x = _cb(input_image, [{'filter': 32, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 0},
|
||||||
{'filter': 64, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 1},
|
{'filter': 64, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 1},
|
||||||
{'filter': 32, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 2},
|
{'filter': 32, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 2},
|
||||||
{'filter': 64, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 3}])
|
{'filter': 64, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 3}])
|
||||||
|
|
||||||
# Layer 5 => 8
|
# Layer 5 => 8
|
||||||
x = _conv_block(x, [{'filter': 128, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 5},
|
x = _cb(x, [{'filter': 128, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 5},
|
||||||
{'filter': 64, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 6},
|
{'filter': 64, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 6},
|
||||||
{'filter': 128, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 7}])
|
{'filter': 128, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 7}])
|
||||||
|
|
||||||
# Layer 9 => 11
|
# Layer 9 => 11
|
||||||
x = _conv_block(x, [{'filter': 64, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 9},
|
x = _cb(x, [{'filter': 64, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 9},
|
||||||
{'filter': 128, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 10}])
|
{'filter': 128, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 10}])
|
||||||
|
|
||||||
# Layer 12 => 15
|
# Layer 12 => 15
|
||||||
x = _conv_block(x, [{'filter': 256, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 12},
|
x = _cb(x, [{'filter': 256, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 12},
|
||||||
{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 13},
|
{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 13},
|
||||||
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 14}])
|
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 14}])
|
||||||
|
|
||||||
# Layer 16 => 36
|
# Layer 16 => 36
|
||||||
for i in range(7):
|
for i in range(7):
|
||||||
x = _conv_block(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 16+i*3},
|
x = _cb(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 16+i*3},
|
||||||
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 17+i*3}])
|
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 17+i*3}])
|
||||||
skip_36 = x
|
skip_36 = x
|
||||||
|
|
||||||
# Layer 37 => 40
|
# Layer 37 => 40
|
||||||
x = _conv_block(x, [{'filter': 512, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 37},
|
x = _cb(x, [{'filter': 512, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 37},
|
||||||
{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 38},
|
{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 38},
|
||||||
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 39}])
|
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 39}])
|
||||||
|
|
||||||
# Layer 41 => 61
|
# Layer 41 => 61
|
||||||
for i in range(7):
|
for i in range(7):
|
||||||
x = _conv_block(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 41+i*3},
|
x = _cb(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 41+i*3},
|
||||||
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 42+i*3}])
|
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 42+i*3}])
|
||||||
skip_61 = x
|
skip_61 = x
|
||||||
|
|
||||||
# Layer 62 => 65
|
# Layer 62 => 65
|
||||||
x = _conv_block(x, [{'filter': 1024, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 62},
|
x = _cb(x, [{'filter': 1024, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 62},
|
||||||
{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 63},
|
{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 63},
|
||||||
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 64}])
|
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 64}])
|
||||||
|
|
||||||
# Layer 66 => 74
|
# Layer 66 => 74
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
x = _conv_block(x, [{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 66+i*3},
|
x = _cb(x, [{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 66+i*3},
|
||||||
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 67+i*3}])
|
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 67+i*3}])
|
||||||
|
|
||||||
# Layer 75 => 79
|
# Layer 75 => 79
|
||||||
x = _conv_block(x, [{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 75},
|
x = _cb(x, [{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 75},
|
||||||
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 76},
|
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 76},
|
||||||
{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 77},
|
{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 77},
|
||||||
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 78},
|
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 78},
|
||||||
{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 79}], skip=False)
|
{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 79}],
|
||||||
|
skip=False)
|
||||||
|
|
||||||
# Layer 80 => 82
|
# Layer 80 => 82
|
||||||
yolo_82 = _conv_block(x, [{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 80},
|
yolo_82 = _cb(x, [{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 80},
|
||||||
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 81}], skip=False)
|
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 81}],
|
||||||
|
skip=False)
|
||||||
|
|
||||||
# Layer 83 => 86
|
# Layer 83 => 86
|
||||||
x = _conv_block(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 84}], skip=False)
|
x = _cb(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 84}],
|
||||||
|
skip=False)
|
||||||
|
|
||||||
x = UpSampling2D(2)(x)
|
x = UpSampling2D(2)(x)
|
||||||
x = concatenate([x, skip_61])
|
x = concatenate([x, skip_61])
|
||||||
|
|
||||||
# Layer 87 => 91
|
# Layer 87 => 91
|
||||||
x = _conv_block(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 87},
|
x = _cb(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 87},
|
||||||
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 88},
|
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 88},
|
||||||
{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 89},
|
{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 89},
|
||||||
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 90},
|
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 90},
|
||||||
{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 91}], skip=False)
|
{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 91}], skip=False)
|
||||||
# Layer 92 => 94
|
# Layer 92 => 94
|
||||||
yolo_94 = _conv_block(x, [{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 92},
|
yolo_94 = _cb(x, [{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 92},
|
||||||
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 93}], skip=False)
|
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 93}], skip=False)
|
||||||
# Layer 95 => 98
|
# Layer 95 => 98
|
||||||
x = _conv_block(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 96}], skip=False)
|
x = _cb(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 96}], skip=False)
|
||||||
x = UpSampling2D(2)(x)
|
x = UpSampling2D(2)(x)
|
||||||
x = concatenate([x, skip_36])
|
x = concatenate([x, skip_36])
|
||||||
# Layer 99 => 106
|
# Layer 99 => 106
|
||||||
yolo_106 = _conv_block(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 99},
|
yolo_106 = _cb(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 99},
|
||||||
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 100},
|
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 100},
|
||||||
{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 101},
|
{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 101},
|
||||||
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 102},
|
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 102},
|
||||||
{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 103},
|
{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 103},
|
||||||
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 104},
|
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 104},
|
||||||
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 105}], skip=False)
|
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 105}], skip=False)
|
||||||
|
|
||||||
model = Model(input_image, [yolo_82, yolo_94, yolo_106])
|
model = Model(input_image, [yolo_82, yolo_94, yolo_106])
|
||||||
|
|
||||||
return model
|
return model
|
||||||
|
|
||||||
"""**Step 3:**
|
"""**Step 3:**
|
||||||
@@ -394,8 +413,6 @@ labels = ["person", "bicycle", "car", "motorbike", "aeroplane", "bus", "train",
|
|||||||
# from google.colab import files
|
# from google.colab import files
|
||||||
# upload = files.upload()
|
# upload = files.upload()
|
||||||
|
|
||||||
import glob
|
|
||||||
|
|
||||||
for photo_filename in glob.glob("images/test/dog/*"):
|
for photo_filename in glob.glob("images/test/dog/*"):
|
||||||
|
|
||||||
# for fn in upload.keys():
|
# for fn in upload.keys():
|
||||||
@@ -434,4 +451,3 @@ for photo_filename in glob.glob("images/test/dog/*"):
|
|||||||
draw_boxes(photo_filename, v_boxes, v_labels, v_scores)
|
draw_boxes(photo_filename, v_boxes, v_labels, v_scores)
|
||||||
|
|
||||||
print([a.shape for a in yhat])
|
print([a.shape for a in yhat])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user