CARES senior project · status on 2026-11-06

ReXNet-150 Datapath Map

Data flows through ReXNet-150 from the input image to the 2-class answer. The chip runs this as 161 separate operations, one after another. This page shows where those operations sit in the network and which ones we have tested.

Passes now Passes with a chip-design fix Not solved Not tested yet

The whole network

Stage 1: tested (26 operations) Not tested yet (135 operations) Input audio image Stem f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 Pool Class. Output channels Image size Squeeze-excite Shortcut add 48 24 41 58 75 92 108 125 142 159 179 193 210 226 243 260 277 1920 1920 2 224×224 112×112 56×56 28×28 14×14 7×7 1×1 2 classes
Each box is one part of the network; each small square inside is one chip operation, colored by test status. The image gets smaller (224×224 down to 7×7) while the number of channels grows (48 up to 1,920). Stage 1, the tested part, is the stem and the first 4 of the 16 main blocks. Operation counts come from our full-network firmware. On a narrow screen, scroll the figure sideways.

Inside stage 1: the 26 tested operations in order

x: all 348 channels, 28×28 x x x x 348 weights shortcut: f1 output skips f2, added back at 15 Stem 224 → 112 f0 112 f1 112 → 56 f2 56 f3 56 → 28 input image, 224×224 00 3×3 conv, stride 2 → 48 channels 01 sigmoid σ(x), one value at a time 02 multiply x · σ(x) 03 depthwise 3×3 conv each channel alone 04 1×1 conv 48 → 24 channels 05 1×1 conv, expand 24 → 144 channels 06 sigmoid σ(x) 07 multiply x · σ(x) 08 depthwise 3×3, stride 2 image 112 → 56 09 1×1 conv, project 144 → 41 channels 10 1×1 conv, expand 41 → 246 channels 11 sigmoid σ(x) 12 multiply x · σ(x) 13 depthwise 3×3 conv each channel alone 14 1×1 conv, project 246 → 58 channels 15 add + block input (41 ch) 16 1×1 conv, expand 58 → 348 channels 17 sigmoid σ(x) 18 multiply x · σ(x) 19 depthwise 3×3, stride 2 image 56 → 28 20 average 28×28 → 1 per channel 21 small conv (fc1) 348 → 29 22 small conv (fc2) 29 → 348 23 sigmoid one weight per channel 24 multiply channel × its weight 25 1×1 conv, project 348 → 75 channels to blocks f4 … f16, pool, classifier
Read from top to bottom. Grey arrows are the main data path. Purple arrows are side paths that carry a copy of the data around some operations and join again later.
Side path: a copy of the data taken at the dot and used later

What each operation does

3×3 conv
Each output value combines a 3×3 patch of every input channel. Stride 2 skips every other position, so the image halves in width and height.
1×1 conv
Mixes channels at each pixel, with no neighbors. "Expand" makes many more channels; "project" brings the count back down.
Depthwise 3×3 conv
Filters each channel on its own with a 3×3 patch. Cheap, and the only operation that looks at neighboring pixels inside a block.
Sigmoid
σ(x) = 1 / (1 + e−x), squashing any value into 0 to 1. The chip reads it from a table.
Multiply
Multiplies two tensors value by value (SiLU), or every value of a channel by one weight (squeeze-excite).
Average
Turns each channel's whole image into one number, its mean.
Add
Adds two tensors value by value (the shortcut).
Pool, classifier
At the end, the average of each of the 1,920 channels feeds one fully connected layer that outputs the 2 class scores.

The untested blocks f4 to f15

Each tested operation was run alone, starting from the correct input taken from the model on a PC. Running several operations in a chain, where small errors can add up, is not tested yet.