  We present a convolutional neural network implementation for pixel processor
array (PPA) sensors. PPA hardware consists of a fine-grained array of
general-purpose processing elements, each capable of light capture, data
storage, program execution, and communication with neighboring elements. This
allows images to be stored and manipulated directly at the point of light
capture, rather than having to transfer images to external processing hardware.
Our CNN approach divides this array up into 4x4 blocks of processing elements,
essentially trading-off image resolution for increased local memory capacity
per 4x4 "pixel". We implement parallel operations for image addition,
subtraction and bit-shifting images in this 4x4 block format. Using these
components we formulate how to perform ternary weight convolutions upon these
images, compactly store results of such convolutions, perform max-pooling, and
transfer the resulting sub-sampled data to an attached micro-controller. We
train ternary weight filter CNNs for digit recognition and a simple tracking
task, and demonstrate inference of these networks upon the SCAMP5 PPA system.
This work represents a first step towards embedding neural network processing
capability directly onto the focal plane of a sensor.
