Dmgautomata commited on
Commit
ed597d0
·
verified ·
1 Parent(s): abfdf4a

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -1
app.py CHANGED
@@ -284,6 +284,37 @@ Hinweis: Du musst eingeloggt sein und die Terms akzeptieren!"""
284
  if dataset_size > 0:
285
  img_files = img_files[:dataset_size]
286
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
  for i, img_file in enumerate(img_files):
288
  if i % 100 == 0:
289
  progress(0.25 + (i / len(img_files)) * 0.1, desc=f"Kopiere Bilder: {i}/{len(img_files)}")
@@ -293,7 +324,12 @@ Hinweis: Du musst eingeloggt sein und die Terms akzeptieren!"""
293
  if labels_dir:
294
  label_file = labels_dir / img_file.name.replace(".jpg", ".txt")
295
  if label_file.exists():
296
- shutil.copy2(label_file, train_labels / label_file.name)
 
 
 
 
 
297
 
298
  # Kopiere zugehörige PKL-Datei (optional)
299
  if pkl_dir and pkl_dir.exists():
@@ -465,6 +501,46 @@ Hinweis: Du musst eingeloggt sein und die Terms akzeptieren!"""
465
  3. Versuche Training erneut (Repository wird beim nächsten Versuch geklont)"""
466
 
467
  progress(0.47, desc="✅ Netlistify geklont")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468
 
469
  # Prüfe ob main_config.py existiert
470
  if not main_config_file.exists():
 
284
  if dataset_size > 0:
285
  img_files = img_files[:dataset_size]
286
 
287
+ # Funktion zum Filtern ungültiger Klassen aus Label-Dateien
288
+ def filter_invalid_labels(label_path: Path, max_class: int = 11) -> bool:
289
+ """Filtert ungültige Klassen aus Label-Datei und speichert bereinigte Version."""
290
+ try:
291
+ with open(label_path, 'r') as f:
292
+ lines = f.readlines()
293
+
294
+ filtered_lines = []
295
+ invalid_count = 0
296
+ for line in lines:
297
+ line = line.strip()
298
+ if not line:
299
+ continue
300
+ parts = line.split()
301
+ if len(parts) >= 5:
302
+ cls = int(parts[0])
303
+ if 0 <= cls <= max_class:
304
+ filtered_lines.append(line + '\n')
305
+ else:
306
+ invalid_count += 1
307
+
308
+ # Speichere bereinigte Label-Datei
309
+ if invalid_count > 0 or len(filtered_lines) != len(lines):
310
+ with open(label_path, 'w') as f:
311
+ f.writelines(filtered_lines)
312
+ return True # Datei wurde geändert
313
+ return False # Keine Änderungen nötig
314
+ except Exception as e:
315
+ # Falls Fehler, überspringe diese Datei
316
+ return False
317
+
318
  for i, img_file in enumerate(img_files):
319
  if i % 100 == 0:
320
  progress(0.25 + (i / len(img_files)) * 0.1, desc=f"Kopiere Bilder: {i}/{len(img_files)}")
 
324
  if labels_dir:
325
  label_file = labels_dir / img_file.name.replace(".jpg", ".txt")
326
  if label_file.exists():
327
+ # Kopiere Label-Datei
328
+ dest_label = train_labels / label_file.name
329
+ shutil.copy2(label_file, dest_label)
330
+
331
+ # Filtere ungültige Klassen (Klasse > 11 für REAL-Dataset)
332
+ filter_invalid_labels(dest_label, max_class=11)
333
 
334
  # Kopiere zugehörige PKL-Datei (optional)
335
  if pkl_dir and pkl_dir.exists():
 
501
  3. Versuche Training erneut (Repository wird beim nächsten Versuch geklont)"""
502
 
503
  progress(0.47, desc="✅ Netlistify geklont")
504
+
505
+ # Patche slice.py um ungültige Klassen zu überspringen
506
+ slice_file = netlistify_dir / "slice.py"
507
+ if slice_file.exists():
508
+ try:
509
+ with open(slice_file, 'r', encoding='utf-8') as f:
510
+ slice_content = f.read()
511
+
512
+ # Prüfe ob Patch bereits vorhanden ist
513
+ if 'if cls not in class_label_real:' not in slice_content:
514
+ # Finde die Stelle wo class_label_real[cls] verwendet wird
515
+ # Ersetze direkte Zugriffe mit sicheren Zugriffen
516
+ old_pattern = 'if config == DatasetConfig.REAL:\n if class_label_real[cls] == "text":'
517
+ new_pattern = 'if config == DatasetConfig.REAL:\n if cls not in class_label_real:\n continue # Überspringe ungültige Klassen\n if class_label_real[cls] == "text":'
518
+
519
+ if old_pattern in slice_content:
520
+ slice_content = slice_content.replace(old_pattern, new_pattern)
521
+ else:
522
+ # Alternative: Ersetze alle class_label_real[cls] Zugriffe
523
+ import re
524
+ # Ersetze class_label_real[cls] mit sicherem Zugriff
525
+ slice_content = re.sub(
526
+ r'class_label_real\[cls\]',
527
+ r'class_label_real.get(cls, None)',
528
+ slice_content
529
+ )
530
+ # Füge Check hinzu, um None-Werte zu überspringen
531
+ slice_content = re.sub(
532
+ r'(\s+)if config == DatasetConfig\.REAL:',
533
+ r'\1if config == DatasetConfig.REAL:\n\1 if cls not in class_label_real:\n\1 continue # Überspringe ungültige Klassen',
534
+ slice_content
535
+ )
536
+
537
+ with open(slice_file, 'w', encoding='utf-8') as f:
538
+ f.write(slice_content)
539
+ progress(0.471, desc="🔧 slice.py gepatcht (ungültige Klassen werden übersprungen)")
540
+ except Exception as e:
541
+ # Falls Patch fehlschlägt, ist das nicht kritisch
542
+ # Die Label-Filterung sollte ausreichen
543
+ pass
544
 
545
  # Prüfe ob main_config.py existiert
546
  if not main_config_file.exists():