Sharing with the World
Predictors are designed to be shared. Whether you choose to open-source your predictor or sell it, here are some general guidelines:
We highly recommend packaging a predictor with the following layout:
model-name/ // Package name should be lowercase and dasherized
│ ├─ MLPackage.asmdef // Assembly definition for your package scripts
│ ├─ Predictor.cs // Model predictor
│ ├─ ...
│ ├─ example.unity // Example scene demonstrating model
│ ├─ ...
├─ README.md // Readme explaining how the predictor is used
├─ LICENSE.md // License if applicable
The foundational principle in designing the developer experience is to reduce cognitive load. The developer should not have to learn many--or ideally, any--new concepts in order to use your predictor.
NatML predictors have a typical usage pattern:
If your predictor requires further post-processing before the outputs can be used, then your predictor should return an instance of an inner class. This inner class should expose a method to perform the required post-processing. This is a common pattern for computer vision predictors that output an image:
// Predictor outputs an inner class
Predictor.Output output = predictor.Predict(...);
// Then developer performs post-processing on the output
RenderTexture result = ...;
Predictors should be written for maximum performance and minimal overhead. Predictors, along with any pre- or post-processors, must not use any performance-degrading API's that might have significant adverse effects on the entire app.