Skip to content

Commit 5aa0aba

Browse files
committed
mnist_cnn: Optimize downscaling on MicroPython
Down from 330 ms to 64 ms on ESP32
1 parent cdf4617 commit 5aa0aba

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

examples/mnist_cnn/downscale.py

+24-6
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,41 @@
11

22
import array
3+
import time
34

4-
def average2d(inp, rowstride, x, y, size):
5-
acc = 0
5+
@micropython.native
6+
def average2d(inp, rowstride : int, x : int, y : int, size : int):
7+
acc : int = 0
68
for r in range(y, y+size):
79
for c in range(x, x+size):
810
acc += inp[(r*rowstride)+c]
911

1012
avg = acc // (size*size)
1113
return avg
1214

13-
def downscale(inp, out, in_size, out_size):
15+
@micropython.native
16+
def downscale(inp, out, in_size : int, out_size : int):
1417

1518
# assumes square, single-channel (grayscale) images
1619
assert len(inp) == in_size*in_size
1720
assert len(out) == out_size*out_size
1821
assert (in_size % out_size) == 0, (in_size, out_size)
19-
factor = in_size // out_size
22+
factor : int = in_size // out_size
2023

2124
for row in range(out_size):
2225
for col in range(out_size):
23-
o = (row * out_size) + col
26+
o : int = (row * out_size) + col
27+
28+
#acc : int = 0
29+
#size : int = factor
30+
#x : int = col*factor
31+
#y : int = row*factor
32+
#rowstride = in_size
33+
#for r in range(y, y+size):
34+
# for c in range(x, x+size):
35+
# acc += inp[(r*rowstride)+c]
36+
#avg = acc // (size*size)
37+
#out[o] = avg
38+
2439
out[o] = average2d(inp, in_size, col*factor, row*factor, factor)
2540

2641

@@ -29,15 +44,18 @@ def test_downscale():
2944
import npyfile
3045

3146
shape, data = npyfile.load('inp.npy')
32-
print(data)
47+
#print(data)
3348

3449
npyfile.save('orig.npy', data, shape)
3550

3651
insize = 96
3752
outsize = 32
3853
out = array.array('B', (0 for _ in range(outsize*outsize)))
3954

55+
start = time.ticks_ms()
4056
downscale(data, out, insize, outsize)
57+
duration = time.ticks_diff(time.ticks_ms(), start)
58+
print('downscale', duration)
4159

4260
npyfile.save('out.npy', out, (outsize, outsize))
4361

0 commit comments

Comments
 (0)