Package: keras-efficientnets
EfficientNets in KerasKeras implementation of EfficientNets from the paperEfficientNet: Rethinking Model Scaling for Convolutional Neural Networks.Contains code to build the EfficientNets B0-B7 from the paper, and includes weights for configurations B0-B3. B4-B7 weights will be ported when made available from the Tensorflow repository.Supports building any other configuration model of efficient nets as well, other than the B0-B7 variants.Efficient Nets and Compound Coefficeint ScalingThe core idea about Efficient Nets is the use of compound scaling - using a weighted scale of three inter-connected hyper parameters of the model - Resolution of the input, Depth of the Network and Width of the Network.Whenphi, the compound coefficient, is initially set to 1, we get the base configuration - in this caseEfficientNetB0. We then use this configuration in a grid search to find the coefficientsalpha,betaandgammawhich optimize the following objective under the constraint:Once these coefficients foralpha,betaandgammaare found, then simply scalephi, the compound coeffieints by different amounts to get a family of models with more capacity and possibly better performance.In doing so, and using Neural Architecture Search to get the base configuration as well as great coefficients for the above, the paper generates EfficientNets, which outperform much larger and much deeper models while using less resources during both training and evaluation.InstallationFrom PyPI:$ pip install keras_efficientnetsFrom Master branch:pip install git+https://github.com/titu1994/keras-efficientnets.git

OR

git clone https://github.com/titu1994/keras-efficientnets.git
cd keras-efficientnets
pip install .UsageSimply importkeras_efficientnetsand call either the model builderEfficientNetor the pre-built versionsEfficientNetBXwhereXranger from 0 to 7.fromkeras_efficientnetsimportEfficientNetB0model=EfficientNetB0(input_size,classes=1000,include_top=True,weights='imagenet')To construct custom EfficientNets, use theEfficientNetbuilder. TheEfficientNetbuilder code requires a list ofBlockArgsas input to define the structure of each block in model. A default set ofBlockArgsare provided inkeras_efficientnets.config.fromkeras_efficientnetsimportEfficientNet,BlockArgsblock_args_list=[# First number is `input_channels`, second is `output_channels`.BlockArgs(32,16,kernel_size=3,strides=(1,1),num_repeat=1,se_ratio=0.25,expand_ratio=1),BlockArgs(16,24,kernel_size=3,strides=(2,2),num_repeat=2,se_ratio=0.25,expand_ratio=6),...]model=EfficientNet(input_shape,block_args_list,...)Computing Valid Compound CoefficientsIn the paper, compound coefficients are obtained via simple grid search to find optimal values ofalpha,betaandgammawhile keepingphias 1.This library provides a utility function to compute valid candidates that satisfy a user defined criterion
function (the one from the paper is provided as the default cost function), and quickly computes
the set of hyper parameters that closely satisfy the cost function (here, MSE between the value and max cost permissible).An example is shown below which uses the default parameters from the paper. The user can change the number of coefficients
as well as the cost function itself in order to get different values of the compound coefficients.fromkeras_efficientnets.optimizeimportoptimize_coefficientsfromkeras_efficientnets.optimizeimportget_compound_coeff_funcresults=optimize_coefficients(phi=1.,max_cost=2.0,search_per_coeff=10)cost_func=get_compound_coeff_func(phi=1.0,max_cost=2.0)print("Num unique configs = ",len(results))foriinrange(10):# print just the first 10 results out of 1000 resultsprint(i+1,results[i],"Cost :",cost_func(results[i]))Increase the number of search scopes usingsearch_per_coeffto some larger int value. You could also combine this
withtolto compute a vast set of coefficients, and then select only those that have a cost value lower than the
specified tolerance.fromkeras_efficientnets.optimizeimportoptimize_coefficientsfromkeras_efficientnets.optimizeimportget_compound_coeff_funcresults=optimize_coefficients(phi=1.,max_cost=2.0,search_per_coeff=10,tol=1e-10)cost_func=get_compound_coeff_func(phi=1.0,max_cost=2.0)print("Num unique configs = ",len(results))foriinrange(10):# print just the first 10 results out of 125 resultsprint(i+1,results[i],"Cost :",cost_func(results[i]))RequirementsTensorflow 1.13+ (CPU or GPU version must be installedbeforeinstallation of this library)Keras 2.2.4+References[1] Mingxing Tan and Quoc V. Le. EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. ICML 2019. Arxiv link: https://arxiv.org/abs/1905.11946.