Algorithmic and SW Techniques for Designing and Implementing Energy Efficient CNNs