Package ai.djl.translate
Interface Translator<I,O>
- Type Parameters:
I- the input typeO- the output type
- All Superinterfaces:
PostProcessor<O>,PreProcessor<I>
- All Known Subinterfaces:
NoBatchifyTranslator<I,,O> ServingTranslator,StreamingTranslator<I,O>
- All Known Implementing Classes:
BaseImageTranslator,BasicTranslator,BigGANTranslator,CrossEncoderServingTranslator,ImageClassificationTranslator,ImageFeatureExtractor,ImageServingTranslator,InstanceSegmentationTranslator,NoopTranslator,ObjectDetectionTranslator,QaServingTranslator,QATranslator,SemanticSegmentationTranslator,SimplePoseTranslator,SimpleText2TextTranslator,SingleShotDetectionTranslator,SpeechRecognitionTranslator,StyleTransferTranslator,TextClassificationServingTranslator,TextEmbeddingServingTranslator,TokenClassificationServingTranslator,YoloTranslator,YoloV5Translator,YoloV8Translator
The
Translator interface provides model pre-processing and postprocessing functionality.
Users can use this in Predictor with input and output objects specified. The
recommended flow is to use the Translator to translate only a single data item at a time (Record) rather than a Batch. For example, the input parameter would then
be Image rather than Image[]. The Records will
then be combined using a Batchifier. If it is easier in your use case to work with
batches directly or your model uses records instead of batches, you can use the NoBatchifyTranslator.
The following is an example of processing an image and creating classification output:
private static final class MyTranslator implements Translator<Image, Classification> {
private int imageWidth;
private int imageHeight;
public MyTranslator(int imageWidth, int imageHeight) {
this.imageWidth = imageWidth;
this.imageHeight = imageHeight;
}
@Override
public NDList processInput(TranslatorContext ctx, Image input) {
NDArray imageND = input.toNDArray(ctx.getNDManager());
return new NDList(NDImageUtils.resize(imageND, imageWidth, imageHeight);
}
@Override
public Classification processOutput(TranslatorContext ctx, NDList list) throws TranslateException {
Model model = ctx.getModel();
NDArray array = list.get(0).at(0);
NDArray sorted = array.argSort(-1, false);
NDArray top = sorted.at(0);
float[] probabilities = array.toFloatArray();
int topIndex = top.toIntArray()[0];
String[] synset;
try {
synset = model.getArtifact("synset.txt", MyTranslator::loadSynset);
} catch (IOException e) {
throw new TranslateException(e);
}
return new Classification(synset[topIndex], probabilities[topIndex]);
}
private static String[] loadSynset(InputStream is) {
...
}
}
-
Method Summary
Modifier and TypeMethodDescriptiondefault BatchifierReturns theBatchifier.default TranslatorOptionsReturns possibleTranslatorOptionsthat can be built using thisTranslator.default voidprepare(TranslatorContext ctx) Prepares the translator with the manager and model to use.default Translator<I[],O[]> Returns a batch translator.default Translator<I[],O[]> toBatchTranslator(Batchifier batchifier) Returns a batch translator.Methods inherited from interface ai.djl.translate.PostProcessor
processOutputMethods inherited from interface ai.djl.translate.PreProcessor
processInput
-
Method Details
-
getBatchifier
Returns theBatchifier.- Returns:
- the
Batchifier
-
prepare
Prepares the translator with the manager and model to use.- Parameters:
ctx- the context for thePredictor.- Throws:
Exception- if there is an error for preparing the translator
-
getExpansions
Returns possibleTranslatorOptionsthat can be built using thisTranslator.- Returns:
- possible options or null if not defined
-
toBatchTranslator
Returns a batch translator.- Returns:
- a batch translator
-
toBatchTranslator
Returns a batch translator.- Parameters:
batchifier- theBatchifierto use- Returns:
- a batch translator
-