Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/master/C4 - Convolutional Neural Networks/Week 3/Car detection for Autonomous Driving/yad2k/models/keras_darknet19.py
Views: 4822
"""Darknet19 Model Defined in Keras."""1import functools2from functools import partial34from tensorflow.keras.layers import Conv2D, MaxPooling2D5from tensorflow.keras.layers import LeakyReLU6from tensorflow.keras.layers import BatchNormalization7from tensorflow.keras.models import Model8from tensorflow.keras.regularizers import l2910from ..utils import compose1112# Partial wrapper for Convolution2D with static default argument.13_DarknetConv2D = partial(Conv2D, padding='same')141516@functools.wraps(Conv2D)17def DarknetConv2D(*args, **kwargs):18"""Wrapper to set Darknet weight regularizer for Convolution2D."""19darknet_conv_kwargs = {'kernel_regularizer': l2(5e-4)}20darknet_conv_kwargs.update(kwargs)21return _DarknetConv2D(*args, **darknet_conv_kwargs)222324def DarknetConv2D_BN_Leaky(*args, **kwargs):25"""Darknet Convolution2D followed by BatchNormalization and LeakyReLU."""26no_bias_kwargs = {'use_bias': False}27no_bias_kwargs.update(kwargs)28return compose(29DarknetConv2D(*args, **no_bias_kwargs),30BatchNormalization(),31LeakyReLU(alpha=0.1))323334def bottleneck_block(outer_filters, bottleneck_filters):35"""Bottleneck block of 3x3, 1x1, 3x3 convolutions."""36return compose(37DarknetConv2D_BN_Leaky(outer_filters, (3, 3)),38DarknetConv2D_BN_Leaky(bottleneck_filters, (1, 1)),39DarknetConv2D_BN_Leaky(outer_filters, (3, 3)))404142def bottleneck_x2_block(outer_filters, bottleneck_filters):43"""Bottleneck block of 3x3, 1x1, 3x3, 1x1, 3x3 convolutions."""44return compose(45bottleneck_block(outer_filters, bottleneck_filters),46DarknetConv2D_BN_Leaky(bottleneck_filters, (1, 1)),47DarknetConv2D_BN_Leaky(outer_filters, (3, 3)))484950def darknet_body():51"""Generate first 18 conv layers of Darknet-19."""52return compose(53DarknetConv2D_BN_Leaky(32, (3, 3)),54MaxPooling2D(),55DarknetConv2D_BN_Leaky(64, (3, 3)),56MaxPooling2D(),57bottleneck_block(128, 64),58MaxPooling2D(),59bottleneck_block(256, 128),60MaxPooling2D(),61bottleneck_x2_block(512, 256),62MaxPooling2D(),63bottleneck_x2_block(1024, 512))646566def darknet19(inputs):67"""Generate Darknet-19 model for Imagenet classification."""68body = darknet_body()(inputs)69logits = DarknetConv2D(1000, (1, 1), activation='softmax')(body)70return Model(inputs, logits)717273