-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathdarknet.py
110 lines (98 loc) · 3.19 KB
/
darknet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import os
import tensorflow as tf
from riptide.binary import binary_layers as nn
#from tensorflow.keras.models import Sequential
from riptide.utils.sequential import forward_layer_list
class DarkNet(tf.keras.Model):
def __init__(self):
super(DarkNet, self).__init__()
self.conv1 = nn.NormalConv2D(
filters=16,
kernel_size=3,
strides=1,
padding='same',
activation='relu',
use_bias=False)
self.bn1 = nn.BatchNormalization()
self.mxp1 = nn.MaxPool2D(pool_size=2, strides=2)
self.conv2 = nn.Conv2D(
filters=32,
kernel_size=3,
strides=1,
padding='same',
activation='relu',
use_bias=False)
self.bn2 = nn.BatchNormalization()
self.mxp2 = nn.MaxPool2D(pool_size=2, strides=2)
self.conv3 = nn.Conv2D(
filters=64,
kernel_size=3,
strides=1,
padding='same',
activation='relu',
use_bias=False)
self.bn3 = nn.BatchNormalization()
self.mxp3 = nn.MaxPool2D(pool_size=2, strides=2)
self.conv4 = nn.Conv2D(
filters=128,
kernel_size=3,
strides=1,
padding='same',
activation='relu',
use_bias=False)
self.bn4 = nn.BatchNormalization()
self.mxp4 = nn.MaxPool2D(pool_size=2, strides=2)
self.conv5 = nn.Conv2D(
filters=256,
kernel_size=3,
strides=1,
padding='same',
activation='relu',
use_bias=False)
self.bn5 = nn.BatchNormalization()
self.mxp5 = nn.MaxPool2D(pool_size=2, strides=2)
self.conv6 = nn.Conv2D(
filters=512,
kernel_size=3,
strides=1,
padding='same',
activation='relu',
use_bias=False)
self.bn6 = nn.BatchNormalization()
self.mxp6 = nn.MaxPool2D(pool_size=2, strides=2)
self.conv7 = nn.Conv2D(
filters=1024,
kernel_size=3,
strides=1,
padding='same',
activation='relu',
use_bias=False)
self.bn7 = nn.BatchNormalization()
self.avgpool = nn.GlobalAveragePooling2D()
self.output_layer = nn.NormalDense(1000, use_bias=False)
def call(self, inputs, training=None):
with tf.name_scope('unbinarized'):
x = self.conv1(inputs)
x = self.bn1(x, training=training)
x = self.mxp1(x)
x = self.conv2(x)
x = self.bn2(x, training=training)
x = self.mxp2(x)
x = self.conv3(x)
x = self.bn3(x, training=training)
x = self.mxp3(x)
x = self.conv4(x)
x = self.bn4(x, training=training)
x = self.mxp4(x)
x = self.conv5(x)
x = self.bn5(x, training=training)
x = self.mxp5(x)
x = self.conv6(x)
x = self.bn6(x, training=training)
x = self.mxp6(x)
x = self.conv7(x)
x = self.bn7(x, training=training)
x = self.avgpool(x)
with tf.name_scope('unbinarized'):
x = self.output_layer(x)
return x