Xalphinions commited on
Commit
2d3a3b3
·
verified ·
1 Parent(s): 04dbb73

Upload folder using huggingface_hub

Browse files
Files changed (4) hide show
  1. app.py +174 -220
  2. app_moe.py +89 -182
  3. moe_evaluation_results.json +701 -701
  4. requirements.txt +7 -7
app.py CHANGED
@@ -6,96 +6,21 @@ import gradio as gr
6
  import torchaudio
7
  import torchvision
8
  import spaces
9
- import json
 
 
 
 
 
 
 
 
10
 
11
  # Add parent directory to path to import preprocess functions
12
  sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
13
 
14
- # Import functions from preprocess and model definitions
15
- from preprocess import process_image_data
16
- from evaluate_backbones import WatermelonModelModular, IMAGE_BACKBONES, AUDIO_BACKBONES
17
-
18
- # Define the top-performing models based on evaluation
19
- TOP_MODELS = [
20
- {"image_backbone": "efficientnet_b3", "audio_backbone": "transformer"},
21
- {"image_backbone": "efficientnet_b0", "audio_backbone": "transformer"},
22
- {"image_backbone": "resnet50", "audio_backbone": "transformer"}
23
- ]
24
-
25
- # Define the MoE Model
26
- class WatermelonMoEModel(torch.nn.Module):
27
- def __init__(self, model_configs, model_dir="models", weights=None):
28
- """
29
- Mixture of Experts model that combines multiple backbone models.
30
-
31
- Args:
32
- model_configs: List of dictionaries with 'image_backbone' and 'audio_backbone' keys
33
- model_dir: Directory where model checkpoints are stored
34
- weights: Optional list of weights for each model (None for equal weighting)
35
- """
36
- super(WatermelonMoEModel, self).__init__()
37
- self.models = []
38
- self.model_configs = model_configs
39
-
40
- # Load each model
41
- for config in model_configs:
42
- img_backbone = config["image_backbone"]
43
- audio_backbone = config["audio_backbone"]
44
-
45
- # Initialize model
46
- model = WatermelonModelModular(img_backbone, audio_backbone)
47
-
48
- # Load weights
49
- model_path = os.path.join(model_dir, f"{img_backbone}_{audio_backbone}_model.pt")
50
- if os.path.exists(model_path):
51
- print(f"\033[92mINFO\033[0m: Loading model {img_backbone}_{audio_backbone} from {model_path}")
52
- model.load_state_dict(torch.load(model_path, map_location='cpu'))
53
- else:
54
- print(f"\033[91mERR!\033[0m: Model checkpoint not found at {model_path}")
55
- continue
56
-
57
- model.eval() # Set to evaluation mode
58
- self.models.append(model)
59
-
60
- # Set model weights (uniform by default)
61
- if weights:
62
- assert len(weights) == len(self.models), "Number of weights must match number of models"
63
- self.weights = weights
64
- else:
65
- self.weights = [1.0 / len(self.models)] * len(self.models) if self.models else [1.0]
66
-
67
- print(f"\033[92mINFO\033[0m: Loaded {len(self.models)} models for MoE ensemble")
68
- print(f"\033[92mINFO\033[0m: Model weights: {self.weights}")
69
-
70
- def to(self, device):
71
- """
72
- Override to() method to ensure all sub-models are moved to the same device
73
- """
74
- for model in self.models:
75
- model.to(device)
76
- return super(WatermelonMoEModel, self).to(device)
77
-
78
- def forward(self, mfcc, image):
79
- """
80
- Forward pass through the MoE model.
81
- Returns the weighted average of all model outputs.
82
- """
83
- if not self.models:
84
- print(f"\033[91mERR!\033[0m: No models available for inference!")
85
- return torch.tensor([0.0], device=mfcc.device)
86
-
87
- outputs = []
88
-
89
- # Get outputs from each model
90
- with torch.no_grad():
91
- for i, model in enumerate(self.models):
92
- output = model(mfcc, image)
93
- # print the output value
94
- print(f"\033[92mDEBUG\033[0m: Model {i} output: {output}")
95
- outputs.append(output * self.weights[i])
96
-
97
- # Return weighted average
98
- return torch.sum(torch.stack(outputs), dim=0)
99
 
100
  # Modified version of process_audio_data specifically for the app to handle various tensor shapes
101
  def app_process_audio_data(waveform, sample_rate):
@@ -151,147 +76,203 @@ def app_process_audio_data(waveform, sample_rate):
151
  print(traceback.format_exc())
152
  return None
153
 
154
- # Using the decorator for GPU acceleration
 
 
 
155
  @spaces.GPU
156
- def predict_sugar_content(audio, image, model_dir="models", weights=None):
157
- """Function with GPU acceleration to predict watermelon sugar content in Brix using MoE model"""
158
  try:
159
- # Check CUDA availability inside the GPU-decorated function
160
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
161
- print(f"\033[92mINFO\033[0m: Using device: {device}")
162
-
163
- # Load MoE model
164
- moe_model = WatermelonMoEModel(TOP_MODELS, model_dir, weights)
165
- moe_model = moe_model.to(device) # Move entire model to device
166
- moe_model.eval()
167
- print(f"\033[92mINFO\033[0m: Loaded MoE model with {len(moe_model.models)} backbone models")
 
 
 
 
 
 
 
 
 
 
 
168
 
169
  # Handle different audio input formats
170
- if isinstance(audio, tuple) and len(audio) >= 2:
171
- sample_rate, audio_data = audio[0], audio[1] if len(audio) == 2 else audio[-1]
 
 
 
 
 
 
 
 
172
  elif isinstance(audio, str):
 
173
  audio_data, sample_rate = torchaudio.load(audio)
 
174
  else:
175
  return f"Error: Unsupported audio format. Got {type(audio)}"
176
 
177
- # Convert audio to tensor if needed
 
 
 
 
 
 
 
 
 
 
178
  if isinstance(audio_data, np.ndarray):
 
 
179
  audio_tensor = torch.tensor(audio_data).float()
 
 
 
 
 
 
 
 
 
 
180
  else:
 
181
  audio_tensor = audio_data.float()
182
 
183
- # Process audio
 
 
184
  mfcc = app_process_audio_data(audio_tensor, sample_rate)
185
- if mfcc is None:
186
- return "Error: Failed to process audio input"
187
 
188
- # Process image
189
  if isinstance(image, np.ndarray):
190
- image_tensor = torch.from_numpy(image).permute(2, 0, 1) # Convert to CxHxW format
 
 
 
191
  elif isinstance(image, str):
192
- image_tensor = torchvision.io.read_image(image)
 
 
193
  else:
194
  return f"Error: Unsupported image format. Got {type(image)}"
195
 
 
 
 
 
196
  image_tensor = image_tensor.float()
197
  processed_image = process_image_data(image_tensor)
198
- if processed_image is None:
199
- return "Error: Failed to process image input"
200
 
201
- # Add batch dimension and move to device
202
- mfcc = mfcc.unsqueeze(0).to(device)
203
- processed_image = processed_image.unsqueeze(0).to(device)
 
204
 
205
- # Run inference
206
- with torch.no_grad():
207
- brix_value = moe_model(mfcc, processed_image)
208
- prediction = brix_value.item()
209
- print(f"\033[92mDEBUG\033[0m: Raw prediction: {prediction}")
210
-
211
- # Ensure prediction is within reasonable bounds (e.g., 6-13 Brix)
212
- prediction = max(6.0, min(13.0, prediction))
213
- print(f"\033[92mDEBUG\033[0m: Bounded prediction: {prediction}")
214
-
215
- # Format the result
216
- result = f"🍉 Predicted Sugar Content: {prediction:.1f}° Brix 🍉\n\n"
217
-
218
- # Add extra info about the MoE model
219
- result += "Using Ensemble of Top-3 Models:\n"
220
- result += "- EfficientNet-B3 + Transformer\n"
221
- result += "- EfficientNet-B0 + Transformer\n"
222
- result += "- ResNet-50 + Transformer\n\n"
223
-
224
- # Add Brix scale visualization
225
- result += "Sugar Content Scale (in °Brix):\n"
226
- result += "──────────────────────────────────\n"
227
 
228
- # Create the scale display with Brix ranges
229
- scale_ranges = [
230
- (0, 8, "Low Sugar (< Brix)"),
231
- (8, 9, "Mild Sweetness (8-9° Brix)"),
232
- (9, 10, "Medium Sweetness (9-10° Brix)"),
233
- (10, 11, "Sweet (10-11° Brix)"),
234
- (11, 13, "Very Sweet (11-13° Brix)")
235
- ]
236
-
237
- # Find which category the prediction falls into
238
- user_category = None
239
- for min_val, max_val, category_name in scale_ranges:
240
- if min_val <= prediction < max_val:
241
- user_category = category_name
242
- break
243
- if prediction >= scale_ranges[-1][0]: # Handle edge case
244
- user_category = scale_ranges[-1][2]
245
 
246
- # Display the scale with the user's result highlighted
247
- for min_val, max_val, category_name in scale_ranges:
248
- if category_name == user_category:
249
- result += f"▶ {min_val}-{max_val}: {category_name} ◀ (YOUR WATERMELON)\n"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  else:
251
- result += f" {min_val}-{max_val}: {category_name}\n"
252
-
253
- result += "──────────────────────────────────\n\n"
254
-
255
- # Add assessment of the watermelon's sugar content
256
- if prediction < 8:
257
- result += "Assessment: This watermelon has low sugar content. It may taste bland or slightly bitter."
258
- elif prediction < 9:
259
- result += "Assessment: This watermelon has mild sweetness. Acceptable flavor but not very sweet."
260
- elif prediction < 10:
261
- result += "Assessment: This watermelon has moderate sugar content. It should have pleasant sweetness."
262
- elif prediction < 11:
263
- result += "Assessment: This watermelon has good sugar content! It should be sweet and juicy."
264
  else:
265
- result += "Assessment: This watermelon has excellent sugar content! Perfect choice for maximum sweetness and flavor."
266
-
267
- return result
268
  except Exception as e:
269
  import traceback
270
  error_msg = f"Error: {str(e)}\n\n"
271
  error_msg += traceback.format_exc()
272
  print(f"\033[91mERR!\033[0m: {error_msg}")
273
  return error_msg
 
 
 
274
 
275
- def create_app(model_dir="models", weights=None):
276
  """Create and launch the Gradio interface"""
277
  # Define the prediction function with model path
278
  def predict_fn(audio, image):
279
- return predict_sugar_content(audio, image, model_dir, weights)
280
 
281
  # Create Gradio interface
282
- with gr.Blocks(title="Watermelon Sugar Content Predictor (MoE)", theme=gr.themes.Soft()) as interface:
283
- gr.Markdown("# 🍉 Watermelon Sugar Content Predictor (Ensemble Model)")
284
  gr.Markdown("""
285
  This app predicts the sugar content (in °Brix) of a watermelon based on its sound and appearance.
286
 
287
- ## What's New
288
- This version uses a Mixture of Experts (MoE) ensemble model that combines the three best-performing models:
289
- - EfficientNet-B3 + Transformer
290
- - EfficientNet-B0 + Transformer
291
- - ResNet-50 + Transformer
292
-
293
- The ensemble approach provides more accurate predictions than any single model!
294
-
295
  ## Instructions:
296
  1. Upload or record an audio of tapping the watermelon
297
  2. Upload or capture an image of the watermelon
@@ -305,7 +286,7 @@ def create_app(model_dir="models", weights=None):
305
  submit_btn = gr.Button("Predict Sugar Content", variant="primary")
306
 
307
  with gr.Column():
308
- output = gr.Textbox(label="Prediction Results", lines=15)
309
 
310
  submit_btn.click(
311
  fn=predict_fn,
@@ -321,11 +302,6 @@ def create_app(model_dir="models", weights=None):
321
  ## About Brix Measurement
322
  Brix (°Bx) is a measurement of sugar content in a solution. For watermelons, higher Brix values indicate sweeter fruit.
323
  The average ripe watermelon has a Brix value between 9-11°.
324
-
325
- ## About the Mixture of Experts Model
326
- This app uses a Mixture of Experts (MoE) model that combines predictions from multiple neural networks.
327
- Our testing shows the ensemble approach achieves a Mean Absolute Error (MAE) of ~0.22, which is significantly
328
- better than any individual model (best individual model: ~0.36 MAE).
329
  """)
330
 
331
  return interface
@@ -333,12 +309,12 @@ def create_app(model_dir="models", weights=None):
333
  if __name__ == "__main__":
334
  import argparse
335
 
336
- parser = argparse.ArgumentParser(description="Watermelon Sugar Content Prediction App (MoE)")
337
  parser.add_argument(
338
- "--model_dir",
339
  type=str,
340
- default="models",
341
- help="Directory containing the model checkpoints"
342
  )
343
  parser.add_argument(
344
  "--share",
@@ -350,40 +326,18 @@ if __name__ == "__main__":
350
  action="store_true",
351
  help="Enable verbose debug output"
352
  )
353
- parser.add_argument(
354
- "--weighting",
355
- type=str,
356
- choices=["uniform", "performance"],
357
- default="uniform",
358
- help="How to weight the models (uniform or based on performance)"
359
- )
360
 
361
  args = parser.parse_args()
362
 
363
  if args.debug:
364
  print(f"\033[92mINFO\033[0m: Debug mode enabled")
365
 
366
- # Check if model directory exists
367
- if not os.path.exists(args.model_dir):
368
- print(f"\033[91mERR!\033[0m: Model directory not found at {args.model_dir}")
 
369
  sys.exit(1)
370
 
371
- # Determine weights based on argument
372
- weights = None
373
- if args.weighting == "performance":
374
- # Weights inversely proportional to the MAE (better models get higher weights)
375
- # These are the MAE values from the evaluation results
376
- mae_values = [0.3635, 0.3765, 0.3959] # efficientnet_b3+transformer, efficientnet_b0+transformer, resnet50+transformer
377
-
378
- # Convert to weights (inverse of MAE, normalized)
379
- inverse_mae = [1/mae for mae in mae_values]
380
- total = sum(inverse_mae)
381
- weights = [val/total for val in inverse_mae]
382
-
383
- print(f"\033[92mINFO\033[0m: Using performance-based weights: {weights}")
384
- else:
385
- print(f"\033[92mINFO\033[0m: Using uniform weights")
386
-
387
  # Create and launch the app
388
- app = create_app(args.model_dir, weights)
389
  app.launch(share=args.share)
 
6
  import torchaudio
7
  import torchvision
8
  import spaces
9
+
10
+ # # Import Gradio Spaces GPU decorator
11
+ # try:
12
+ # from gradio import spaces
13
+ # HAS_SPACES = True
14
+ # print("\033[92mINFO\033[0m: Gradio Spaces detected, GPU acceleration will be enabled")
15
+ # except ImportError:
16
+ # HAS_SPACES = False
17
+ # print("\033[93mWARN\033[0m: gradio.spaces not available, running without GPU optimization")
18
 
19
  # Add parent directory to path to import preprocess functions
20
  sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
21
 
22
+ # Import functions from infer_watermelon.py and train_watermelon for the model
23
+ from train_watermelon import WatermelonModel
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  # Modified version of process_audio_data specifically for the app to handle various tensor shapes
26
  def app_process_audio_data(waveform, sample_rate):
 
76
  print(traceback.format_exc())
77
  return None
78
 
79
+ # Similarly for images, but let's import the original one
80
+ from preprocess import process_image_data
81
+
82
+ # Using the decorator directly on the function definition
83
  @spaces.GPU
84
+ def predict_sugar_content(audio, image, model_path):
85
+ """Function with GPU acceleration to predict watermelon sugar content in Brix"""
86
  try:
87
+ # Now check CUDA availability inside the GPU-decorated function
88
+ if torch.cuda.is_available():
89
+ device = torch.device("cuda")
90
+ print(f"\033[92mINFO\033[0m: CUDA is available. Using device: {device}")
91
+ else:
92
+ device = torch.device("cpu")
93
+ print(f"\033[92mINFO\033[0m: CUDA is not available. Using device: {device}")
94
+
95
+ # Load model inside the function to ensure it's on the correct device
96
+ model = WatermelonModel().to(device)
97
+ model.load_state_dict(torch.load(model_path, map_location=device))
98
+ model.eval()
99
+ print(f"\033[92mINFO\033[0m: Loaded model from {model_path}")
100
+
101
+ # Debug information about input types
102
+ print(f"\033[92mDEBUG\033[0m: Audio input type: {type(audio)}")
103
+ print(f"\033[92mDEBUG\033[0m: Audio input shape/length: {len(audio)}")
104
+ print(f"\033[92mDEBUG\033[0m: Image input type: {type(image)}")
105
+ if isinstance(image, np.ndarray):
106
+ print(f"\033[92mDEBUG\033[0m: Image input shape: {image.shape}")
107
 
108
  # Handle different audio input formats
109
+ if isinstance(audio, tuple) and len(audio) == 2:
110
+ # Standard Gradio format: (sample_rate, audio_data)
111
+ sample_rate, audio_data = audio
112
+ print(f"\033[92mDEBUG\033[0m: Audio sample rate: {sample_rate}")
113
+ print(f"\033[92mDEBUG\033[0m: Audio data shape: {audio_data.shape}")
114
+ elif isinstance(audio, tuple) and len(audio) > 2:
115
+ # Sometimes Gradio returns (sample_rate, audio_data, other_info...)
116
+ sample_rate, audio_data = audio[0], audio[-1]
117
+ print(f"\033[92mDEBUG\033[0m: Audio sample rate: {sample_rate}")
118
+ print(f"\033[92mDEBUG\033[0m: Audio data shape: {audio_data.shape}")
119
  elif isinstance(audio, str):
120
+ # Direct path to audio file
121
  audio_data, sample_rate = torchaudio.load(audio)
122
+ print(f"\033[92mDEBUG\033[0m: Loaded audio from path with shape: {audio_data.shape}")
123
  else:
124
  return f"Error: Unsupported audio format. Got {type(audio)}"
125
 
126
+ # Create a temporary file path for the audio and image
127
+ temp_dir = "temp"
128
+ os.makedirs(temp_dir, exist_ok=True)
129
+
130
+ temp_audio_path = os.path.join(temp_dir, "temp_audio.wav")
131
+ temp_image_path = os.path.join(temp_dir, "temp_image.jpg")
132
+
133
+ # Import necessary libraries
134
+ from PIL import Image
135
+
136
+ # Audio handling - direct processing from the data in memory
137
  if isinstance(audio_data, np.ndarray):
138
+ # Convert numpy array to tensor
139
+ print(f"\033[92mDEBUG\033[0m: Converting numpy audio with shape {audio_data.shape} to tensor")
140
  audio_tensor = torch.tensor(audio_data).float()
141
+
142
+ # Handle different audio dimensions
143
+ if audio_data.ndim == 1:
144
+ # Single channel audio
145
+ audio_tensor = audio_tensor.unsqueeze(0)
146
+ elif audio_data.ndim == 2:
147
+ # Ensure channels are first dimension
148
+ if audio_data.shape[0] > audio_data.shape[1]:
149
+ # More rows than columns, probably (samples, channels)
150
+ audio_tensor = torch.tensor(audio_data.T).float()
151
  else:
152
+ # Already a tensor
153
  audio_tensor = audio_data.float()
154
 
155
+ print(f"\033[92mDEBUG\033[0m: Audio tensor shape before processing: {audio_tensor.shape}")
156
+
157
+ # Skip saving/loading and process directly
158
  mfcc = app_process_audio_data(audio_tensor, sample_rate)
159
+ print(f"\033[92mDEBUG\033[0m: MFCC tensor shape after processing: {mfcc.shape if mfcc is not None else None}")
 
160
 
161
+ # Image handling
162
  if isinstance(image, np.ndarray):
163
+ print(f"\033[92mDEBUG\033[0m: Converting numpy image with shape {image.shape} to PIL")
164
+ pil_image = Image.fromarray(image)
165
+ pil_image.save(temp_image_path)
166
+ print(f"\033[92mDEBUG\033[0m: Saved image to {temp_image_path}")
167
  elif isinstance(image, str):
168
+ # If image is already a path
169
+ temp_image_path = image
170
+ print(f"\033[92mDEBUG\033[0m: Using provided image path: {temp_image_path}")
171
  else:
172
  return f"Error: Unsupported image format. Got {type(image)}"
173
 
174
+ # Process image
175
+ print(f"\033[92mDEBUG\033[0m: Loading and preprocessing image from {temp_image_path}")
176
+ image_tensor = torchvision.io.read_image(temp_image_path)
177
+ print(f"\033[92mDEBUG\033[0m: Loaded image shape: {image_tensor.shape}")
178
  image_tensor = image_tensor.float()
179
  processed_image = process_image_data(image_tensor)
180
+ print(f"\033[92mDEBUG\033[0m: Processed image shape: {processed_image.shape if processed_image is not None else None}")
 
181
 
182
+ # Add batch dimension for inference and move to device
183
+ if mfcc is not None:
184
+ mfcc = mfcc.unsqueeze(0).to(device)
185
+ print(f"\033[92mDEBUG\033[0m: Final MFCC shape with batch dimension: {mfcc.shape}")
186
 
187
+ if processed_image is not None:
188
+ processed_image = processed_image.unsqueeze(0).to(device)
189
+ print(f"\033[92mDEBUG\033[0m: Final image shape with batch dimension: {processed_image.shape}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
 
191
+ # Run inference
192
+ print(f"\033[92mDEBUG\033[0m: Running inference on device: {device}")
193
+ if mfcc is not None and processed_image is not None:
194
+ with torch.no_grad():
195
+ brix_value = model(mfcc, processed_image)
196
+ print(f"\033[92mDEBUG\033[0m: Prediction successful: {brix_value.item()}")
197
+ else:
198
+ return "Error: Failed to process inputs. Please check the debug logs."
 
 
 
 
 
 
 
 
 
199
 
200
+ # Format the result with a range display
201
+ if brix_value is not None:
202
+ brix_score = brix_value.item()
203
+
204
+ # Create a header with the numerical result
205
+ result = f"🍉 Predicted Sugar Content: {brix_score:.1f}° Brix 🍉\n\n"
206
+
207
+ # Add Brix scale visualization
208
+ result += "Sugar Content Scale (in °Brix):\n"
209
+ result += "──────────────────────────────────\n"
210
+
211
+ # Create the scale display with Brix ranges
212
+ scale_ranges = [
213
+ (0, 8, "Low Sugar (< 8° Brix)"),
214
+ (8, 9, "Mild Sweetness (8-9° Brix)"),
215
+ (9, 10, "Medium Sweetness (9-10° Brix)"),
216
+ (10, 11, "Sweet (10-11° Brix)"),
217
+ (11, 13, "Very Sweet (11-13° Brix)")
218
+ ]
219
+
220
+ # Find which category the prediction falls into
221
+ user_category = None
222
+ for min_val, max_val, category_name in scale_ranges:
223
+ if min_val <= brix_score < max_val:
224
+ user_category = category_name
225
+ break
226
+ if brix_score >= scale_ranges[-1][0]: # Handle edge case
227
+ user_category = scale_ranges[-1][2]
228
+
229
+ # Display the scale with the user's result highlighted
230
+ for min_val, max_val, category_name in scale_ranges:
231
+ if category_name == user_category:
232
+ result += f"▶ {min_val}-{max_val}: {category_name} ◀ (YOUR WATERMELON)\n"
233
+ else:
234
+ result += f" {min_val}-{max_val}: {category_name}\n"
235
+
236
+ result += "──────────────────────────────────\n\n"
237
+
238
+ # Add assessment of the watermelon's sugar content
239
+ if brix_score < 8:
240
+ result += "Assessment: This watermelon has low sugar content. It may taste bland or slightly bitter."
241
+ elif brix_score < 9:
242
+ result += "Assessment: This watermelon has mild sweetness. Acceptable flavor but not very sweet."
243
+ elif brix_score < 10:
244
+ result += "Assessment: This watermelon has moderate sugar content. It should have pleasant sweetness."
245
+ elif brix_score < 11:
246
+ result += "Assessment: This watermelon has good sugar content! It should be sweet and juicy."
247
  else:
248
+ result += "Assessment: This watermelon has excellent sugar content! Perfect choice for maximum sweetness and flavor."
249
+
250
+ return result
 
 
 
 
 
 
 
 
 
 
251
  else:
252
+ return "Error: Could not predict sugar content. Please try again with different inputs."
253
+
 
254
  except Exception as e:
255
  import traceback
256
  error_msg = f"Error: {str(e)}\n\n"
257
  error_msg += traceback.format_exc()
258
  print(f"\033[91mERR!\033[0m: {error_msg}")
259
  return error_msg
260
+
261
+ print("\033[92mINFO\033[0m: GPU-accelerated prediction function created with @spaces.GPU decorator")
262
+
263
 
264
+ def create_app(model_path):
265
  """Create and launch the Gradio interface"""
266
  # Define the prediction function with model path
267
  def predict_fn(audio, image):
268
+ return predict_sugar_content(audio, image, model_path)
269
 
270
  # Create Gradio interface
271
+ with gr.Blocks(title="Watermelon Sugar Content Predictor", theme=gr.themes.Soft()) as interface:
272
+ gr.Markdown("# 🍉 Watermelon Sugar Content Predictor")
273
  gr.Markdown("""
274
  This app predicts the sugar content (in °Brix) of a watermelon based on its sound and appearance.
275
 
 
 
 
 
 
 
 
 
276
  ## Instructions:
277
  1. Upload or record an audio of tapping the watermelon
278
  2. Upload or capture an image of the watermelon
 
286
  submit_btn = gr.Button("Predict Sugar Content", variant="primary")
287
 
288
  with gr.Column():
289
+ output = gr.Textbox(label="Prediction Results", lines=12)
290
 
291
  submit_btn.click(
292
  fn=predict_fn,
 
302
  ## About Brix Measurement
303
  Brix (°Bx) is a measurement of sugar content in a solution. For watermelons, higher Brix values indicate sweeter fruit.
304
  The average ripe watermelon has a Brix value between 9-11°.
 
 
 
 
 
305
  """)
306
 
307
  return interface
 
309
  if __name__ == "__main__":
310
  import argparse
311
 
312
+ parser = argparse.ArgumentParser(description="Watermelon Sugar Content Prediction App")
313
  parser.add_argument(
314
+ "--model_path",
315
  type=str,
316
+ default="models/watermelon_model_final.pt",
317
+ help="Path to the trained model file"
318
  )
319
  parser.add_argument(
320
  "--share",
 
326
  action="store_true",
327
  help="Enable verbose debug output"
328
  )
 
 
 
 
 
 
 
329
 
330
  args = parser.parse_args()
331
 
332
  if args.debug:
333
  print(f"\033[92mINFO\033[0m: Debug mode enabled")
334
 
335
+ # Check if model exists
336
+ if not os.path.exists(args.model_path):
337
+ print(f"\033[91mERR!\033[0m: Model not found at {args.model_path}")
338
+ print("\033[92mINFO\033[0m: Please train a model first or provide a valid model path")
339
  sys.exit(1)
340
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
341
  # Create and launch the app
342
+ app = create_app(args.model_path)
343
  app.launch(share=args.share)
app_moe.py CHANGED
@@ -5,7 +5,6 @@ import numpy as np
5
  import gradio as gr
6
  import torchaudio
7
  import torchvision
8
- import spaces
9
  import json
10
 
11
  # Add parent directory to path to import preprocess functions
@@ -34,11 +33,10 @@ class WatermelonMoEModel(torch.nn.Module):
34
  weights: Optional list of weights for each model (None for equal weighting)
35
  """
36
  super(WatermelonMoEModel, self).__init__()
37
- self.models = torch.nn.ModuleList() # Use ModuleList instead of regular list
38
  self.model_configs = model_configs
39
 
40
  # Load each model
41
- loaded_count = 0
42
  for config in model_configs:
43
  img_backbone = config["image_backbone"]
44
  audio_backbone = config["audio_backbone"]
@@ -50,31 +48,22 @@ class WatermelonMoEModel(torch.nn.Module):
50
  model_path = os.path.join(model_dir, f"{img_backbone}_{audio_backbone}_model.pt")
51
  if os.path.exists(model_path):
52
  print(f"\033[92mINFO\033[0m: Loading model {img_backbone}_{audio_backbone} from {model_path}")
53
- try:
54
- model.load_state_dict(torch.load(model_path, map_location='cpu'))
55
- model.eval() # Set to evaluation mode
56
- self.models.append(model)
57
- loaded_count += 1
58
- except Exception as e:
59
- print(f"\033[91mERR!\033[0m: Failed to load model from {model_path}: {e}")
60
- continue
61
  else:
62
  print(f"\033[91mERR!\033[0m: Model checkpoint not found at {model_path}")
63
  continue
 
 
 
64
 
65
- # Add a dummy parameter if no models were loaded to prevent StopIteration
66
- if loaded_count == 0:
67
- print(f"\033[91mERR!\033[0m: No models were successfully loaded!")
68
- self.dummy_param = torch.nn.Parameter(torch.zeros(1))
69
-
70
  # Set model weights (uniform by default)
71
- if weights and loaded_count > 0:
72
  assert len(weights) == len(self.models), "Number of weights must match number of models"
73
  self.weights = weights
74
  else:
75
- self.weights = [1.0 / max(loaded_count, 1)] * max(loaded_count, 1)
76
 
77
- print(f"\033[92mINFO\033[0m: Loaded {loaded_count} models for MoE ensemble")
78
  print(f"\033[92mINFO\033[0m: Model weights: {self.weights}")
79
 
80
  def to(self, device):
@@ -90,10 +79,9 @@ class WatermelonMoEModel(torch.nn.Module):
90
  Forward pass through the MoE model.
91
  Returns the weighted average of all model outputs.
92
  """
93
- # Check if we have models loaded
94
  if not self.models:
95
  print(f"\033[91mERR!\033[0m: No models available for inference!")
96
- return torch.tensor([0.0], device=mfcc.device) # Return a default value
97
 
98
  outputs = []
99
 
@@ -101,6 +89,8 @@ class WatermelonMoEModel(torch.nn.Module):
101
  with torch.no_grad():
102
  for i, model in enumerate(self.models):
103
  output = model(mfcc, image)
 
 
104
  outputs.append(output * self.weights[i])
105
 
106
  # Return weighted average
@@ -161,201 +151,118 @@ def app_process_audio_data(waveform, sample_rate):
161
  return None
162
 
163
  # Using the decorator for GPU acceleration
164
- @spaces.GPU
165
  def predict_sugar_content(audio, image, model_dir="models", weights=None):
166
  """Function with GPU acceleration to predict watermelon sugar content in Brix using MoE model"""
167
  try:
168
  # Check CUDA availability inside the GPU-decorated function
169
- if torch.cuda.is_available():
170
- device = torch.device("cuda")
171
- print(f"\033[92mINFO\033[0m: CUDA is available. Using device: {device}")
172
- else:
173
- device = torch.device("cpu")
174
- print(f"\033[92mINFO\033[0m: CUDA is not available. Using device: {device}")
175
 
176
  # Load MoE model
177
  moe_model = WatermelonMoEModel(TOP_MODELS, model_dir, weights)
178
- # Explicitly move the entire model to device
179
- moe_model = moe_model.to(device)
180
  moe_model.eval()
181
  print(f"\033[92mINFO\033[0m: Loaded MoE model with {len(moe_model.models)} backbone models")
182
 
183
- # Debug information about input types
184
- print(f"\033[92mDEBUG\033[0m: Audio input type: {type(audio)}")
185
- print(f"\033[92mDEBUG\033[0m: Audio input shape/length: {len(audio)}")
186
- print(f"\033[92mDEBUG\033[0m: Image input type: {type(image)}")
187
- if isinstance(image, np.ndarray):
188
- print(f"\033[92mDEBUG\033[0m: Image input shape: {image.shape}")
189
-
190
  # Handle different audio input formats
191
- if isinstance(audio, tuple) and len(audio) == 2:
192
- # Standard Gradio format: (sample_rate, audio_data)
193
- sample_rate, audio_data = audio
194
- print(f"\033[92mDEBUG\033[0m: Audio sample rate: {sample_rate}")
195
- print(f"\033[92mDEBUG\033[0m: Audio data shape: {audio_data.shape}")
196
- elif isinstance(audio, tuple) and len(audio) > 2:
197
- # Sometimes Gradio returns (sample_rate, audio_data, other_info...)
198
- sample_rate, audio_data = audio[0], audio[-1]
199
- print(f"\033[92mDEBUG\033[0m: Audio sample rate: {sample_rate}")
200
- print(f"\033[92mDEBUG\033[0m: Audio data shape: {audio_data.shape}")
201
  elif isinstance(audio, str):
202
- # Direct path to audio file
203
  audio_data, sample_rate = torchaudio.load(audio)
204
- print(f"\033[92mDEBUG\033[0m: Loaded audio from path with shape: {audio_data.shape}")
205
  else:
206
  return f"Error: Unsupported audio format. Got {type(audio)}"
207
 
208
- # Create a temporary file path for the audio and image
209
- temp_dir = "temp"
210
- os.makedirs(temp_dir, exist_ok=True)
211
-
212
- temp_audio_path = os.path.join(temp_dir, "temp_audio.wav")
213
- temp_image_path = os.path.join(temp_dir, "temp_image.jpg")
214
-
215
- # Import necessary libraries
216
- from PIL import Image
217
-
218
- # Audio handling - direct processing from the data in memory
219
  if isinstance(audio_data, np.ndarray):
220
- # Convert numpy array to tensor
221
- print(f"\033[92mDEBUG\033[0m: Converting numpy audio with shape {audio_data.shape} to tensor")
222
  audio_tensor = torch.tensor(audio_data).float()
223
-
224
- # Handle different audio dimensions
225
- if audio_data.ndim == 1:
226
- # Single channel audio
227
- audio_tensor = audio_tensor.unsqueeze(0)
228
- elif audio_data.ndim == 2:
229
- # Ensure channels are first dimension
230
- if audio_data.shape[0] > audio_data.shape[1]:
231
- # More rows than columns, probably (samples, channels)
232
- audio_tensor = torch.tensor(audio_data.T).float()
233
  else:
234
- # Already a tensor
235
  audio_tensor = audio_data.float()
236
 
237
- print(f"\033[92mDEBUG\033[0m: Audio tensor shape before processing: {audio_tensor.shape}")
238
-
239
- # Skip saving/loading and process directly
240
  mfcc = app_process_audio_data(audio_tensor, sample_rate)
241
- print(f"\033[92mDEBUG\033[0m: MFCC tensor shape after processing: {mfcc.shape if mfcc is not None else None}")
 
242
 
243
- # Image handling
244
  if isinstance(image, np.ndarray):
245
- print(f"\033[92mDEBUG\033[0m: Converting numpy image with shape {image.shape} to PIL")
246
- pil_image = Image.fromarray(image)
247
- pil_image.save(temp_image_path)
248
- print(f"\033[92mDEBUG\033[0m: Saved image to {temp_image_path}")
249
  elif isinstance(image, str):
250
- # If image is already a path
251
- temp_image_path = image
252
- print(f"\033[92mDEBUG\033[0m: Using provided image path: {temp_image_path}")
253
  else:
254
  return f"Error: Unsupported image format. Got {type(image)}"
255
 
256
- # Process image
257
- print(f"\033[92mDEBUG\033[0m: Loading and preprocessing image from {temp_image_path}")
258
- image_tensor = torchvision.io.read_image(temp_image_path)
259
- print(f"\033[92mDEBUG\033[0m: Loaded image shape: {image_tensor.shape}")
260
  image_tensor = image_tensor.float()
261
  processed_image = process_image_data(image_tensor)
262
- print(f"\033[92mDEBUG\033[0m: Processed image shape: {processed_image.shape if processed_image is not None else None}")
263
-
264
- # Add batch dimension for inference and move to device
265
- if mfcc is not None:
266
- # Ensure mfcc is on the same device as the model
267
- mfcc = mfcc.unsqueeze(0).to(device)
268
- print(f"\033[92mDEBUG\033[0m: Final MFCC shape with batch dimension: {mfcc.shape}, device: {mfcc.device}")
269
-
270
- if processed_image is not None:
271
- # Ensure processed_image is on the same device as the model
272
- processed_image = processed_image.unsqueeze(0).to(device)
273
- print(f"\033[92mDEBUG\033[0m: Final image shape with batch dimension: {processed_image.shape}, device: {processed_image.device}")
274
-
275
- # Double-check model is on the correct device
276
- try:
277
- param = next(moe_model.parameters())
278
- print(f"\033[92mDEBUG\033[0m: MoE model device: {param.device}")
279
-
280
- # Check individual models
281
- for i, model in enumerate(moe_model.models):
282
- try:
283
- model_param = next(model.parameters())
284
- print(f"\033[92mDEBUG\033[0m: Model {i} device: {model_param.device}")
285
- except StopIteration:
286
- print(f"\033[91mERR!\033[0m: Model {i} has no parameters!")
287
- except StopIteration:
288
- print(f"\033[91mERR!\033[0m: MoE model has no parameters!")
289
-
290
- # Run inference with MoE model
291
- print(f"\033[92mDEBUG\033[0m: Running inference with MoE model on device: {device}")
292
- if mfcc is not None and processed_image is not None:
293
- with torch.no_grad():
294
- brix_value = moe_model(mfcc, processed_image)
295
- print(f"\033[92mDEBUG\033[0m: Prediction successful: {brix_value.item()}")
296
- else:
297
- return "Error: Failed to process inputs. Please check the debug logs."
298
 
299
- # Format the result with a range display
300
- if brix_value is not None:
301
- brix_score = brix_value.item()
302
-
303
- # Create a header with the numerical result
304
- result = f"🍉 Predicted Sugar Content: {brix_score:.1f}° Brix 🍉\n\n"
305
-
306
- # Add extra info about the MoE model
307
- result += "Using Ensemble of Top-3 Models:\n"
308
- result += "- EfficientNet-B3 + Transformer\n"
309
- result += "- EfficientNet-B0 + Transformer\n"
310
- result += "- ResNet-50 + Transformer\n\n"
311
-
312
- # Add Brix scale visualization
313
- result += "Sugar Content Scale (in °Brix):\n"
314
- result += "──────────────────────────────────\n"
315
-
316
- # Create the scale display with Brix ranges
317
- scale_ranges = [
318
- (0, 8, "Low Sugar (< 8° Brix)"),
319
- (8, 9, "Mild Sweetness (8-9° Brix)"),
320
- (9, 10, "Medium Sweetness (9-10° Brix)"),
321
- (10, 11, "Sweet (10-11° Brix)"),
322
- (11, 13, "Very Sweet (11-13° Brix)")
323
- ]
324
-
325
- # Find which category the prediction falls into
326
- user_category = None
327
- for min_val, max_val, category_name in scale_ranges:
328
- if min_val <= brix_score < max_val:
329
- user_category = category_name
330
- break
331
- if brix_score >= scale_ranges[-1][0]: # Handle edge case
332
- user_category = scale_ranges[-1][2]
333
-
334
- # Display the scale with the user's result highlighted
335
- for min_val, max_val, category_name in scale_ranges:
336
- if category_name == user_category:
337
- result += f"▶ {min_val}-{max_val}: {category_name} ◀ (YOUR WATERMELON)\n"
338
- else:
339
- result += f" {min_val}-{max_val}: {category_name}\n"
340
-
341
- result += "──────────────────────────────────\n\n"
342
 
343
- # Add assessment of the watermelon's sugar content
344
- if brix_score < 8:
345
- result += "Assessment: This watermelon has low sugar content. It may taste bland or slightly bitter."
346
- elif brix_score < 9:
347
- result += "Assessment: This watermelon has mild sweetness. Acceptable flavor but not very sweet."
348
- elif brix_score < 10:
349
- result += "Assessment: This watermelon has moderate sugar content. It should have pleasant sweetness."
350
- elif brix_score < 11:
351
- result += "Assessment: This watermelon has good sugar content! It should be sweet and juicy."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352
  else:
353
- result += "Assessment: This watermelon has excellent sugar content! Perfect choice for maximum sweetness and flavor."
354
-
355
- return result
 
 
 
 
 
 
 
 
 
 
356
  else:
357
- return "Error: Could not predict sugar content. Please try again with different inputs."
358
-
 
359
  except Exception as e:
360
  import traceback
361
  error_msg = f"Error: {str(e)}\n\n"
 
5
  import gradio as gr
6
  import torchaudio
7
  import torchvision
 
8
  import json
9
 
10
  # Add parent directory to path to import preprocess functions
 
33
  weights: Optional list of weights for each model (None for equal weighting)
34
  """
35
  super(WatermelonMoEModel, self).__init__()
36
+ self.models = []
37
  self.model_configs = model_configs
38
 
39
  # Load each model
 
40
  for config in model_configs:
41
  img_backbone = config["image_backbone"]
42
  audio_backbone = config["audio_backbone"]
 
48
  model_path = os.path.join(model_dir, f"{img_backbone}_{audio_backbone}_model.pt")
49
  if os.path.exists(model_path):
50
  print(f"\033[92mINFO\033[0m: Loading model {img_backbone}_{audio_backbone} from {model_path}")
51
+ model.load_state_dict(torch.load(model_path, map_location='cpu'))
 
 
 
 
 
 
 
52
  else:
53
  print(f"\033[91mERR!\033[0m: Model checkpoint not found at {model_path}")
54
  continue
55
+
56
+ model.eval() # Set to evaluation mode
57
+ self.models.append(model)
58
 
 
 
 
 
 
59
  # Set model weights (uniform by default)
60
+ if weights:
61
  assert len(weights) == len(self.models), "Number of weights must match number of models"
62
  self.weights = weights
63
  else:
64
+ self.weights = [1.0 / len(self.models)] * len(self.models) if self.models else [1.0]
65
 
66
+ print(f"\033[92mINFO\033[0m: Loaded {len(self.models)} models for MoE ensemble")
67
  print(f"\033[92mINFO\033[0m: Model weights: {self.weights}")
68
 
69
  def to(self, device):
 
79
  Forward pass through the MoE model.
80
  Returns the weighted average of all model outputs.
81
  """
 
82
  if not self.models:
83
  print(f"\033[91mERR!\033[0m: No models available for inference!")
84
+ return torch.tensor([0.0], device=mfcc.device)
85
 
86
  outputs = []
87
 
 
89
  with torch.no_grad():
90
  for i, model in enumerate(self.models):
91
  output = model(mfcc, image)
92
+ # print the output value
93
+ print(f"\033[92mDEBUG\033[0m: Model {i} output: {output}")
94
  outputs.append(output * self.weights[i])
95
 
96
  # Return weighted average
 
151
  return None
152
 
153
  # Using the decorator for GPU acceleration
 
154
  def predict_sugar_content(audio, image, model_dir="models", weights=None):
155
  """Function with GPU acceleration to predict watermelon sugar content in Brix using MoE model"""
156
  try:
157
  # Check CUDA availability inside the GPU-decorated function
158
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
159
+ print(f"\033[92mINFO\033[0m: Using device: {device}")
 
 
 
 
160
 
161
  # Load MoE model
162
  moe_model = WatermelonMoEModel(TOP_MODELS, model_dir, weights)
163
+ moe_model = moe_model.to(device) # Move entire model to device
 
164
  moe_model.eval()
165
  print(f"\033[92mINFO\033[0m: Loaded MoE model with {len(moe_model.models)} backbone models")
166
 
 
 
 
 
 
 
 
167
  # Handle different audio input formats
168
+ if isinstance(audio, tuple) and len(audio) >= 2:
169
+ sample_rate, audio_data = audio[0], audio[1] if len(audio) == 2 else audio[-1]
 
 
 
 
 
 
 
 
170
  elif isinstance(audio, str):
 
171
  audio_data, sample_rate = torchaudio.load(audio)
 
172
  else:
173
  return f"Error: Unsupported audio format. Got {type(audio)}"
174
 
175
+ # Convert audio to tensor if needed
 
 
 
 
 
 
 
 
 
 
176
  if isinstance(audio_data, np.ndarray):
 
 
177
  audio_tensor = torch.tensor(audio_data).float()
 
 
 
 
 
 
 
 
 
 
178
  else:
 
179
  audio_tensor = audio_data.float()
180
 
181
+ # Process audio
 
 
182
  mfcc = app_process_audio_data(audio_tensor, sample_rate)
183
+ if mfcc is None:
184
+ return "Error: Failed to process audio input"
185
 
186
+ # Process image
187
  if isinstance(image, np.ndarray):
188
+ image_tensor = torch.from_numpy(image).permute(2, 0, 1) # Convert to CxHxW format
 
 
 
189
  elif isinstance(image, str):
190
+ image_tensor = torchvision.io.read_image(image)
 
 
191
  else:
192
  return f"Error: Unsupported image format. Got {type(image)}"
193
 
 
 
 
 
194
  image_tensor = image_tensor.float()
195
  processed_image = process_image_data(image_tensor)
196
+ if processed_image is None:
197
+ return "Error: Failed to process image input"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
 
199
+ # Add batch dimension and move to device
200
+ mfcc = mfcc.unsqueeze(0).to(device)
201
+ processed_image = processed_image.unsqueeze(0).to(device)
202
+
203
+ # Run inference
204
+ with torch.no_grad():
205
+ brix_value = moe_model(mfcc, processed_image)
206
+ prediction = brix_value.item()
207
+ print(f"\033[92mDEBUG\033[0m: Raw prediction: {prediction}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
 
209
+ # Ensure prediction is within reasonable bounds (e.g., 6-13 Brix)
210
+ prediction = max(6.0, min(13.0, prediction))
211
+ print(f"\033[92mDEBUG\033[0m: Bounded prediction: {prediction}")
212
+
213
+ # Format the result
214
+ result = f"🍉 Predicted Sugar Content: {prediction:.1f}° Brix 🍉\n\n"
215
+
216
+ # Add extra info about the MoE model
217
+ result += "Using Ensemble of Top-3 Models:\n"
218
+ result += "- EfficientNet-B3 + Transformer\n"
219
+ result += "- EfficientNet-B0 + Transformer\n"
220
+ result += "- ResNet-50 + Transformer\n\n"
221
+
222
+ # Add Brix scale visualization
223
+ result += "Sugar Content Scale (in °Brix):\n"
224
+ result += "──────────────────────────────────\n"
225
+
226
+ # Create the scale display with Brix ranges
227
+ scale_ranges = [
228
+ (0, 8, "Low Sugar (< 8° Brix)"),
229
+ (8, 9, "Mild Sweetness (8-9° Brix)"),
230
+ (9, 10, "Medium Sweetness (9-10° Brix)"),
231
+ (10, 11, "Sweet (10-11° Brix)"),
232
+ (11, 13, "Very Sweet (11-13° Brix)")
233
+ ]
234
+
235
+ # Find which category the prediction falls into
236
+ user_category = None
237
+ for min_val, max_val, category_name in scale_ranges:
238
+ if min_val <= prediction < max_val:
239
+ user_category = category_name
240
+ break
241
+ if prediction >= scale_ranges[-1][0]: # Handle edge case
242
+ user_category = scale_ranges[-1][2]
243
+
244
+ # Display the scale with the user's result highlighted
245
+ for min_val, max_val, category_name in scale_ranges:
246
+ if category_name == user_category:
247
+ result += f"▶ {min_val}-{max_val}: {category_name} ◀ (YOUR WATERMELON)\n"
248
  else:
249
+ result += f" {min_val}-{max_val}: {category_name}\n"
250
+
251
+ result += "──────────────────────────────────\n\n"
252
+
253
+ # Add assessment of the watermelon's sugar content
254
+ if prediction < 8:
255
+ result += "Assessment: This watermelon has low sugar content. It may taste bland or slightly bitter."
256
+ elif prediction < 9:
257
+ result += "Assessment: This watermelon has mild sweetness. Acceptable flavor but not very sweet."
258
+ elif prediction < 10:
259
+ result += "Assessment: This watermelon has moderate sugar content. It should have pleasant sweetness."
260
+ elif prediction < 11:
261
+ result += "Assessment: This watermelon has good sugar content! It should be sweet and juicy."
262
  else:
263
+ result += "Assessment: This watermelon has excellent sugar content! Perfect choice for maximum sweetness and flavor."
264
+
265
+ return result
266
  except Exception as e:
267
  import traceback
268
  error_msg = f"Error: {str(e)}\n\n"
moe_evaluation_results.json CHANGED
@@ -1,801 +1,801 @@
1
  {
2
- "moe_test_mae": 0.2067064680159092,
3
- "moe_test_mse": 0.06013735262677074,
4
  "true_labels": [
5
  11.100000381469727,
6
- 9.399999618530273,
7
- 9.399999618530273,
8
- 10.300000190734863,
9
- 10.300000190734863,
10
  8.699999809265137,
 
 
 
11
  9.600000381469727,
12
- 9.399999618530273,
13
- 10.300000190734863,
14
  12.699999809265137,
 
15
  10.899999618530273,
16
- 12.699999809265137,
17
  11.0,
18
- 12.699999809265137,
19
  8.699999809265137,
 
20
  11.600000381469727,
 
 
 
21
  11.0,
 
 
 
22
  11.0,
23
- 10.300000190734863,
 
24
  11.0,
25
- 9.600000381469727,
26
  11.100000381469727,
27
- 10.5,
28
- 9.699999809265137,
29
- 9.0,
 
 
 
30
  10.199999809265137,
31
- 10.399999618530273,
32
- 10.300000190734863,
33
- 9.699999809265137,
34
- 10.399999618530273,
35
  12.699999809265137,
 
 
 
 
36
  9.399999618530273,
 
 
 
37
  9.399999618530273,
38
- 9.600000381469727,
 
 
 
39
  9.399999618530273,
40
- 10.300000190734863,
41
  9.399999618530273,
42
- 10.300000190734863,
43
- 11.0,
44
- 12.699999809265137,
45
  9.399999618530273,
46
- 11.0,
47
- 8.699999809265137,
48
  10.800000190734863,
49
- 10.300000190734863,
50
- 10.899999618530273,
51
  11.0,
 
 
 
 
 
52
  10.899999618530273,
53
- 10.300000190734863,
 
 
54
  11.0,
 
55
  11.100000381469727,
 
56
  9.399999618530273,
57
- 10.5,
58
- 11.600000381469727,
59
  10.300000190734863,
60
- 9.0,
 
 
 
61
  9.399999618530273,
 
 
 
 
 
 
62
  9.399999618530273,
 
63
  11.600000381469727,
64
- 10.0,
65
  9.399999618530273,
 
66
  10.399999618530273,
 
67
  10.300000190734863,
 
 
 
 
 
 
 
 
 
 
 
68
  8.699999809265137,
69
- 12.699999809265137,
 
70
  10.300000190734863,
71
  9.399999618530273,
72
  10.300000190734863,
 
73
  10.199999809265137,
74
- 9.399999618530273,
75
- 9.600000381469727,
76
  11.600000381469727,
77
  10.5,
78
- 9.0,
 
79
  11.0,
 
 
 
 
80
  11.600000381469727,
81
  11.0,
82
- 8.699999809265137,
83
- 9.399999618530273,
84
- 12.699999809265137,
85
  11.100000381469727,
86
- 9.399999618530273,
87
- 9.399999618530273,
88
- 10.899999618530273,
89
  10.300000190734863,
 
 
 
90
  9.699999809265137,
91
- 11.600000381469727,
92
  11.0,
93
  9.699999809265137,
94
- 8.699999809265137,
95
- 10.399999618530273,
96
  10.300000190734863,
97
- 10.399999618530273,
98
- 10.399999618530273,
99
- 10.199999809265137,
100
  11.0,
101
- 10.5,
 
102
  12.699999809265137,
103
- 11.0,
104
- 10.800000190734863,
105
- 10.5,
106
  10.300000190734863,
107
  10.300000190734863,
108
- 9.399999618530273,
109
- 11.0,
110
- 9.699999809265137,
111
- 10.300000190734863,
112
- 12.699999809265137,
113
- 11.0,
114
- 9.399999618530273,
115
- 11.100000381469727,
116
- 9.600000381469727,
117
- 10.5,
118
- 10.0,
119
- 10.5,
120
- 9.600000381469727,
121
- 11.600000381469727,
122
- 11.0,
123
- 8.699999809265137,
124
- 11.0,
125
- 11.0,
126
- 9.699999809265137,
127
- 10.800000190734863,
128
- 9.399999618530273,
129
- 9.399999618530273,
130
  10.899999618530273,
131
- 10.199999809265137,
132
- 8.699999809265137,
133
- 10.399999618530273,
134
  9.399999618530273,
135
  9.0,
136
- 11.100000381469727,
137
- 8.699999809265137,
138
  10.300000190734863,
139
  11.600000381469727,
140
- 10.0,
141
- 10.899999618530273,
142
  11.0,
143
- 9.699999809265137,
144
- 10.0,
145
- 11.100000381469727,
146
- 9.699999809265137,
147
- 10.5,
148
  8.699999809265137,
149
- 9.600000381469727,
150
- 10.399999618530273,
151
  11.0,
152
- 11.100000381469727,
153
- 10.800000190734863,
154
- 9.0,
155
- 10.0,
156
  11.0,
157
- 10.300000190734863,
158
- 9.399999618530273,
159
- 9.699999809265137,
160
- 12.699999809265137,
161
  9.0
162
  ],
163
  "moe_predictions": [
164
- 11.608917236328125,
165
- 9.741426467895508,
166
- 9.461359024047852,
167
- 10.487305641174316,
168
- 10.319334983825684,
169
- 8.653582572937012,
170
- 9.749049186706543,
171
- 9.319536209106445,
172
- 10.338312149047852,
173
- 12.966812133789062,
174
- 11.055685043334961,
175
  13.093341827392578,
176
- 11.134803771972656,
177
- 13.054267883300781,
178
- 9.044750213623047,
179
- 12.060381889343262,
180
- 11.135326385498047,
181
- 11.014484405517578,
182
- 10.392723083496094,
183
- 11.37826156616211,
184
- 10.060087203979492,
185
- 11.353907585144043,
186
- 10.72860050201416,
187
- 9.777619361877441,
188
- 9.150984764099121,
189
- 10.573850631713867,
190
- 10.46796989440918,
191
- 10.479241371154785,
192
- 9.75227165222168,
193
  10.527164459228516,
194
- 13.064764976501465,
195
- 9.474852561950684,
196
- 9.668087005615234,
197
- 9.823186874389648,
198
- 9.318197250366211,
199
- 10.484042167663574,
200
- 9.54578971862793,
201
- 10.413134574890137,
202
- 11.154340744018555,
203
- 13.079666137695312,
204
- 9.558942794799805,
205
- 11.153170585632324,
206
- 8.779823303222656,
207
- 11.030976295471191,
208
- 10.56929874420166,
209
- 11.015460968017578,
210
- 11.146952629089355,
211
- 11.136444091796875,
212
- 10.356411933898926,
213
- 11.381966590881348,
214
- 11.53759765625,
215
- 9.69221305847168,
216
- 10.891069412231445,
217
- 11.705709457397461,
218
- 10.507513999938965,
219
- 9.079387664794922,
220
- 9.473494529724121,
221
- 9.648874282836914,
222
- 11.7305908203125,
223
- 9.888289451599121,
224
- 9.338244438171387,
225
- 10.491485595703125,
226
- 10.797355651855469,
227
- 8.876679420471191,
228
- 12.945722579956055,
229
- 10.505922317504883,
230
- 9.545509338378906,
231
- 10.245137214660645,
232
- 10.609914779663086,
233
- 9.690855026245117,
234
- 9.788698196411133,
235
- 11.52328109741211,
236
- 10.893503189086914,
237
- 9.418478965759277,
238
- 11.218090057373047,
239
- 11.710685729980469,
240
- 10.888498306274414,
241
- 8.951180458068848,
242
- 9.556252479553223,
243
- 12.008685111999512,
244
- 11.203088760375977,
245
- 9.37525463104248,
246
- 9.686023712158203,
247
- 11.137346267700195,
248
- 10.356472969055176,
249
- 9.560345649719238,
250
- 11.539974212646484,
251
- 11.24638557434082,
252
- 9.592302322387695,
253
- 8.74775505065918,
254
- 10.552587509155273,
255
- 10.164124488830566,
256
- 10.536083221435547,
257
- 10.612926483154297,
258
- 10.58446979522705,
259
  11.010236740112305,
260
- 10.861842155456543,
261
- 12.990730285644531,
262
- 11.20481014251709,
263
- 11.203653335571289,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  10.694746017456055,
265
- 10.50363826751709,
266
- 10.627494812011719,
267
- 9.526586532592773,
268
- 11.152572631835938,
269
- 9.644195556640625,
270
- 10.509271621704102,
271
- 12.95602035522461,
272
- 11.141549110412598,
273
- 9.429258346557617,
274
- 11.232805252075195,
275
- 9.700346946716309,
276
- 10.68587875366211,
277
- 10.229130744934082,
278
- 10.715401649475098,
279
- 9.776931762695312,
280
- 11.698503494262695,
281
- 10.898889541625977,
282
- 8.892599105834961,
283
- 11.125198364257812,
284
- 10.992132186889648,
285
- 9.235944747924805,
286
- 11.17458724975586,
287
- 9.79542064666748,
288
- 9.371628761291504,
289
- 11.255684852600098,
290
- 10.605937957763672,
291
- 9.060511589050293,
 
 
 
 
 
 
 
 
 
292
  10.476083755493164,
293
- 9.548912048339844,
294
- 9.350934982299805,
295
- 11.556468963623047,
296
- 8.781621932983398,
297
- 10.605558395385742,
298
- 11.742720603942871,
299
- 10.156621932983398,
300
- 11.166330337524414,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301
  11.228448867797852,
302
- 9.908857345581055,
303
- 10.191004753112793,
304
- 11.530580520629883,
305
- 9.941258430480957,
306
- 10.884675025939941,
307
- 9.074652671813965,
308
- 9.77452278137207,
309
- 10.470745086669922,
310
- 11.077189445495605,
311
- 11.514217376708984,
312
- 11.264935493469238,
313
- 9.093061447143555,
314
- 10.090995788574219,
315
- 11.240152359008789,
316
- 10.398412704467773,
317
- 9.46157169342041,
318
- 9.580022811889648,
319
- 13.064597129821777,
320
- 9.182878494262695
 
 
 
 
 
321
  ],
322
  "individual_predictions": {
323
  "efficientnet_b3_transformer": [
324
- 11.339303016662598,
325
- 9.160046577453613,
326
- 9.141955375671387,
327
- 10.123801231384277,
328
- 9.975425720214844,
329
- 8.028714179992676,
330
- 9.226607322692871,
331
- 9.101340293884277,
332
- 10.290902137756348,
333
- 13.305447578430176,
334
- 10.197638511657715,
335
  13.537657737731934,
336
- 10.54432201385498,
337
- 13.52890396118164,
338
- 8.314106941223145,
339
- 11.723322868347168,
340
- 10.548056602478027,
341
- 10.766114234924316,
342
- 10.293607711791992,
343
- 10.927001953125,
344
- 9.803337097167969,
345
- 11.071410179138184,
346
- 10.097264289855957,
347
- 9.165467262268066,
348
- 8.166515350341797,
349
- 10.0133056640625,
350
- 10.137511253356934,
351
- 9.890531539916992,
352
- 9.145689964294434,
353
  10.485107421875,
354
- 13.939330101013184,
355
- 9.209654808044434,
356
- 9.333880424499512,
357
- 9.570420265197754,
358
- 8.978877067565918,
359
- 10.143651962280273,
360
- 9.263312339782715,
361
- 10.041259765625,
362
- 10.457343101501465,
363
- 13.546338081359863,
364
- 9.288726806640625,
365
- 10.456021308898926,
366
- 8.490445137023926,
367
- 10.460243225097656,
368
- 10.012919425964355,
369
- 11.114548683166504,
370
- 10.548954963684082,
371
- 10.77907657623291,
372
- 10.15251350402832,
373
- 10.923174858093262,
374
- 11.296109199523926,
375
- 9.368083000183105,
376
- 10.545008659362793,
377
- 11.159947395324707,
378
- 10.038147926330566,
379
- 8.497147560119629,
380
- 9.207659721374512,
381
- 9.170109748840332,
382
- 11.221556663513184,
383
- 9.174721717834473,
384
- 8.752867698669434,
385
- 10.336318969726562,
386
- 10.116740226745605,
387
- 8.14444637298584,
388
- 13.291146278381348,
389
- 10.12454891204834,
390
- 9.043634414672852,
391
- 9.82880687713623,
392
- 9.841523170471191,
393
- 9.366087913513184,
394
- 9.41323471069336,
395
- 10.771563529968262,
396
- 10.565585136413574,
397
- 8.822549819946289,
398
- 11.126303672790527,
399
- 11.17785358428955,
400
- 10.847918510437012,
401
- 8.105504035949707,
402
- 9.042283058166504,
403
- 11.476466178894043,
404
- 10.669010162353516,
405
- 8.949850082397461,
406
- 9.371846199035645,
407
- 11.209992408752441,
408
- 10.284793853759766,
409
- 8.732993125915527,
410
- 10.731574058532715,
411
- 10.698369026184082,
412
- 8.777587890625,
413
- 8.237317085266113,
414
- 10.505911827087402,
415
- 9.840256690979004,
416
- 10.486929893493652,
417
- 10.697690963745117,
418
- 10.00699520111084,
419
  10.793766975402832,
420
- 10.49045467376709,
421
- 14.00195026397705,
422
- 10.92188835144043,
423
- 11.09973430633545,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
  10.037339210510254,
425
- 10.13139533996582,
426
- 10.012660026550293,
427
- 8.973554611206055,
428
- 10.546631813049316,
429
- 9.004876136779785,
430
- 10.006653785705566,
431
- 13.256916999816895,
432
- 10.455121994018555,
433
- 9.511059761047363,
434
- 10.602723121643066,
435
- 9.374435424804688,
436
- 10.019323348999023,
437
- 9.987650871276855,
438
- 10.076990127563477,
439
- 9.511448860168457,
440
- 11.17209243774414,
441
- 10.794194221496582,
442
- 8.425066947937012,
443
- 10.724698066711426,
444
- 10.763283729553223,
445
- 8.875535011291504,
446
- 10.71423625946045,
447
- 9.314862251281738,
448
- 8.985882759094238,
449
- 11.253849983215332,
450
- 9.853181838989258,
451
- 8.331829071044922,
 
 
 
 
 
 
 
 
 
452
  10.341578483581543,
453
- 9.269180297851562,
454
- 8.643234252929688,
455
- 11.096152305603027,
456
- 8.507393836975098,
457
- 10.021732330322266,
458
- 11.22731876373291,
459
- 9.608407974243164,
460
- 10.589388847351074,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461
  10.327948570251465,
462
- 9.291131019592285,
463
- 9.988767623901367,
464
- 11.252240180969238,
465
- 9.299224853515625,
466
- 10.54757022857666,
467
- 8.331646919250488,
468
- 9.259908676147461,
469
- 10.290452003479004,
470
- 10.381683349609375,
471
- 11.2520170211792,
472
- 10.613112449645996,
473
- 8.515460014343262,
474
- 9.602897644042969,
475
- 10.69603443145752,
476
- 9.902280807495117,
477
- 9.069375038146973,
478
- 8.936785697937012,
479
- 13.536062240600586,
480
- 8.750259399414062
 
 
 
 
 
481
  ],
482
  "efficientnet_b0_transformer": [
483
- 11.985595703125,
484
- 10.36156177520752,
485
- 9.784621238708496,
486
- 10.845489501953125,
487
- 10.589117050170898,
488
- 8.855218887329102,
489
- 9.884342193603516,
490
- 9.477718353271484,
491
- 10.49835205078125,
492
- 13.499242782592773,
493
- 11.343120574951172,
494
  12.953442573547363,
495
- 11.393060684204102,
496
- 13.101705551147461,
497
- 9.225322723388672,
498
- 12.007133483886719,
499
- 11.39995002746582,
500
- 11.21767807006836,
501
- 10.430135726928711,
502
- 11.690134048461914,
503
- 9.993916511535645,
504
- 11.647773742675781,
505
- 11.226818084716797,
506
- 9.928828239440918,
507
- 9.873790740966797,
508
- 10.440296173095703,
509
- 10.689691543579102,
510
- 10.651750564575195,
511
- 10.012208938598633,
512
  10.37149429321289,
513
- 13.044389724731445,
514
- 9.652556419372559,
515
- 9.76612377166748,
516
- 10.0393705368042,
517
- 9.647960662841797,
518
- 10.770721435546875,
519
- 9.662923812866211,
520
- 10.81811809539795,
521
- 11.476736068725586,
522
- 12.968710899353027,
523
- 9.738420486450195,
524
- 11.47037124633789,
525
- 8.632101058959961,
526
- 11.185698509216309,
527
- 11.003364562988281,
528
- 10.891831398010254,
529
- 11.404769897460938,
530
- 11.49870777130127,
531
- 10.478404998779297,
532
- 11.697516441345215,
533
- 11.908629417419434,
534
- 9.77428150177002,
535
- 11.29122543334961,
536
- 11.484548568725586,
537
- 10.938173294067383,
538
- 9.57394027709961,
539
- 9.642441749572754,
540
- 9.688291549682617,
541
- 11.521190643310547,
542
- 10.456705093383789,
543
- 9.57772159576416,
544
- 10.563447952270508,
545
- 11.08597469329834,
546
- 9.118146896362305,
547
- 13.47038745880127,
548
- 10.913671493530273,
549
- 9.929350852966309,
550
- 10.526603698730469,
551
- 10.606958389282227,
552
- 9.764165878295898,
553
- 10.084386825561523,
554
- 11.6922607421875,
555
- 11.027682304382324,
556
- 9.797820091247559,
557
- 11.257314682006836,
558
- 12.267354011535645,
559
- 10.73689079284668,
560
- 9.154512405395508,
561
- 9.921629905700684,
562
- 12.784350395202637,
563
- 11.669108390808105,
564
- 9.659965515136719,
565
- 9.74787712097168,
566
- 11.229676246643066,
567
- 10.430813789367676,
568
- 9.788354873657227,
569
- 11.721125602722168,
570
- 11.825557708740234,
571
- 9.755647659301758,
572
- 8.926406860351562,
573
- 10.426839828491211,
574
- 10.43403148651123,
575
- 10.416683197021484,
576
- 10.326852798461914,
577
- 10.440661430358887,
578
  11.215356826782227,
579
- 11.223287582397461,
580
- 13.147810935974121,
581
- 11.27365779876709,
582
- 11.516763687133789,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
583
  11.006742477416992,
584
- 10.878545761108398,
585
- 11.415714263916016,
586
- 9.696914672851562,
587
- 11.417068481445312,
588
- 9.799717903137207,
589
- 11.379979133605957,
590
- 13.502660751342773,
591
- 11.465564727783203,
592
- 9.251531600952148,
593
- 11.778385162353516,
594
- 9.734674453735352,
595
- 10.932029724121094,
596
- 10.582185745239258,
597
- 11.00518798828125,
598
- 9.725820541381836,
599
- 12.247865676879883,
600
- 10.734901428222656,
601
- 8.928577423095703,
602
- 11.397771835327148,
603
- 11.13377571105957,
604
- 9.139379501342773,
605
- 11.641318321228027,
606
- 10.129936218261719,
607
- 9.684531211853027,
608
- 11.295875549316406,
609
- 10.605236053466797,
610
- 9.146963119506836,
 
 
 
 
 
 
 
 
 
611
  10.568946838378906,
612
- 9.758452415466309,
613
- 9.650102615356445,
614
- 11.9966402053833,
615
- 8.678672790527344,
616
- 11.002718925476074,
617
- 11.540517807006836,
618
- 10.397274017333984,
619
- 11.197608947753906,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
620
  11.805412292480469,
621
- 9.95970630645752,
622
- 10.514514923095703,
623
- 11.889755249023438,
624
- 10.047914505004883,
625
- 10.953085899353027,
626
- 9.211109161376953,
627
- 9.910860061645508,
628
- 10.400971412658691,
629
- 11.485074996948242,
630
- 11.828522682189941,
631
- 11.306056022644043,
632
- 9.125839233398438,
633
- 10.399169921875,
634
- 11.806390762329102,
635
- 10.55948543548584,
636
- 9.855262756347656,
637
- 9.390632629394531,
638
- 12.962108612060547,
639
- 9.551152229309082
 
 
 
 
 
640
  ],
641
  "resnet50_transformer": [
642
- 11.501852989196777,
643
- 9.702670097351074,
644
- 9.457501411437988,
645
- 10.49262523651123,
646
- 10.393461227416992,
647
- 9.076814651489258,
648
- 10.136197090148926,
649
- 9.379548072814941,
650
- 10.225680351257324,
651
- 12.095745086669922,
652
- 11.626296043395996,
653
  12.788922309875488,
654
- 11.467028617858887,
655
- 12.532193183898926,
656
- 9.594820022583008,
657
- 12.450687408447266,
658
- 11.45797348022461,
659
- 11.059659957885742,
660
- 10.454424858093262,
661
- 11.51764965057373,
662
- 10.38300609588623,
663
- 11.342537879943848,
664
- 10.86171817779541,
665
- 10.238561630249023,
666
- 9.412647247314453,
667
- 11.267950057983398,
668
- 10.576706886291504,
669
- 10.895441055297852,
670
- 10.098917007446289,
671
  10.72489070892334,
672
- 12.210573196411133,
673
- 9.562345504760742,
674
- 9.904257774353027,
675
- 9.859766960144043,
676
- 9.327754020690918,
677
- 10.537753105163574,
678
- 9.71113109588623,
679
- 10.380024909973145,
680
- 11.528943061828613,
681
- 12.723946571350098,
682
- 9.649679183959961,
683
- 11.53311824798584,
684
- 9.216923713684082,
685
- 11.446986198425293,
686
- 10.691610336303711,
687
- 11.040003776550293,
688
- 11.48713207244873,
689
- 11.131546974182129,
690
- 10.438315391540527,
691
- 11.525206565856934,
692
- 11.408055305480957,
693
- 9.934273719787598,
694
- 10.836973190307617,
695
- 12.472630500793457,
696
- 10.546219825744629,
697
- 9.167073249816895,
698
- 9.570382118225098,
699
- 10.088221549987793,
700
- 12.44902515411377,
701
- 10.033440589904785,
702
- 9.684144020080566,
703
- 10.574688911437988,
704
- 11.189352989196777,
705
- 9.367444038391113,
706
- 12.075634956359863,
707
- 10.479545593261719,
708
- 9.663542747497559,
709
- 10.379999160766602,
710
- 11.381260871887207,
711
- 9.942309379577637,
712
- 9.8684720993042,
713
- 12.106017112731934,
714
- 11.08724308013916,
715
- 9.635066986083984,
716
- 11.270651817321777,
717
- 11.686848640441895,
718
- 11.080682754516602,
719
- 9.593523979187012,
720
- 9.70484447479248,
721
- 11.765238761901855,
722
- 11.271148681640625,
723
- 9.515948295593262,
724
- 9.938346862792969,
725
- 10.972367286682129,
726
- 10.35381031036377,
727
- 10.159687995910645,
728
- 12.167220115661621,
729
- 11.215229034423828,
730
- 10.243671417236328,
731
- 9.07953929901123,
732
- 10.72500991821289,
733
- 10.218084335327148,
734
- 10.704636573791504,
735
- 10.81423568725586,
736
- 11.305752754211426,
737
  11.021586418151855,
738
- 10.871784210205078,
739
- 11.822425842285156,
740
- 11.418882369995117,
741
- 10.994462013244629,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
742
  11.040154457092285,
743
- 10.500971794128418,
744
- 10.454109191894531,
745
- 9.909290313720703,
746
- 11.494017601013184,
747
- 10.127991676330566,
748
- 10.141182899475098,
749
- 12.10848331451416,
750
- 11.503960609436035,
751
- 9.52518367767334,
752
- 11.317305564880371,
753
- 9.991930961608887,
754
- 11.106281280517578,
755
- 10.117555618286133,
756
- 11.064026832580566,
757
- 10.093523979187012,
758
- 11.675549507141113,
759
- 11.167573928833008,
760
- 9.324151039123535,
761
- 11.253122329711914,
762
- 11.079337120056152,
763
- 9.692917823791504,
764
- 11.168207168579102,
765
- 9.941462516784668,
766
- 9.444470405578613,
767
- 11.217329025268555,
768
- 11.359396934509277,
769
- 9.702740669250488,
 
 
 
 
 
 
 
 
 
770
  10.517725944519043,
771
- 9.619100570678711,
772
- 9.759465217590332,
773
- 11.576613426208496,
774
- 9.158799171447754,
775
- 10.792224884033203,
776
- 12.46032428741455,
777
- 10.46418285369873,
778
- 11.711991310119629,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
779
  11.551984786987305,
780
- 10.47573471069336,
781
- 10.069729804992676,
782
- 11.449746131896973,
783
- 10.476634979248047,
784
- 11.153368949890137,
785
- 9.68120002746582,
786
- 10.152800559997559,
787
- 10.720810890197754,
788
- 11.3648099899292,
789
- 11.462113380432129,
790
- 11.875636100769043,
791
- 9.637883186340332,
792
- 10.270918846130371,
793
- 11.218029975891113,
794
- 10.733470916748047,
795
- 9.460077285766602,
796
- 10.412650108337402,
797
- 12.6956205368042,
798
- 9.247221946716309
 
 
 
 
 
799
  ]
800
  }
801
  }
 
1
  {
2
+ "moe_test_mae": 0.21137296557426452,
3
+ "moe_test_mse": 0.06364622553810477,
4
  "true_labels": [
5
  11.100000381469727,
6
+ 10.5,
7
+ 10.399999618530273,
 
 
8
  8.699999809265137,
9
+ 10.5,
10
+ 10.399999618530273,
11
+ 10.399999618530273,
12
  9.600000381469727,
13
+ 10.0,
 
14
  12.699999809265137,
15
+ 11.0,
16
  10.899999618530273,
 
17
  11.0,
 
18
  8.699999809265137,
19
+ 10.399999618530273,
20
  11.600000381469727,
21
+ 10.199999809265137,
22
+ 10.0,
23
+ 10.5,
24
  11.0,
25
+ 10.399999618530273,
26
+ 10.5,
27
+ 10.899999618530273,
28
  11.0,
29
+ 11.100000381469727,
30
+ 12.699999809265137,
31
  11.0,
 
32
  11.100000381469727,
33
+ 11.600000381469727,
34
+ 10.800000190734863,
35
+ 9.399999618530273,
36
+ 11.100000381469727,
37
+ 11.100000381469727,
38
+ 10.800000190734863,
39
  10.199999809265137,
40
+ 9.399999618530273,
41
+ 9.399999618530273,
 
 
42
  12.699999809265137,
43
+ 10.199999809265137,
44
+ 11.100000381469727,
45
+ 10.899999618530273,
46
+ 10.399999618530273,
47
  9.399999618530273,
48
+ 11.0,
49
+ 9.0,
50
+ 9.0,
51
  9.399999618530273,
52
+ 10.5,
53
+ 10.899999618530273,
54
+ 10.5,
55
+ 10.0,
56
  9.399999618530273,
57
+ 11.100000381469727,
58
  9.399999618530273,
59
+ 9.600000381469727,
 
 
60
  9.399999618530273,
61
+ 9.699999809265137,
 
62
  10.800000190734863,
 
 
63
  11.0,
64
+ 11.0,
65
+ 9.600000381469727,
66
+ 8.699999809265137,
67
+ 12.699999809265137,
68
+ 9.399999618530273,
69
  10.899999618530273,
70
+ 10.199999809265137,
71
+ 10.5,
72
+ 10.399999618530273,
73
  11.0,
74
+ 10.199999809265137,
75
  11.100000381469727,
76
+ 12.699999809265137,
77
  9.399999618530273,
 
 
78
  10.300000190734863,
79
+ 11.600000381469727,
80
+ 8.699999809265137,
81
+ 10.399999618530273,
82
+ 11.0,
83
  9.399999618530273,
84
+ 10.199999809265137,
85
+ 10.300000190734863,
86
+ 11.0,
87
+ 11.600000381469727,
88
+ 10.5,
89
+ 10.899999618530273,
90
  9.399999618530273,
91
+ 10.399999618530273,
92
  11.600000381469727,
93
+ 9.600000381469727,
94
  9.399999618530273,
95
+ 10.199999809265137,
96
  10.399999618530273,
97
+ 10.0,
98
  10.300000190734863,
99
+ 9.699999809265137,
100
+ 11.100000381469727,
101
+ 11.0,
102
+ 9.0,
103
+ 10.800000190734863,
104
+ 9.399999618530273,
105
+ 10.399999618530273,
106
+ 8.699999809265137,
107
+ 11.0,
108
+ 11.0,
109
+ 11.0,
110
  8.699999809265137,
111
+ 10.300000190734863,
112
+ 9.600000381469727,
113
  10.300000190734863,
114
  9.399999618530273,
115
  10.300000190734863,
116
+ 10.899999618530273,
117
  10.199999809265137,
 
 
118
  11.600000381469727,
119
  10.5,
120
+ 10.0,
121
+ 9.699999809265137,
122
  11.0,
123
+ 11.100000381469727,
124
+ 10.199999809265137,
125
+ 10.5,
126
+ 11.100000381469727,
127
  11.600000381469727,
128
  11.0,
 
 
 
129
  11.100000381469727,
 
 
 
130
  10.300000190734863,
131
+ 9.0,
132
+ 9.399999618530273,
133
+ 12.699999809265137,
134
  9.699999809265137,
 
135
  11.0,
136
  9.699999809265137,
137
+ 11.0,
138
+ 11.100000381469727,
139
  10.300000190734863,
 
 
 
140
  11.0,
141
+ 11.100000381469727,
142
+ 10.199999809265137,
143
  12.699999809265137,
 
 
 
144
  10.300000190734863,
145
  10.300000190734863,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  10.899999618530273,
147
+ 9.0,
148
+ 10.800000190734863,
149
+ 11.0,
150
  9.399999618530273,
151
  9.0,
152
+ 10.199999809265137,
 
153
  10.300000190734863,
154
  11.600000381469727,
 
 
155
  11.0,
156
+ 10.899999618530273,
 
 
 
 
157
  8.699999809265137,
 
 
158
  11.0,
 
 
 
 
159
  11.0,
160
+ 10.0,
 
 
 
161
  9.0
162
  ],
163
  "moe_predictions": [
164
+ 11.49791431427002,
165
+ 10.952095985412598,
166
+ 10.454227447509766,
167
+ 8.841472625732422,
168
+ 10.891345977783203,
169
+ 10.519970893859863,
170
+ 10.5680513381958,
171
+ 9.93174934387207,
172
+ 10.139881134033203,
 
 
173
  13.093341827392578,
174
+ 11.227279663085938,
175
+ 11.179691314697266,
176
+ 11.202095031738281,
177
+ 8.786151885986328,
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  10.527164459228516,
179
+ 12.075817108154297,
180
+ 10.200088500976562,
181
+ 9.931471824645996,
182
+ 10.738975524902344,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  11.010236740112305,
184
+ 10.453255653381348,
185
+ 10.959787368774414,
186
+ 11.017255783081055,
187
+ 11.172292709350586,
188
+ 11.556468963623047,
189
+ 13.037904739379883,
190
+ 11.040396690368652,
191
+ 11.457777976989746,
192
+ 11.602184295654297,
193
+ 11.101509094238281,
194
+ 9.761225700378418,
195
+ 11.38801097869873,
196
+ 11.591976165771484,
197
+ 11.264935493469238,
198
+ 10.394660949707031,
199
+ 9.425639152526855,
200
+ 9.4509859085083,
201
+ 13.106525421142578,
202
+ 10.34262466430664,
203
+ 11.359064102172852,
204
+ 11.14004898071289,
205
+ 10.597884178161621,
206
+ 9.612415313720703,
207
+ 11.376269340515137,
208
+ 8.872610092163086,
209
+ 9.350934982299805,
210
+ 9.771783828735352,
211
+ 10.806012153625488,
212
+ 11.032815933227539,
213
  10.694746017456055,
214
+ 10.307258605957031,
215
+ 9.461359024047852,
216
+ 11.560626983642578,
217
+ 9.754105567932129,
218
+ 9.918225288391113,
219
+ 9.681318283081055,
220
+ 9.560345649719238,
221
+ 11.216781616210938,
222
+ 11.11925983428955,
223
+ 11.24638557434082,
224
+ 9.823186874389648,
225
+ 8.779823303222656,
226
+ 11.989530563354492,
227
+ 9.350080490112305,
228
+ 11.18703842163086,
229
+ 10.336519241333008,
230
+ 10.776782989501953,
231
+ 10.519142150878906,
232
+ 11.191191673278809,
233
+ 10.605438232421875,
234
+ 11.429242134094238,
235
+ 12.977052688598633,
236
+ 9.54578971862793,
237
+ 10.47386646270752,
238
+ 11.556024551391602,
239
+ 8.826037406921387,
240
+ 10.459871292114258,
241
+ 11.022876739501953,
242
+ 9.60521411895752,
243
+ 10.370050430297852,
244
+ 10.628425598144531,
245
+ 11.128847122192383,
246
+ 11.716771125793457,
247
+ 10.89390754699707,
248
+ 11.02875804901123,
249
+ 9.504777908325195,
250
  10.476083755493164,
251
+ 11.748279571533203,
252
+ 9.797750473022461,
253
+ 9.668087005615234,
254
+ 10.459554672241211,
255
+ 10.612926483154297,
256
+ 10.08256721496582,
257
+ 10.368606567382812,
258
+ 9.684417724609375,
259
+ 11.16148567199707,
260
+ 11.225208282470703,
261
+ 9.4158353805542,
262
+ 10.983354568481445,
263
+ 9.450948715209961,
264
+ 10.536083221435547,
265
+ 9.055654525756836,
266
+ 11.21628189086914,
267
+ 11.220507621765137,
268
+ 11.284944534301758,
269
+ 8.917679786682129,
270
+ 10.463410377502441,
271
+ 9.913228988647461,
272
+ 10.490144729614258,
273
+ 9.375974655151367,
274
+ 10.407944679260254,
275
+ 11.09685230255127,
276
+ 10.541641235351562,
277
+ 11.729219436645508,
278
+ 10.70352554321289,
279
+ 9.881623268127441,
280
+ 9.759466171264648,
281
+ 11.364102363586426,
282
+ 11.522855758666992,
283
+ 10.19462776184082,
284
+ 10.618962287902832,
285
+ 11.154468536376953,
286
+ 11.539796829223633,
287
+ 11.23081111907959,
288
+ 11.561714172363281,
289
+ 10.671709060668945,
290
+ 9.418478965759277,
291
+ 9.375926971435547,
292
+ 13.051578521728516,
293
+ 9.512340545654297,
294
+ 11.298563003540039,
295
+ 9.679695129394531,
296
  11.228448867797852,
297
+ 11.607831001281738,
298
+ 10.620326042175293,
299
+ 11.257329940795898,
300
+ 11.506999969482422,
301
+ 10.40395736694336,
302
+ 12.950227737426758,
303
+ 10.369912147521973,
304
+ 10.432703018188477,
305
+ 10.929553031921387,
306
+ 9.103975296020508,
307
+ 10.956567764282227,
308
+ 11.215112686157227,
309
+ 9.548199653625488,
310
+ 9.123867988586426,
311
+ 10.550899505615234,
312
+ 10.245137214660645,
313
+ 12.018054962158203,
314
+ 11.03477668762207,
315
+ 10.958497047424316,
316
+ 8.761012077331543,
317
+ 11.12636661529541,
318
+ 10.795982360839844,
319
+ 10.263906478881836,
320
+ 9.013847351074219
321
  ],
322
  "individual_predictions": {
323
  "efficientnet_b3_transformer": [
324
+ 11.011456489562988,
325
+ 10.437052726745605,
326
+ 10.261249542236328,
327
+ 7.985320568084717,
328
+ 10.548121452331543,
329
+ 10.492411613464355,
330
+ 9.917695045471191,
331
+ 9.54853630065918,
332
+ 10.076766014099121,
 
 
333
  13.537657737731934,
334
+ 10.326626777648926,
335
+ 10.585708618164062,
336
+ 11.172317504882812,
337
+ 8.144732475280762,
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  10.485107421875,
339
+ 11.6995210647583,
340
+ 10.108969688415527,
341
+ 9.243327140808105,
342
+ 10.04570198059082,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  10.793766975402832,
344
+ 10.254855155944824,
345
+ 10.422723770141602,
346
+ 10.870402336120605,
347
+ 10.91348648071289,
348
+ 11.096152305603027,
349
+ 13.936193466186523,
350
+ 10.705317497253418,
351
+ 11.00967788696289,
352
+ 10.99274730682373,
353
+ 10.733809471130371,
354
+ 9.175597190856934,
355
+ 11.046974182128906,
356
+ 11.347891807556152,
357
+ 10.613112449645996,
358
+ 10.023240089416504,
359
+ 9.056133270263672,
360
+ 9.2033109664917,
361
+ 13.54947566986084,
362
+ 9.860166549682617,
363
+ 11.063033103942871,
364
+ 10.598092079162598,
365
+ 10.6638765335083,
366
+ 9.17311954498291,
367
+ 10.922500610351562,
368
+ 7.99126672744751,
369
+ 8.643234252929688,
370
+ 9.155375480651855,
371
+ 10.310547828674316,
372
+ 11.133363723754883,
373
  10.037339210510254,
374
+ 10.077462196350098,
375
+ 9.141955375671387,
376
+ 11.109526634216309,
377
+ 9.145268440246582,
378
+ 9.562047004699707,
379
+ 9.357654571533203,
380
+ 8.732993125915527,
381
+ 10.703978538513184,
382
+ 10.722399711608887,
383
+ 10.698369026184082,
384
+ 9.570420265197754,
385
+ 8.490445137023926,
386
+ 11.466019630432129,
387
+ 9.414340019226074,
388
+ 10.59233283996582,
389
+ 9.879103660583496,
390
+ 10.255993843078613,
391
+ 10.48453140258789,
392
+ 10.90799331665039,
393
+ 9.857056617736816,
394
+ 10.97396183013916,
395
+ 14.010629653930664,
396
+ 9.263312339782715,
397
+ 10.15234088897705,
398
+ 10.73508358001709,
399
+ 8.343344688415527,
400
+ 10.253409385681152,
401
+ 10.793999671936035,
402
+ 9.331345558166504,
403
+ 9.994551658630371,
404
+ 10.216073989868164,
405
+ 10.728191375732422,
406
+ 10.56017780303955,
407
+ 10.607600212097168,
408
+ 10.643799781799316,
409
+ 9.042943000793457,
410
  10.341578483581543,
411
+ 11.196541786193848,
412
+ 9.367315292358398,
413
+ 9.333880424499512,
414
+ 10.117321014404297,
415
+ 10.697690963745117,
416
+ 9.582906723022461,
417
+ 10.153056144714355,
418
+ 9.058443069458008,
419
+ 10.559529304504395,
420
+ 11.073603630065918,
421
+ 8.8185396194458,
422
+ 10.699006080627441,
423
+ 9.211636543273926,
424
+ 10.486929893493652,
425
+ 8.220829963684082,
426
+ 11.156848907470703,
427
+ 11.063627243041992,
428
+ 11.050981521606445,
429
+ 8.10926628112793,
430
+ 10.373404502868652,
431
+ 9.924508094787598,
432
+ 10.186086654663086,
433
+ 9.481890678405762,
434
+ 10.31225872039795,
435
+ 10.174295425415039,
436
+ 9.873467445373535,
437
+ 10.537038803100586,
438
+ 10.269898414611816,
439
+ 9.228285789489746,
440
+ 9.133694648742676,
441
+ 10.917866706848145,
442
+ 11.04175853729248,
443
+ 10.109822273254395,
444
+ 10.328956604003906,
445
+ 10.515660285949707,
446
+ 10.732501029968262,
447
+ 11.081313133239746,
448
+ 11.12901782989502,
449
+ 10.229890823364258,
450
+ 8.822549819946289,
451
+ 9.504118919372559,
452
+ 13.927513122558594,
453
+ 8.89388656616211,
454
+ 11.0648775100708,
455
+ 9.071036338806152,
456
  10.327948570251465,
457
+ 11.319812774658203,
458
+ 10.036575317382812,
459
+ 10.70290470123291,
460
+ 11.069836616516113,
461
+ 10.021210670471191,
462
+ 13.740641593933105,
463
+ 10.256255149841309,
464
+ 10.28779125213623,
465
+ 10.00243854522705,
466
+ 8.478795051574707,
467
+ 10.25095272064209,
468
+ 10.321993827819824,
469
+ 9.290078163146973,
470
+ 8.640447616577148,
471
+ 9.860431671142578,
472
+ 9.82880687713623,
473
+ 11.69638729095459,
474
+ 10.707640647888184,
475
+ 11.018778800964355,
476
+ 8.396665573120117,
477
+ 10.726140975952148,
478
+ 10.567301750183105,
479
+ 10.008172035217285,
480
+ 8.390426635742188
481
  ],
482
  "efficientnet_b0_transformer": [
483
+ 11.743178367614746,
484
+ 11.17111873626709,
485
+ 10.41269588470459,
486
+ 8.855524063110352,
487
+ 11.296384811401367,
488
+ 10.395981788635254,
489
+ 11.416858673095703,
490
+ 9.948115348815918,
491
+ 10.613225936889648,
 
 
492
  12.953442573547363,
493
+ 11.799053192138672,
494
+ 11.209972381591797,
495
+ 11.255814552307129,
496
+ 8.98547649383545,
 
 
 
 
 
 
 
 
 
 
 
 
 
497
  10.37149429321289,
498
+ 12.042634963989258,
499
+ 10.426054954528809,
500
+ 10.467799186706543,
501
+ 11.147850036621094,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
502
  11.215356826782227,
503
+ 10.1926908493042,
504
+ 11.156776428222656,
505
+ 11.019290924072266,
506
+ 11.22017765045166,
507
+ 11.9966402053833,
508
+ 13.037962913513184,
509
+ 11.350994110107422,
510
+ 11.969884872436523,
511
+ 11.721773147583008,
512
+ 11.174083709716797,
513
+ 10.404436111450195,
514
+ 11.813179969787598,
515
+ 11.945684432983398,
516
+ 11.306056022644043,
517
+ 10.361102104187012,
518
+ 9.71973705291748,
519
+ 9.618285179138184,
520
+ 12.975137710571289,
521
+ 10.384243965148926,
522
+ 11.663352966308594,
523
+ 11.203901290893555,
524
+ 10.370718002319336,
525
+ 9.658828735351562,
526
+ 11.683477401733398,
527
+ 9.227752685546875,
528
+ 9.650102615356445,
529
+ 9.925799369812012,
530
+ 11.434671401977539,
531
+ 10.895241737365723,
532
  11.006742477416992,
533
+ 10.917248725891113,
534
+ 9.784621238708496,
535
+ 12.000340461730957,
536
+ 9.91793155670166,
537
+ 9.919336318969727,
538
+ 9.762454986572266,
539
+ 9.788354873657227,
540
+ 11.466252326965332,
541
+ 11.405159950256348,
542
+ 11.825557708740234,
543
+ 10.0393705368042,
544
+ 8.632101058959961,
545
+ 12.782363891601562,
546
+ 9.142356872558594,
547
+ 11.228084564208984,
548
+ 10.386346817016602,
549
+ 11.36672592163086,
550
+ 10.397486686706543,
551
+ 11.256900787353516,
552
+ 10.60472297668457,
553
+ 11.874197959899902,
554
+ 13.163078308105469,
555
+ 9.662923812866211,
556
+ 10.8616361618042,
557
+ 11.691142082214355,
558
+ 8.865287780761719,
559
+ 10.207244873046875,
560
+ 11.217007637023926,
561
+ 9.747726440429688,
562
+ 10.017398834228516,
563
+ 10.834165573120117,
564
+ 11.409814834594727,
565
+ 12.362707138061523,
566
+ 11.009987831115723,
567
+ 11.278557777404785,
568
+ 9.663545608520508,
569
  10.568946838378906,
570
+ 11.553452491760254,
571
+ 10.085470199584961,
572
+ 9.76612377166748,
573
+ 10.628089904785156,
574
+ 10.326852798461914,
575
+ 10.3833646774292,
576
+ 10.480897903442383,
577
+ 9.789970397949219,
578
+ 11.70141887664795,
579
+ 11.112765312194824,
580
+ 9.728450775146484,
581
+ 10.885799407958984,
582
+ 9.622087478637695,
583
+ 10.416683197021484,
584
+ 9.108359336853027,
585
+ 11.237686157226562,
586
+ 11.057950019836426,
587
+ 11.098541259765625,
588
+ 8.81431770324707,
589
+ 10.602710723876953,
590
+ 9.889699935913086,
591
+ 10.752220153808594,
592
+ 9.227273941040039,
593
+ 10.543593406677246,
594
+ 11.358682632446289,
595
+ 10.906055450439453,
596
+ 12.400298118591309,
597
+ 10.981484413146973,
598
+ 10.381155014038086,
599
+ 9.965232849121094,
600
+ 11.671711921691895,
601
+ 12.028018951416016,
602
+ 10.433465957641602,
603
+ 11.049814224243164,
604
+ 11.682543754577637,
605
+ 11.715887069702148,
606
+ 11.116255760192871,
607
+ 12.003594398498535,
608
+ 10.83981704711914,
609
+ 9.797820091247559,
610
+ 9.214962005615234,
611
+ 13.022693634033203,
612
+ 9.354233741760254,
613
+ 11.115297317504883,
614
+ 9.794788360595703,
615
  11.805412292480469,
616
+ 11.982343673706055,
617
+ 11.402397155761719,
618
+ 11.819561004638672,
619
+ 11.99135971069336,
620
+ 10.365850448608398,
621
+ 12.891124725341797,
622
+ 10.414666175842285,
623
+ 10.618444442749023,
624
+ 11.423562049865723,
625
+ 9.560630798339844,
626
+ 11.432249069213867,
627
+ 11.787288665771484,
628
+ 9.746140480041504,
629
+ 9.39014720916748,
630
+ 10.900354385375977,
631
+ 10.526603698730469,
632
+ 12.281966209411621,
633
+ 11.33869743347168,
634
+ 10.862354278564453,
635
+ 8.576208114624023,
636
+ 11.404010772705078,
637
+ 10.769918441772461,
638
+ 10.90639877319336,
639
+ 8.992664337158203
640
  ],
641
  "resnet50_transformer": [
642
+ 11.739107131958008,
643
+ 11.248116493225098,
644
+ 10.688735008239746,
645
+ 9.683572769165039,
646
+ 10.829529762268066,
647
+ 10.671517372131348,
648
+ 10.369599342346191,
649
+ 10.298595428466797,
650
+ 9.72965145111084,
 
 
651
  12.788922309875488,
652
+ 11.556159019470215,
653
+ 11.743390083312988,
654
+ 11.178153038024902,
655
+ 9.228245735168457,
 
 
 
 
 
 
 
 
 
 
 
 
 
656
  10.72489070892334,
657
+ 12.4852933883667,
658
+ 10.065241813659668,
659
+ 10.08328914642334,
660
+ 11.0233736038208,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
661
  11.021586418151855,
662
+ 10.91222095489502,
663
+ 11.299861907958984,
664
+ 11.16207218170166,
665
+ 11.38321304321289,
666
+ 11.576613426208496,
667
+ 12.139554023742676,
668
+ 11.0648775100708,
669
+ 11.393771171569824,
670
+ 12.092029571533203,
671
+ 11.39663314819336,
672
+ 9.703642845153809,
673
+ 11.303877830505371,
674
+ 11.482352256774902,
675
+ 11.875636100769043,
676
+ 10.799639701843262,
677
+ 9.501046180725098,
678
+ 9.531359672546387,
679
+ 12.794964790344238,
680
+ 10.783464431762695,
681
+ 11.350804328918457,
682
+ 11.618151664733887,
683
+ 10.75905704498291,
684
+ 10.005297660827637,
685
+ 11.52283000946045,
686
+ 9.398808479309082,
687
+ 9.759465217590332,
688
+ 10.234177589416504,
689
+ 10.672816276550293,
690
+ 11.069842338562012,
691
  11.040154457092285,
692
+ 9.9270658493042,
693
+ 9.457501411437988,
694
+ 11.572014808654785,
695
+ 10.199116706848145,
696
+ 10.27329158782959,
697
+ 9.923844337463379,
698
+ 10.159687995910645,
699
+ 11.480114936828613,
700
+ 11.230217933654785,
701
+ 11.215229034423828,
702
+ 9.859766960144043,
703
+ 9.216923713684082,
704
+ 11.720208168029785,
705
+ 9.493544578552246,
706
+ 11.740694999694824,
707
+ 10.74410629272461,
708
+ 10.707627296447754,
709
+ 10.675408363342285,
710
+ 11.40868091583252,
711
+ 11.354533195495605,
712
+ 11.43956470489502,
713
+ 11.75744915008545,
714
+ 9.71113109588623,
715
+ 10.407622337341309,
716
+ 12.241848945617676,
717
+ 9.269479751586914,
718
+ 10.918959617614746,
719
+ 11.057621955871582,
720
+ 9.73656940460205,
721
+ 11.098200798034668,
722
+ 10.835038185119629,
723
+ 11.248536109924316,
724
+ 12.22742748260498,
725
+ 11.064131736755371,
726
+ 11.16391658782959,
727
+ 9.807845115661621,
728
  10.517725944519043,
729
+ 12.494842529296875,
730
+ 9.94046688079834,
731
+ 9.904257774353027,
732
+ 10.63325023651123,
733
+ 10.81423568725586,
734
+ 10.281428337097168,
735
+ 10.4718656539917,
736
+ 10.204838752746582,
737
+ 11.22350788116455,
738
+ 11.48925495147705,
739
+ 9.700515747070312,
740
+ 11.365256309509277,
741
+ 9.519120216369629,
742
+ 10.704636573791504,
743
+ 9.837773323059082,
744
+ 11.25430965423584,
745
+ 11.539944648742676,
746
+ 11.705309867858887,
747
+ 9.82945442199707,
748
+ 10.414114952087402,
749
+ 9.925477027893066,
750
+ 10.532126426696777,
751
+ 9.418757438659668,
752
+ 10.367980003356934,
753
+ 11.75757884979248,
754
+ 10.845398902893066,
755
+ 12.250321388244629,
756
+ 10.859190940856934,
757
+ 10.035428047180176,
758
+ 10.179471969604492,
759
+ 11.502727508544922,
760
+ 11.498787879943848,
761
+ 10.040594100952148,
762
+ 10.478116035461426,
763
+ 11.265198707580566,
764
+ 12.171003341674805,
765
+ 11.49486255645752,
766
+ 11.552530288696289,
767
+ 10.945416450500488,
768
+ 9.635066986083984,
769
+ 9.408698081970215,
770
+ 12.204529762268066,
771
+ 10.288901329040527,
772
+ 11.7155122756958,
773
+ 10.173260688781738,
774
  11.551984786987305,
775
+ 11.521336555480957,
776
+ 10.422005653381348,
777
+ 11.249524116516113,
778
+ 11.459802627563477,
779
+ 10.824810981750488,
780
+ 12.218913078308105,
781
+ 10.438814163208008,
782
+ 10.391874313354492,
783
+ 11.362658500671387,
784
+ 9.272500991821289,
785
+ 11.186502456665039,
786
+ 11.536055564880371,
787
+ 9.608378410339355,
788
+ 9.341008186340332,
789
+ 10.891911506652832,
790
+ 10.379999160766602,
791
+ 12.075809478759766,
792
+ 11.057991027832031,
793
+ 10.994357109069824,
794
+ 9.310161590576172,
795
+ 11.248947143554688,
796
+ 11.050725936889648,
797
+ 9.87714958190918,
798
+ 9.658448219299316
799
  ]
800
  }
801
  }
requirements.txt CHANGED
@@ -1,8 +1,8 @@
1
- torch>=2.6.0
2
- torchaudio>=2.6.0
3
- torchvision>=0.21.0
4
- gradio>=5.9.1
5
- numpy>=2.0.2
6
- pillow>=10.4.0
7
- tensorboard>=2.19.0
8
  pydantic==2.10.6
 
1
+ torch>=2.0.0
2
+ torchaudio>=2.0.0
3
+ torchvision>=0.15.0
4
+ gradio>=3.50.0
5
+ numpy>=1.20.0
6
+ pillow>=9.0.0
7
+ tensorboard>=2.12.0
8
  pydantic==2.10.6