justin-onda's picture
Update README.md
dbd40fe verified
metadata
library_name: transformers
tags:
  - siamese-network
  - image-similarity
  - room-classification
  - efficientnet
  - computer-vision
license: apache-2.0
language:
  - en
pipeline_tag: image-feature-extraction
base_model:
  - timm/tf_efficientnetv2_s

Room Image Similarity Model

๊ฐ์‹ค ์ด๋ฏธ์ง€ ์œ ์‚ฌ๋„ ์ธก์ •์„ ์œ„ํ•œ Siamese ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ ๊ฐœ์š”

์ด ๋ชจ๋ธ์€ ์ˆ™์†Œ ๊ฐ์‹ค ์ด๋ฏธ์ง€ ๊ฐ„์˜ ์œ ์‚ฌ๋„๋ฅผ ์ธก์ •ํ•˜์—ฌ ๋™์ผํ•œ ๋ฌผ๋ฆฌ์  ๊ฐ์‹ค์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. EfficientNetV2 ๊ธฐ๋ฐ˜ Siamese ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ ์ •๋ณด

  • ๋ชจ๋ธ๋ช…: similarity_model_0.6
  • ๊ธฐ๋ฐ˜ ๋ชจ๋ธ: timm/tf_efficientnetv2_s
  • ์ด๋ฏธ์ง€ ํฌ๊ธฐ: 224x224
  • ์ฑ„๋„: RGB (3์ฑ„๋„)
  • ์ •๊ทœํ™”: ImageNet ํ‘œ์ค€ (mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

์‚ฌ์šฉ๋ฒ•

Python์œผ๋กœ ๋ชจ๋ธ ์‚ฌ์šฉ

import torch
import onnxruntime as ort
import numpy as np
from PIL import Image
from torchvision import transforms

# PyTorch ๋ชจ๋ธ ๋กœ๋“œ
model = torch.load('similarity_model_0.6.pth', map_location='cpu')
model.eval()

# ONNX ๋ชจ๋ธ ์‚ฌ์šฉ (๋” ๋น ๋ฅธ ์ถ”๋ก )
onnx_session = ort.InferenceSession('similarity_model_0.6.onnx')

# ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

def calculate_similarity_pytorch(img1_path, img2_path):
    """PyTorch ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ"""
    img1 = transform(Image.open(img1_path)).unsqueeze(0)
    img2 = transform(Image.open(img2_path)).unsqueeze(0)
    
    with torch.no_grad():
        similarity = torch.sigmoid(model(img1, img2))
    
    return similarity.item()

def calculate_similarity_onnx(img1_path, img2_path):
    """ONNX ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ (๊ถŒ์žฅ)"""
    img1 = transform(Image.open(img1_path)).numpy()
    img2 = transform(Image.open(img2_path)).numpy()
    
    # ONNX ๋ชจ๋ธ ์ถ”๋ก 
    input_feed = {
        'input1': img1.astype(np.float32),
        'input2': img2.astype(np.float32)
    }
    
    similarity = onnx_session.run(None, input_feed)[0]
    return similarity[0][0]

# ์˜ˆ์‹œ ์‚ฌ์šฉ
similarity_score = calculate_similarity_onnx("room1.jpg", "room2.jpg")
print(f"์œ ์‚ฌ๋„: {similarity_score:.4f}")

๋ฐฐ์น˜ ์ฒ˜๋ฆฌ

def calculate_batch_similarity(image_pairs):
    """์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€ ์Œ์˜ ์œ ์‚ฌ๋„๋ฅผ ํ•œ ๋ฒˆ์— ๊ณ„์‚ฐ"""
    similarities = []
    
    for img1_path, img2_path in image_pairs:
        similarity = calculate_similarity_onnx(img1_path, img2_path)
        similarities.append(similarity)
    
    return similarities

# ์˜ˆ์‹œ
image_pairs = [
    ("room1.jpg", "room2.jpg"),
    ("room3.jpg", "room4.jpg"),
    ("room5.jpg", "room6.jpg")
]

similarities = calculate_batch_similarity(image_pairs)
for i, sim in enumerate(similarities):
    print(f"์Œ {i+1} ์œ ์‚ฌ๋„: {sim:.4f}")

๋ชจ๋ธ ํŒŒ์ผ

  • similarity_model_0.6.pth: PyTorch ๋ชจ๋ธ ํŒŒ์ผ
  • similarity_model_0.6.onnx: ONNX ๋ชจ๋ธ ํŒŒ์ผ (์ถ”๋ก  ์ตœ์ ํ™”)
  • similarity_model_0.6_model_info.json: ๋ชจ๋ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
  • similarity_model_0.6_inference_example.py: ์ถ”๋ก  ์˜ˆ์ œ ์ฝ”๋“œ

์„ฑ๋Šฅ

  • ์ •ํ™•๋„: 90% ์ด์ƒ
  • F1 Score: 0.90 ์ด์ƒ
  • ์ฒ˜๋ฆฌ ์†๋„: 500 ์ด๋ฏธ์ง€ ์Œ/์ดˆ ์ด์ƒ (ONNX ๋ชจ๋ธ ๊ธฐ์ค€)
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: 2GB ์ดํ•˜ (GPU ์ถ”๋ก  ์‹œ)

ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ

์ด ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋กœ ํ›ˆ๋ จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค:

์‚ฌ์ „ํ›ˆ๋ จ (Pretraining)

  • ๊ธ์ • ์Œ: ์›๋ณธ ์ด๋ฏธ์ง€์™€ ์ฆ๊ฐ•๋œ ์ด๋ฏธ์ง€ (๊ฐ™์€ ๊ฐ์‹ค)
  • ๋ถ€์ • ์Œ: ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์‹ค์˜ ์ด๋ฏธ์ง€

๋ฏธ์„ธ์กฐ์ • (Fine-tuning)

  • ๊ธ์ • ์Œ: ๊ฐ™์€ ๊ฐ์‹ค์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€
  • ๋ถ€์ • ์Œ: ๋‹ค๋ฅธ ๊ฐ์‹ค์˜ ์ด๋ฏธ์ง€

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

  • ๋ฐฑ๋ณธ: EfficientNetV2-Small
  • Siamese ๊ตฌ์กฐ: ๋‘ ์ด๋ฏธ์ง€๋ฅผ ๋™์ผํ•œ ๋ฐฑ๋ณธ์œผ๋กœ ์ฒ˜๋ฆฌ
  • ์†์‹ค ํ•จ์ˆ˜: Focal Loss (๋ถˆ๊ท ํ˜• ๋ฐ์ดํ„ฐ์…‹ ์ตœ์ ํ™”)
  • ์ถœ๋ ฅ: 0-1 ์‚ฌ์ด์˜ ์œ ์‚ฌ๋„ ์ ์ˆ˜

์ „์ฒ˜๋ฆฌ ์š”๊ตฌ์‚ฌํ•ญ

  1. ์ด๋ฏธ์ง€ ํฌ๊ธฐ: 224x224 ํ”ฝ์…€
  2. ์ƒ‰์ƒ ๊ณต๊ฐ„: RGB
  3. ์ •๊ทœํ™”: ImageNet ํ‘œ์ค€๊ฐ’ ์‚ฌ์šฉ
  4. ํฌ๋กญ: ์ค‘์•™ ํฌ๋กญ (center crop)
  5. ์ง€์› ํ˜•์‹: JPG, PNG, JPEG

๋ผ์ด์„ ์Šค

Apache 2.0 License

์ฐธ๊ณ 

์ด ๋ชจ๋ธ์€ Room Clusterer ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

์ง์ ‘ ์‚ฌ์šฉ

์ด ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฉ๋„๋กœ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๊ฐ์‹ค ์ด๋ฏธ์ง€ ์ค‘๋ณต ๊ฒ€์ถœ: ๋™์ผํ•œ ๊ฐ์‹ค์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ๋„/์กฐ๋ช…์˜ ์ด๋ฏธ์ง€ ์‹๋ณ„
  • ์ˆ™์†Œ ์ด๋ฏธ์ง€ ํด๋Ÿฌ์Šคํ„ฐ๋ง: ์œ ์‚ฌํ•œ ๊ฐ์‹ค ํƒ€์ž…๋ณ„๋กœ ์ด๋ฏธ์ง€ ๊ทธ๋ฃนํ™”
  • ์ด๋ฏธ์ง€ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰: ์ฃผ์–ด์ง„ ์ด๋ฏธ์ง€์™€ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์ด๋ฏธ์ง€ ์ฐพ๊ธฐ
  • ํ’ˆ์งˆ ๊ด€๋ฆฌ: ๊ฐ์‹ค ์ด๋ฏธ์ง€์˜ ์ผ๊ด€์„ฑ ๊ฒ€์ฆ

๋‹ค์šด์ŠคํŠธ๋ฆผ ์‚ฌ์šฉ

์ด ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ˆ™์†Œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ: ๊ฐ์‹ค ์ด๋ฏธ์ง€ ์ž๋™ ๋ถ„๋ฅ˜ ๋ฐ ๊ด€๋ฆฌ
  • ์—ฌํ–‰ ํ”Œ๋žซํผ: ๊ฐ์‹ค ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ์‹œ์Šคํ…œ
  • ๋ถ€๋™์‚ฐ ํ”Œ๋žซํผ: ์œ ์‚ฌํ•œ ๊ฐ์‹ค ์Šคํƒ€์ผ ๊ฒ€์ƒ‰
  • ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: ๋Œ€๊ทœ๋ชจ ์ด๋ฏธ์ง€ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰ ์—”์ง„

์‚ฌ์šฉ ๋ฒ”์œ„ ์ œํ•œ

์ด ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฉ๋„๋กœ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

  • ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ์ด๋ฏธ์ง€: ๊ฐ์‹ค์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์ด๋ฏธ์ง€ ์œ ์‚ฌ๋„ ์ธก์ •
  • ์‹ค์‹œ๊ฐ„ ๋น„๋””์˜ค: ๋™์˜์ƒ ํ”„๋ ˆ์ž„ ๊ฐ„ ์œ ์‚ฌ๋„ ์ธก์ •
  • 3D ๊ณต๊ฐ„ ๋ถ„์„: ๊ณต๊ฐ„์  ๊ด€๊ณ„๋‚˜ ๊นŠ์ด ์ •๋ณด ํ™œ์šฉ

ํŽธํ–ฅ, ์œ„ํ—˜ ๋ฐ ์ œํ•œ์‚ฌํ•ญ

์•Œ๋ ค์ง„ ์ œํ•œ์‚ฌํ•ญ

  1. ์ด๋ฏธ์ง€ ํ’ˆ์งˆ ์˜์กด์„ฑ: ์ €ํ™”์งˆ์ด๋‚˜ ๋…ธ์ด์ฆˆ๊ฐ€ ๋งŽ์€ ์ด๋ฏธ์ง€์—์„œ๋Š” ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์กฐ๋ช… ์กฐ๊ฑด: ์„œ๋กœ ๋‹ค๋ฅธ ์กฐ๋ช… ์กฐ๊ฑด์˜ ์ด๋ฏธ์ง€ ๋น„๊ต ์‹œ ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๊ฐ๋„ ๋ณ€ํ™”: ๋™์ผ ๊ฐ์‹ค์ด๋ผ๋„ ์ดฌ์˜ ๊ฐ๋„๊ฐ€ ํฌ๊ฒŒ ๋‹ค๋ฅด๋ฉด ์œ ์‚ฌ๋„๊ฐ€ ๋‚ฎ๊ฒŒ ์ธก์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๋„๋ฉ”์ธ ํŠนํ™”: ์ˆ™์†Œ ๊ฐ์‹ค ์ด๋ฏธ์ง€์— ํŠนํ™”๋˜์–ด ์žˆ์–ด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ๋Š” ์„ฑ๋Šฅ์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

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

  • ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ: ์ผ๊ด€๋œ ํฌ๊ธฐ์™€ ํ’ˆ์งˆ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ „์ฒ˜๋ฆฌํ•˜์„ธ์š”.
  • ์ž„๊ณ„๊ฐ’ ์„ค์ •: ์šฉ๋„์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์œ ์‚ฌ๋„ ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•˜์„ธ์š” (์ผ๋ฐ˜์ ์œผ๋กœ 0.7-0.8).
  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ: ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์‹œ ONNX ๋ชจ๋ธ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ ์‹œ์ž‘ํ•˜๊ธฐ

์œ„์˜ "์‚ฌ์šฉ๋ฒ•" ์„น์…˜์˜ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋ชจ๋ธ์„ ์‹œ์ž‘ํ•˜์„ธ์š”.

ํ›ˆ๋ จ ์„ธ๋ถ€์‚ฌํ•ญ

ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ

  • ๋ฐ์ดํ„ฐ์…‹ ํฌ๊ธฐ: ์•ฝ 50,000๊ฐœ์˜ ๊ฐ์‹ค ์ด๋ฏธ์ง€
  • ์ด๋ฏธ์ง€ ์Œ: 200,000๊ฐœ์˜ ๊ธ์ • ์Œ, 200,000๊ฐœ์˜ ๋ถ€์ • ์Œ
  • ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•: ํšŒ์ „, ํฌ๋กญ, ์ƒ‰์ƒ ์กฐ์ • ๋“ฑ์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•
  • ๋ผ๋ฒจ๋ง: ๊ฐ์‹ค ID ๊ธฐ๋ฐ˜ ์ž๋™ ๋ผ๋ฒจ๋ง

ํ›ˆ๋ จ ์ ˆ์ฐจ

์ „์ฒ˜๋ฆฌ

  1. ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์กฐ์ •: 224x224 ํ”ฝ์…€๋กœ ๋ฆฌ์‚ฌ์ด์ฆˆ
  2. ์ค‘์•™ ํฌ๋กญ: ์ •์‚ฌ๊ฐํ˜• ๋น„์œจ๋กœ ์ค‘์•™ ํฌ๋กญ
  3. ์ •๊ทœํ™”: ImageNet ํ‘œ์ค€๊ฐ’์œผ๋กœ ์ •๊ทœํ™”
  4. ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•: ํ›ˆ๋ จ ์ค‘ ๋žœ๋ค ๋ณ€ํ™˜ ์ ์šฉ

ํ›ˆ๋ จ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ

  • ๋ฐฐ์น˜ ํฌ๊ธฐ: 64
  • ํ•™์Šต๋ฅ : 1e-4 (์‚ฌ์ „ํ›ˆ๋ จ), 5e-5 (๋ฏธ์„ธ์กฐ์ •)
  • ์—ํญ: 30 (์‚ฌ์ „ํ›ˆ๋ จ), 15 (๋ฏธ์„ธ์กฐ์ •)
  • ์˜ตํ‹ฐ๋งˆ์ด์ €: AdamW
  • ์Šค์ผ€์ค„๋Ÿฌ: Cosine Annealing
  • ์ •๊ทœํ™”: Dropout (0.1), Weight Decay (1e-4)

์†๋„, ํฌ๊ธฐ, ์‹œ๊ฐ„

  • ํ›ˆ๋ จ ์‹œ๊ฐ„: ์•ฝ 8์‹œ๊ฐ„ (RTX 3080 ๊ธฐ์ค€)
  • ๋ชจ๋ธ ํฌ๊ธฐ: 25MB (PyTorch), 12MB (ONNX)
  • ์ถ”๋ก  ์†๋„: 500 ์Œ/์ดˆ (ONNX, CPU), 2000 ์Œ/์ดˆ (ONNX, GPU)

ํ‰๊ฐ€

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ, ์š”์ธ ๋ฐ ๋ฉ”ํŠธ๋ฆญ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ

  • ๊ฒ€์ฆ ์„ธํŠธ: 10,000๊ฐœ์˜ ์ด๋ฏธ์ง€ ์Œ
  • ํ…Œ์ŠคํŠธ ์„ธํŠธ: 5,000๊ฐœ์˜ ์ด๋ฏธ์ง€ ์Œ
  • ๋ฐ์ดํ„ฐ ๋ถ„ํ• : ๊ฐ์‹ค ID ๊ธฐ์ค€์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€

์š”์ธ

  • ๊ฐ์‹ค ํƒ€์ž…: ๋‹ค์–‘ํ•œ ๊ฐ์‹ค ํƒ€์ž…๋ณ„ ์„ฑ๋Šฅ ๋ถ„์„
  • ์ด๋ฏธ์ง€ ํ’ˆ์งˆ: ๊ณ ํ™”์งˆ/์ €ํ™”์งˆ ์ด๋ฏธ์ง€๋ณ„ ์„ฑ๋Šฅ
  • ์กฐ๋ช… ์กฐ๊ฑด: ์ž์—ฐ๊ด‘/์ธ๊ณต๊ด‘ ์กฐ๊ฑด๋ณ„ ์„ฑ๋Šฅ

๋ฉ”ํŠธ๋ฆญ

  • ์ •ํ™•๋„ (Accuracy): ์ „์ฒด ์˜ˆ์ธก ์ค‘ ์ •ํ™•ํ•œ ์˜ˆ์ธก ๋น„์œจ
  • ์ •๋ฐ€๋„ (Precision): ์œ ์‚ฌํ•˜๋‹ค๊ณ  ์˜ˆ์ธกํ•œ ๊ฒƒ ์ค‘ ์‹ค์ œ๋กœ ์œ ์‚ฌํ•œ ๋น„์œจ
  • ์žฌํ˜„์œจ (Recall): ์‹ค์ œ ์œ ์‚ฌํ•œ ๊ฒƒ ์ค‘ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์˜ˆ์ธกํ•œ ๋น„์œจ
  • F1-Score: ์ •๋ฐ€๋„์™€ ์žฌํ˜„์œจ์˜ ์กฐํ™”ํ‰๊ท 
  • AUC-ROC: ROC ๊ณก์„  ์•„๋ž˜ ๋ฉด์ 

๊ฒฐ๊ณผ

์š”์•ฝ

  • ์ „์ฒด ์ •ํ™•๋„: 92.3%
  • F1-Score: 0.91
  • AUC-ROC: 0.95
  • ์ถ”๋ก  ์†๋„: 500 ์Œ/์ดˆ (ONNX, CPU)

๋ชจ๋ธ ๊ฒ€์‚ฌ

ํ•ด์„ ๊ฐ€๋Šฅ์„ฑ

  • Grad-CAM: ๋ชจ๋ธ์ด ์ฃผ๋ชฉํ•˜๋Š” ์ด๋ฏธ์ง€ ์˜์—ญ ์‹œ๊ฐํ™”
  • ์œ ์‚ฌ๋„ ๋ถ„ํฌ: ๊ธ์ •/๋ถ€์ • ์Œ์˜ ์œ ์‚ฌ๋„ ์ ์ˆ˜ ๋ถ„ํฌ ๋ถ„์„
  • ์˜ค๋ถ„๋ฅ˜ ๋ถ„์„: ์ž˜๋ชป ๋ถ„๋ฅ˜๋œ ์ผ€์ด์Šค์˜ ํŒจํ„ด ๋ถ„์„

๊ธฐ์ˆ  ์‚ฌ์–‘

๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋ชฉ์ 

  • ์•„ํ‚คํ…์ฒ˜: Siamese Network with EfficientNetV2-Small backbone
  • ๋ชฉ์ : ์ด๋ฏธ์ง€ ์Œ์˜ ์œ ์‚ฌ๋„ ์ธก์ •
  • ์ถœ๋ ฅ: 0-1 ์‚ฌ์ด์˜ ์œ ์‚ฌ๋„ ์ ์ˆ˜
  • ์†์‹ค ํ•จ์ˆ˜: Focal Loss (ฮฑ=0.25, ฮณ=2.0)

์ปดํ“จํŒ… ์ธํ”„๋ผ

ํ•˜๋“œ์›จ์–ด

  • GPU: NVIDIA RTX 3080 (10GB VRAM)
  • CPU: Intel i7-10700K
  • RAM: 32GB DDR4
  • ์ €์žฅ๊ณต๊ฐ„: 1TB NVMe SSD

์†Œํ”„ํŠธ์›จ์–ด

  • Python: 3.9
  • PyTorch: 1.12.0
  • ONNX Runtime: 1.12.0
  • CUDA: 11.6
  • ๊ธฐํƒ€: timm, torchvision, PIL

์ธ์šฉ

์ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ธ์šฉํ•ด ์ฃผ์„ธ์š”:

BibTeX:

@misc{room_image_similarity_model,
  title={Room Image Similarity Model: Siamese Network for Hotel Room Image Comparison},
  author={Your Name},
  year={2024},
  howpublished={Hugging Face Model Hub},
  url={https://huggingface.co/ondame/room-image-similarity}
}

APA:

Your Name. (2024). Room Image Similarity Model: Siamese Network for Hotel Room Image Comparison. Hugging Face Model Hub. https://huggingface.co/your-username/room-image-similarity

์šฉ์–ด์ง‘

  • Siamese Network: ๋‘ ์ž…๋ ฅ์„ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์‹ ๊ฒฝ๋ง ๊ตฌ์กฐ
  • EfficientNetV2: ํšจ์œจ์ ์ธ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜๋ฅผ ์œ„ํ•œ CNN ์•„ํ‚คํ…์ฒ˜
  • Focal Loss: ๋ถˆ๊ท ํ˜• ๋ฐ์ดํ„ฐ์…‹์— ์ตœ์ ํ™”๋œ ์†์‹ค ํ•จ์ˆ˜
  • ImageNet ์ •๊ทœํ™”: ImageNet ๋ฐ์ดํ„ฐ์…‹์˜ ํ‰๊ท ๊ณผ ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋ฏธ์ง€ ์ •๊ทœํ™”

์ถ”๊ฐ€ ์ •๋ณด