Xilinx/finn

U-Net on PYNQ

Closed this issue · 4 comments

Hi, I'm trying to run U-Net like segmentation model on PYNQ. I have successfully run the model when I removed skip connections (this is the model after conversion to HW layers:
QuantSimpleUnet_512x512x1_1classes_1batch_4W4A_noSkip_upsample_qonnx-hw_layers.zip). But I can't run the model with skip connections. I can synthesize it, but when I try to run it with Python driver, it's stuck on this line. I reduced it only to one skip connection, so that it resembles ResNet block, but the result is the same. For reference, this is the model with one skip connection, after conversion to HW layers:
QuantSimpleUnet_512x512x1_1classes_1batch_4W4A_oneSkip_upsample_qonnx-hw_layers.zip

Hi,
did you insert FIFOs of sufficient depth between the graph nodes ? Maybe there is a deadlock at the skip connection.

The only FIFO insertion I have is when I call ZynqBuild on this line. Is that not enough? Should I also call InsertAndSetFIFODepths like in the default build dataflow steps here?

Yes, InsertFIFO() will just insert minimally sized FIFOs or no FIFOs (depending on create_shallow_fifos) otherwise.
You'll need to set the FIFO depths in one of the ways shown in the "step_set_fifo_depths" step:

  • DeriveFIFOSizes() + InsertFIFO()
  • InsertAndSetFIFODepths()
  • InsertFIFO(create_shallow_fifos=True) + applying manual FIFO depths defined in your folding config json

In general, I would recommend sticking as closely as possible to the default build dataflow steps.

Closing this issue because of inactivity, please feel free to re-open if your problem isn't solved.