DC motor speed control when having relay change directions
The mosfet PWM drive and relays should not be a problem if


your motor changes its direction when the polarity changes; there exist one direction only motors that have no permanent magnets but a magnetizing coil.
you have carefully thought what happens if you change the direction at full speed
you have added some spark supressors to make your relays to live longer. A motor this big haves substantial stray inductance that causes sparks in opening relay switches. See the addendum:
you know that a motor can take many times more current when started compared to a steady run.


Addendum for spark supression:

If one tooks off a DC supply wire from a running motor, a spark is seen. This is common for  heavily inductive parts such as relays, motors, electric magnets ets... The spark is caused by induction. In coils that are connected to a DC voltage it means that the coil current never starts or stops in zero time, it happens only gradually.When a DC supply wire is taken off, the current still continues and degrades gradually until all magnetic energy is dissipated. The current chooses that way which breaks most easily. Often it's the air and that we see as a spark. 

Suppress the spark by giving an easier way for that inductive spike. Take two more than 12 V zener diodes, say 15 V each. Connect them series, but opposite directions. Connect this dual zener supressor parallel with your motor. It does not short the 12 V supply because 15 V is needed for any current. But your relay gets no welding treatment when the contact opens because the inductive spike current is wasted in a zener diode.

Accepted supplementary note:

Inductive current limiter can be used too. When the a running motor is suddenly supplied with reverse voltage, the supply current will spike. An inductor at the power source will limit the momentary current spike and this will be less abusive to the power source.