I've worked with Piqi, converting a project that was using custom serialization to Protobuf. This was a fairly pleasant experience: the main developer was very responsive and the code base for the code generator is sufficiently clean that it made adding custom functionality quite easy.
The main reason I went with Piqi is the code generation functionality: one of the main reasons to adopt something like Protobuf is the possibility of generating code in a multitude of languages (e.g. Python for scripting / testing purposes) from a single definition file (the proto file in this case). Any change there is automatically picked up by the build process in all of the languages, so your code stays in sync across languages. This is not the case if the definition of the struct is in Ocaml itself.