step working on ease of deployment for oak d
This commit is contained in:
51
fix_class_ids.py
Normal file
51
fix_class_ids.py
Normal file
@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Fix COCO annotation class IDs to be 0-based instead of 1-based.
|
||||
RF-DETR expects classes to start from 0 (background), but our annotations use 1-10.
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
def fix_class_ids(coco_data):
|
||||
"""Convert category IDs and annotation category_ids from 1-based to 0-based."""
|
||||
# Fix categories: change id from 1-10 to 0-9
|
||||
for cat in coco_data['categories']:
|
||||
cat['id'] -= 1
|
||||
|
||||
# Fix annotations: change category_id from 1-10 to 0-9
|
||||
for ann in coco_data['annotations']:
|
||||
ann['category_id'] -= 1
|
||||
|
||||
return coco_data
|
||||
|
||||
def main():
|
||||
dataset_dir = Path('dataset_coco')
|
||||
|
||||
for split in ['train', 'valid', 'test']:
|
||||
ann_file = dataset_dir / split / '_annotations.coco.json'
|
||||
|
||||
if not ann_file.exists():
|
||||
print(f"Warning: {ann_file} not found, skipping")
|
||||
continue
|
||||
|
||||
print(f"Processing {ann_file}...")
|
||||
|
||||
# Load data
|
||||
with open(ann_file, 'r') as f:
|
||||
data = json.load(f)
|
||||
|
||||
# Fix class IDs
|
||||
fixed_data = fix_class_ids(data)
|
||||
|
||||
# Save back
|
||||
with open(ann_file, 'w') as f:
|
||||
json.dump(fixed_data, f, indent=2)
|
||||
|
||||
print(f"✅ Fixed {len(data['annotations'])} annotations and {len(data['categories'])} categories")
|
||||
|
||||
print("🎉 All COCO annotations fixed for 0-based class indexing!")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user