0) Используйте GPU.
1) Используйте батчи, т.е. обрабатывайте изображения пачкой.
2) Процедуры загрузки-предобработки изображений необходимо измерить по времени исполнения и заменить на быстрые - например, из OpenCV (cv2.imread, cv2.warpAffine, cv2.normalize). Также заранее подготовить буферы для результата, а не аллоцировать память под выходной массив каждый раз заново.
3) Загрузку изображений можно вынести в асинхронный код.
4) Tensorflow (или что там у вас под капотом) и так использует все ядра.
5) Вы оптимизировали нейронку для инференса? Frozen graph, merge BN layers, TensorRT, снижение разрядности?
6) Почему модель весит почти гигабайт? Более лёгкие модели не подошли? Google MobileNetV2, например?