mirror of
https://github.com/photoprism/photoprism.git
synced 2026-01-23 02:24:24 +00:00
2.8 KiB
2.8 KiB
PhotoPrism — TensorFlow Package
Last Updated: December 23, 2025
Overview
internal/ai/tensorflow provides the shared TensorFlow helpers used by PhotoPrism’s built-in AI features (labels, NSFW, and FaceNet embeddings). It wraps SavedModel loading, input/output discovery, image tensor preparation, and label handling so higher-level packages can focus on domain logic.
Key Components
- Model Loading —
SavedModel,GetModelTagsInfo, andGetInputAndOutputFromSavedModeldiscover and load SavedModel graphs with appropriate tags. - Input Preparation —
Image,ImageTransform, andImageTensorBuilderconvert JPEG images to tensors with the configured resolution, color order, and resize strategy. - Output Handling —
AddSoftmaxcan insert a softmax op when a model exports logits. - Labels —
LoadLabelsloads label lists for classification models.
Model Loading Notes
- Built-in models live under
assets/models/and are accessed via helpers ininternal/ai/visionandinternal/ai/classify. - When a model lacks explicit tags or signatures, the helpers attempt to infer input/output operations. Logs will show when inference kicks in.
- Classification models may emit logits; if
ModelInfo.Output.Logitsis true, a softmax op is injected at load time.
Memory & Garbage Collection
TensorFlow tensors are allocated in C memory and freed by Go GC finalizers in the TensorFlow bindings. Long-running inference can therefore show increasing RSS even when the Go heap is small. PhotoPrism periodically triggers garbage collection to return freed C-allocated tensor buffers to the OS. Control this behavior with:
PHOTOPRISM_TF_GC_EVERY(default 200,0disables).
Lower values reduce peak RSS but increase GC overhead and can slow indexing.
Troubleshooting Tips
- Model fails to load: Verify the SavedModel path, tags, and that
saved_model.pbplusvariables/exist underassets/models/<name>. - Input/output mismatch: Check logs for inferred inputs/outputs and confirm
vision.ymloverrides (name, resolution, andTensorFlow.Input/Output). - Unexpected probabilities: Ensure logits are handled correctly and labels match output indices.
- High memory usage: Confirm
PHOTOPRISM_TF_GC_EVERYis set appropriately; model weights remain resident for the life of the process by design.
Related Docs
internal/ai/vision/README.md— model registry,vision.ymlconfiguration, and run schedulinginternal/ai/face/README.md— FaceNet embeddings and face-specific tuninginternal/ai/classify/README.md— classification workflow using TensorFlow helpersinternal/ai/nsfw/README.md— NSFW model usage and result mapping