I work in an an Agile/Scrum environment, so my answers might be skewed by that, but in general I dislike the large, up-front costs as described in your example. I'd rather have development start sooner and give more time for user testing on beta- & release-quality software.
Given your same 20-week project:
Prototype: 2 weeks
This includes research and people testing, internal and external. The goal is to get a rough idea of workflow, navigation, labeling and functionality
Design: 2 weeks
This also includes user testing, although much less of it unless the design changes the wireframes (which happens pretty often). Still, by this stage, you've got a pretty good idea of what the software is designed to do and can test quickly.
Implement: 10 weeks
User testing as you can. This is also a good time to go back through the prototypes and make sure your labeling and error messages are correctly written as well as any design tweaks needed (perhaps due to line length that you didn't envision).
Monitor: 2 weeks
If you've built the site around user (or business) goals, you should be able to watch, via analytics, if people are successfully completing them or getting tripped up. Gather enough data to spot big errors...
Prototype / Implement / Release / Monitor: 4 Weeks
...then fix them. Quickly prototype solutions, have them implemented, and watch to see if you've moved the needle. Are fewer people leaving in the middle of the form now that you removed that pesky checkbox?
I believe in lab-based user testing to gather feedback and ideas, since you can ask "why did you do that instead of this?" But, nothing beats data from users in real environments, using the software to accomplish real tasks.
The long you can make this part, the better.
Then, the part I think we typically miss: once you've put this new feature or functionality out there, you're on the hook to continue to monitor and test it. If a Sign Up form is seeing a 50% success rate, A/B test it to see if you can push that to 55%.