Размер канала Tensorflow и Pytorch

OpenCV
Размер канала Tensorflow и Pytorch

Порядок каналов CaffeNCHW;

Порядок каналов Tensorflow по умолчанию равенNHWC(но можно установить на NCHW),NHWC имеет лучшую локальность доступа к памяти (один выходной пиксель может быть получен на каждые три входных пикселя), в то время как NCHW должен ждать, пока все входы каналов будут готовы, чтобы получить окончательный результат вывода, что требует большого временного пространства..

Почему TensorFlow выбрал формат NHWC в качестве формата по умолчанию? Поскольку ранняя разработка основана на процессоре, использование NHWC немного быстрее, чем NCHW (нетрудно понять, NHWC имеет лучшую локальность и более высокий уровень использования кеша)..

NCHW — это формат Nvidia cuDNN по умолчанию, и будет быстрее использовать формат NCHW при использовании ускорения графического процессора.(Есть и некоторые исключения).

Передовая практика: полностью учитывать два формата при проектировании сети, и лучше гибко переключаться,Используйте формат NCHW для обучения на GPU и формат NHWC для прогнозирования на CPU..

Порядок каналов PytorchNCHW

output_5.png

Разница между двумя форматами

В NCHW C расположен во внешнем слое, а пиксели в каждом канале расположены рядом друг с другом, что имеет форму «RRRRRRGGGGGBBBBBBB». В формате NHWC C расположен в самом внутреннем слое, а пиксели, соответствующие пространственным позициям нескольких каналов, располагаются рядом друг с другом, то есть форма «RGBRGBRGBRGBRGBRGB».

Если нам нужно выполнить расчет преобразования цвета в оттенки серого на изображении, процесс расчета NCHW выглядит следующим образом:

output_6.png

которыйВсе значения пикселей канала R умножаются на 0,299, все значения пикселей канала G умножаются на 0,587, все значения пикселей канала B умножаются на 0,114, и, наконец, результаты трех каналов складываются. чтобы получить значение серого. Соответственно, процесс вычисления преобразования цвета в оттенки серого для формата данных NHWC выглядит следующим образом:

output_7.png

Входные данные делятся на несколько групп пикселей (R, G, B).В каждой группе пикселей значение пикселя канала R умножается на 0,299, значение пикселя канала G умножается на 0,587, а значение пикселя канала B умножается на 0,114, а затем добавляется для получения выходных пикселей в градациях серого. Объедините несколько наборов результатов, чтобы получить все выходные пиксели в градациях серого.

Используйте вышеСложность вычисления RGB -> оттенков серого для двух форматов данных одинакова, разница заключается в характеристиках доступа к памяти.. Сравнивая эти два рисунка, можно обнаружить, что,NHWC имеет лучшую локальность доступа к памяти (один выходной пиксель может быть получен на каждые три входных пикселя), в то время как NCHW должен ждать, пока все входы каналов будут готовы, чтобы получить окончательный результат вывода, что требует большого временного пространства..