| --- |
| license: mit |
| base_model: CIDAS/clipseg-rd64-refined |
| tags: |
| - image-segmentation |
| - semantic-segmentation |
| - computer-vision |
| - crack-detection |
| - infrastructure |
| - clipseg |
| datasets: |
| - roboflow |
| metrics: |
| - iou |
| - dice |
| --- |
| |
| # CrackSeg |
|
|
| Fine-tuned [CLIPSeg](https://huggingface.co/CIDAS/clipseg-rd64-refined) for pixel-wise surface crack detection. Given an image of any surface, the model returns a binary segmentation mask highlighting crack regions. |
|
|
| ## Model Performance |
|
|
| | Metric | Score | |
| |--------|-------| |
| | Dice Score | 0.612 | |
| | mIoU | 0.716 | |
|
|
| ## Live Demo |
|
|
| Try it on [HuggingFace Spaces](https://huggingface.co/spaces/primus29/crackseg). |
|
|
| ## Training Details |
|
|
| - **Dataset:** 14,000+ crack images (Roboflow, COCO format) |
| - **Fine-tuning:** Partial — decoder fully unfrozen + last 2 layers of CLIP vision encoder + last 1 layer of CLIP text encoder |
| - **Loss:** Focal Loss (α=0.75, γ=2.0) |
| - **Optimizer:** AdamW with differential learning rates |
| - **Scheduler:** CosineAnnealingLR |
| - **Early stopping:** patience = 5 |
|
|
| ## Usage |
|
|
| ```python |
| import torch |
| from huggingface_hub import hf_hub_download |
| from transformers import AutoProcessor, CLIPSegForImageSegmentation |
| from PIL import Image |
| |
| processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined") |
| model = CLIPSegForImageSegmentation.from_pretrained("CIDAS/clipseg-rd64-refined") |
| |
| path = hf_hub_download(repo_id="primus29/crackseg", filename="best_model.pth") |
| checkpoint = torch.load(path, map_location="cpu", weights_only=False) |
| model.load_state_dict(checkpoint['model_state_dict']) |
| model.eval() |
| |
| image = Image.open("your_image.jpg") |
| inputs = processor(text="segment crack", images=image, return_tensors="pt", padding=True) |
| |
| with torch.no_grad(): |
| outputs = model(**inputs) |
| |
| mask = torch.sigmoid(outputs.logits).squeeze() |
| mask = (mask > 0.5).float() |
| ``` |
|
|
| ## Limitations |
|
|
| - Shadow regions can be misidentified as cracks |
| - Performance degrades on very thin hairline cracks |
| - Trained primarily on surface/concrete crack data; may not generalize to all materials |