# Single-Shot Object Detection with Split and Combine Blocks
## 3 Method  
### Split and Combine Block  
A split-and-combine block is a unit for enhancing feature fusion that can be directly integrated directly into other architectures by inserting it after the nonlinear activation layers. We expect to improve the quality of output feature maps by ranking the feature information according to its importance. There is no down-sampling or up-sampling operation in the SC block, and the feature maps have a constant resolution. As illustrated in Figure 1, first, the input feature maps \(X\in C\times H\times W\) pass through a non-linear transformation \(T(.)\) to modify the dimensions, and new feature maps \(X^{\prime}\in C^{\prime}\times H\times W\) is obtained. We only compress the channel dimension to reduce computation load. For model efficiency, we simplify the structure of \(T(.)\), which is composed of a convolutional layer, a normalization layer, and a nonlinear activation layer. In the split procedure that follows, we split \(X^{\prime}\) into \(w\) parts, described as \(X^{\prime}_{0},X^{\prime}_{1},\ldots,X^{\prime}_{w-1}\), which have the same spatial dimension of \(C^{\prime}/w\times H\times W\). These sub-feature maps are sent to multiple sampling branches with different numbers of \(T(.)\). The first branch receives and processes sub-feature maps \(X^{\prime}_{0}\), so the output \(f_{0}\in C^{\prime}/w\times H\times W\) is obtained. Concatenate the \(f_{0}\) with the feature maps of the same sampling depth in the second branch to perform feature fusion. The output of the second branch \(f_{1}\in C^{\prime}\times 2/w\times H\times W\) is obtained. Repeat the procedure until we obtain the output of the last branch \(f_{w-1}\in C^{\prime}\times H\times W\). Subsequently, the number of channels of the feature maps \(f_{w-1}\) and \(X^{\prime}\) is compressed to half, and concatenate the results together to further promote feature fusion. Finally, the channel dimension of the feature maps is restored to the initial state, and the output \(X_{out}\in C\times H\times W\) is obtained. We can write a SC block as \((w,d_{0},d_{1},d_{2},\ldots,d_{w-1})\), where \(w\) refers to the number of branches within the block, and \(d_{0},d_{1},d_{2},\ldots,d_{w-1}\) denote the number of \(T(.)\) on each branch. The output of each branch is referred as \(f_{0},f_{1},\ldots,f_{w-1}\):  
\[f_{i}=\begin{cases}T_{d_{i}}(X^{\prime}_{i})&\quad\text{if }i=0\\ T_{d_{i}-d_{i-1}}(T_{d_{i-1}}(X^{\prime}_{i})\bigoplus f_{i-1}),&\quad\text{ otherwise}\end{cases} \tag{1}\]Here, the subscripts of \(T(.)\) represent multiple transformation operations, \(\bigoplus\) indicates the feature concatenation. Consequently, the output feature maps of a SC block can be expressed as follows:  
\[X_{out}=T(T(f_{w-1})\bigoplus T(X^{\prime})) \tag{2}\]  
We stack SC variants together to constitute a deeper and larger network which can be applied to complex vision tasks. Ideally, as the network continues to learn, it gradually focuses the attention on more critical feature information so that the network can accomplish the task at a lower computational cost. It is worth noting that the input of each SC block is made up of the outputs of previous multiple layers. This structure shortens the gradient transmission path, facilitating the information flow and gradients' propagation. Furthermore, it does not use the gradient information of the latter layer to update the weights of too many previous layers, avoiding network redundancy. We construct a backbone and an FPN based on several SC block variants in the next section. The diagram of these variants is shown in Figure 2.