| | --- |
| | license: apache-2.0 |
| | tags: |
| | - image-classification |
| | - pytorch |
| | - computer-vision |
| | - ocr |
| | - crossed-out-text |
| | library_name: pytorch |
| | pipeline_tag: image-classification |
| | --- |
| | |
| | # crossed-out-text-classifier |
| |
|
| | ## Model Description |
| |
|
| | This is a ResNet18-based binary classifier trained to detect crossed out text in OCR images. The model classifies images into two categories: |
| | - `no`: Text is not crossed out |
| | - `yes`: Text is crossed out |
| |
|
| | ## Model Details |
| |
|
| | - **Architecture**: ResNet18 with modified classification head |
| | - **Parameters**: 11,187,158 |
| | - **Input Size**: 224x224 RGB images |
| | - **Classes**: ['no', 'yes'] |
| | - **Validation Accuracy**: 0.9688 |
| | - **Training Framework**: PyTorch |
| |
|
| | ## Usage |
| |
|
| | ### Using the model directly |
| |
|
| | ```python |
| | import torch |
| | from PIL import Image |
| | import torchvision.transforms as transforms |
| | |
| | # Load model |
| | model = torch.load('pytorch_model.bin', map_location='cpu') |
| | model.eval() |
| | |
| | # Prepare image |
| | transform = transforms.Compose([ |
| | transforms.Resize((224, 224)), |
| | transforms.ToTensor(), |
| | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) |
| | ]) |
| | |
| | image = Image.open('your_image.png').convert('RGB') |
| | input_tensor = transform(image).unsqueeze(0) |
| | |
| | # Make prediction |
| | with torch.no_grad(): |
| | outputs = model(input_tensor) |
| | probabilities = torch.nn.functional.softmax(outputs, dim=1) |
| | predicted_class = torch.argmax(probabilities, dim=1).item() |
| | confidence = torch.max(probabilities, dim=1)[0].item() |
| | |
| | class_names = ['no', 'yes'] |
| | print(f"Prediction: {class_names[predicted_class]} (confidence: {confidence:.4f})") |
| | ``` |
| |
|
| | ### Using the inference module |
| |
|
| | ```python |
| | from src.inference import CrossedOutPredictor |
| | |
| | # Initialize predictor |
| | predictor = CrossedOutPredictor() |
| | predictor.load_model('pytorch_model.bin') |
| | |
| | # Make prediction |
| | prediction, confidence = predictor.predict_image('your_image.png') |
| | print(f"Prediction: {prediction} (confidence: {confidence:.4f})") |
| | ``` |
| |
|
| | ## Training Data |
| |
|
| | The model was trained on a dataset of OCR images with crossed out and non-crossed out text. The training used: |
| | - Data augmentation including rotation, scaling, shearing, and color jittering |
| | - Transfer learning from ImageNet pretrained ResNet18 |
| | - Two-phase training: frozen backbone followed by full fine-tuning |
| |
|
| | ## Limitations |
| |
|
| | - The model is specifically designed for OCR images and may not generalize well to other image types |
| | - Performance may vary with different text fonts, sizes, or crossing-out patterns |
| | - Trained on specific image resolution (224x224) and normalization |
| |
|
| | ## Intended Use |
| |
|
| | This model is intended for: |
| | - OCR post-processing pipelines |
| | - Document analysis systems |
| | - Text validation workflows |
| |
|
| | ## License |
| |
|
| | This model is released under the Apache 2.0 license. |
| |
|
| | ## Citation |
| |
|
| | If you use this model, please cite: |
| |
|
| | ```bibtex |
| | @misc{Sleeeepy_crossed_out_text_classifier, |
| | title={Crossed Out Text Classifier}, |
| | author={Your Name}, |
| | year={2025}, |
| | howpublished={\url{https://huggingface.co/Sleeeepy/crossed-out-text-classifier}} |
| | } |
| | ``` |
| |
|