| # π Floorplan Segmentation Model Training | |
| This repository contains the training code for a floorplan segmentation model that can identify walls, doors, windows, rooms, and background in architectural floorplans. | |
| ## π― Model Architecture | |
| - **Type**: Ultra Simple U-Net | |
| - **Input**: RGB floorplan images (224x224) | |
| - **Output**: 5-class segmentation (Background, Walls, Doors, Windows, Rooms) | |
| - **Parameters**: ~258K | |
| ## π Training Data | |
| The model is trained on the Cubicasa5K dataset: | |
| - **Training**: 4,200 images | |
| - **Validation**: 400 images | |
| - **Test**: 400 images | |
| ## π Quick Start | |
| ### 1. Setup Environment | |
| ```bash | |
| pip install -r hf_requirements.txt | |
| ``` | |
| ### 2. Prepare Data | |
| 1. Upload `processed_data.zip` to this repository | |
| 2. Extract the data: `unzip processed_data.zip` | |
| ### 3. Start Training | |
| ```bash | |
| python hf_train.py | |
| ``` | |
| ## βοΈ Training Configuration | |
| - **Batch Size**: 4 | |
| - **Image Size**: 224x224 | |
| - **Epochs**: 50 | |
| - **Learning Rate**: 1e-4 | |
| - **Optimizer**: Adam | |
| - **Loss**: CrossEntropyLoss | |
| - **Scheduler**: CosineAnnealingLR | |
| ## π Expected Results | |
| After training, you should see: | |
| - **Wall Coverage**: 40-60% (vs previous 20.6%) | |
| - **Room Detection**: Multiple rooms detected | |
| - **Door/Window Classification**: Proper distinction from walls | |
| - **Overall Quality**: Much better than previous attempts | |
| ## πΎ Model Outputs | |
| - `best_model.pth`: Best trained model | |
| - `checkpoint_epoch_*.pth`: Checkpoints every 10 epochs | |
| - `training_history.png`: Training progress visualization | |
| ## π§ Usage | |
| ### Load Trained Model | |
| ```python | |
| import torch | |
| from hf_train import UltraSimpleModel | |
| # Load model | |
| model = UltraSimpleModel(n_channels=3, n_classes=5) | |
| checkpoint = torch.load('best_model.pth', map_location='cpu') | |
| model.load_state_dict(checkpoint['model_state_dict']) | |
| model.eval() | |
| ``` | |
| ### Predict on New Image | |
| ```python | |
| import cv2 | |
| import torch | |
| # Load and preprocess image | |
| image = cv2.imread('floorplan.png') | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) | |
| image = cv2.resize(image, (224, 224)) | |
| image_tensor = torch.from_numpy(image).float().permute(2, 0, 1) / 255.0 | |
| image_tensor = image_tensor.unsqueeze(0) | |
| # Predict | |
| with torch.no_grad(): | |
| output = model(image_tensor) | |
| prediction = torch.argmax(output, dim=1).squeeze(0).numpy() | |
| ``` | |
| ## π Class Mapping | |
| - **0**: Background (Black) | |
| - **1**: Walls (Red) | |
| - **2**: Doors (Green) | |
| - **3**: Windows (Blue) | |
| - **4**: Rooms (Yellow) | |
| ## π― Performance Metrics | |
| - **Loss**: CrossEntropyLoss | |
| - **Validation**: Every epoch | |
| - **Checkpointing**: Every 10 epochs | |
| - **Best Model**: Saved when validation loss improves | |
| ## π Troubleshooting | |
| ### Common Issues | |
| 1. **CUDA Out of Memory**: Reduce batch size to 2 | |
| 2. **Data Not Found**: Ensure `processed_data.zip` is uploaded | |
| 3. **Slow Training**: Check GPU availability | |
| ### Performance Tips | |
| - Use GPU for faster training | |
| - Monitor GPU memory usage | |
| - Clear cache periodically during training | |
| ## π Support | |
| If you encounter issues: | |
| 1. Check the training logs | |
| 2. Verify data format | |
| 3. Ensure all dependencies are installed | |
| ## π Results | |
| This model should significantly improve upon the previous poor performance: | |
| - Better wall detection | |
| - Proper room segmentation | |
| - Accurate door/window classification | |
| - Overall higher quality results | |
| --- | |
| **Happy Training! π** |