SubD is a good method, but depending on what you want to do with the model afterwards, you can also spend some time to clean up some unnecessary edge loops from the subdivided model. In other words, SubD will generate edge loops in places where it's not needed for the smoothing process, just by nature it will split all polygons into 4 each iteration. So, once you get the level of rounding you need, it's quite simple in most cases to reduce polycount dramatically simply by removing edge loops from flat areas that aren't contributing to the curvature.