ํ๋ก์ฆ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ ์ ์ด ํ์ต
์ด ๊ฐ์ด๋์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ YOLOv5 ๐ ๋ ์ด์ด๋ฅผ ๊ณ ์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ด์ ํ์ต. ์ ์ด ํ์ต์ ์ ์ฒด ๋คํธ์ํฌ๋ฅผ ์ฌํ์ตํ ํ์ ์์ด ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํด ๋ชจ๋ธ์ ๋น ๋ฅด๊ฒ ์ฌํ์ตํ ์ ์๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค. ๋์ ์ด๊ธฐ ๊ฐ์ค์น์ ์ผ๋ถ๋ ๊ทธ๋๋ก ๊ณ ์ ํ๊ณ ๋๋จธ์ง ๊ฐ์ค์น๋ ์์ค์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ์ต์ ํ ํ๋ก๊ทธ๋จ์ ์ํด ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ฐ ํ๋ จ๋ณด๋ค ๋ฆฌ์์ค๊ฐ ๋ ํ์ํ๊ณ ํ๋ จ ์๊ฐ์ด ๋จ์ถ๋์ง๋ง ์ต์ข ํ๋ จ ์ ํ๋๊ฐ ๋จ์ด์ง ์๋ ์์ต๋๋ค.
์์ํ๊ธฐ ์ ์
๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๊ณ ์๊ตฌ์ฌํญ.txt๋ฅผ ์ค์นํฉ๋๋ค. Python>=3.8.0 ํ๊ฒฝ์ ํฌํจํ์ฌ PyTorch>=1.8. ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํฐ ์ธํธ๋ ์ต์ YOLOv5 ๋ฆด๋ฆฌ์ค์์ ์๋์ผ๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
๋ฐฑ๋ณธ ๋๊ฒฐ
train.py์ ์ผ์นํ๋ ๋ชจ๋ ๋ ์ด์ด freeze
๋ชฉ๋ก์ ํ๋ จ ์์ ์ ์ ๊ทธ๋ผ๋ฐ์ด์
์ 0์ผ๋ก ์ค์ ํ์ฌ ๊ณ ์ ํฉ๋๋ค.
# Freeze
freeze = [f"model.{x}." for x in range(freeze)] # layers to freeze
for k, v in model.named_parameters():
v.requires_grad = True # train all layers
if any(x in k for x in freeze):
print(f"freezing {k}")
v.requires_grad = False
๋ชจ๋ ์ด๋ฆ ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด
for k, v in model.named_parameters():
print(k)
"""Output:
model.0.conv.conv.weight
model.0.conv.bn.weight
model.0.conv.bn.bias
model.1.conv.weight
model.1.bn.weight
model.1.bn.bias
model.2.cv1.conv.weight
model.2.cv1.bn.weight
...
model.23.m.0.cv2.bn.weight
model.23.m.0.cv2.bn.bias
model.24.m.0.weight
model.24.m.0.bias
model.24.m.1.weight
model.24.m.1.bias
model.24.m.2.weight
model.24.m.2.bias
"""
๋ชจ๋ธ ์ํคํ ์ฒ๋ฅผ ์ดํด๋ณด๋ฉด ๋ชจ๋ธ ๋ฐฑ๋ณธ์ด 0-9 ๋ ์ด์ด์์ ์ ์ ์์ต๋๋ค:
# YOLOv5 v6.0 backbone
backbone:
# [from, number, module, args]
- [-1, 1, Conv, [64, 6, 2, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 3, C3, [128]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 6, C3, [256]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 9, C3, [512]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 3, C3, [1024]]
- [-1, 1, SPPF, [1024, 5]] # 9
# YOLOv5 v6.0 head
head:
- [-1, 1, Conv, [512, 1, 1]]
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 3, C3, [512, False]] # 13
- [-1, 1, Conv, [256, 1, 1]]
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
- [-1, 3, C3, [256, False]] # 17 (P3/8-small)
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 14], 1, Concat, [1]] # cat head P4
- [-1, 3, C3, [512, False]] # 20 (P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 10], 1, Concat, [1]] # cat head P5
- [-1, 3, C3, [1024, False]] # 23 (P5/32-large)
- [[17, 20, 23], 1, Detect, [nc]] # Detect(P3, P4, P5)
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ 'model.0'์ด ์๋ ๋ชจ๋ ๋ชจ๋์ ํฌํจํ๋๋ก ๊ณ ์ ๋ชฉ๋ก์ ์ ์ํ ์ ์์ต๋๋ค. - 'model.9.'๋ฅผ ์ด๋ฆ์ ํฌํจํ๋๋ก ์ ์ํ ์ ์์ต๋๋ค:
๋ชจ๋ ๋ ์ด์ด ๊ณ ์
Detect()์์ ์ต์ข ์ถ๋ ฅ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด๋ฅผ ์ ์ธํ ์ ์ฒด ๋ชจ๋ธ์ ๊ณ ์ ํ๋ ค๋ฉด, ์ด๋ฆ์ด 'model.0'์ธ ๋ชจ๋ ๋ชจ๋์ ํฌํจํ๋๋ก ๊ณ ์ ๋ชฉ๋ก์ ์ค์ ํฉ๋๋ค. - 'model.23'์ด ํฌํจ๋ ๋ชจ๋ ๋ชจ๋์ ํฌํจํ๋๋ก ์ค์ ํฉ๋๋ค:
๊ฒฐ๊ณผ
์ฐ๋ฆฌ๋ ์์ ๋ ๊ฐ์ง ์๋๋ฆฌ์ค์์ ๊ธฐ๋ณธ ๋ชจ๋ธ(๋๊ฒฐ ์์)๊ณผ ํจ๊ป ๊ณต์ COCO ์ฌ์ ํ๋ จ์์ ์์ํ์ฌ YOLOv5m์ VOC์ ๋ํด ํ๋ จํฉ๋๋ค. --weights yolov5m.pt
:
train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml
์ ํ๋ ๋น๊ต
๊ทธ ๊ฒฐ๊ณผ ๋๊ฒฐํ๋ฉด ํ๋ จ ์๋๊ฐ ๋นจ๋ผ์ง์ง๋ง ์ต์ข ์ ํ๋๋ ์ฝ๊ฐ ๋จ์ด์ง๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
GPU ์ฌ์ฉ๋ฅ ๋น๊ต
ํฅ๋ฏธ๋กญ๊ฒ๋ ๋ ๋ง์ ๋ชจ๋์ด ๊ณ ์ ๋ ์๋ก ํ๋ จ์ ํ์ํ GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ด๋ค๊ณ GPU ์ฌ์ฉ๋ฅ ์ด ๋ฎ์์ง๋๋ค. ์ด๋ ๋ ํฐ ๋ชจ๋ธ ๋๋ ๋ ํฐ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ก ํ๋ จ๋ ๋ชจ๋ธ์ด ๋ ๋น ๋ฅด๊ฒ ํ๋ จํ๊ธฐ ์ํด ํ๋ฆฌ์ง์ ์ด์ ์ ๋๋ฆด ์ ์์์ ๋ํ๋ ๋๋ค.
์ง์ ํ๊ฒฝ
Ultralytics ๋ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ํ๊ฒฝ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ ํ๊ฒฝ์๋ ๋ค์๊ณผ ๊ฐ์ ํ์ ์ข ์์ฑ์ด ์ฌ์ ์ค์น๋์ด ์์ต๋๋ค. CUDA, CUDNN, Python, ๋ฐ PyTorch์ ๊ฐ์ ํ์ ์ข ์ ์์๋ฅผ ์ค์นํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์์ต๋๋ค.
- ๋ฌด๋ฃ GPU ๋ ธํธ๋ถ:
- Google Cloud: GCP ๋น ๋ฅธ ์์ ๊ฐ์ด๋
- Amazon: AWS ๋น ๋ฅธ ์์ ๊ฐ์ด๋
- Azure: AzureML ๋น ๋ฅธ ์์ ๊ฐ์ด๋
- Docker: Docker ๋น ๋ฅธ ์์ ๊ฐ์ด๋
ํ๋ก์ ํธ ์ํ
์ด ๋ฐฐ์ง๋ ๋ชจ๋ YOLOv5 GitHub Actions ์ง์์ ํตํฉ(CI) ํ ์คํธ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ํต๊ณผ๋์์์ ๋ํ๋ ๋๋ค. ์ด๋ฌํ CI ํ ์คํธ๋ ๊ต์ก, ๊ฒ์ฆ, ์ถ๋ก , ๋ด๋ณด๋ด๊ธฐ ๋ฐ ๋ฒค์น๋งํฌ ๋ฑ ๋ค์ํ ์ฃผ์ ์ธก๋ฉด์์ YOLOv5 ์ ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ์ ์๊ฒฉํ๊ฒ ํ์ธํฉ๋๋ค. 24์๊ฐ๋ง๋ค ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ์ปค๋ฐ์ด ์์ ๋๋ง๋ค ํ ์คํธ๋ฅผ ์ํํ์ฌ macOS, Windows ๋ฐ Ubuntu์์ ์ผ๊ด๋๊ณ ์์ ์ ์ธ ์๋์ ๋ณด์ฅํฉ๋๋ค.