Patent No. | 10,558,430 |
---|---|

Issue Date | February 11, 2020 |

Title | Neural Network Engine |

Inventorship | Mihai Constantin Munteanu, Brasov (RO) |

Assignee | FotoNation Limited, Galway (IE) |

1. A neural network engine configured to receive at least one M×N window of floating point number values corresponding to a pixel of an input map and a corresponding set of M×N floating point number kernel values for a neural network layer of a neural network, the neural network engine comprising:a plurality of M×N floating point multipliers, each floating point multiplier having a first operand input configured to be connected to an input map value and a second operand input configured to be connected to a corresponding kernel value;

pairs of multipliers within said M×N floating point multipliers providing respective floating point number outputs to respective input nodes of a tree of nodes, each node of said tree being configured to provide a floating point number output corresponding to either: a larger of inputs of said node; or a sum of said inputs, one output node of said tree providing a first input of an output logic, and an output of one of said M×N floating point multipliers providing a second input of said output logic;

wherein when said engine is configured to process a convolution layer of the neural network, each of said kernel values comprises a trained value for said layer, said nodes of the tree are configured to sum their inputs and said output logic is configured to sum its first and second inputs, to apply an activation function to said sum and to provide an output of said activation function as an output of said output logic;

wherein when said engine is configured to process an average pooling layer of the neural network, each of said kernel values comprises a value corresponding to 1/(M×N), said nodes of the tree are configured to sum their inputs and said output logic is configured to sum its first and second inputs and to provide said sum as said output of said output logic; and

wherein when said engine is configured to process a max pooling layer of the neural network, each of said kernel values comprises a value equal to 1, said nodes of the tree are configured to output a larger of their inputs and said output logic is configured to output a larger of its first and second inputs as said output of said output logic.

pairs of multipliers within said M×N floating point multipliers providing respective floating point number outputs to respective input nodes of a tree of nodes, each node of said tree being configured to provide a floating point number output corresponding to either: a larger of inputs of said node; or a sum of said inputs, one output node of said tree providing a first input of an output logic, and an output of one of said M×N floating point multipliers providing a second input of said output logic;

wherein when said engine is configured to process a convolution layer of the neural network, each of said kernel values comprises a trained value for said layer, said nodes of the tree are configured to sum their inputs and said output logic is configured to sum its first and second inputs, to apply an activation function to said sum and to provide an output of said activation function as an output of said output logic;

wherein when said engine is configured to process an average pooling layer of the neural network, each of said kernel values comprises a value corresponding to 1/(M×N), said nodes of the tree are configured to sum their inputs and said output logic is configured to sum its first and second inputs and to provide said sum as said output of said output logic; and

wherein when said engine is configured to process a max pooling layer of the neural network, each of said kernel values comprises a value equal to 1, said nodes of the tree are configured to output a larger of their inputs and said output logic is configured to output a larger of its first and second inputs as said output of said output logic.