Coding style improvements
This commit is contained in:
@@ -73,8 +73,8 @@ class WeightReader:
|
|||||||
self.offset = 0
|
self.offset = 0
|
||||||
|
|
||||||
# Step 2:
|
# Step 2:
|
||||||
# _cb(input, convs, skip=True) is a function to create convolutional layer
|
# _conv_block(input, convs, skip=True) is a function to create convolutional layer
|
||||||
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:
|
||||||
@@ -104,96 +104,122 @@ 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 = _cb(input_image, [{'filter': 32, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 0},
|
x = _conv_block(input_image,
|
||||||
{'filter': 64, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 1},
|
[{'filter': 32, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 0},
|
||||||
{'filter': 32, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 2},
|
{'filter': 64, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 1},
|
||||||
{'filter': 64, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 3}])
|
{'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}])
|
||||||
|
|
||||||
# Layer 5 => 8
|
# Layer 5 => 8
|
||||||
x = _cb(x, [{'filter': 128, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 5},
|
x = _conv_block(x,
|
||||||
{'filter': 64, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 6},
|
[{'filter': 128, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 5},
|
||||||
{'filter': 128, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 7}])
|
{'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}])
|
||||||
|
|
||||||
# Layer 9 => 11
|
# Layer 9 => 11
|
||||||
x = _cb(x, [{'filter': 64, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 9},
|
x = _conv_block(x,
|
||||||
{'filter': 128, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 10}])
|
[{'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}])
|
||||||
|
|
||||||
# Layer 12 => 15
|
# Layer 12 => 15
|
||||||
x = _cb(x, [{'filter': 256, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 12},
|
x = _conv_block(x,
|
||||||
{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 13},
|
[{'filter': 256, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 12},
|
||||||
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 14}])
|
{'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}])
|
||||||
|
|
||||||
# Layer 16 => 36
|
# Layer 16 => 36
|
||||||
for i in range(7):
|
for i in range(7):
|
||||||
x = _cb(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 16+i*3},
|
x = _conv_block(x,
|
||||||
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 17+i*3}])
|
[{'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}])
|
||||||
skip_36 = x
|
skip_36 = x
|
||||||
|
|
||||||
# Layer 37 => 40
|
# Layer 37 => 40
|
||||||
x = _cb(x, [{'filter': 512, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 37},
|
x = _conv_block(x,
|
||||||
{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 38},
|
[{'filter': 512, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 37},
|
||||||
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 39}])
|
{'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}])
|
||||||
|
|
||||||
# Layer 41 => 61
|
# Layer 41 => 61
|
||||||
for i in range(7):
|
for i in range(7):
|
||||||
x = _cb(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 41+i*3},
|
x = _conv_block(x,
|
||||||
{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 42+i*3}])
|
[{'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}])
|
||||||
skip_61 = x
|
skip_61 = x
|
||||||
|
|
||||||
# Layer 62 => 65
|
# Layer 62 => 65
|
||||||
x = _cb(x, [{'filter': 1024, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 62},
|
x = _conv_block(x,
|
||||||
{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 63},
|
[{'filter': 1024, 'kernel': 3, 'stride': 2, 'bnorm': True, 'leaky': True, 'layer_idx': 62},
|
||||||
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 64}])
|
{'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}])
|
||||||
|
|
||||||
# Layer 66 => 74
|
# Layer 66 => 74
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
x = _cb(x, [{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 66+i*3},
|
x = _conv_block(x,
|
||||||
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 67+i*3}])
|
[{'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}])
|
||||||
|
|
||||||
# Layer 75 => 79
|
# Layer 75 => 79
|
||||||
x = _cb(x, [{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 75},
|
x = _conv_block(x,
|
||||||
{'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': 75},
|
||||||
{'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': 76},
|
||||||
{'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': 77},
|
||||||
{'filter': 512, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 79}],
|
{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 78},
|
||||||
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 = _cb(x, [{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 80},
|
yolo_82 = _conv_block(x,
|
||||||
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 81}],
|
[{'filter': 1024, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 80},
|
||||||
skip=False)
|
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 81}],
|
||||||
|
skip=False)
|
||||||
|
|
||||||
# Layer 83 => 86
|
# Layer 83 => 86
|
||||||
x = _cb(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 84}],
|
x = _conv_block(x,
|
||||||
skip=False)
|
[{'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 = _cb(x, [{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 87},
|
x = _conv_block(x,
|
||||||
{'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': 87},
|
||||||
{'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': 88},
|
||||||
{'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': 89},
|
||||||
{'filter': 256, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 91}], skip=False)
|
{'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)
|
||||||
|
|
||||||
# Layer 92 => 94
|
# Layer 92 => 94
|
||||||
yolo_94 = _cb(x, [{'filter': 512, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 92},
|
yolo_94 = _conv_block(x,
|
||||||
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 93}], skip=False)
|
[{'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)
|
||||||
|
|
||||||
# Layer 95 => 98
|
# Layer 95 => 98
|
||||||
x = _cb(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 96}], skip=False)
|
x = _conv_block(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 = _cb(x, [{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 99},
|
yolo_106 = _conv_block(x,
|
||||||
{'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': 99},
|
||||||
{'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': 100},
|
||||||
{'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': 101},
|
||||||
{'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': 102},
|
||||||
{'filter': 256, 'kernel': 3, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 104},
|
{'filter': 128, 'kernel': 1, 'stride': 1, 'bnorm': True, 'leaky': True, 'layer_idx': 103},
|
||||||
{'filter': 255, 'kernel': 1, 'stride': 1, 'bnorm': False, 'leaky': False, 'layer_idx': 105}], skip=False)
|
{'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)
|
||||||
|
|
||||||
model = Model(input_image, [yolo_82, yolo_94, yolo_106])
|
model = Model(input_image, [yolo_82, yolo_94, yolo_106])
|
||||||
|
|
||||||
|
print(model.summary())
|
||||||
|
|
||||||
return model
|
return model
|
||||||
|
|
||||||
"""**Step 3:**
|
"""**Step 3:**
|
||||||
@@ -241,29 +267,30 @@ def load_image_pixels(filename, shape):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
class BoundBox:
|
class BoundBox:
|
||||||
def __init__(self, xmin, ymin, xmax, ymax, objness = None, classes = None):
|
def __init__(self, xmin, ymin, xmax, ymax, objness = None, classes = None):
|
||||||
self.xmin = xmin
|
self.xmin = xmin
|
||||||
self.ymin = ymin
|
self.ymin = ymin
|
||||||
self.xmax = xmax
|
self.xmax = xmax
|
||||||
self.ymax = ymax
|
self.ymax = ymax
|
||||||
self.objness = objness
|
self.objness = objness
|
||||||
self.classes = classes
|
self.classes = classes
|
||||||
self.label = -1
|
self.label = -1
|
||||||
self.score = -1
|
self.score = -1
|
||||||
|
|
||||||
def get_label(self):
|
def get_label(self):
|
||||||
if self.label == -1:
|
if self.label == -1:
|
||||||
self.label = np.argmax(self.classes)
|
self.label = np.argmax(self.classes)
|
||||||
|
|
||||||
return self.label
|
return self.label
|
||||||
|
|
||||||
def get_score(self):
|
def get_score(self):
|
||||||
if self.score == -1:
|
if self.score == -1:
|
||||||
self.score = self.classes[self.get_label()]
|
self.score = self.classes[self.get_label()]
|
||||||
return self.get_score
|
|
||||||
|
return self.get_score
|
||||||
|
|
||||||
def _sigmoid(x):
|
def _sigmoid(x):
|
||||||
return 1. /(1. + np.exp(-x))
|
return 1. /(1. + np.exp(-x))
|
||||||
|
|
||||||
def decode_netout(netout, anchors, obj_thresh, net_h, net_w):
|
def decode_netout(netout, anchors, obj_thresh, net_h, net_w):
|
||||||
grid_h, grid_w = netout.shape[:2]
|
grid_h, grid_w = netout.shape[:2]
|
||||||
@@ -282,7 +309,7 @@ def decode_netout(netout, anchors, obj_thresh, net_h, net_w):
|
|||||||
for b in range(nb_box):
|
for b in range(nb_box):
|
||||||
# 4th element is objectness score
|
# 4th element is objectness score
|
||||||
objectness = netout[int(row)][int(col)][b][4]
|
objectness = netout[int(row)][int(col)][b][4]
|
||||||
if(objectness.all() <= obj_thresh): continue
|
if objectness.all() <= obj_thresh: continue
|
||||||
# first 4 elements are x, y, w, and h
|
# first 4 elements are x, y, w, and h
|
||||||
x, y, w, h = netout[int(row)][int(col)][b][:4]
|
x, y, w, h = netout[int(row)][int(col)][b][:4]
|
||||||
x = (col + x) / grid_w # center position, unit: image width
|
x = (col + x) / grid_w # center position, unit: image width
|
||||||
@@ -319,7 +346,7 @@ def _interval_overlap(interval_a, interval_b):
|
|||||||
return min(x2,x4) - x1
|
return min(x2,x4) - x1
|
||||||
else:
|
else:
|
||||||
if x2 < x3:
|
if x2 < x3:
|
||||||
return 0
|
return 0
|
||||||
else:
|
else:
|
||||||
return min(x2,x4) - x3
|
return min(x2,x4) - x3
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user