Your opto's are NOT wired correctly.
They will pull the ULN2803 input high when ON.
However, the ULN2803 inputs will be floating when the opto is OFF.
The back-emf diodes are for relays, soleniods, low power motors, etc. Anything with an inductive coil.
The discrete diodes you added for back-emf are wired the SAME as the ULN2803 internal ones.
Look at the datasheet for the ULN2803 logic:
You want the high side of the diodes PRIOR TO the diode D3.
DO NOT USE BOTH the internal diodes (i.e. pin 10) and the discrete diodes.
WHEN THE ULN2803 TURNS OFF, THE BACK-EMF CURRENT WILL GO
OUT THRU THE FUSE.
THE DIODE, D3, PREVENTS THIS.
If you really want the reverse power protection, only put the diode on the pull-ups for the opto's.

You use either pull-up or pull-down depending on whether you want to invert the logic.
Do you want a '0' or '1' in the software to turn ON the output of the ULN2803?
I believe you want pull-down's.
When the MCU sends out a '1',
the opto will turn ON and pull the ULN2803 input HIGH,
the ULN2803 output will then go LOW and energize what is connected.
