File size: 4,102 Bytes
a3a92f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
---
license: mit
tags:
  - object-detection
  - faster-rcnn
  - yolo
  - pascal-voc
  - pytorch
  - educational
  - from-scratch
library_name: pytorch
pipeline_tag: object-detection
datasets:
  - pascal-voc-2007
language:
  - en
---

# 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 (์ง์ ‘ ๊ตฌํ˜„)

```bash
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 (๋น„๊ต)

```bash
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๋ฅผ
์ •์‹ ๋ผ์ด์„ ์Šค ํ•˜์— ์‚ฌ์šฉํ•˜์„ธ์š”.