Hi KingSolomen
Battles in general (and sieges in particular) are won when two conditions are met :
1) all defending forces are killed or routed
2) before your own army is routed
Every round of combat, your Army loses Morale
in the case of sieges, this happens as your army tries to break the Walls to reach the Keep, whether you see troops in Garrison or not.
Look into the details of the Battle reports and check if your troops managed to break the Walls before they routed due to low Morale
You can also find other informations about battles (and sieges in particular) here :
http://www101.imperiaonline.org/imperia/game_v6/game/help/?section=military&lang=en&speed=4http://prntscr.com/793mroHave fun,