sonebu
update emails
4e45d68
###########################################################################
# Computer vision - Binary neural networks demo software by HyperbeeAI. #
# Copyrights © 2023 Hyperbee.AI Inc. All rights reserved. hello@hyperbee.ai #
###########################################################################
import torch.nn as nn
import layers
class maxim_nas(nn.Module):
def __init__(
self,
num_classes =100,
num_channels =3,
dimensions =(32, 32),
bias =True,
**kwargs
):
super().__init__()
### Burak: disable word wrap in your editor to see this "table" for conv layers properly
### mark that all layers are 'same' padding.
### input ch | out ch | kernel dim | padding
self.conv1_1 = layers.conv( num_channels, 64, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv1_2 = layers.conv( 64, 32, 1, 0, pooling=False, batchnorm=True, activation='relu')
self.conv1_3 = layers.conv( 32, 64, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv2_1 = layers.conv( 64, 32, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv2_2 = layers.conv( 32, 64, 1, 0, pooling=False, batchnorm=True, activation='relu')
self.conv3_1 = layers.conv( 64, 128, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv3_2 = layers.conv( 128, 128, 1, 0, pooling=False, batchnorm=True, activation='relu')
self.conv4_1 = layers.conv( 128, 64, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv4_2 = layers.conv( 64, 128, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv5_1 = layers.conv( 128, 128, 1, 0, pooling=True , batchnorm=True, activation='relu')
self.fc = layers.fullyconnected(512, num_classes, output_width_30b=True, pooling=False, batchnorm=False, activation=None)
def forward(self, x):
x = self.conv1_1(x)
x = self.conv1_2(x)
x = self.conv1_3(x)
x = self.conv2_1(x)
x = self.conv2_2(x)
x = self.conv3_1(x)
x = self.conv3_2(x)
x = self.conv4_1(x)
x = self.conv4_2(x)
x = self.conv5_1(x)
x = x.view(x.size(0), -1)
x = self.fc(x)
return x
class maxim_nas_large(nn.Module):
def __init__(
self,
num_classes =100,
num_channels =3,
dimensions =(32, 32),
bias =True,
**kwargs
):
super().__init__()
### Burak: disable word wrap in your editor to see this "table" for conv layers properly
### mark that all layers are 'same' padding.
### input ch | out ch | kernel dim | padding
self.conv1_1 = layers.conv( num_channels, 128, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv1_2 = layers.conv( 128, 128, 1, 0, pooling=False, batchnorm=True, activation='relu')
self.conv1_3 = layers.conv( 128, 256, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv2_1 = layers.conv( 256, 128, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv2_2 = layers.conv( 128, 128, 1, 0, pooling=False, batchnorm=True, activation='relu')
self.conv3_1 = layers.conv( 128, 64, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv3_2 = layers.conv( 64, 256, 1, 0, pooling=False, batchnorm=True, activation='relu')
self.conv4_1 = layers.conv( 256, 128, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv4_2 = layers.conv( 128, 64, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv5_1 = layers.conv( 64, 128, 1, 0, pooling=True , batchnorm=True, activation='relu')
self.fc = layers.fullyconnected(512, num_classes, output_width_30b=True, pooling=False, batchnorm=False, activation=None)
def forward(self, x):
x = self.conv1_1(x)
x = self.conv1_2(x)
x = self.conv1_3(x)
x = self.conv2_1(x)
x = self.conv2_2(x)
x = self.conv3_1(x)
x = self.conv3_2(x)
x = self.conv4_1(x)
x = self.conv4_2(x)
x = self.conv5_1(x)
x = x.view(x.size(0), -1)
x = self.fc(x)
return x
class maxim_simplenet(nn.Module):
def __init__(
self,
num_classes =100,
num_channels =3,
dimensions =(32, 32),
bias =True,
**kwargs
):
super().__init__()
### Burak: disable word wrap in your editor to see this "table" for conv layers properly
### mark that all layers are 'same' padding.
### input ch | out ch | kernel dim | padding
self.conv1 = layers.conv( num_channels, 16, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv2 = layers.conv( 16, 20, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv3 = layers.conv( 20, 20, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv4 = layers.conv( 20, 20, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv5 = layers.conv( 20, 20, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv6 = layers.conv( 20, 20, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv7 = layers.conv( 20, 44, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv8 = layers.conv( 44, 48, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv9 = layers.conv( 48, 48, 3, 1, pooling=False, batchnorm=True, activation='relu')
self.conv10= layers.conv( 48, 96, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv11= layers.conv( 96, 512, 1, 0, pooling=True , batchnorm=True, activation='relu')
self.conv12= layers.conv( 512, 128, 1, 0, pooling=False, batchnorm=True, activation='relu')
self.conv13= layers.conv( 128, 128, 3, 1, pooling=True , batchnorm=True, activation='relu')
self.conv14= layers.conv( 128, num_classes, 1, 0, output_width_30b=True, pooling=False, batchnorm=False, activation=None)
def forward(self, x):
x = self.conv1(x)
x = self.conv2(x)
x = self.conv3(x)
x = self.conv4(x)
x = self.conv5(x)
x = self.conv6(x)
x = self.conv7(x)
x = self.conv8(x)
x = self.conv9(x)
x = self.conv10(x)
x = self.conv11(x)
x = self.conv12(x)
x = self.conv13(x)
x = self.conv14(x)
x = x.view(x.size(0), -1)
return x