基于TensorFlow for Android开发,如何不改应用更换适配新图像的模型?
Got it, let's break this down step by step—since you're working with TensorFlow for Poets and want to swap models without touching the Android app, the key is to make sure your new model is drop-in compatible with the existing app's expectations. Here's exactly what you need to do:
1. Match the New Model's Input/Output Specifications to the Original
Your Android app is hardcoded to look for specific tensor names and input dimensions. When training your new model for the new image set, you must replicate these specs from your original training setup:
- Input tensor details: Use the same input layer name (e.g.,
Mulfor MobileNet) and input image size (e.g., 224x224 or 299x299) that your original model used. - Output tensor details: Keep the output layer name identical (e.g.,
final_result—this is the default for TensorFlow for Poets). - Label format: The new
retrained_labels.txtmust follow the exact same format as the original: one label per line, in the same order as the model's output classes.
When retraining, use commands that enforce these matches. For example, if your original training used:
python retrain.py \ --bottleneck_dir=bottlenecks \ --how_many_training_steps=500 \ --model_dir=inception_v3 \ --output_graph=retrained_graph.pb \ --output_labels=retrained_labels.txt \ --input_layer=Mul \ --output_layer=final_result \ --image_dir=your_original_images
Your new training command should reuse the --input_layer, --output_layer, and input size (via the same --model_dir or explicit --image_size flag) to ensure compatibility.
2. Replace the Model Files in the Android Project
The TensorFlow for Poets Android app loads the model and labels from the assets directory. All you need to do is:
- Replace the existing
retrained_graph.pbinapp/src/main/assets/with your newly trained model file (keep the filename exactly the same). - Replace the existing
retrained_labels.txtin the sameassetsdirectory with your new label file (again, same filename).
3. Test the Updated App
Build and run your Android app as usual. Since the new model uses the same input/output structure and file names, the app will load it seamlessly without any code changes. You can test with images from your new dataset to confirm the model is working correctly.
Key Notes to Avoid Issues
- If your original app has hardcoded image preprocessing logic (e.g., pixel scaling, normalization), ensure your new model expects the same preprocessing. TensorFlow for Poets uses standard preprocessing for its base models, so sticking to the same base model (Inception, MobileNet) will handle this automatically.
- Double-check that the new model's output classes align perfectly with the order in
retrained_labels.txt—a mismatch here will cause incorrect label predictions.
内容的提问来源于stack exchange,提问作者sumeet

