Object Detection from Scratch โ€” Faster R-CNN vs YOLO

๊ฐ์ฒดํƒ์ง€๋ฅผ ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ง์ ‘ ๊ตฌํ˜„(Faster R-CNN)ํ•˜๊ณ , ์ด๋ฅผ ์‹ค๋ฌด ํ‘œ์ค€์ธ YOLO์™€ ๋น„๊ตํ•˜๋ฉฐ ํ•™์Šตํ•˜๋Š” ๊ต์œก์šฉ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. 2-stage ํƒ์ง€๊ธฐ์˜ ๋‚ด๋ถ€ ์›๋ฆฌ๋ฅผ ์†์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ณ , 1-stage ํƒ์ง€๊ธฐ(YOLO)์™€ ๊ฒฐ๊ณผยท์ฒ ํ•™์„ ๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ ์„ฑ๋Šฅ ๊ฒฝ๊ณ : ์ด ์ €์žฅ์†Œ์˜ Faster R-CNN ๊ฐ€์ค‘์น˜(frcnn.pth)๋Š” 1 ์—ํญ๋งŒ ํ•™์Šตํ•œ ๋ฐ๋ชจ์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์‚ฌ์šฉ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ "๊ตฌํ˜„์ด ์˜ฌ๋ฐ”๋ฅธ๊ฐ€"๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ต์œก ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ์˜ ๋Œ€์กฐ

Faster R-CNN (์ง์ ‘ ๊ตฌํ˜„) YOLOv8 (Ultralytics)
๋ฐฉ์‹ 2-stage (ํ›„๋ณด์˜์—ญ โ†’ ๋ถ„๋ฅ˜) 1-stage (ํ•œ ๋ฒˆ์— ์˜ˆ์ธก)
์†๋„ ๋А๋ฆผ ๋งค์šฐ ๋น ๋ฆ„ (์‹ค์‹œ๊ฐ„)
๊ตฌํ˜„ ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ (๊ต์œก์ ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ถœ
ํ•™์Šต ๋ฐ์ดํ„ฐ Pascal VOC (20 ํด๋ž˜์Šค) COCO (80 ํด๋ž˜์Šค)
์ด ์ €์žฅ์†Œ์˜ ์—ญํ•  ์›๋ฆฌ ํ•™์Šต ์‹ค๋ฌด ํ‘œ์ค€๊ณผ ๋น„๊ต

ํŒŒ์ผ ๊ตฌ์„ฑ

Faster R-CNN ์ง์ ‘ ๊ตฌํ˜„

ํŒŒ์ผ ๋‚ด์šฉ
dataset.py VOC XML ํŒŒ์‹ฑ, ๋ฆฌ์‚ฌ์ด์ฆˆ, ์ •๊ทœํ™”
box_utils.py ์•ต์ปค ์ƒ์„ฑ, IoU, ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ, NMS
model.py ResNet50 ๋ฐฑ๋ณธ + RPN + RoI Align + RoI Head
losses.py IoU ๊ธฐ๋ฐ˜ ํƒ€๊นƒ ํ• ๋‹น + RPN/RoI ์†์‹ค
train.py ํ•™์Šต ๋ฃจํ”„ + VOC mAP@0.5
infer.py ์ถ”๋ก  + ๋ฐ•์Šค ์‹œ๊ฐํ™”

YOLO ๋น„๊ต

ํŒŒ์ผ ๋‚ด์šฉ
yolo_infer.py YOLOv8(COCO ์‚ฌ์ „ํ•™์Šต) ์ถ”๋ก  โ€” ๊ฐ™์€ ์ด๋ฏธ์ง€ ๋น„๊ต์šฉ

์‚ฌ์šฉ๋ฒ•

Faster R-CNN (์ง์ ‘ ๊ตฌํ˜„)

pip install torch torchvision pillow

# VOC 2007 ๋‹ค์šด๋กœ๋“œ (torchvision ์ž๋™)
python -c "import torchvision; torchvision.datasets.VOCDetection(root='./data', year='2007', image_set='trainval', download=True)"

# ํ•™์Šต
python train.py --voc_root ./data/VOCdevkit/VOC2007 --epochs 12

# ์ถ”๋ก 
python infer.py --ckpt frcnn.pth --image ./sample.jpg --score_thresh 0.5

YOLOv8 (๋น„๊ต)

pip install ultralytics

# ๊ฐ™์€ ์ด๋ฏธ์ง€๋กœ ์ถ”๋ก  (๊ฒฐ๊ณผ๋ฅผ Faster R-CNN๊ณผ ๋น„๊ต)
python yolo_infer.py --image ./sample.jpg

์•„ํ‚คํ…์ฒ˜ (Faster R-CNN)

์ด๋ฏธ์ง€
  โ”‚ ResNet50 (conv1~layer3, stride 16)
  โ–ผ
ํŠน์ง•๋งต
  โ”œโ”€โ–ถ RPN โ”€โ”€ ์•ต์ปค๋ณ„ (๊ฐ์ฒด์—ฌ๋ถ€ + ๋ฐ•์Šค๋ณด์ •) โ”€โ”€ ํ›„๋ณด์˜์—ญ(proposal)
  โ”‚
  โ–ผ RoI Align (7x7)
RoI Head โ”€โ”€ (ํด๋ž˜์Šค ๋ถ„๋ฅ˜ + ํด๋ž˜์Šค๋ณ„ ๋ฐ•์Šค๋ณด์ •) โ”€โ”€ ์ตœ์ข… ํƒ์ง€

ํ•™์Šต ์›๋ฆฌ (์ฝ”๋“œ์™€ ๋Œ€์‘)

  1. ์•ต์ปค (box_utils.generate_anchors): ๊ฒฉ์ž๋งˆ๋‹ค 9๊ฐœ ๊ธฐ์ค€ ๋ฐ•์Šค
  2. RPN ํƒ€๊นƒ ํ• ๋‹น (losses.rpn_loss): IoUโ‰ฅ0.7 ๊ฐ์ฒด / <0.3 ๋ฐฐ๊ฒฝ
  3. ํ›„๋ณด์˜์—ญ ์ƒ์„ฑ (model._proposals): RPN ์ถœ๋ ฅ โ†’ NMS
  4. RoI ํƒ€๊นƒ ํ• ๋‹น (losses.assign_roi_targets): IoUโ‰ฅ0.5 positive
  5. RoI Align (model.RoIHead): ํ›„๋ณด์˜์—ญ โ†’ 7ร—7 ๊ณ ์ • ํŠน์ง•
  6. ์†์‹ค: ๋ถ„๋ฅ˜(CE/BCE) + ํšŒ๊ท€(smooth L1), positive์—๋งŒ ํšŒ๊ท€

๋‹จ์ˆœํ™”ํ•œ ๋ถ€๋ถ„ (์›๋…ผ๋ฌธ ๋Œ€๋น„)

  • batch_size=1 ๊ณ ์ •
  • RPN objectness๋ฅผ 1-logit(BCE)์œผ๋กœ ์ฒ˜๋ฆฌ
  • RoI Head๋ฅผ layer4 ๋Œ€์‹  FC๋กœ ๊ตฌ์„ฑ
  • FPN ๋ฏธ์ ์šฉ โ†’ ์ž‘์€ ๊ฐ์ฒด์— ์•ฝํ•จ

๋ผ์ด์„ ์Šค

  • ์ด ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ: MIT License
  • YOLOv8 (yolo_infer.py๊ฐ€ ์‚ฌ์šฉ): Ultralytics YOLO๋Š” AGPL-3.0. yolo_infer.py๋Š” Ultralytics๋ฅผ ํ˜ธ์ถœ๋งŒ ํ•˜๋ฉฐ, YOLO ๊ฐ€์ค‘์น˜๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ ์‹œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ). ์ƒ์—…์  ํ์‡„์†Œ์Šค ์‚ฌ์šฉ ์‹œ Ultralytics ์ƒ์šฉ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ณ„๋„๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Pascal VOC ๋ฐ์ดํ„ฐ์…‹์€ ๊ณต์‹ ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

๋ฉด์ฑ…

๊ต์œก ๋ชฉ์  ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด torchvision ๊ณต์‹ Faster R-CNN(fasterrcnn_resnet50_fpn_v2) ๋˜๋Š” Ultralytics YOLO๋ฅผ ์ •์‹ ๋ผ์ด์„ ์Šค ํ•˜์— ์‚ฌ์šฉํ•˜์„ธ์š”.

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