human-activity-backend / src /test_setup.py
Hanokalure's picture
Deploy Human Activity Recognition backend to Hugging Face Spaces
062cf9b
Raw History Blame Contribute Delete
5.07 kB
"""
Quick Setup Test for Basketball Binary Classifier
πŸ§ͺ This tests if everything is ready before full training
"""
def test_imports():
"""Test if all required modules can be imported"""
print("πŸ§ͺ Testing imports...")
try:
import torch
import torchvision
print(f"βœ… PyTorch: {torch.__version__}")
print(f"βœ… TorchVision: {torchvision.__version__}")
if torch.cuda.is_available():
print(f"βœ… CUDA: {torch.version.cuda}")
print(f"πŸš€ GPU: {torch.cuda.get_device_name(0)}")
else:
print("⚠️ CUDA: Not available (will use CPU - slower training)")
except ImportError as e:
print(f"❌ Import error: {e}")
return False
try:
from binary_dataset import get_binary_dataloaders
from binary_model import get_binary_model
print("βœ… Custom modules imported successfully")
except ImportError as e:
print(f"❌ Custom module error: {e}")
return False
return True
def test_data_paths():
"""Test if data paths exist"""
print("\nπŸ“‚ Testing data paths...")
import os
data_root = r"C:\ASH_PROJECT\data\UCF101"
annotation_path = r"C:\ASH_PROJECT\data\ucfTrainTestlist"
if os.path.exists(data_root):
print("βœ… UCF101 data directory found")
# Count some directories
dirs = [d for d in os.listdir(data_root) if os.path.isdir(os.path.join(data_root, d))]
print(f" πŸ“ Found {len(dirs)} action classes")
# Check if Basketball exists
if "Basketball" in dirs:
print("βœ… Basketball class found")
basket_path = os.path.join(data_root, "Basketball")
videos = [f for f in os.listdir(basket_path) if f.endswith(('.avi', '.mp4'))]
print(f" πŸ€ Basketball videos: {len(videos)}")
else:
print("⚠️ Basketball class not found")
else:
print(f"❌ UCF101 data not found at: {data_root}")
return False
if os.path.exists(annotation_path):
print("βœ… Annotation path found")
else:
print(f"❌ Annotations not found at: {annotation_path}")
return False
return True
def test_model_creation():
"""Test if we can create a binary model"""
print("\nπŸ”§ Testing model creation...")
try:
from binary_model import get_binary_model
model = get_binary_model("simple")
print("βœ… Binary model created successfully")
# Test with dummy input
import torch
dummy_input = torch.randn(1, 3, 16, 112, 112)
with torch.no_grad():
output = model(dummy_input)
print(f"βœ… Model forward pass: {output.shape}")
if output.shape == (1, 2):
print("βœ… Correct output shape for binary classification")
else:
print(f"⚠️ Expected (1, 2), got {output.shape}")
return True
except Exception as e:
print(f"❌ Model creation failed: {e}")
return False
def test_dataset_loading():
"""Test if we can load a small batch of data"""
print("\nπŸ“Š Testing dataset loading...")
try:
from binary_dataset import get_binary_dataloaders
# Test with very small batch
train_loader, test_loader, class_weights = get_binary_dataloaders(
r"C:\ASH_PROJECT\data\UCF101",
r"C:\ASH_PROJECT\data\ucfTrainTestlist",
target_action="Basketball",
batch_size=2, # Very small for testing
num_workers=0
)
print("βœ… DataLoaders created successfully")
print(f" πŸ“Š Training batches: {len(train_loader)}")
print(f" πŸ“Š Test batches: {len(test_loader)}")
print(f" βš–οΈ Class weights: {class_weights}")
# Try to load one batch
print("\nπŸ” Testing batch loading...")
for clips, labels in train_loader:
print(f"βœ… First batch: clips={clips.shape}, labels={labels}")
break
return True
except Exception as e:
print(f"❌ Dataset loading failed: {e}")
return False
def main():
"""Run all tests"""
print("πŸš€" * 30)
print("πŸš€ BASKETBALL BINARY CLASSIFIER SETUP TEST")
print("πŸš€" * 30)
all_passed = True
all_passed &= test_imports()
all_passed &= test_data_paths()
all_passed &= test_model_creation()
all_passed &= test_dataset_loading()
print("\n" + "=" * 50)
if all_passed:
print("πŸŽ‰ ALL TESTS PASSED!")
print("βœ… Ready for basketball binary classifier training!")
print("\nπŸš€ Next step: Run 'python train_basketball.py'")
else:
print("❌ SOME TESTS FAILED!")
print("πŸ’‘ Fix the issues above before training")
print("=" * 50)
if __name__ == "__main__":
main()