This is a subjective question, but often to enforce that your model objects don't have direct dependencies to infrastructure, people often put them in a separate project. you also need to consider what other projects might use these model objects.
Another option for splitting up functionality into separate deployable units (assemblies) is so that teams can function more independently. Separate projects based on frequency of deployment and team autonomy.
Lastly I've seen some projects where the model objects were invoked remotely (like with .NET remoting) and served up on an application server separate from the web server. I really don't recommend this approach, but it's an option.
If you don't plan on reusing them, and you're cognizant of the fact that placing them in the same assembly allows you to create cross dependencies with anything else defined in that project, but you're smart enough not to do it, you can place them all in the same project.
That said, 99% of the time I have these projects:
- UI
- Core
- Persistence
- Tests
But you still have to take your project needs into account.