Image Segmentation
Transformers
Safetensors
Korean
road-crack-detection
semantic-segmentation
pothole-detection
object-detection
image-classification
orthophoto
infrastructure
segformer
yolov8
convnext
Instructions to use MhRnd/road-crack-analyzer-pt with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use MhRnd/road-crack-analyzer-pt with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-segmentation", model="MhRnd/road-crack-analyzer-pt")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("MhRnd/road-crack-analyzer-pt", dtype="auto") - Notebooks
- Google Colab
- Kaggle
# Load model directly
from transformers import AutoModel
model = AutoModel.from_pretrained("MhRnd/road-crack-analyzer-pt", dtype="auto")Quick Links
Road Crack Analyzer PT
๋๋ก ์ ์ฌ์์(Orthophoto)์์ ๊ท ์ด ๋ฐ ํฌํธํ์ ์๋ ํ์ง/๋ถ์ํ๊ธฐ ์ํ ๋ชจ๋ธ ๊ฐ์ค์น ๋ชจ์์ ๋๋ค.
๊ฐ์ค์น ํ์ผ ๊ตฌ์กฐ
MhRnd/road-crack-analyzer-pt/
โโโ yolo_best_2.pt # YOLOv8s ๊ท ์ด ํ์ง (22MB)
โโโ conv_best.pth # ConvNeXt-Tiny ๋ถ๋ฅ๊ธฐ (319MB)
โโโ segformer-b2-finetuned_orthophoto_gaussian_crack_0920_512/ # Segformer-B2 ๊ท ์ด (105MB)
โ โโโ config.json
โ โโโ model.safetensors
โโโ segformer-b0-finetuned-pothole_0830_1024/ # Segformer-B0 ํฌํธํ (15MB)
โ โโโ config.json
โ โโโ model.safetensors
โโโ segformer-b0-finetuned-ade-512-512/ # Segformer Feature Extractor
โโโ preprocessor_config.json
๋ชจ๋ธ ๊ตฌ์ฑ
1. YOLO v8 - ๊ท ์ด ์์ญ ํ์ง
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ํ์ผ๋ช | yolo_best_2.pt |
| ์ํคํ ์ฒ | YOLOv8s |
| ์ฉ๋ | ํจ์น ๋ด ๊ท ์ด ์์ญ ์ฌ์ ํํฐ๋ง (Object Detection) |
| ์ ๋ ฅ | RGB ์ด๋ฏธ์ง (imgsz=1920) |
| ํ์ต ๋ฐ์ดํฐ | ๋๋ก ์ ์ฌ์์ ๊ท ์ด ๋ฐ์ด๋ฉ ๋ฐ์ค |
2. Crack Segmentor - ๊ท ์ด ์ธ๊ทธ๋ฉํ ์ด์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋๋ ํ ๋ฆฌ | segformer-b2-finetuned_orthophoto_gaussian_crack_0920_512/ |
| ์ํคํ ์ฒ | SegformerForSemanticSegmentation (B2) |
| Feature Extractor | segformer-b0-finetuned-ade-512-512/ |
| ์ ๋ ฅ | RGB ํจ์น ์ด๋ฏธ์ง |
| ์ถ๋ ฅ | ์ธ๊ทธ๋ฉํ ์ด์ ๋ง์คํฌ (background=0, crack>0) |
| ํ์ต ๋ฐ์ดํฐ | ๋๋ก ์ ์ฌ์์ ๊ท ์ด ๋ง์คํฌ (Gaussian augmentation ์ ์ฉ) |
from transformers import SegformerForSemanticSegmentation, SegformerImageProcessor
model = SegformerForSemanticSegmentation.from_pretrained(
"MhRnd/road-crack-analyzer-pt",
subfolder="segformer-b2-finetuned_orthophoto_gaussian_crack_0920_512"
)
extractor = SegformerImageProcessor.from_pretrained(
"MhRnd/road-crack-analyzer-pt",
subfolder="segformer-b0-finetuned-ade-512-512"
)
inputs = extractor(images=patch, return_tensors="pt")
outputs = model(**inputs)
pred = nn.functional.interpolate(
outputs.logits, size=(512, 512), mode="bilinear", align_corners=False
).argmax(dim=1)[0].numpy()
3. Pothole Segmentor - ํฌํธํ ์ธ๊ทธ๋ฉํ ์ด์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋๋ ํ ๋ฆฌ | segformer-b0-finetuned-pothole_0830_1024/ |
| ์ํคํ ์ฒ | SegformerForSemanticSegmentation (B0) |
| ์ ๋ ฅ | RGB ํจ์น ์ด๋ฏธ์ง (512x512 resize) |
| ์ถ๋ ฅ | ์ธ๊ทธ๋ฉํ ์ด์ ๋ง์คํฌ (background=0, pothole=255) |
| min_bbox_size | 50px |
model = SegformerForSemanticSegmentation.from_pretrained(
"MhRnd/road-crack-analyzer-pt",
subfolder="segformer-b0-finetuned-pothole_0830_1024"
)
4. ConvNeXt Classifier - ๊ท ์ด ์ ํ ๋ถ๋ฅ
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ํ์ผ๋ช | conv_best.pth |
| ์ํคํ ์ฒ | ConvNeXt-Tiny |
| ์ฉ๋ | ๊ท ์ด ์ ํ ๋ถ๋ฅ (LC / TC / AC) |
| ์ ๋ ฅ | ๊ท ์ด crop ์ด๋ฏธ์ง (256x256 resize, ImageNet ์ ๊ทํ) |
| ์ถ๋ ฅ | 3-class logits |
| ํด๋์ค | 0: LC (์ข ๋ฐฉํฅ ๊ท ์ด), 1: TC (ํก๋ฐฉํฅ ๊ท ์ด), 2: AC (๊ฑฐ๋ถ๋ฑ ๊ท ์ด) |
| ์ฒดํฌํฌ์ธํธ ํค | checkpoint["model"] |
from huggingface_hub import hf_hub_download
path = hf_hub_download("MhRnd/road-crack-analyzer-pt", "conv_best.pth")
cls_model = convnext_tiny(num_classes=3)
checkpoint = torch.load(path, map_location=device, weights_only=False)
cls_model.load_state_dict(checkpoint["model"])
cls_model.eval()
transforms = T.Compose([
T.Resize(256, interpolation=T.InterpolationMode.BICUBIC),
T.ToTensor(),
T.Normalize(IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD),
])
img = Image.fromarray(crack_crop).convert("RGB")
pred = torch.argmax(cls_model(transforms(img).unsqueeze(0)))
# 0: LC, 1: TC, 2: AC
ํ์ดํ๋ผ์ธ
์
๋ ฅ ์ด๋ฏธ์ง
|
ํจ์น ๋จ์ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ (size=1024, stride=682)
|-- [Crack Segmentor] Segformer-B2 ๊ท ์ด ์ธ๊ทธ๋ฉํ
์ด์
| +-- logits -> upsample 512x512 -> argmax -> resize
| +-- Contour ์ถ์ถ (area > 100) -> Polygon + Buffer (40px)
+-- [Pothole Segmentor] Segformer-B0 ํฌํธํ ์ธ๊ทธ๋ฉํ
์ด์
+-- resize 512x512 -> logits -> upsample -> argmax
+-- Contour ์ถ์ถ (bbox > 50px)
|
Crack Polygon ๋ณํฉ (unary_union)
|
[ConvNeXt Classifier] ๊ท ์ด ์ ํ ๋ถ๋ฅ (LC/TC/AC)
|
ํญ/๊ธธ์ด/๋ฉด์ ์ธก์
|
๊ฒฐ๊ณผ ์ถ๋ ฅ
๊ท ์ด ์ ํ ์ ์
| ์ฝ๋ | ์ด๋ฆ | ์ค๋ช | ์์ (BGR) |
|---|---|---|---|
| LC | Longitudinal Crack | ์ข ๋ฐฉํฅ ๊ท ์ด (๋๋ก ์งํ ๋ฐฉํฅ) | (255, 0, 0) |
| TC | Transverse Crack | ํก๋ฐฉํฅ ๊ท ์ด (๋๋ก ์ง๊ฐ ๋ฐฉํฅ) | (0, 0, 255) |
| AC | Alligator Crack | ๊ฑฐ๋ถ๋ฑ ๊ท ์ด (๋ง์ ๊ท ์ด) | (0, 255, 0) |
| POT | Pothole | ํฌํธํ | (255, 0, 255) |
๋ถ์ ํ๋ผ๋ฏธํฐ
| ํ๋ผ๋ฏธํฐ | ๊ฐ | ์ค๋ช |
|---|---|---|
size |
1024 | ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ํจ์น ํฌ๊ธฐ |
over |
682 | ํจ์น stride (size / 1.5) |
buffer_size |
40 | ๊ท ์ด polygon buffer ํฌ๊ธฐ |
min_crack_area |
100 | ์ต์ ๊ท ์ด contour ๋ฉด์ |
min_pothole_bbox |
50 | ์ต์ ํฌํธํ ๋ฐ์ด๋ฉ ๋ฐ์ค ํฌ๊ธฐ |
๊ด๋ จ ๋ ํฌ์งํ ๋ฆฌ
| ๋ ํฌ | ์ค๋ช |
|---|---|
| road-crack-analysis | ๋ฐฐ์น ๋ถ์ ํ์ดํ๋ผ์ธ |
| road-crack-analysis-api | FastAPI ์ถ๋ก ์๋ฒ |
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-segmentation", model="MhRnd/road-crack-analyzer-pt")