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 ์ถ”๋ก  ์„œ๋ฒ„
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support