Порядок каналов CaffeNCHW
;
Порядок каналов Tensorflow по умолчанию равенNHWC
(но можно установить на NCHW),NHWC имеет лучшую локальность доступа к памяти (один выходной пиксель может быть получен на каждые три входных пикселя), в то время как NCHW должен ждать, пока все входы каналов будут готовы, чтобы получить окончательный результат вывода, что требует большого временного пространства..
Почему TensorFlow выбрал формат NHWC в качестве формата по умолчанию? Поскольку ранняя разработка основана на процессоре, использование NHWC немного быстрее, чем NCHW (нетрудно понять, NHWC имеет лучшую локальность и более высокий уровень использования кеша)..
NCHW — это формат Nvidia cuDNN по умолчанию, и будет быстрее использовать формат NCHW при использовании ускорения графического процессора.(Есть и некоторые исключения).
Передовая практика: полностью учитывать два формата при проектировании сети, и лучше гибко переключаться,Используйте формат NCHW для обучения на GPU и формат NHWC для прогнозирования на CPU..
Порядок каналов PytorchNCHW
Разница между двумя форматами
В NCHW C расположен во внешнем слое, а пиксели в каждом канале расположены рядом друг с другом, что имеет форму «RRRRRRGGGGGBBBBBBB». В формате NHWC C расположен в самом внутреннем слое, а пиксели, соответствующие пространственным позициям нескольких каналов, располагаются рядом друг с другом, то есть форма «RGBRGBRGBRGBRGBRGB».
Если нам нужно выполнить расчет преобразования цвета в оттенки серого на изображении, процесс расчета NCHW выглядит следующим образом:
которыйВсе значения пикселей канала R умножаются на 0,299, все значения пикселей канала G умножаются на 0,587, все значения пикселей канала B умножаются на 0,114, и, наконец, результаты трех каналов складываются. чтобы получить значение серого. Соответственно, процесс вычисления преобразования цвета в оттенки серого для формата данных NHWC выглядит следующим образом:
Входные данные делятся на несколько групп пикселей (R, G, B).В каждой группе пикселей значение пикселя канала R умножается на 0,299, значение пикселя канала G умножается на 0,587, а значение пикселя канала B умножается на 0,114, а затем добавляется для получения выходных пикселей в градациях серого. Объедините несколько наборов результатов, чтобы получить все выходные пиксели в градациях серого.
Используйте вышеСложность вычисления RGB -> оттенков серого для двух форматов данных одинакова, разница заключается в характеристиках доступа к памяти.. Сравнивая эти два рисунка, можно обнаружить, что,NHWC имеет лучшую локальность доступа к памяти (один выходной пиксель может быть получен на каждые три входных пикселя), в то время как NCHW должен ждать, пока все входы каналов будут готовы, чтобы получить окончательный результат вывода, что требует большого временного пространства..