26#if defined(NOODLE_USE_SDFAT)
148uint16_t
noodle_do_conv1d(
float *input,
float *kernel, uint16_t W, uint16_t K,
149 float *output, uint16_t P, uint16_t S);
193 uint16_t S,
float *output);
207 int16_t P0, int16_t P1);
221 int16_t P0, int16_t P1);
248 uint16_t S,
const char *fn);
261 uint16_t S, NDL_File &
fo);
274 uint16_t S,
float *output);
292uint16_t
noodle_do_conv(
byte *grid,
const float *kernel, uint16_t K,
293 uint16_t W,
float *output, uint16_t P, uint16_t S);
311uint16_t
noodle_do_conv(
float *grid,
const float *kernel, uint16_t K,
312 uint16_t W,
float *output, uint16_t P, uint16_t S);
359 uint16_t W,
float *output, uint16_t P,
360 uint16_t S, uint16_t OP);
370void noodle_find_max(
float *input, uint16_t n,
float &max_val, uint16_t &max_idx);
384 const float **gamma,
const float **beta,
385 const float **mean,
const float **var);
402uint16_t
noodle_bn1d(
float *x, uint16_t N,
const float *gamma,
403 const float *beta,
const float *mean,
const float *var,
418uint16_t
noodle_bn1d(
float *x, uint16_t N,
const float *bn_params,
float eps);
436 const float *beta,
const float *mean,
437 const float *var,
float eps);
451uint16_t
noodle_bn1d_relu(
float *x, uint16_t N,
const float *bn_params,
float eps);
470uint16_t
noodle_bn2d(
float *x, uint16_t C, uint16_t W,
const float *gamma,
471 const float *beta,
const float *mean,
const float *var,
488uint16_t
noodle_bn2d(
float *x, uint16_t C, uint16_t W,
const float *bn_params,
509 const float *gamma,
const float *beta,
510 const float *mean,
const float *var,
float eps);
527 const float *bn_params,
float eps);
552 uint16_t S, uint16_t &P0, uint16_t &P1);
603 uint16_t S, uint16_t OP, uint16_t &P0,
615 float *out, uint16_t n_outputs,
616 uint16_t W,
const ConvMem &conv,
624 float *out, uint16_t n_outputs,
625 uint16_t W,
const ConvMem &conv,
634 const char *out_fn, uint16_t n_outputs,
635 uint16_t W,
const ConvMem &conv,
643 float *out, uint16_t n_outputs,
644 uint16_t W,
const ConvMem &conv,
652 uint16_t n_outputs,
float *output,
653 uint16_t W,
const Conv &conv,
661 uint16_t n_outputs,
const char *out_fn,
662 uint16_t W,
const Conv &conv,
670 uint16_t n_outputs,
const char *out_fn,
671 uint16_t W,
const ConvMem &conv,
679 uint16_t n_outputs,
float *output,
680 uint16_t W,
const Conv &conv,
688 uint16_t n_outputs,
float *output,
689 uint16_t W,
const ConvMem &conv,
697 uint16_t n_outputs,
float *output,
732 float *output, uint16_t W,
741 float *output, uint16_t W,
750 float *output, uint16_t W,
758uint16_t
noodle_fcn(
const byte *input, uint16_t n_inputs,
759 uint16_t n_outputs,
float *output,
766uint16_t
noodle_fcn(
const int8_t *input, uint16_t n_inputs,
767 uint16_t n_outputs,
float *output,
774uint16_t
noodle_fcn(
const float *input, uint16_t n_inputs,
775 uint16_t n_outputs,
float *output,
782uint16_t
noodle_fcn(
const float *input, uint16_t n_inputs,
783 uint16_t n_outputs,
const char *out_fn,
790uint16_t
noodle_fcn(
const char *in_fn, uint16_t n_inputs,
791 uint16_t n_outputs,
float *output,
798uint16_t
noodle_fcn(
const float *input, uint16_t n_inputs,
799 uint16_t n_outputs,
float *output,
806uint16_t
noodle_fcn(
const float *input, uint16_t n_inputs,
807 uint16_t n_outputs,
float *output,
815 uint16_t n_outputs,
float *output,
816 const float *weight,
const float *bias,
871 uint16_t K,
float *kernel);
893uint16_t
noodle_flat(
const char *in_fn,
float *output,
894 uint16_t V, uint16_t n_filters);
910 uint16_t V, uint16_t n_filters);
926 uint16_t W, uint16_t C);
940uint16_t
noodle_gap(
float *inout, uint16_t C, uint16_t W);
954uint16_t
noodle_gmp(
float *inout, uint16_t C, uint16_t W);
998uint16_t
noodle_relu(
float *input_output, uint16_t n);
1016uint16_t
noodle_bn(
float *x, uint16_t C, uint16_t W,
1017 const float *gamma,
const float *beta,
1018 const float *mean,
const float *var,
float eps);
1034uint16_t
noodle_bn(
float *x, uint16_t C, uint16_t W,
1035 const float *bn_params,
float eps);
1054 const float *gamma,
const float *beta,
1055 const float *mean,
const float *var,
float eps);
1072 const float *bn_params,
float eps);
void noodle_array_to_file(float *array, NDL_File &fo, uint16_t n)
Write a float array to an already-open file.
Definition noodle_io.cpp:236
uint16_t noodle_flat(const char *in_fn, float *output, uint16_t V, uint16_t n_filters)
Flatten a packed file tensor into an HWC-like raw vector.
Definition noodle_shape.cpp:9
uint16_t noodle_valid_max_pool(float *inplace, uint16_t W, uint16_t C, const Pool &pool)
Apply valid max pooling to a packed channel-first tensor in place.
Definition noodle_internal.cpp:504
size_t noodle_read_float_block(NDL_File &f, float *dst, size_t n_floats)
Read a block of floats using the configured scalar file format.
Definition noodle_io.cpp:164
uint16_t noodle_bn(float *x, uint16_t C, uint16_t W, const float *gamma, const float *beta, const float *mean, const float *var, float eps)
Backward-compatible raw alias for noodle_bn2d().
Definition noodle_math.cpp:176
size_t noodle_write_raw(NDL_File &f, const void *src, size_t n)
Write raw bytes to a backend file handle.
Definition noodle_io.cpp:155
float * noodle_temp2_require(size_t required_floats)
Ensure temp buffer 2 can hold a number of floats.
Definition noodle_memory.cpp:71
uint16_t noodle_conv_float(const char *in_fn, uint16_t n_inputs, uint16_t n_outputs, float *output, uint16_t W, const Conv &conv, const Pool &pool, CBFPtr progress_cb)
File-to-memory 2D convolution with file-backed parameters.
Definition noodle_conv.cpp:657
uint16_t noodle_relu(float *input_output, uint16_t n)
Apply ReLU in place.
Definition noodle_math.cpp:275
uint16_t noodle_conv1d(float *in, uint16_t n_inputs, float *out, uint16_t n_outputs, uint16_t W, const ConvMem &conv, CBFPtr progress_cb)
Raw memory-to-memory 1D convolution without pooling.
Definition noodle_conv.cpp:195
uint16_t noodle_do_pooling(const float *input, uint16_t W, uint16_t K, uint16_t S, const char *fn)
Apply 2D pooling and write to a file.
Definition noodle_internal.cpp:176
uint16_t noodle_bn1d(float *x, uint16_t N, const float *gamma, const float *beta, const float *mean, const float *var, float eps)
Apply 1D batch normalization in place to a raw vector.
Definition noodle_math.cpp:57
void noodle_array_from_file(NDL_File &fi, float *buffer, uint16_t K)
Read a float array from an already-open file.
Definition noodle_io.cpp:302
float * noodle_temp1_require(size_t required_floats)
Ensure temp buffer 1 can hold a number of floats.
Definition noodle_memory.cpp:67
uint16_t noodle_gap(float *inout, uint16_t C, uint16_t W)
Apply global average pooling in place to packed channel-first maps.
Definition noodle_shape.cpp:65
uint16_t noodle_bn2d(float *x, uint16_t C, uint16_t W, const float *gamma, const float *beta, const float *mean, const float *var, float eps)
Apply 2D channel-wise batch normalization in place.
Definition noodle_math.cpp:108
uint16_t noodle_fcn(const byte *input, uint16_t n_inputs, uint16_t n_outputs, float *output, const FCNFile &fcn, CBFPtr progress_cb)
Byte-input fully connected layer with file-backed parameters.
Definition noodle_fcn.cpp:69
float noodle_get_padded_x(byte *grid, int16_t i, int16_t j, int16_t W, int16_t P0, int16_t P1)
Read a byte grid sample with asymmetric zero padding.
Definition noodle_internal.cpp:122
uint16_t noodle_compute_V(uint16_t K, uint16_t W, uint16_t P, uint16_t S)
Compute 2D convolution output width.
Definition noodle_internal.cpp:469
uint16_t noodle_logit(float *input_output, uint16_t n)
Apply logistic sigmoid in place.
Definition noodle_math.cpp:260
void noodle_find_max(float *input, uint16_t n, float &max_val, uint16_t &max_idx)
Find the maximum value and its index in a vector.
Definition noodle_math.cpp:31
uint16_t noodle_dwconv_float(float *input, uint16_t n_channels, float *output, uint16_t W, const Conv &conv, const Pool &pool, CBFPtr progress_cb)
Raw memory-to-memory depthwise convolution with file-backed parameters.
Definition noodle_dw.cpp:72
void noodle_copy_kernel_progmem(const float *w, uint32_t base, uint16_t K, float *kernel)
Copy one square kernel from near-PROGMEM into RAM.
Definition noodle_internal.cpp:622
uint16_t noodle_bn2d_relu(float *x, uint16_t C, uint16_t W, const float *gamma, const float *beta, const float *mean, const float *var, float eps)
Apply 2D channel-wise batch normalization followed by ReLU.
Definition noodle_math.cpp:140
uint16_t noodle_do_pooling1d(float *input, uint16_t W, uint16_t K, uint16_t S, const char *fn)
Apply valid 1D max pooling and write to a file.
Definition noodle_internal.cpp:44
uint16_t noodle_do_conv(byte *grid, const float *kernel, uint16_t K, uint16_t W, float *output, uint16_t P, uint16_t S)
Accumulate one byte-input 2D convolution plane.
Definition noodle_internal.cpp:355
float noodle_dot_float_block(const float *x, const float *w, uint16_t n)
Compute a dot product with a small unrolled loop.
Definition noodle_math.cpp:9
void noodle_reset_buffer(float *buffer, uint16_t n)
Clear a float buffer.
Definition noodle_internal.cpp:407
float * noodle_slice(float *flat, size_t W, size_t z)
Return a channel plane from a packed [Z][W][W] tensor.
Definition noodle_memory.cpp:96
float noodle_sigmoidf(float x)
Compute sigmoid for one scalar.
Definition noodle_math.cpp:249
uint16_t noodle_do_conv1d(float *input, float *kernel, uint16_t W, uint16_t K, float *output, uint16_t P, uint16_t S)
Accumulate one 1D convolution into an output sequence.
Definition noodle_internal.cpp:22
uint16_t noodle_conv_transpose_float(float *input, uint16_t n_inputs, uint16_t n_outputs, float *output, uint16_t W, const ConvMem &conv, CBFPtr progress_cb)
Raw memory-to-memory 2D transpose convolution.
Definition noodle_conv.cpp:961
uint16_t noodle_reshape(const float *src_hwc, float *dst_chw, uint16_t W, uint16_t C)
Convert HWC-like raw data to packed channel-first raw data.
Definition noodle_shape.cpp:47
uint16_t noodle_do_bias(float *output, float bias, uint16_t n)
Add bias to a square output map and apply ReLU.
Definition noodle_internal.cpp:160
void noodle_grid_from_file(NDL_File &fi, byte *buffer, uint16_t K)
Read a byte grid from an already-open file.
Definition noodle_io.cpp:321
uint16_t noodle_compute_V_and_P(uint16_t K, uint16_t W, uint16_t P, uint16_t S, uint16_t &P0, uint16_t &P1)
Compute 2D convolution output width and effective asymmetric padding.
Definition noodle_internal.cpp:477
void noodle_grid_to_file(byte *grid, NDL_File &fo, uint16_t n)
Write a byte grid to an already-open file.
Definition noodle_io.cpp:256
size_t noodle_read_raw(NDL_File &f, void *dst, size_t n)
Read raw bytes from a backend file handle.
Definition noodle_io.cpp:146
uint16_t noodle_do_bias_act(float *output, float bias, uint16_t n, Activation act)
Add bias to a square output map and apply the requested activation.
Definition noodle_internal.cpp:414
uint16_t noodle_bn_relu(float *x, uint16_t C, uint16_t W, const float *gamma, const float *beta, const float *mean, const float *var, float eps)
Backward-compatible raw alias for noodle_bn2d_relu().
Definition noodle_math.cpp:195
uint16_t noodle_gmp(float *inout, uint16_t C, uint16_t W)
Apply global max pooling in place to packed channel-first data.
Definition noodle_shape.cpp:79
uint16_t noodle_soft_max(float *input_output, uint16_t n)
Apply numerically stabilized softmax in place.
Definition noodle_math.cpp:214
uint16_t noodle_sigmoid(float *input_output, uint16_t n)
Apply sigmoid in place.
Definition noodle_math.cpp:234
uint16_t noodle_compute_Vt(uint16_t K, uint16_t W, uint16_t P, uint16_t S, uint16_t OP)
Compute transpose-convolution output width.
Definition noodle_internal.cpp:555
void noodle_unpack_bn_params(const float *bn_params, uint16_t N, const float **gamma, const float **beta, const float **mean, const float **var)
Split packed batch-normalization parameters into four arrays.
Definition noodle_math.cpp:45
uint16_t noodle_fcn_progmem(const float *input, uint16_t n_inputs, uint16_t n_outputs, float *output, const float *weight, const float *bias, Activation act, CBFPtr progress_cb)
Float-input fully connected layer with near-PROGMEM parameters.
Definition noodle_fcn.cpp:404
void noodle_temp_buffers_free(void)
Free Noodle-owned scratch buffers and detach external scratch buffers.
Definition noodle_memory.cpp:75
uint16_t noodle_do_conv_transpose(float *input, const float *kernel, uint16_t K, uint16_t W, float *output, uint16_t P, uint16_t S, uint16_t OP)
Accumulate one 2D transpose-convolution plane.
Definition noodle_internal.cpp:429
uint16_t noodle_compute_Vt_and_P(uint16_t K, uint16_t W, uint16_t P, uint16_t S, uint16_t OP, uint16_t &P0, uint16_t &P1)
Compute transpose-convolution output width and effective padding.
Definition noodle_internal.cpp:564
uint16_t noodle_bn1d_relu(float *x, uint16_t N, const float *gamma, const float *beta, const float *mean, const float *var, float eps)
Apply 1D batch normalization followed by ReLU in place.
Definition noodle_math.cpp:82
void(* CBFPtr)(float progress)
Progress callback used by long-running layer routines.
Definition noodle.h:208
Activation
Activation applied after bias where supported.
Definition noodle.h:94
Public Noodle API for small CNN/ML inference on microcontrollers.
NDL_File fb
Shared bias file handle used by streaming layer implementations.
Definition noodle_internal.cpp:14
NDL_File fo
Shared output file handle used by streaming layer implementations.
Definition noodle_internal.cpp:14
NDL_File fw
Shared weight file handle used by streaming layer implementations.
Definition noodle_internal.cpp:14
NDL_File fi
Shared input file handle used by streaming layer implementations.
Definition noodle_internal.cpp:14
void * temp_buff1
Global input scratch buffer, either Noodle-owned or caller-owned.
Definition noodle_internal.cpp:15
void * temp_buff2
Global accumulation scratch buffer, either Noodle-owned or caller-owned.
Definition noodle_internal.cpp:16
SdFat NOODLE_FS
SdFat filesystem object used by the SdFat backend.
Definition noodle_internal.cpp:10
Memory-backed convolution parameter bundle.
Definition noodle.h:158
Near-PROGMEM convolution parameter bundle.
Definition noodle.h:177
File-backed convolution parameter bundle.
Definition noodle.h:112
File-backed fully connected parameter bundle alias.
Definition noodle.h:227
Memory-backed fully connected parameter bundle.
Definition noodle.h:237
Far-PROGMEM fully connected parameter bundle for AVR.
Definition noodle.h:251
Valid-pooling parameter bundle.
Definition noodle.h:198