{'fraction_non_alphanumeric': 0.038774793190456416, 'fraction_numerical': 0.013702130377846625, 'mean_word_length': 4.622194289818639, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

We propose two efficient approximations to standard convolutional neural networks: Binary-Weight-Networks and XNOR-Networks. In Binary-Weight-Networks, the filters are approximated with binary values resulting in 32x memory saving. In XNOR-Networks, both the filters and the input to convolutional layers are binary. XNOR-Networks approximate convolutions using primarily binary operations. This results in 58x faster convolutional operations and 32x memory savings. XNOR-Nets offer the possibility of running state-of-the-art networks on CPUs (rather than GPUs) in real-time. Our binary networks are simple, accurate, efficient, and work on challenging visual tasks. We evaluate our approach on the ImageNet classification task. The classification accuracy with a Binary-Weight-Network version of AlexNet is only 2.9% less than the full-precision AlexNet (in top-1 measure). We compare our method with recent network binarization methods, BinaryConnect and BinaryNets, and outperform these methods by large margins on ImageNet, more than 16% in top-1 accuracy.


Introduction
Deep neural networks (DNN) have shown significant improvements in several application domains including computer vision and speech recognition. In computer vision, a particular type of DNN, known as Convolutional Neural Networks (CNN), have demonstrated state-of-the-art results in object recognition [1,2,3,4] and detection [5,6,7].
Convolutional neural networks show reliable results on object recognition and detection that are useful in real world applications. Concurrent to the recent progress in recognition, interesting advancements have been happening in virtual reality (VR by Oculus) [8], augmented reality (AR by HoloLens) [9], and smart wearable devices. Putting these two pieces together, we argue that it is the right time to equip smart portable devices with the power of state-of-the-art recognition systems. However, CNNbased recognition systems need large amounts of memory and computational power. While they perform well on expensive, GPU-based machines, they are often unsuitable for smaller devices like cell phones and embedded electronics.
For example, AlexNet [1] has 61M parameters (249MB of memory) and performs 1.5B high precision operations to classify one image. These numbers are even higher for deeper CNNs e.g.,VGG [2] (see section 4.1). These models quickly overtax the limited storage, battery power, and compute capabilities of smaller devices like cell phones.
In this paper, we introduce simple, efficient, and accurate approximations to CNNs by binarizing the weights and even the intermediate representations in convolutional neural networks. Our binarization method aims at finding the best approximations of the convolutions using binary operations. We demonstrate that our way of binarizing neural networks results in ImageNet classification accuracy numbers that are comparable to standard full precision networks while requiring a significantly less memory and fewer floating point operations.
We study two approximations: Neural networks with binary weights and XNOR-Networks. In Binary-Weight-Networks all the weight values are approximated with binary values. A convolutional neural network with binary weights is significantly smaller (∼ 32×) than an equivalent network with single-precision weight values. In addition, when weight values are binary, convolutions can be estimated by only addition and subtraction (without multiplication), resulting in ∼ 2× speed up. Binary-weight approximations of large CNNs can fit into the memory of even small, portable devices while maintaining the same level of accuracy (See Section 4.1 and 4.2).
To take this idea further, we introduce XNOR-Networks where both the weights and the inputs to the convolutional and fully connected layers are approximated with binary values 1 . Binary weights and binary inputs allow an efficient way of implementing convolutional operations. If all of the operands of the convolutions are binary, then the convolutions can be estimated by XNOR and bitcounting operations [11]. XNOR-Nets result in accurate approximation of CNNs while offering ∼ 58× speed up in CPUs. This means that XNOR-Nets enable real-time inference in devices with small memory and no GPUs (Inference in XNOR-Nets can be done very efficiently on CPUs).
To the best of our knowledge this paper is the first attempt to present an evaluation of binary neural networks on large-scale datasets like ImageNet. Our experimental results show that our proposed method for binarizing convolutional neural networks outperforms the state-of-the-art network binarization method of [11] by a large margin (16.3%) on top-1 image classification in the ImageNet challenge ILSVRC2012. Our contribution is two-fold: First, we introduce a new way of binarizing the weight values in convolutional neural networks and show the advantage of our solution compared to state-of-the-art solutions. Second, we introduce XNOR-Nets, a deep neural network model with binary weights and binary inputs and show that XNOR-Nets can obtain similar classification accuracies compared to standard networks while being significantly more efficient.

Related Work
Deep neural networks often suffer from over-parametrization and large amounts of redundancy in their models. This typically results in inefficient computation and memory usage [12]. Several methods have been proposed to address efficient training and inference in deep neural networks.
Shallow networks: Estimating a deep neural network with a shallower model reduces the size of a network. Early theoretical by Cybenko shows a network with a large enough single hidden layer of sigmoid units can approximate any decision boundary [13]. In several areas (e.g.,vision and speech), however, shallow networks cannot compete with the deep models [14]. [15] trains a shallow network on SIFT features to classify the ImageNet dataset. They show it is difficult to train shallow networks with large number of parameters. [16] provides empirical evidence on small datasets (e.g.,CIFAR-10) that shallow nets are capable of learning the same functions as deep nets. In order to get the similar accuracy, the number of parameters in the shallow network must be close to the number of parameters in the deep network. They do this by first training a state-of-the-art deep model, and then training a shallow model to mimic the deep model. These methods are different from our approach because we use the standard deep architectures not the shallow estimations.
Compressing pre-trained deep networks: Pruning redundant, non-informative weights in a previously trained network reduces the size of the network at inference time. Weight decay [17] was an early method for pruning a network. Optimal Brain Damage [18] and Optimal Brain Surgeon [19] use the Hessian of the loss function to prune a network by reducing the number of connections. Recently [20] reduced the number of parameters by an order of magnitude in several state-of-the-art neural networks by pruning. [21] proposed to reduce the number of activations for compression and acceleration. Deep compression [22] reduces the storage and energy required to run inference on large networks so they can be deployed on mobile devices. They remove the redundant connections and quantize weights so that multiple connections share the same weight, and then they use Huffman coding to compress the weights. HashedNets [23] uses a hash function to reduce model size by randomly grouping the weights, such that connections in a hash bucket use a single parameter value. Matrix factorization has been used by [24,25]. We are different from these approaches because we do not use a pretrained network. We train binary networks from scratch.
Designing compact layers: Designing compact blocks at each layer of a deep network can help to save memory and computational costs. Replacing the fully connected layer with global average pooling was examined in the Network in Network architecture [26], GoogLenet [3] and Residual-Net [4], which achieved state-of-the-art results on several benchmarks. The bottleneck structure in Residual-Net [4] has been proposed to reduce the number of parameters and improve speed. Decomposing 3 × 3 convolutions with two 1 × 1 is used in [27] and resulted in state-of-the-art performance on object recognition. Replacing 3 × 3 convolutions with 1 × 1 convolutions is used in [28] to create a very compact neural network that can achieve ∼ 50× reduction in the number of parameters while obtaining high accuracy. Our method is different from this line of work because we use the full network (not the compact version) but with binary parameters.
Quantizing parameters: High precision parameters are not very important in achieving high performance in deep networks. [29] proposed to quantize the weights of fully connected layers in deep network by vector quantization techniques. They showed just thresholding the weight values at zero only decreases the top-1 accuracy on ILSVRC2012 by less than %10. [30] proposed a provably polynomial time algorithm for training a sparse networks with +1/0/-1 weights. A fixedpoint implementation of 8-bit integer was compared with 32-bit floating point activations in [31]. Another fixed-point network with ternary weights and 3-bits activations presented by [32]. Quantizing a network with L 2 error minimization achieved better accuracy on MNIST and CIFAR-10 datasets in [33]. Back-propagation process by quantizing the representations at each layer of the network was presented in [34] to convert some of the remaining multiplications into binary shifts by restricting the neuron values of power-of-two integers. They carry the full precision weights during the test phase, and only quantize the neurons during the back-propagation process, and not during the forward-propagation. Our work is similar to these methods since we are quantizing the parameters in the network. But our quantization is the extreme scenario +1,-1.
Network binarization: These are the most related work to our approach. Several methods attempt to binarize the weights and the activations in neural networks.The performance of highly quantized networks (e.g.,binarized) were believed to be very poor due to the destructive property of binary quantization [35]. Expectation BackPropagation (EBP) in [36] showed high performance can be achieved by a network with binary weights and binary activations. This is done by a variational Bayesian approach, that infers networks with binary weights and neurons. A fully binary network at run time presented in [37] using a similar approach to EBP, showing significant improvement in energy efficiency. In EBP the binarized parameters were only used during inference. BinaryConnect [38] extended the probablistic idea behind the EBP. Similar to our approach, BinaryConnect uses the real-valued version of the weights as a key reference for the binarization process. The real-valued weight updated using the back propagated error by simply ignoring the binarization in the update. BinaryConnect achieved state-ofthe-art results on small datasets (e.g.,CIFAR-10, SVHN). Our experiments shows that this method is not very successful on large-scale datsets (e.g.,ImageNet). The exten-tion of BinaryConnect propsed by BinaryNet [11], where both weights and activations are binarized. Our method is different from them in the binarization method and the network structure. We also compare our method with BinaryNet on ImageNet, and our method outperforms BinaryNet by large margin. [39] argued that the noise introduced by weight binarization provide a form of regularization, which could help to improve test accuracy. This method binarizes weights while maintaining full precision activation. [40] proposed fully binary training and testing in an array of committee machines with randomized input. [41] retraine a previously trained neural network with binary weights and binary inputs.

Binary Convolutional Neural Network
We represent an L-layer CNN architecture with a triplet I, W, * . I is a set of tensors, where each element I = I l(l=1,...,L) is the input tensor for the l th layer of CNN (Green cubes in figure 1). W is a set of tensors, where each element in this set W = W lk(k=1,...,K l ) is the k th weight filter in the l th layer of the CNN. K l is the number of weight filters in the l th layer of the CNN. * represents a convolutional operation with I and W as its operands 2 . I ∈ R c×win×hin , where (c, w in , h in ) represents channels, width and height respectively.W ∈ R c×w×h , where w ≤ w in , h ≤ h in . We propose two variations of binary CNN: Binary-weights, where the elements of W are binary tensors and XNOR-Networks, where elements of both I and W are binary tensors.

Binary-Weight-Networks
In order to constrain a convolutional neural network I, W, * to have binary weights, we estimate the real-value weight filter W ∈ W using a binary filter B ∈ {+1, −1} c×w×h and a scaling factor α ∈ R + such that W ≈ αB. A convolutional operation can be appriximated by: where, ⊕ indicates a convolution without any multiplication. Since the weight values are binary, we can implement the convolution with additions and subtractions. The binary weight filters reduce memory usage by a factor of ∼ 32× compared to singleprecision filters. We represent a CNN with binary weights by I, B, A, ⊕ , where B is a set of binary tensors and A is a set of positive real scalars, such that B = B lk is a binary filter and α = A lk is an scaling factor and W lk ≈ A lk B lk Estimating binary weights: Without loss of generality we assume W, B are vectors in R n , where n = c × w × h. To find an optimal estimation for W ≈ αB, we solve the following optimization: by expanding equation 2, we have is also a constant because W is a known variable. Lets define c = W T W. Now, we can rewrite the equation 3 as follow: J(B, α) = α 2 n − 2αW T B + c. The optimal solution for B can be achieved by maximizing the following constrained optimization: (note that α is a positive value in equation 2, therefore it can be ignored in the maximization) This optimization can be solved by assigning In order to find the optimal value for the scaling factor α * , we take the derivative of J with respect to α and set it to zero: By replacing B * with sign(W) therefore, the optimal estimation of a binary weight filter can be simply achieved by taking the sign of weight values. The optimal scaling factor is the average of absolute weight values.
Training Binary-Weights-Networks: Each iteration of training a CNN involves three steps; forward pass, backward pass and parameters update. To train a CNN with binary weights (in convolutional layers), we only binarize the weights during the forward pass and backward propagation. For updating the parameters, we use the high precision (real-value) weights. Because, in gradient descend the parameter changes are tiny, binarization after updating the parameters ignores these changes and the training objective can not be improved. [11,38] also employed this strategy to train a binary network. Algorithm 1 demonstrates our procedure for training a CNN with binary weights. First, we binarize the weight filters at each layer by computing B and A. Then we call forward propagation using binary weights and its corresponding scaling factors, where all the convolutional operations are carried out by equation 1. Then, we call backward propagation, where the gradients are computed with respect to the estimated weight filters W. Lastly, the parameters and the learning rate gets updated by an update rule e.g.,SGD update with momentum or ADAM [42].
Once the training finished, there is no need to keep the real-value weights. Because, at inference we only perform forward propagation with the binarized weights.
Algorithm 1 Training an L-layers CNN with binary weights: Input: A minibatch of inputs and targets (I, Y), cost function C(Y,Ŷ), current weight W t and current learning rate η t . Output: updated weight W t+1 and updated learning rate η t+1 .
1: Binarizing weight filters: 2: for l = 1 to L do 3: for k th filter in l th layer do 4:

XNOR-Networks
So far, we managed to find binary weights and a scaling factor to estimate the realvalue weights. The inputs to the convolutional layers are still real-value tensors. Now, we explain how to binarize both weigths and inputs, so convolutions can be implemented efficiently using XNOR and bitcounting operations. This is the key element of our XNOR-Networks. In order to constrain a convolutional neural network I, W, * to have binary weights and binary inputs, we need to enforce binary operands at each step of the convolutional operation. A convolution consist of repeating a shift operation and a dot product. Shift operation moves the weight filter over the input and the dot product performs element-wise multiplications between the values of the weight filter and the corresponding part of the input. If we express dot product in terms of binary operations, convolution can be approximated using binary operations. Dot product between two binary vectors can be implemented by XNOR-Bitcounting operations [11]. In this section, we explain how to approximate the dot product between two vectors in R n by a dot product between two vectors in {+1, −1} n . Next, we demonstrate how to use this approximation for estimating a convolutional operation between two tensors.
Binary Dot Product: To approximate the dot product between X, W ∈ R n such that X T W ≈ βH T αB, where H, B ∈ {+1, −1} n and β, α ∈ R + , we solve the following optimization: We define Y ∈ R n such that Y i = X i W i , C ∈ {+1, −1} n such that C i = H i B i and γ ∈ R + such that γ = βα. The equation 7 can be written as: where 1 is an n-dimensional vector where all of its enteries are 1. 1 T can be factored out from the optimization and the optimal solutions can be achieved from equation 2 as follow Since |X i |, |W i | are independent, knowing that Y i = X i W i then, Binary Convolution: Convolving weight filter W ∈ R c×w×h (where w in w, h in h) with the input tensor I ∈ R c×win×hin requires computing the scaling factor β for all possible sub-tensors in I with same size as W. Two of these sub-tensors are illustrated in figure 2 (second row) by X 1 and X 2 . Due to overlaps between subtensors, computing β for all possible sub-tensors leads to a large number of redundant computations. To overcome this redundancy, first, we compute a matrix A = |I:,:,i| c , which is the average over absolute values of the elements in the input I across the channel. Then we convolve A with a 2D filter k ∈ R w×h , K = A * k, where ∀ij k ij = 1 w×h . K contains scaling factors β for all sub-tensors in the input I. K ij corresponds to β for a sub-tensor centered at the location ij (across width and height). This procedure is shown in the third row of figure 2. Once we obtained the scaling factor α for the weight and β for all sub-tensors in I (denoted by K), we can approximate the convolution between input I and weight filter W mainly using binary operations:  where indicates a convolutional operation using XNOR and bitcount operations, and indicates an element-wise matrix product. This is illustrated in the last row in figure 2. Note that the number of non-binary operations is very small compared to binary operations.
Training XNOR-Networks: A typical block in CNN contains several different layers. Figure 3 (left) illustrates a typical block in a CNN. This block has four layers in the following order: 1-Convolutional, 2-Batch Normalization, 3-Activation and 4-Pooling. Batch Normalization layer [43] normalizes the input batch by its mean and variance. The activation is an element-wise non-linear function (e.g.,Sigmoid, ReLU). The pooling layer applies any type of pooling (e.g.,max,min or average) on the input batch. Applying pooling on binary input results in significant loss of information. For example, max-pooling on binary input returns a tensor that most of its elements are equal to +1. Therefore, we put the pooling layer after the convolution. To further decrease the information loss due to binarization, we normalize the input before binarization. This ensures the data to hold zero mean, therefore, thresholding at zero leads to less quantization error. The order of layers in a block of binary CNN is shown in Figure 3(right).
The binary activation layer(BinActiv) computes K and sign(I) as explained in section 3.2. To compute the gradient for sign function q = sign(r), we follow the same approach as [11], where g r = g q 1 |r|≤1 . In the next layer (BinConv), given K and sign(I), we compute binary convolution by equation 11. Then at the last layer (Pool), we apply the pooling operations. We can insert a non-binary activation(e.g.,ReLU) after binary convolution. This helps when we use state-of-the-art networks (e.g.,AlexNet or VGG).
Once we have the binary CNN structure, the training algorithm would be the same as algorithm 1.

Experiments
We evaluate our method by analysing its efficiency and accuracy. We measure the efficiency by computing the speedup achieved by our binary convolution vs. standard convolution. To measure accuracy, we perform image classification on the large-scale ImageNet dataset. This paper is the first work that evaluates binary neural networks on the ImageNet dataset. Our binarization technique is general, we can use any CNN architecture. We evaluate AlexNet [1] and two deeper architectures in our experiments. We compare our method with two recent works on binarizing neural networks; BinaryConnect [38] and BinaryNet [11]. The classification accuracy of our binary-weight-network We also present an ablation study, where we evaluate the key elements of our proposed method; computing scaling factors and our block structure for binary CNN. We shows that our method of computing the scaling factors is important to reach high accuracy.

Efficiency Analysis
In an standard convolution, the total number of operations is cN W N I , where c is the number of channels, N W = wh and N I = w in h in . Our binary approximation of convolution (equation 11) has cN W N I binary operations and N I non-binary operations.
With the current generation of CPUs, we can perform 64 binary operations in one clock of CPU, therefore the speedup can be computed by The speedup depends on the channel size and filter size but not the input size. In figure 4-(b-c) we illustrate the speedup achieved by changing the number of channels and filter size. While changing one parameter, we fix other parameters as follow: c = 256, n I = 14 2 and n W = 3 2 (majority of convolutions in ResNet [4] architecture have this structure). Using our approximation of convolution we gain 62.27× theoretical speed up, but in our CPU implementation with all of the overheads, we achieve 58x speed up in one convolution. With the small channel size (c = 3) and filter size (N W = 1 × 1) the speedup is not considerably high. This motivates us to avoid binarization at the first and last layer of a CNN. In the first layer the chanel size is 3 and in the last layer the filter size is 1 × 1. A similar strategy was used in [11]. Figure 4-a shows the required memory for three different CNN architectures(AlexNet, VGG-19, ResNet-18) with binary and double precision weights. Binary-weight-networks are so small that can be easily fitted into portable devices.

Image Classification on ILSVRC2012
Now, we evaluate the performance of our proposed approach on the task of natural image classification. So far, in the literature, binary neural network methods have presented their evaluations on either limited domain or simplified datasets e.g.,CIFAR-10, MNIST, SVHN. To compare with state-of-the-art vision, we evaluate our method on ImageNet (ILSVRC2012). ImageNet has ∼1.2M train images from 1K categories and 50K validation images. The images in this dataset are natural images with reasonably high resolution in contrast to CIFAR and MNIST dataset, which have relatively small images. We report our classification accuracies using Top-1 and Top-5 measures. We adopt three different CNN architectures as our base architectures for binarization: AlexNet [1], Residual Networks (known as ResNet) [4], and a variant of GoogleNet [3].
AlexNet [1] is a CNN architecture with 5 convolutional layers and two fully-connected layers. This architecture was the first CNN architecture that showed to be successful on ImageNet classification task. This network has 61M parameters. We use AlexNet coupled with batch normalization layers [43]. We compare our Binary-weight-network (BWN) with BinaryConnect(BC) [38] and our XNOR-Networks(XNOR-Net) with Bi-naryNeuralNet(BNN) [11]. BinaryConnect(BC) is a method for training a deep neural Classification Accuracy(%) Binary-Weight Binary-Input-Binary-Weight Full-Precision BWN BC [11] XNOR-Net BNN [11] AlexNet[1] Top-1 Top-5 Top-1 Top-5 Top-1 Top-5 Top-1 Top-5 Top-1 Top-  network with binary weights during forward and backward propagations. Similar to our approach, they keep the real-value weights during the updating parameters step. Our binarization is different from BC. The binarization in BC can be either deterministic or stochastic. We use the deterministic binarization for BC in our comparisons because the stochastic binarization is not efficient. The same evaluation settings have been used and discussed in [11].
BinaryNeuralNet(BNN) is a neural network with binary weights and activations during inference and gradient computation in training. In concept, this is a similar approach to our XNOR-Network but the binarization method and the network structure in BNN is different from ours. Their training algorithm is similar to BC and they used deterministic binarization in their evaluations.
BC and BNN showed near state-of-the-art performance on CIFAR-10, MNIST, and SVHN dataset. In this paper we explore the possibility of obtaining near state-of-the-art results on a much larger and more challenging dataset (ImageNet).
Train: In each iteration of training, images are resized to have 256 pixel at their smaller dimension and then a random crop of 224 × 224 is selected for training. We run the training algorithm for 16 epochs with batche size equal to 512. We use negative-loglikelihood over the soft-max of the outputs as our classification loss function. In our implementation of AlexNet we do not use the Local-Response-Normalization(LRN) layer 3 . We use SGD with momentum=0.9 for updating parameters in BWN and BC. For XNOR-Net and BNN we used ADAM [42]. ADAM converges faster and usually achieves better accuracy for binary inputs [11]. The learning rate starts at 0.1 and we apply a learning-rate-decay=0.01 every 4 epochs.
Test: At inference time, we use the 224 × 224 center crop for forward propagation. Figure 5 demonstrates the classification accuracy for training and inference along the training epochs for top-1 and top-5 scores. The dashed lines represent training accuracy and solid lines shows the validation accuracy. In all of the epochs our method outperforms BC and BNN by large margin (∼17%). Table 1 compares our final accuracy with BC and BNN.
Residual Net [4] is a recent CNN architecture with large number of convolutional layers (varies from . This architecture achieved state-of-the-art performance in several tasks in computer vision, including object recognition and detection. We use the ResNet-18, which has 18 convolutional layers. Every two layers are connected by an   identity connection called short-cut. ResNet has three types of short-cut connections, which are named by A,B, and C. We use the type B in our experiments 4 . Train: In each training iteration, images are resized randomly between 256 and 480 pixel on the smaller dimension and then a random crop of 224 × 224 is selected for training. We run the training algorithm for 58 epochs with batch size equal to 256 images. The learning rate starts at 0.1 and we use the learning-rate-decay equal to 0.01 at epochs number 30 and 40. Test: At inference time, we use the 224 × 224 center crop for forward propagation. Figure 6 demonstrates the classification accuracy (Top-1 and Top-5) along the epochs for training and inference. The dashed lines represent training and the solid lines represent inference. Table 2 shows our final accuracy by BWN and XNOR-Net.

GoogleNet Variant
We experiment with a variant of GoogleNet [3] that uses a similar number of parameters and connections but only straightforward convolutions, no branching 5 . It has 21 convolutional layers with filter sizes alternating between 1 × 1 and 3 × 3.
Train: Images are resized randomly between 256 and 320 pixel on the smaller dimension and then a random crop of 224 × 224 is selected for training. We run the  scaling factors and specifying the right order for layers in a block of CNN with binary input. (a) demonstrates the importance of the scaling factor in training binary-weight-networks and (b) shows that our way of ordering the layers in a block of CNN is crucial for training XNOR-Networks. C,B,A,P stands for Convolutional, BatchNormalization, Acive function (here binary activation), and Pooling respectively.
training algorithm for 80 epochs with batch size of 128. The learning rate starts at 0.1 and we use polynomial rate decay, β = 4. Test: At inference time, we use a center crop of 224 × 224.

Ablation Studies
There are two key differences between our method and the previous network binariazation methods; the binararization technique and the block structure in our binary CNN. For binarization, we find the optimal scaling factors at each iteration of training. For the block structure, we order the layers in a block in a way that decreases the quantization loss for training XNOR-Net. Here, we evaluate the effect of each of these elements in the performance of the binary networks. Instead of computing the scaling factor α using equation 6, one can consider α as a network parameter. In other words, a layer after binary convolution multiplies the output of convolution by an scalar parameter for each filter. This is similar to computing the affine parameters in batch normalization. Table 3-a compares the performance of a binary network with two ways of computing the scaling factors. As we mentioned in section 3.2 the typical block structure in CNN is not suitable for binarization. Table 3-b compares the standard block structure C-B-A-P (Convolution, Batch Normalization, Activation, Pooling) with our structure B-A-C-P. (A, is binary activation).

Conclusion
We introduce simple, efficient, and accurate binary approximations for neural networks.
We train a neural network that learns to find binary values for weights, which reduces the size of network by ∼ 32× and provide the possibility of loading very deep neural networks into portable devices with limited memory. We also propose an architecture, XNOR-NET, that uses mostly bitwise operations to approximate convolutions. This provides ∼ 58× speed up and enables the possibility of running the inference of state of the art deep neural network on CPU (rather than GPU) in real-time.