Skip to content

Commit

Permalink
Porting to new autotiler
Browse files Browse the repository at this point in the history
  • Loading branch information
marco-fariselli committed Apr 30, 2021
1 parent 6d481cc commit f844407
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 111 deletions.
4 changes: 3 additions & 1 deletion MFCC_params_LARGE.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
#define N_FRAME 49
#define N_FFT 1024
#define USE_RADIX_4 0
#define USE_HIGH_PREC 0
#define DATA_TYPE 0
#define USE_POWER 1
#define OUT_FFT 0
#define MFCC_BANK_CNT 40
#define FMIN 20.0
#define FMAX 4000.0
#define MFCC_COEFF_CNT 494
#define N_DCT 40
#define OUTPUT_MELSPECTROGRAM 0
#define LIFTER_COEFF 0
#define USE_DB 0
3 changes: 2 additions & 1 deletion MFCC_params_MEDIUM.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
#define N_FRAME 49
#define N_FFT 1024
#define USE_RADIX_4 0
#define USE_HIGH_PREC 0
#define DATA_TYPE 0
#define USE_POWER 1
#define OUT_FFT 0
#define MFCC_BANK_CNT 40
#define FMIN 20.0
#define FMAX 4000.0
Expand Down
4 changes: 3 additions & 1 deletion MFCC_params_SMALL.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
#define N_FRAME 49
#define N_FFT 1024
#define USE_RADIX_4 0
#define USE_HIGH_PREC 0
#define DATA_TYPE 0
#define USE_POWER 1
#define OUT_FFT 0
#define MFCC_BANK_CNT 40
#define FMIN 20.0
#define FMAX 4000.0
#define MFCC_COEFF_CNT 494
#define N_DCT 40
#define OUTPUT_MELSPECTROGRAM 0
#define LIFTER_COEFF 0
#define USE_DB 0
4 changes: 2 additions & 2 deletions MFCCmodel.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ int main(int argc, char **argv)
MFCCConfiguration(51200);
// Load FIR basic kernels
LoadMFCCLibrary();
MFCC_Generator("MFCC", 0, N_FRAME, FRAME_SIZE, FRAME_STEP, N_FFT, MFCC_COEFF_CNT, N_DCT, PREEMP_FACTOR, LIFTER_COEFF, USE_RADIX_4, USE_POWER, DATA_TYPE, MFCC_BANK_CNT, 0);
//MFCC_Generator("MFCC_single", 0, 1, FRAME_SIZE, FRAME_STEP, N_FFT, MFCC_COEFF_CNT, N_DCT, PREEMP_FACTOR, LIFTER_COEFF, USE_RADIX_4, USE_POWER, DATA_TYPE, MFCC_BANK_CNT, 0);
MFCC_Generator("MFCC", 0, N_FRAME, FRAME_SIZE, FRAME_STEP, N_FFT, MFCC_COEFF_CNT, N_DCT, PREEMP_FACTOR, LIFTER_COEFF, USE_RADIX_4, USE_POWER, DATA_TYPE, MFCC_BANK_CNT, 0, 0);
//MFCC_Generator("MFCC_single", 0, 1, FRAME_SIZE, FRAME_STEP, N_FFT, MFCC_COEFF_CNT, N_DCT, PREEMP_FACTOR, LIFTER_COEFF, USE_RADIX_4, USE_POWER, DATA_TYPE, MFCC_BANK_CNT, 0, 0);
GenerateTilingCode();
}
11 changes: 9 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ else
ifeq ($(LARGE), 1)
MODEL_PREFIX = KWS_ds_cnn_l_quant
APP_CFLAGS += -DLARGE
LARGE_OPT = nodeoption 1 PARALLELFEATURES 0
else
$(error You must set to 1 one of SMALL, MEDIUM, LARGE to select a network)
endif
Expand All @@ -56,9 +55,17 @@ READFS_FILES=$(realpath $(MODEL_TENSORS))
QUANT_BITS=8
BUILD_DIR=BUILD

#MODEL_NE16 ?= 0
NNTOOL_SCRIPT_PARAMETRIC=model/nntool_script_params
NNTOOL_EXTRA_FLAGS = -q
MODEL_SUFFIX = _$(QUANT_BITS)BIT
ifeq ($(MODEL_NE16), 1)
NNTOOL_SCRIPT_PARAMETRIC=model/nntool_script_ne16_params
MODEL_SUFFIX = _NE16
endif
ifeq ($(DUMP_TENSORS), 1)
NNTOOL_SET_GRAPH_DUMP = set graph_dump_tensor 7
endif
NNTOOL_EXTRA_FLAGS = -q
MODEL_BUILD = BUILD_MODEL_$(QUANT_BITS)BIT

CLUSTER_STACK_SIZE=4096
Expand Down
80 changes: 7 additions & 73 deletions common/model_decl.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,7 @@

MODEL_SUFFIX?=

MODEL_PREFIX?=

# The training of the model is slightly different depending on
# the quantization. This is because in 8 bit mode we used signed
# 8 bit so the input to the model needs to be shifted 1 bit
ifeq ($(QUANT_BITS),8)
TRAIN_SUFFIX=_8BIT
else
ifeq ($(QUANT_BITS),16)
TRAIN_SUFFIX=_16BIT
else
$(error Dont know how to build with this bit width)
endif
endif
MODEL_PREFIX?=GapFlow

MODEL_PYTHON=python3

Expand All @@ -29,7 +16,11 @@ MODEL_COMMON_INC ?= $(GAP_SDK_HOME)/libs/gap_lib/include
MODEL_COMMON_SRC ?= $(GAP_SDK_HOME)/libs/gap_lib/img_io
MODEL_COMMON_SRC_FILES ?= ImgIO.c
MODEL_COMMON_SRCS = $(realpath $(addprefix $(MODEL_COMMON_SRC)/,$(MODEL_COMMON_SRC_FILES)))
MODEL_HEADERS = $(MODEL_COMMON)/headers
MODEL_TRAIN = model/train.py
MODEL_BUILD = BUILD_MODEL$(MODEL_SUFFIX)
MODEL_TRAIN_BUILD = BUILD_TRAIN$(TRAIN_SUFFIX)
MODEL_H5 = $(MODEL_TRAIN_BUILD)/$(MODEL_PREFIX).h5

MODEL_TFLITE = $(MODEL_BUILD)/$(MODEL_PREFIX).tflite

Expand All @@ -44,10 +35,6 @@ MODEL_GEN_C = $(addsuffix .c, $(MODEL_GEN))
MODEL_GEN_CLEAN = $(MODEL_GEN_C) $(addsuffix .h, $(MODEL_GEN))
MODEL_GEN_EXE = $(MODEL_BUILD)/GenTile

ifdef MODEL_QUANTIZED
NNTOOL_EXTRA_FLAGS = -q
endif

MODEL_GENFLAGS_EXTRA =

EXTRA_GENERATOR_SRC =
Expand All @@ -60,61 +47,8 @@ IMAGES = images
RM=rm -f

NNTOOL=nntool

NNTOOL_PATH = $(GAP_SDK_HOME)/tools/nntool
NNTOOL_KERNEL_PATH = $(NNTOOL_PATH)/autotiler/kernels
NNTOOL_GENERATOR_PATH = $(NNTOOL_PATH)/autotiler/generators
# hram - HyperBus RAM
# qspiram - Quad SPI RA
MODEL_L3_EXEC=hram
# hflash - HyperBus Flash
# qpsiflash - Quad SPI Flash
MODEL_L3_CONST=hflash

MODEL_LIB_POW2 += $(TILER_CNN_KERNEL_PATH)/CNN_BiasReLULinear_BasicKernels.c
MODEL_LIB_POW2 += $(TILER_CNN_KERNEL_PATH)/CNN_Conv_BasicKernels.c
MODEL_LIB_POW2 += $(TILER_CNN_KERNEL_PATH)/CNN_Conv_DP_BasicKernels.c
MODEL_LIB_POW2 += $(TILER_CNN_KERNEL_PATH)/CNN_Conv_DW_BasicKernels.c
MODEL_LIB_POW2 += $(TILER_CNN_KERNEL_PATH)/CNN_Conv_DW_DP_BasicKernels.c
MODEL_LIB_POW2 += $(TILER_CNN_KERNEL_PATH)/CNN_Pooling_BasicKernels.c
MODEL_LIB_POW2 += $(TILER_CNN_KERNEL_PATH)/CNN_MatAlgebra.c
MODEL_LIB_POW2 += $(TILER_CNN_KERNEL_PATH)/CNN_SoftMax.c
MODEL_LIB_POW2 += $(NNTOOL_KERNEL_PATH)/norm_transpose.c
MODEL_LIB_INCLUDE_POW2 = -I$(TILER_CNN_KERNEL_PATH) -I$(NNTOOL_KERNEL_PATH)
MODEL_GEN_POW2 += $(TILER_CNN_GENERATOR_PATH)/CNN_Generator_Util.c
MODEL_GEN_POW2 += $(TILER_CNN_GENERATOR_PATH)/CNN_Generators.c
MODEL_GEN_POW2 += $(NNTOOL_GENERATOR_PATH)/nntool_extra_generators.c
MODEL_GEN_INCLUDE_POW2 = -I$(TILER_CNN_GENERATOR_PATH) -I$(NNTOOL_GENERATOR_PATH)

MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/CNN_Activation_SQ8.c
MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/CNN_Bias_Linear_SQ8.c
MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/CNN_Conv_SQ8.c
MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/CNN_Pooling_SQ8.c
MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/CNN_Conv_DW_SQ8.c
MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/CNN_MatAlgebra_SQ8.c
MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/CNN_SoftMax_SQ8.c
MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/CNN_AT_Misc.c
MODEL_LIB_SQ8 += $(TILER_CNN_KERNEL_PATH_SQ8)/RNN_SQ8.c
MODEL_LIB_SQ8 += $(NNTOOL_KERNEL_PATH)/norm_transpose.c
MODEL_LIB_INCLUDE_SQ8 = -I$(TILER_CNN_KERNEL_PATH) -I$(TILER_CNN_KERNEL_PATH_SQ8) -I$(NNTOOL_KERNEL_PATH)
MODEL_GEN_SQ8 += $(TILER_CNN_GENERATOR_PATH)/CNN_Generator_Util.c
MODEL_GEN_SQ8 += $(TILER_CNN_GENERATOR_PATH_SQ8)/CNN_Generators_SQ8.c
MODEL_GEN_SQ8 += $(TILER_CNN_GENERATOR_PATH_SQ8)/RNN_Generators_SQ8.c
MODEL_GEN_SQ8 += $(NNTOOL_GENERATOR_PATH)/nntool_extra_generators.c
MODEL_GEN_INCLUDE_SQ8 = -I$(TILER_CNN_GENERATOR_PATH) -I$(TILER_CNN_GENERATOR_PATH_SQ8) -I$(NNTOOL_GENERATOR_PATH)


MODEL_SIZE_CFLAGS = -DAT_INPUT_HEIGHT=$(AT_INPUT_HEIGHT) -DAT_INPUT_WIDTH=$(AT_INPUT_WIDTH) -DAT_INPUT_COLORS=$(AT_INPUT_COLORS)

ifdef MODEL_SQ8
CNN_GEN = $(MODEL_GEN_SQ8)
CNN_GEN_INCLUDE = $(MODEL_GEN_INCLUDE_SQ8)
CNN_LIB = $(MODEL_LIB_SQ8)
CNN_LIB_INCLUDE = $(MODEL_LIB_INCLUDE_SQ8)
else
CNN_GEN = $(MODEL_GEN_POW2)
CNN_GEN_INCLUDE = $(MODEL_GEN_INCLUDE_POW2)
CNN_LIB = $(MODEL_LIB_POW2)
CNN_LIB_INCLUDE = $(MODEL_LIB_INCLUDE_POW2)
endif
include $(RULES_DIR)/at_common_decl.mk
$(info GEN ... $(CNN_GEN))

22 changes: 5 additions & 17 deletions common/model_rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,10 @@ else
MODEL_TRAIN_FLAGS =
endif

ifdef MODEL_SQ8
CNN_GEN = $(MODEL_GEN_SQ8)
CNN_GEN_INCLUDE = $(MODEL_GEN_INCLUDE_SQ8)
CNN_LIB = $(MODEL_LIB_SQ8)
CNN_LIB_INCLUDE = $(MODEL_LIB_INCLUDE_SQ8)
else
CNN_GEN = $(MODEL_GEN_POW2)
CNN_GEN_INCLUDE = $(MODEL_GEN_INCLUDE_POW2)
CNN_LIB = $(MODEL_LIB_POW2)
CNN_LIB_INCLUDE = $(MODEL_LIB_INCLUDE_POW2)
endif

USE_DISP=1

ifdef USE_DISP
SDL_FLAGS= -lSDL2 -lSDL2_ttf
SDL_FLAGS= -lSDL2 -lSDL2_ttf -DAT_DISPLAY
else
SDL_FLAGS=
endif
Expand All @@ -51,13 +40,12 @@ $(MODEL_BUILD):
$(MODEL_TFLITE): $(TRAINED_TFLITE_MODEL) | $(MODEL_BUILD)
cp $< $@

# Creates an Autotiler Model file by running the commands in the script
# Creates an NNTOOL state file by running the commands in the script
# These commands could be run interactively
# The commands:
# Adjust the model to match AutoTiler tensor order
# Fuse nodes together to match fused AutoTiler generators
# Quantize the graph if not already done with tflite quantization
# Generate the Autotiler model code
# Save the graph state files

# Runs NNTOOL with its state file to generate the autotiler model code
$(MODEL_BUILD)/$(MODEL_SRC): $(MODEL_TFLITE) | $(MODEL_BUILD) $(SAMPLES)
Expand All @@ -71,7 +59,7 @@ nntool_gen: $(MODEL_BUILD)/$(MODEL_SRC)
# Build the code generator from the model code
$(MODEL_GEN_EXE): $(CNN_GEN) $(MODEL_BUILD)/$(MODEL_SRC) $(EXTRA_GENERATOR_SRC)
echo "COMPILING AUTOTILER MODEL"
gcc -g -o $(MODEL_GEN_EXE) -I. -I$(TILER_INC) -I$(TILER_EMU_INC) $(CNN_GEN_INCLUDE) $(CNN_LIB_INCLUDE) $? $(TILER_LIB) $(SDL_FLAGS)
gcc -g -o $(MODEL_GEN_EXE) -I. -I$(TILER_INC) -I$(TILER_EMU_INC) $(CNN_GEN_INCLUDE) $(CNN_LIB_INCLUDE) $^ $(TILER_LIB) $(SDL_FLAGS)

compile_model: $(MODEL_GEN_EXE)

Expand Down
2 changes: 1 addition & 1 deletion emul.mk
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ else
ifeq ($(LARGE), 1)
MODEL_PREFIX = KWS_ds_cnn_l_quant
CFLAGS += -DLARGE
LARGE_OPT = nodeoption 1 PARALLELFEATURES 0
#LARGE_OPT = nodeoption 1 PARALLELFEATURES 0
else
$(error You must set to 1 one of SMALL, MEDIUM, LARGE to select a network)
endif
Expand Down
11 changes: 4 additions & 7 deletions main_with_mfcc.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,13 +176,6 @@ static void Runkws()

if(rec_digit>1)
printf("Recognized: %s\twith confidence: %d\n", LABELS[rec_digit], highest);

#ifdef PERF
if (rec_digit!=8){
printf("App didn't recognize ON with %s test sample\n", WavName);
pmsis_exit(-1);
}
#endif
}


Expand Down Expand Up @@ -378,6 +371,10 @@ while(1)
printf("%45s: Cycles: %10d, Operations: %10d, Operations/Cycle: %f\n", "Total", TotalCycles, TotalOper, ((float) TotalOper)/ TotalCycles);
printf("\n");
break;
if (rec_digit!=8){
printf("App didn't recognize ON with %s test sample\n", WavName);
pmsis_exit(-1);
}
}
#endif /* PERF */
AT_L1_FREE(0, __PREFIX(_L1_Memory), L1_SIZE);
Expand Down
13 changes: 7 additions & 6 deletions mfcc_model.mk
Original file line number Diff line number Diff line change
Expand Up @@ -51,18 +51,19 @@ endif
$(MFCCBUILD_DIR):
mkdir $(MFCCBUILD_DIR)

# Build the code generator from the model code
$(MFCC_MODEL_GEN): $(MFCCBUILD_DIR)
gcc -g -o $(MFCC_MODEL_GEN) -I. -I$(MFCC_GENERATOR) -I$(TILER_INC) -I$(TILER_EMU_INC) MFCCmodel.c $(MFCC_SRCG) $(TILER_LIB) $(TABLE_CFLAGS) $(SIZE_DEF)

gen_lut: $(MFCCBUILD_DIR)
$(MFCCBUILD_DIR)/LUT.def: $(MFCCBUILD_DIR)
python3 $(MFCC_GENERATOR)/GenLUT.py --fft_lut_file $(MFCCBUILD_DIR)/LUT.def --mfcc_bf_lut_file $(MFCCBUILD_DIR)/MFCC_FB.def \
--sample_rate 16000 --frame_size $(FRAME_SIZE) --frame_step $(FRAME_STEP) --n_frame $(AT_INPUT_HEIGHT) \
--n_fft 1024 --n_dct 40 --mfcc_bank_cnt 40 --fmin 20 --fmax 4000 --mfcc_bank_cnt 40 --preempfactor 0.0 \
--use_tf_mfcc --save_params_header MFCC_params_$(NN_SIZE).h $(EXTRA_FLAGS)

# Build the code generator from the model code
$(MFCC_MODEL_GEN): $(MFCCBUILD_DIR)/LUT.def $(MFCCBUILD_DIR)
gcc -g -o $(MFCC_MODEL_GEN) -I. -I$(MFCC_GENERATOR) -I$(TILER_INC) -I$(TILER_EMU_INC) MFCCmodel.c $(MFCC_SRCG) $(TILER_LIB) $(TABLE_CFLAGS) $(SIZE_DEF)


# Run the code generator kernel code
$(MFCCBUILD_DIR)/MFCCKernels.c: gen_lut $(MFCC_MODEL_GEN)
$(MFCCBUILD_DIR)/MFCCKernels.c: $(MFCC_MODEL_GEN)
$(MFCC_MODEL_GEN) -o $(MFCCBUILD_DIR) -c $(MFCCBUILD_DIR) $(MODEL_GEN_EXTRA_FLAGS)

mfcc_model: $(MFCCBUILD_DIR)/MFCCKernels.c
Expand Down

0 comments on commit f844407

Please sign in to comment.