Deep Tattoo - YOLOv8 Instance Segmentation

YOLOv8s-seg ๊ธฐ๋ฐ˜ ํƒ€ํˆฌ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๋ชจ๋ธ๋กœ, ์ด๋ฏธ์ง€์—์„œ ํƒ€ํˆฌ ์˜์—ญ์„ ์ •๋ฐ€ํ•˜๊ฒŒ ๊ฒ€์ถœํ•˜๊ณ  ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ ์ •๋ณด

v3 Model (Fine-tuned with Manual Labels) - ์ตœ์‹  ์ถ”์ฒœ โญโญโญ

  • ํŒŒ์ผ: yolov8s_tattoo_manual_v3_best.pt
  • ์„ฑ๋Šฅ: ํ‰๊ท  Confidence 0.862 (v2 ๋Œ€๋น„ +14.5%)
  • ํ•™์Šต ๋ฐฉ๋ฒ•: v2 ๋ชจ๋ธ + 24๊ฐœ ์ˆ˜๋™ ๋ผ๋ฒจ๋กœ Fine-tuning
  • ํŠน์ง•:
    • v2 ๊ธฐ๋ฐ˜ Transfer Learning
    • ์ˆ˜๋™ ๋ผ๋ฒจ๋ง์œผ๋กœ ์ •๋ฐ€๋„ ๋Œ€ํญ ํ–ฅ์ƒ
    • 10๊ฐœ ํ…Œ์ŠคํŠธ ์ค‘ 8๊ฐœ์—์„œ ๋” ๋†’์€ confidence
    • ์ผ๋ถ€ ์ด๋ฏธ์ง€์—์„œ ๋” ์ •๋ฐ€ํ•œ ๋ถ„๋ฆฌ ๊ฒ€์ถœ
    • ๊ฐ€์žฅ ๋†’์€ ํ’ˆ์งˆ์˜ ํƒ€ํˆฌ ๊ฒ€์ถœ

v2 Model (Filtered Dataset)

  • ํŒŒ์ผ: yolov8s_tattoo_filtered_v2_best.pt
  • ์„ฑ๋Šฅ: Mask mAP50 65.14%, Confidence 0.753
  • ํ•™์Šต ๋ฐ์ดํ„ฐ: 2,697 images (ํ•„ํ„ฐ๋ง๋จ)
  • ํŠน์ง•:
    • ์–ผ๊ตด ํƒ€ํˆฌ, ๋ณต์žกํ•œ ๋ฐฐ๊ฒฝ ์ œ์™ธ
    • ํ”ผ๋ถ€ ์œ„ ํƒ€ํˆฌ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ์…‹
    • ํƒ€ํˆฌ ํ†ตํ•ฉ ์ธ์‹ ๊ฐœ์„ 

v1 Model (Original Dataset)

  • ํŒŒ์ผ: yolov8s_tattoo_seg_v1_best.pt
  • ์„ฑ๋Šฅ: Test mAP50 57.7%, Confidence 0.658
  • ํ•™์Šต ๋ฐ์ดํ„ฐ: 4,373 images
  • ํŠน์ง•: ๋งŽ์€ ๋ฐ์ดํ„ฐ์ด์ง€๋งŒ ๋…ธ์ด์ฆˆ ํฌํ•จ

์„ฑ๋Šฅ ๋น„๊ต

๋ฒ„์ „ ํ•™์Šต ๋ฐ์ดํ„ฐ Confidence Mask mAP50 ํŠน์ง•
v3 (Fine-tuned) โญ v2 + 24 manual 0.862 - ์ตœ๊ณ  ํ’ˆ์งˆ
v2 (Filtered) 2,697 images 0.753 65.14% ํ•„ํ„ฐ๋ง๋จ
v1 (Original) 4,373 images 0.658 54.2% ๋…ธ์ด์ฆˆ ํฌํ•จ

๊ฒฐ๋ก :

  • v3 ๋ชจ๋ธ์ด ์ตœ๊ณ  ์„ฑ๋Šฅ (Confidence 0.862)
  • v2 โ†’ v3 Fine-tuning์œผ๋กœ +14.5% ๊ฐœ์„ 
  • ์‹ค์ œ ์‚ฌ์šฉ ์‹œ v3 ๋ชจ๋ธ ๊ฐ•๋ ฅ ์ถ”์ฒœ

์ฃผ์š” ํŠน์ง•

  • โœ… YOLOv8s-seg: 11.8M parameters, 39.9 GFLOPs
  • โœ… ๋น ๋ฅธ ์ถ”๋ก : ~23ms/image (43 FPS on RTX 2060)
  • โœ… ๋†’์€ ์ •ํ™•๋„: ํ‰๊ท  Confidence 66.2%
  • โœ… ํˆฌ๋ช… ๋ฐฐ๊ฒฝ ์ถ”์ถœ: ํƒ€ํˆฌ๋งŒ ๋ถ„๋ฆฌํ•˜์—ฌ PNG ์ €์žฅ ๊ฐ€๋Šฅ
  • โœ… GPU ๊ฐ€์†: CUDA ์ง€์›

์‚ฌ์šฉ๋ฒ•

์„ค์น˜

pip install ultralytics opencv-python numpy torch

๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ

from huggingface_hub import hf_hub_download

# v3 ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ (์ตœ์‹ , ์ถ”์ฒœ) โญ
model_path = hf_hub_download(
    repo_id="jun710/deep-tattoo-yolov8",
    filename="yolov8s_tattoo_manual_v3_best.pt"
)

# ๋˜๋Š” v2 ๋ชจ๋ธ (๋Œ€์•ˆ)
# model_path = hf_hub_download(
#     repo_id="jun710/deep-tattoo-yolov8",
#     filename="yolov8s_tattoo_filtered_v2_best.pt"
# )

์ถ”๋ก 

from ultralytics import YOLO

# ๋ชจ๋ธ ๋กœ๋“œ
model = YOLO(model_path)

# ํƒ€ํˆฌ ๊ฒ€์ถœ
results = model.predict("tattoo_image.jpg", conf=0.25, imgsz=640)

# ๊ฒฐ๊ณผ ํ‘œ์‹œ
results[0].show()

# ๋งˆ์Šคํฌ ์ถ”์ถœ
if results[0].masks is not None:
    masks = results[0].masks.data.cpu().numpy()
    print(f"{len(masks)}๊ฐœ ํƒ€ํˆฌ ๊ฒ€์ถœ๋จ")

ํƒ€ํˆฌ๋งŒ ์ถ”์ถœ (ํˆฌ๋ช… ๋ฐฐ๊ฒฝ)

import cv2
import numpy as np

# ์˜ˆ์ธก
results = model.predict("tattoo.jpg", conf=0.25)

# ์›๋ณธ ์ด๋ฏธ์ง€
img = cv2.imread("tattoo.jpg")
img_rgba = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)

# ๋งˆ์Šคํฌ ํ•ฉ์น˜๊ธฐ
combined_mask = np.zeros((img.shape[0], img.shape[1]), dtype=np.uint8)
for mask in results[0].masks.data.cpu().numpy():
    mask_resized = cv2.resize(mask, (img.shape[1], img.shape[0]))
    combined_mask = cv2.bitwise_or(combined_mask, (mask_resized > 0.5).astype(np.uint8))

# ํˆฌ๋ช… ๋ฐฐ๊ฒฝ ์ ์šฉ
img_rgba[:, :, 3] = combined_mask * 255

# ์ €์žฅ
cv2.imwrite("tattoo_extracted.png", img_rgba)

๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜

  • ๋ฐฑ๋ณธ: YOLOv8s (CSPDarknet53 ๋ณ€ํ˜•)
  • ํ—ค๋“œ: Segmentation Head + Detection Head
  • ํŒŒ๋ผ๋ฏธํ„ฐ: 11.79M
  • FLOPs: 39.9G

ํ•™์Šต ์ •๋ณด

v2 ๋ชจ๋ธ ํ•™์Šต ์„ค์ •

  • Epochs: 300 (Best: 223)
  • Batch Size: 16
  • Image Size: 640x640
  • Optimizer: Adam (lr=0.001, lrf=0.0001)
  • Device: CUDA (RTX 2060)
  • ํ•™์Šต ์‹œ๊ฐ„: 7.9 hours

๋ฐ์ดํ„ฐ ์ฆ๊ฐ•

  • HSV: h=0.03, s=0.7, v=0.4
  • Rotation: ยฑ20ยฐ
  • Scale: 0.5
  • Flip LR: 50%
  • Mosaic: 100%
  • Mixup: 10%

๋ฐ์ดํ„ฐ์…‹ ๋ถ„ํ• 

  • Train: 2,157 images (80%)
  • Valid: 269 images (10%)
  • Test: 271 images (10%)

์„ฑ๋Šฅ ์ƒ์„ธ

๊ฒ€์ฆ ์„ธํŠธ (Epoch 223)

  • Mask mAP50: 65.14%
  • Mask mAP50-95: 36.7%
  • Box mAP50: 71.5%
  • Box mAP50-95: 49.9%

ํ…Œ์ŠคํŠธ ์„ธํŠธ

  • Mask mAP50: 56.63%
  • Mask Precision: 71.94%
  • Mask Recall: 51.49%

์ถ”๋ก  ์†๋„ (RTX 2060)

  • Preprocess: 2.1ms
  • Inference: 18.9ms
  • Postprocess: 1.9ms
  • Total: ~23ms/image (43 FPS)

์‚ฌ์šฉ ์‚ฌ๋ก€

  • ํƒ€ํˆฌ ๋””์ž์ธ ๋ถ„์„
  • ์˜๋ฃŒ/๋ฒ•์˜ํ•™ ํƒ€ํˆฌ ๊ธฐ๋ก
  • AR/VR ํƒ€ํˆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
  • ํƒ€ํˆฌ ์ œ๊ฑฐ ์ „ํ›„ ๋น„๊ต
  • ๋ชจ๋ฐ”์ผ ์•ฑ ํ†ตํ•ฉ

์ œํ•œ ์‚ฌํ•ญ

  • ๋งค์šฐ ํฌ๋ฏธํ•˜๊ฑฐ๋‚˜ ์˜ค๋ž˜๋œ ํƒ€ํˆฌ๋Š” ๊ฒ€์ถœ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ
  • ํ”ผ๋ถ€์ƒ‰๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ์ƒ‰์ƒ์˜ ํƒ€ํˆฌ ๊ฒ€์ถœ ์ •ํ™•๋„ ๋‚ฎ์Œ
  • ๋ณต์žกํ•œ ๋ฐฐ๊ฒฝ์—์„œ ์˜ค๊ฒ€์ถœ ๊ฐ€๋Šฅ์„ฑ (v2์—์„œ ๊ฐœ์„ ๋จ)

๊ถŒ์žฅ ์‚ฌํ•ญ

Confidence Threshold

  • ๊ธฐ๋ณธ๊ฐ’: 0.25 (๊ท ํ˜•์žกํžŒ ๊ฒ€์ถœ)
  • ์—„๊ฒฉํ•œ ๊ฒ€์ถœ: 0.5 (์˜ค๊ฒ€์ถœ ๊ฐ์†Œ)
  • ๋ฏผ๊ฐํ•œ ๊ฒ€์ถœ: 0.15 (์ž‘์€ ํƒ€ํˆฌ ํฌํ•จ)

์ž…๋ ฅ ์ด๋ฏธ์ง€

  • ํ•ด์ƒ๋„: 640px ์ด์ƒ ๊ถŒ์žฅ
  • ํ˜•์‹: JPG, PNG
  • ์กฐ๋ช…: ๊ท ์ผํ•œ ์กฐ๋ช… ์„ ํ˜ธ
  • ๋ฐฐ๊ฒฝ: ๋‹จ์ˆœํ•œ ๋ฐฐ๊ฒฝ ๊ถŒ์žฅ

๋ผ์ด์„ ์Šค

MIT License - ์—ฐ๊ตฌ ๋ฐ ์ƒ์—…์  ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ธ์šฉ

@misc{deep-tattoo-yolov8-2026,
  title={Deep Tattoo: YOLOv8 Instance Segmentation for Tattoo Extraction},
  author={jun710},
  year={2026},
  publisher={Hugging Face},
  howpublished={\url{https://huggingface.co/jun710/deep-tattoo-yolov8}}
}

๊ด€๋ จ ๋งํฌ

์—…๋ฐ์ดํŠธ ๋กœ๊ทธ

2026-01-20 - v2 Release

  • ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ์žฌํ•™์Šต
  • ์–ผ๊ตด ํƒ€ํˆฌ ๋ฐ ๋ณต์žกํ•œ ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ
  • ๊ฒ€์ฆ ์„ฑ๋Šฅ 10.94% ํ–ฅ์ƒ
  • ํƒ€ํˆฌ ํ†ตํ•ฉ ์ธ์‹ ๊ฐœ์„ 

2026-01-19 - v1 Release

  • ์ดˆ๊ธฐ YOLOv8s-seg ๋ชจ๋ธ ๋ฆด๋ฆฌ์Šค
  • 4,373 images๋กœ ํ•™์Šต
  • Test mAP50: 57.7%
Downloads last month
112
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support