API-ja e Modelit të Kompiluar LiteRT është e disponueshme në Kotlin, duke u ofruar zhvilluesve të Android një përvojë të përsosur, me përshpejtues të parë, me API të nivelit të lartë.
Për një shembull të një aplikacioni LiteRT në Kotlin, shihni demonstrimin e segmentimit të imazhit me Kotlin .
Filloni
Ndiqni hapat e mëposhtëm për të shtuar API-n e Modelit të Kompiluar LiteRT në aplikacionin tuaj Android.
Shto paketën Maven
Shtoni varësinë LiteRT me API-në e Modelit të Kompiluar në aplikacionin tuaj:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Krijo modelin e kompiluar
Duke përdorur API-n CompiledModel , inicializoni kohën e ekzekutimit me një model dhe zgjedhjen tuaj të përshpejtimit të harduerit:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Krijo bufera hyrëse dhe dalëse
Krijoni strukturat e nevojshme të të dhënave (buferat) për të mbajtur të dhënat hyrëse që do t'i ushqeni modelit për përfundim, dhe të dhënat dalëse që modeli prodhon pas ekzekutimit të përfundimit.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Nëse përdorni memorien e CPU-së, plotësoni të dhënat hyrëse duke shkruar të dhëna direkt në memorjen e parë të hyrjes.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Thirrni modelin
Duke siguruar buffer-at e hyrjes dhe daljes, ekzekutoni Modelin e Kompiluar.
model.run(inputBuffers, outputBuffers)
Merrni Rezultatet
Merrni rezultatet duke lexuar drejtpërdrejti daljen e modelit nga memoria.
val outputFloatArray = outputBuffers[0].readFloat()
Konceptet dhe përbërësit kryesorë
Referojuni seksioneve të mëposhtme për informacion mbi konceptet dhe komponentët kryesorë të API-ve të Modelit të Kompiluar LiteRT Kotlin.
Inferenca Bazë (CPU)
Më poshtë është një implementim i kondensuar dhe i thjeshtuar i inferencës me LiteRT Next.
// Load model and initialize runtime
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()
// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()
Modeli i kompiluar (CompiledModel)
API-ja e Modelit të Kompiluar ( CompiledModel ) është përgjegjëse për ngarkimin e një modeli, aplikimin e përshpejtimit të harduerit, krijimin e instancave të kohës së ekzekutimit, krijimin e buffer-ave hyrëse dhe dalëse dhe ekzekutimin e inferencës.
Fragmenti i mëposhtëm i kodit të thjeshtuar tregon se si API-ja e Modelit të Kompiluar merr një model LiteRT ( .tflite ) dhe krijon një model të kompiluar që është gati për të ekzekutuar inferencën.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
Fragmenti i mëposhtëm i kodit të thjeshtuar tregon se si API-ja CompiledModel merr një memorje hyrëse dhe një memorje dalëse dhe ekzekuton përfundime me modelin e kompajluar.
// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()
// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()
Për një pamje më të plotë se si zbatohet API-ja CompiledModel , shihni kodin burimor në Model.kt .
Tamponi i Tensorit (TensorBuffer)
LiteRT ofron mbështetje të integruar për ndërveprimin e buffer-ave I/O, duke përdorur API-në Tensor Buffer ( TensorBuffer ) për të trajtuar rrjedhën e të dhënave brenda dhe jashtë CompiledModel . API-ja Tensor Buffer ofron mundësinë për të shkruar ( Write<T>() ) dhe lexuar ( Read<T>() ), si dhe për të bllokuar buffer-at.
Për një pamje më të plotë se si zbatohet API-ja Tensor Buffer, shihni kodin burimor në TensorBuffer.kt .