Аппаратная реализация свёрточной нейронной сети в ПЛИС на базе вычислений с фиксированной точкой

УДК 004.052.32

Р.А. Соловьев, А.Г. Кустов, В.С. Рухлов, А.Н. Щелоков, Д.В. Пузырьков

АППАРАТНАЯ РЕАЛИЗАЦИЯ СВЁРТОЧНОЙ НЕЙРОННОЙ СЕТИ В ПЛИС НА БАЗЕ ВЫЧИСЛЕНИЙ С ФИКСИРОВАННОЙ ТОЧКОЙ*

Последние исследования в области нейронных сетей показали, что они хорошо справляются с множеством задач, связанных с классификацией и обработкой изображений, аудио и видео данных. Размерность и вычислительная сложность во время классификации так велика, что с вычислениями плохо справляются даже мощные процессоры общего назначения CPU. Для полноценной работы с современными нейросетями используют мощные и как следствие дорогие GPU (видеокарты). Особенно это актуально для обработки видеоинформации в реальном времени. Некоторые структуры нейросетей, при очень высокой точности классификации изображений, обладают свойствами, которые легко переносятся на аппаратную платформу. Поскольку потребности в аппаратуре для работы с нейронными сетями постоянно растут, то требуется разработка специальных аппаратных блоков для использования в СБИС и ПЛИС. В статье предлагается разработать набор аппаратных блоков и методов для реализации нейронных сетей на ПЛИС с целью ускорения вычисления и разработки аппаратуры для выполнения задач классификации изображений. Предполагается, что на входе мы уже имеем уже предобученную нейронную сеть и нам необходимо создать устройство, которое выполняет операцию классификации. Т.е. изначально нам задана как структура, так и веса нейронной сети. Предложена методика для перехода от модели вычислений с плавающей точкой к вычислениям с фиксированной точкой, без потери точности классификации. Предложена реализация базовых блоков тестовой нейронной сети в аппаратном виде. Проведены результаты экспериментов на тестовой свёрточной нейронной сети, обученной на наборе изображений MNIST.

Свёрточные нейронные сети; ПЛИС; фиксированная точка; двухмерная свёртка.

R.A. Solovyev, A.G. Kustov, V.S. Ruhlov, A.N. Shchelokov, D.V. Puzyrkov

HARDWARE IMPLEMENTATION OF A CONVOLUTIONAL NEURAL NETWORK IN FPGA BASED ON FIXED POINT CALCULATIONS

The latest research in the field of neural networks has shown that they cope well with a variety of tasks related to the classification and processing of images, audio and video data. The dimension and computational complexity during classification is so great that even powerful general-purpose CPUs cannot cope well with these computations. For high-grade work with modern neural networks powerful and therefore expensive GPU (video cards) are usually used. This is especially true for processing video information in real time. Some structures of neural networks, with very high accuracy of image classification, have properties that are easily transferred to the hardware platform. Since the requirements for hardware for working with neural networks are constantly growing, it is necessary to develop special hardware units for use in VLSI and FPGA. In this work, we propose to develop a set of hardware blocks and methods for implementing neural networks on FPGAs in order to accelerate the calculation and development of equipment for performing image classification tasks. It is assumed that at the input we already have a preconditioned neural network and we need to create a device that performs the classification operation. Initially, we are given both the structure and the weights of the neural network. A technique is proposed for the transition from a floating point model to a fixed-point calculation, without loss of classification accuracy. The implementation of the basic blocks of the test neural network in hardware is suggested. The results of experiments on a test convolutional neural network, trained on a set of MNIST images, are presented.

Сonvolutional neural nets; FPGA; fixed point calculations; 2D convolution.

* Работа выполнена при поддержке РНФ (проект № 17-19-01645). 186

Введение. Последние исследования в области нейронных сетей показали, что они хорошо справляются с множеством задач, связанных с классификацией и обработкой изображений, аудио и видео данных, причем в некоторых случаях даже лучше человека [1, 2]. Большинство современных архитектур имеют в своем составе convolution (свёрточные) блоки (например, VGG [1], Inception [3], ResNet [4], U-Net [5], DenseNet [6], SSD [7]). Такие сети называются convolutional neural nets (CNN). А размерность и вычислительная сложность во время классификации так велика, что с вычислениями плохо справляются даже мощные процессоры общего назначения CPU. Для полноценной работы с современными нейросетями используют мощные и как следствие дорогие GPU (видеокарты) [8]. Особенно это актуально для обработки видеоинформации в реальном времени.

Некоторые структуры нейросетей, например VGG16 или VGG19 при очень высокой точности классификации изображений, обладают свойствами, которые легко переносятся на аппаратную платформу:

1. Высокая регулярность - все слои имеют похожую структуру (Conv3x3, MaxPooling и Dense).

2. Маленькая размерность блока свёртки: 3х3.

3. Активация Relu (сравнение значения с 0), в отличие от популярных ранее функций активации Sigmoid и Tanh, обладающих большей вычислительной сложностью.

4. Из-за высокой регулярности, размер нейронной сети может гибко регулироваться. Например, за счёт разного числа блоков свёртки (чем их больше, тем быстрее будет работать нейронная сеть). В случае ПЛИС, например, это позволит прошивать одну и ту же нейронную сеть на разные кристаллы, с разной скоростью работы.

5. В большинстве фреймворков для работы с нейронными сетями есть реализация этих систем. Так же доступны веса этих нейросетей обученных на больших массивах данных (таких как ImageNet [9]). Применяя алгоритмы Transfer Learning [10], есть возможность переобучить эти нейронные сети под широкий набор других схожих задач классификации изображений. При этом структура сети не меняется, изменяется только набор весов.

Поскольку потребности в аппаратуре для работы с нейронными сетями постоянно растут, то требуется разработка специальных аппаратных блоков для использования в СБИС и ПЛИС для ускорения расчетов. Ускорение расчетов может достигаться за счёт:

1. Аппаратный блок для вычисления свёртки, работает быстрее, чем свертка, выполненная на программном уровне.

2. Переход от вычислений с плавающей запятой к фиксированной запятой

3. Уменьшение размерности вычислений с сохранением приемлемой точности.

4. Сокращение части нейронной сети с сохранением точности классификации.

В статье предлагается разработать набор аппаратных блоков и методов для

реализации нейронных сетей на ПЛИС и СБИС с целью ускорения вычисления и разработки аппаратуры для выполнения задач классификации изображений. Предполагается, что на входе мы уже имеем уже предобученную нейронную сеть и нам необходимо создать устройство, которое выполняет операцию классификации (inference). Т.е. изначально нам задана как структура, так и веса CNN.

Тестовая нейронная сеть со структурой VGG. Для реализации в аппаратном виде была выбрана нейронная сеть, которая максимально подходит для этой задачи из-за своей высокой регулярности, а именно VGG16 (или VGG19, которая отличается лишь числом свёрточных уровней). Однако эта сеть имеет очень высо-

кую размерность, и отлаживать на ней аппаратную реализацию было бы крайне трудно. В связи с этим была реализована тестовая сверточная нейросеть (сокр. ТСН) со структурой VGG, но с небольшим числом фильтров и уровней. Для реализации использовался Python с модулем Keras [11] - фреймворк для удобной работы с нейронными сетями.

Сеть была натренирована на известном наборе данных MNIST [12]. На вход сети подаются изображения в градиентах серого размером 28х28 пикселей, нормированные на диапазоне от 0 до 1 (яркость пикселя делится на 256). На выходе сеть определяет, какая из цифр от 0 до 9 изображена на картинке. Структура ТСН представлена на рис. 1.

zeropadding2d_iiiput_l

output:

zeropadding2d_l

output

couvohitioii2d_l

output:

zerop adding2d_2

output:

convolution2d_2

output

maxpooling2dl

output:

zerop adding2d_3

output:

couvolution2d_3

output:

zeropa dding2 d_4

output:

convoiu1iou2d_4

output:

maxpooling2d_2

output:

flatteu_l

output:

densel

output

c1ropout_l

output:

deuse_2

output:

dropout_2

output:

deuse_3

output:

Г

Рис. 1. Структурная схема нейронной сети ТСН

Сеть была обучена на всех данных MNIST и достигла после обучения точности в 98.34% процента. Эта сеть далее использовалась как математическая модель для сравнения результатов с аппаратной реализацией.

Сеть содержит в себе только блоки, которые включают в себя операции сложения, умножения и сравнения с нулём (в качестве активации на выходе каждого блока используется RELU [13]). Только на последнем слое используется функция активации Sigmoid, которая предполагает вычисление экспоненты, но если нам требуется найти наиболее вероятное значение на выходе, то мы можем использовать операцию нахождение максимума.

Перевод вычислений от плавающей точки к фиксированной точке.

В нейронных сетях вычисления традиционно проводятся с плавающей точкой на GPU (быстро) или CPU (медленно), например, с использованием типа float32. При реализации на аппаратном уровне, вычисления с плавающей точкой работают медленнее, чем с фиксированной точкой из-за сложностей с контролем мантиссы и показателя степени при различных операциях [14].

Рассмотрим первый слой нейросети типа Convolution (рис. 2) - в большинстве свёрточных нейросетей этот блок является основным. Мы не учитываем слой ZeroPadding, который просто добавляет ободок из нулей вокруг картинки, что бы слой Convolution нормально отрабатывал на границе картинки.

0 0 0 0 0 0 0

0 0 0 0 0 0 0

Рис. 2. Схематическое изображение операции Convolution

На входе слоя находится двухмерная матрица (исходная картинка) 28х28 (30х30 с учетом ZeroPadding), значения которой находятся на интервале [0; 1).

Известно так же, что если а 6 [ — 1 ; 1 ] и Ь £ [—1 ; 1 ] то а*й£ [—1 ; 1 ]

Формула для расчета конкретного пикселя в позиции (i,y) второго слоя с учетом того что используется Convolution с размером 3х3: пу = Ь +

w00 * Vi-ij-1 + woi * Pi-ij+0 + w02 * Vi-ij+1 + Wio * Pi+oj-i + Wn * Pi+oj+o + w12 * Pi+oj+i + W20 * Pi+1,]-1 + W21 * Pi+lJ+O + W22 * Pi+lJ + 1-

Поскольку веса Wy и смещение Ь известны, то можно рассчитать потенциальный минимум шп и максимум шх на втором слое. Пусть М = m ах ( | шх | , | шп | ) . Если разделить Wy и Ь на значение М, то мы можем гарантировать, что при любой конфигурации входных данных, значение на втором слое не превысит 1.

Для представления чисел размерности N бит будем использовать следующую нотацию:

хЬ = [х-2 WJ.

Если , тогда сложение

[ (х + у) * 2 WJ = [z * 2 WJ = [zb J .

Умножение z ' = хЬ - уЬ = [х - 2WJ - [у - 2 WJ = [ (х - у) - 2 N - 2 WJ = [z - 2 N -2N =zt-2N, т.е. после умножения требуется разделить результат на 2N, что бы получить реальное значение. Или же просто выполнить сдвиг на N позиций.

Слой Dense (рис. 3) представляет собой более общий случай Convolution. Умножение и сложение выполняется по схеме каждый с каждым. Такие же рассуждения можно применить и для слоя типа Dense (по-другому полносвязный или Fully Connected слой). В этом слое каждый входной нейрон связан с каждым выходным нейроном.

Рис. 3. Структура Dense слоя

В слое MaxPooling [15] отсутствуют арифметические операции. Используется только тривиальная для аппаратной реализации - операция взятия максимума от значений 4 соседних пикселей.

Рис. 4. Схема операции Max Pooling. Слева исходное изображение, справа

полученное

На всех слоях кроме последнего используется функция активации RELU: fix) = max(0, х) (рис. 5).

Рис. 5. График функции активации RELU

При переходе от плавающей точки к фиксированной точке неизбежно теряется точность вычислений при округлении. В случае нейронной сети ошибка накапливается от слоя к слою. Важно, что бы полученный классификатор выдавал одинаковые значения на математической модели с плавающей точкой и с фиксированной точкой. Для этого был поставлен эксперимент. Был посчитан процент не-

совпадений значений на выходе нейронной сети для обеих математических моделей. После некоторой размерности, ошибка стала равна 0. То есть найдено оптимальное количество бит для получения абсолютно точного значения классификатора (рис. 6). При этом можно зафиксировать число бит меньше, если оборудование ограничено, а точность классификатора можно уменьшить. Например, для ТСН при размерности 17 бит погрешность классификатора не превышает 2 %.

Финальная размерность весов и промежуточных вычислений с фиксированной точкой зависят от следующих факторов:

1. Чем меньше разброс весов для слоя относительно 0, тем меньше корректирующий коэффициент.

2. Чем меньше общее число слоёв в нейросети, тем меньше размерность потребуется, т.к. потери точности вычислений растут от слоя к слою.

Для ТСН коэффициенты, на которые делятся веса и смещения (и как следствие приводят к потере точности), приведены в табл. 1. Коэффициенты рассчитаны таким образом, что бы их использование не приводило к переполнению ни при каких возможных входных данных.

Ошибка в процентах

17 18 19 20 21 22 23

Рис. 6. Ошибка классификации ТСН на тестовом наборе из 1000 картинок

Как показали эксперименты, следует избегать Dense слоёв в структуре нейронной сети в случае аппаратной реализации, по двум причинам. Во-первых, очень большое число весов, которые требуется хранить и извлекать из памяти, что ведёт к увеличению времени счёта. Во-вторых, из-за большого числа умножений и сложений на этом слое набегает ошибка больше чем в Convolution слоях. Для перехода от Dense слоёв к Conolution существуют специальные техники [16].

Таблица 1

Коэффициенты редукции для ТСН

Слой Коэффициент редукции Коэффициент редукции

весов смещения

Convolution 1 3.617 3.617

Convolution 2 3.439 12.438

Convolution 3 4.105 51.061

Convolution 4 6.707 342.466

Dense 1 7.867 2694.181

Dense 2 3.341 9001.258

Dense 3 3.963 35671.988

Структура ПЛИС. Тестирование проводилось на небольшой «студенческой» тестовой плате De0Nano. Общая структура платы и внешних устройств приведена на рис. 7.

Рис. 7. Отладочная плата DEONano и внешние устройства

Начальные данные, такие как входная картинка и веса для нейронной сети хранятся во внешней RAM памяти. В общем случае для больших сетей, таких как VGG16 и т.д. может потребоваться несколько сотен Мбайт оперативной памяти, поэтому хранить веса во внутренней памяти даже большой коммерческой ПЛИС будет невозможно. Минус внешней памяти заключается в низкой скорости обмена данными. За один такт обычно можно извлечь не более 8 или 16 бит. К плюсам, можно отнести, почти неограниченный объем.

Для малых CNN веса можно хранить во внутренней памяти, но внутренняя память так же используется для хранения промежуточных вычислений, что может привести к тому, что проект просто не пройдёт компиляцию из-за нехватки памяти.

Плюс внутренней RAM памяти - это возможность обращаться сразу к большим её блокам, что очень хорошо для выполнения операций свёртки. Во-первых, операцию свёртки возможно выполнить за один такт, используя сразу блок из 9 пикселов. Во-вторых, при наличии нескольких доступных свёрточных блоков, можно за 1 такт выполнить сразу несколько свёрток. Тем самым в десятки раз увеличивается производительность.

Структура памяти RAM

Картинка для обработки [28x28 строк]

Веса первый слой

Веса второй слой

Веса последний слой

Смещение

Рис. 8. Хранение данных во внешней RAM памяти

Структура устройства на базе универсального Convolution блока. Для реализации нейронной сети можно использовать специализированный Convolution блок, который за один так выполняет свёртку размерности 3х3 (можно сделать такой же

блок для других размерностей 4х4, 5х5 и.т.д. в случае если они присутствуют в нейронной сети). Блок представляет собой скалярное произведение векторов и содержит 9 умножений и 8 сложений. Этот же блок можно использовать для вычисления на Dense слое разбив весь набор сложений и умножения на блоки по 9 нейронов.

Для увеличения производительности, в случае наличия свободного места в ПЛИС, количество блоков свёртки можно увеличить, тем самым кратно увеличивая производительность. Рассмотрим второй свёрточный блок в ТСН. На входе слоя 4 картинки размером 28х28, дано 16 блоков весов. Что бы рассчитать набор выходных изображений слоя, так же состоящих из 4 изображений, то для одного и того же набора пикселов потребуется выполнить четыре умножения на разные наборы весов. На это потребуется не менее 4 тактов при условии наличия лишь одного блока свёртки, но если таких блоков будет 4, то потребуется лишь один такт, тем самым скорость расчета Convolution слоя вырастет в 4 раза.

Реализация на базе Convolution блоков предполагает интенсивный обмен с памятью и требует хранить большее число весов во внешней RAM.

Структура устройства на базе мультиконстантного умножителя. Если требуется минимизировать объем памяти и уменьшить число операций и в наличии осталось свободное место в ПЛИС. В этом случае для реализации отдельного Convolution блока можно использовать подход на базе MCM (Multiconstant Multiplier). Этот блок для входного числа X считает набор выражений: X*M1, X*M2, ..., X*MN. Для реализации подобного блока существуют высокоэффективные методы, позволяющие обойтись только сложениями, вычитаниями и сдвигами [17-20]. При этом при некоторых сочетаниях констант эти блоки могут быть крайне эффективными и занимать мало площади.

В случае подхода на базе MCM, Convolution блок реализуется отдельно для каждого слоя. И работает он только для его расчета. Например, рассмотрим первый блок ТСН. На данном слое выполняется преобразование входной картинки, в 4 картинки на выходе. Для этого используется 4 фильтра размером 3х3. По сути каждый пиксел картинки требуется один раз умножить на каждую константу, присутствующую в каждом фильтре и положить в соответствующее место памяти.

В данном случае память для выходного слоя сначала заполняется нулями. Далее последовательно проходим по всем пикселам входной картинки и прибавляем полученные значения к соответствующей ячейке выходной картинки. Пример приведён на рис. 9.

Рис. 9. Умножение пикселя одновременно на 18 констант и прибавление результата к выходным изображениям в соответствующих местах

Дополнительная оптимизация расчетов. Для увеличения производительности был применен ряд методик, которые позволили сократить количество тактов требуемых для классификации одного изображения:

Сдвиговый регистр

Для выполнения элементарной операции свёртки требуется получить значения 9 соседних пикселей с входного изображения. Затем следующие 9 пикселей, 6 из которых уже были получены на прошлом шаге (рис. 10).

Для сокращения времени вызова необходимых данных был разработан сдвиговый регистр, сохраняющий при поступлении в него новые данные и «выталкивающий» из себя в это же время старые. Таким образом, каждый шаг требуется получить лишь 3 новых значения вместо 9.

Рис. 10. Механизм работы сдвигового регистра. Синим цветом изображены данные, полученные на предыдущем шаге для предыдущей свёртки

Хранение всех данных для одной операции Convolution по одному адресу

При вызове необходимых для расчетов данных, на каждое значение тратится один такт. Поэтому чтобы сократить время, затрачиваемое на загрузку нужных данных, а также удобства обращения к ним, перед тем как положить во внутреннюю память ПЛИС данные укладываются вместе в блоки по 9 штук и после доступны по одному адресу во внутренней памяти. И в отличие от внешней RAM, ПЛИС позволяет получить содержимое за один такт. Пример приведён на рис. 11.

23 23 23 23 23 23 23 23 23

бита бита бита бита бита бита бита бита бита

207 бит

Рис. 11. Хранение всех весов слоя в виде одного блока

Разбиение вычислений Dense слоя на несколько независимых частей

Самое большое число весов приходится на полносвязные Dense слои. Изначально они хранятся в RAM. Из-за малого объема внутренней памяти ПЛИС. Поэтому извлекать их все перед началом вычисления слоя не всегда возможно. Для этого был разработан механизм, который позволяет выполнять извлечение весов и выполнение операций по частям.

Экспериментальные результаты. Финальные параметры аппаратной реализации тестовой нейронной сети на 4 свёрточных блоках:

♦ Число занятых ячеек: 16481 из 22320 (74 %);

♦ Используемая внутренняя память: 292К из 608К (48 %);

♦ Число тактов на обработку одного изображения: 108250;

♦ Тактовая частота устройства: 35 МГц;

♦ Скорость обработки: примерно 300 кадров в секунду.

Таблица 2

Зависимость занятой ёмкости ПЛИС для одного слоя в зависимости от размерности весов и данных

26 бит 22 бита

Логические ячейки, шт 20655 12336

Внутренняя память, бит 368703 273066

Таблица 3 Сравнение реализации слоя на размерности 26 бит на базе одного свёрточного вычислительного блока без оптимизации и слоя размерности 22 бит с четырьмя свёрточными вычислительными блоками

1 conv блок, 26 бит 4 conv блока, 22 бита

Логические ячейки 6999 16481

Embedded Multiplier 9-bit elements 66 132

Занято памяти, бит 364338 292974

Затрачено тактов для первого слоя 40769 3156

Максимальная частота, МГц 23 35

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Very Deep Convolutional Networks for Large-Scale Image Recognition. - https://arxiv.org/pdl/ 1409.1556v6.pdf.

2. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. - http://arxiv.org/abs/1502.01852.

3. Going Deeper with Convolutions. - http://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf.

4. Deep Residual Learning for Image Recognition. - http://arxiv.org/abs/1512.03385.

5. U-Net: Convolutional Networks for Biomedical Image Segmentation. - http://arxiv.org/ abs/1505.04597.

6. Iandola F. et al. Densenet: Implementing efficient convnet descriptor pyramids // arXiv preprint arXiv:1404.1869. - 2014.

7. Liu W. et al. Ssd: Single shot multibox detector // European conference on computer vision.

- Springer, Cham, 2016. - P. 21-37.

8. Benchmarks for popular CNN models. - https://github.com/jcjohnson/cnn-benchmarks.

9. Krizhevsky A., Sutskever I., Hinton G.E. Imagenet classification with deep convolutional neural networks //Advances in neural information processing systems. - 2012. - P. 1097-1105.

10. Jason Yosinski, Jeff Clune, Yoshua Bengio, HodLipson. How transferable are features in deep neural networks? - https://arxiv.org/abs/1411.1792.

11. Keras: Deep Learning library for Theano and TensorFlow. - https://keras.io/.

12. LeCun Y., Bottou L., Bengio Y., and Haffner P. Gradient-based learning applied to document recognition // Proceedings of the IEEE. - November 1998. - Vol. 86 (11). - P. 2278-2324.

13. Nair V., Hinton G.E. Rectified linear units improve restricted boltzmann machines // Proceedings of the 27th international conference on machine learning (ICML-10). - 2010. - P. 807-814.

14. Govindu G. et al. Analysis of high-performance floating-point arithmetic on FPGAs //Parallel and Distributed Processing Symposium, 2004. Proceedings. 18th International. - IEEE, 2004.

- С. 149.

15. Graham B. Fractional max-pooling // arXiv preprint arXiv:1412.6071. - 2014.

16. Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun. Deep Residual Learning for Image Recognition // arXiv preprint arXiv:1512.03385. - https://arxiv.org/pdf/1512.03385.pdf.

17. Oudjida A.K., Liacha A., Bakiri M., and Chaillet N. Multiple Constant Multiplication Algorithm for High Speed and Low Power Design // IEEE Trans. on Circuits and Systems (TCAS II). - February 2016. - Vol. 63, No. 2. - P. 176-180,

18. Liacha A. et al. A variable RADIX-2 r algorithm for single constant multiplication // New Circuits and Systems Conference (NEWCAS), 2017 15th IEEE International. - IEEE, 2017. - P. 265-268.

19. Liacha A. et al. Design of High-Speed, Low-Power, and Area-Efficient FIR Filters // IET Circuits, Devices & Systems. - 2017.

20. Zeinolabedin S.M.A., Zhou J., Kim T.T.H. A Power and Area Efficient Ultra-Low Voltage Laplacian Pyramid Processing Engine With Adaptive Data Compression // IEEE Transactions on Circuits and Systems I: Regular Papers. - 2016. - Vol. 63, No. 10. - P. 1690-1700.

REFERENCES

1. Very Deep Convolutional Networks for Large-Scale Image Recognition. Available at: https://arxiv.org/pdf/1409.1556v6.pdf.

2. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. Available at: http://arxiv.org/abs/1502.01852.

3. Going Deeper with Convolutions. Available at: http://www.cs.unc.edu/~wliu/papers/ GoogLeNet.pdf.

4. Deep Residual Learning for Image Recognition. Available at: http://arxiv.org/abs/1512.03385.

5. U-Net: Convolutional Networks for Biomedical Image Segmentation. Available at: http://arxiv.org/abs/1505.04597.

6. Iandola F. et al. Densenet: Implementing efficient convnet descriptor pyramids, arXiv preprint arXiv:1404.1869, 2014.

7. Liu W. et al. Ssd: Single shot multibox detector, European conference on computer vision. Springer, Cham, 2016, pp. 21-37.

8. Benchmarks for popular CNN models. Available at: https://github.com/jcjohnson/cnn-benchmarks.

9. Krizhevsky A., Sutskever I., Hinton G.E. Imagenet classification with deep convolutional neural networks, Advances in neural information processing systems, 2012, pp. 1097-1105.

10. Jason Yosinski, Jeff Clune, Yoshua Bengio, HodLipson. How transferable are features in deep neural networks? Available at: https://arxiv.org/abs/1411.1792.

11. Keras: Deep Learning library for Theano and TensorFlow. Available at: https://keras.io/.

12. LeCun Y., Bottou L., Bengio Y., and Haffner P. Gradient-based learning applied to document recognition, Proceedings of the IEEE, November 1998, Vol. 86 (11), pp. 2278-2324.

13. Nair V., Hinton G.E. Rectified linear units improve restricted boltzmann machines, Proceedings of the 27th international conference on machine learning (ICML-10), 2010, pp. 807-814.

14. Govindu G. et al. Analysis of high-performance floating-point arithmetic on FPGAs, Parallel and Distributed Processing Symposium, 2004. Proceedings. 18th IEEE International. IEEE, 2004, pp. 149.

15. Graham B. Fractional max-pooling, arXivpreprintarXiv:1412.6071, 2014.

16. Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun. Deep Residual Learning for Image Recognition // arXiv preprint arXiv:1512.03385. Available at: https://arxiv.org/pdf/ 1512.03385.pdf.

17. Oudjida A.K., Liacha A., Bakiri M., and Chaillet N. Multiple Constant Multiplication Algorithm for High Speed and Low Power Design, IEEE Trans. on Circuits and Systems (TCAS II), February 2016, Vol. 63, No. 2, pp. 176-180,

18. Liacha A. et al. A variable RADIX-2 r algorithm for single constant multiplication, New Circuits and Systems Conference (NEWCAS), 2017 15th IEEE International. IEEE, 2017, pp. 265-268.

19. Liacha A. et al. Design of High-Speed, Low-Power, and Area-Efficient FIR Filters, IET Circuits, Devices & Systems, 2017.

20. Zeinolabedin S.M.A., Zhou J., Kim T.T.H. A Power and Area Efficient Ultra-Low Voltage Laplacian Pyramid Processing Engine With Adaptive Data Compression, IEEE Transactions on Circuits and Systems I: Regular Papers, 2016, Vol. 63, No. 10, pp. 1690-1700.

Статью рекомендовал к опубликованию д.т.н., профессор Ю.Ф. Адамов.

Соловьев Роман Александрович - Институт проблем проектирования в микроэлектронике РАН; e-mail: turbo@ippm.ru; 124365, Москва, Зеленоград, ул. Советская, 3; тел.: +74997299890; в.н.с.; к.т.н.

Кустов Александр Георгиевич - e-mail: custow.alexandr@yandex.ru; стажёр-исследователь.

Рухлов Владимир Сергеевич - e-mail: vladimir.rukhlov@ippm.ru; м.н.с.

Щелоков Альберт Николаевич - e-mail: schan@ippm.ru; с.н.с.; к.ф.-м.н.; доцент.

Пузырьков Дмитрий Валериевич - Институт прикладной математики им. М.В. Келдыша РАН; e-mail: dpuzyrkov@gmail.com; 125047, Москва, Миусская пл., 4; тел.:+79057285780; аспирант.

Solovyev Roman Alexandrovich - The Institute for Design Problems in Microelectronics (IPPM RAS); e-mail: turbo@ippm.ru; 124365, Moscow, Zelenograd, Sovetskaya street, 3; рhone: +74997299890; leading researcher; cand. of eng. sc.

Kustov Alexander Georgievich - e-mail: custow.alexandr@yandex.ru; junior researcher. Rukhlov Vladimir Sergeevich - e-mail: vladimir.rukhlov@ippm.ru; junior researcher.

Schelokov Albert Nikolaevich - e-mail: schan@ippm.ru; senior researcher; cand. of phis.-math.

sc.; associate professor.

Puzyrkov Dmitry Valerievich - Keldysh Institute of Applied Mathematics of Russian Academy of Sciences; e-mail: dpuzyrkov@gmail.com; 4, Miusskaya sq., Moscow, 125047, Russia; phone: +79057285780; postgraduate student.

УДК 621.3.049.771.14

А.Л. Стемпковский, Д.В. Тельпухов, Т.Д. Жукова, С.И. Гуров, Р.А. Соловьев

МЕТОДЫ СИНТЕЗА СБОЕУСТОЙЧИВЫХ КОМБИНАЦИОННЫХ КМОП СХЕМ, ОБЕСПЕЧИВАЮЩИХ АВТОМАТИЧЕСКОЕ ИСПРАВЛЕНИЕ ОШИБОК

В настоящее время актуальность исследований в области повышения надежности функционирования микроэлектронных систем неуклонно возрастает. Во многом это связано с непрекращающейся миниатюризацией, приводящей к снижению порога воздействия, необходимого для возникновения сбоев и отказов. Одним из возможных решений этой проблемы может служить подход, связанный с исправлением возникающих в процессе работы ошибок. Для решения задачи автоматической коррекции ошибок, возникающих при сбоях комбинационных схем, существует подход, связанный с применением избыточного кодирования информации. Построение самопроверяемых схем - является традиционным подходом по решению поставленной проблемы. Самокорректируемость обеспечивается созданием в дополнение к основной функциональной схемы контролирующей и обнаруживающей, часто приводящее к возникновению слишком большой задержки времени получения результата. Это направление представляется весьма перспективным и является сейчас объектом интенсивных исследований, однако в настоящее время отсутствует четко сформулированные принципы построения таких схем. В статье рассмотрены базовые принципы построения самокорректируемых схем на базе методов избыточного кодирования, проанализированы различные помехоустойчивые коды с точки зрения применения их в области построения самокорректируемых комбинационных схем, а также разработаны общие рекомендации по использованию помехоустойчивых кодов в задаче построения сбоеустойчивых комбинационных схем. Также в статье предложен метод синтеза сбоеустойчивых КМОП схем на основе битовых пространств Хэмминга. Суть метода заключается в замене элементарных булевых вентилей на их сбоеустойчивые аналоги, обеспечивая коррекцию ошибок на каждом вентиле схемы. Предлагаемый метод эксплуатирует идею селективной защиты на уровне отдельных вентилей, однако имеет существенные отличия от