μ½˜ν…μΈ λ‘œ κ±΄λ„ˆλ›°κΈ°

Ultralytics YOLOv5 μ•„ν‚€ν…μ²˜

YOLOv5 (v6.0/6.1)은 Ultralytics μ—μ„œ κ°œλ°œν•œ κ°•λ ₯ν•œ 객체 감지 μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 이 λ¬Έμ„œμ—μ„œλŠ” YOLOv5 μ•„ν‚€ν…μ²˜, 데이터 증강 μ „λž΅, ν›ˆλ ¨ 방법둠 및 손싀 계산 기법에 λŒ€ν•΄ μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 포괄적인 μ΄ν•΄λŠ” κ°μ‹œ, 자율 μ£Όν–‰ μ°¨λŸ‰, 이미지 인식 λ“± λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ 객체 κ°μ§€μ˜ μ‹€μ œ μ μš©μ„ κ°œμ„ ν•˜λŠ” 데 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

1. λͺ¨λΈ ꡬ쑰

YOLOv5의 μ•„ν‚€ν…μ²˜λŠ” 크게 μ„Έ λΆ€λΆ„μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€:

  • λ°±λ³Έ: λ„€νŠΈμ›Œν¬μ˜ λ³Έμ²΄μž…λ‹ˆλ‹€. YOLOv5 의 경우 백본은 λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. New CSP-Darknet53 κ΅¬μ‘°λŠ” 이전 λ²„μ „μ—μ„œ μ‚¬μš©λœ 닀크넷 μ•„ν‚€ν…μ²˜λ₯Ό μˆ˜μ •ν•œ κ²ƒμž…λ‹ˆλ‹€.
  • λͺ©: 이 뢀뢄은 λ°±λ³Έκ³Ό ν—€λ“œλ₯Ό μ—°κ²°ν•©λ‹ˆλ‹€. YOLOv5 μ—μ„œ , SPPF 그리고 New CSP-PAN ꡬ쑰가 ν™œμš©λ©λ‹ˆλ‹€.
  • Head: 이 뢀뢄은 μ΅œμ’… 좜λ ₯을 μƒμ„±ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. YOLOv5 μ—μ„œλŠ” YOLOv3 Head λ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

λͺ¨λΈμ˜ κ΅¬μ‘°λŠ” μ•„λž˜ 이미지에 λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λΈ ꡬ쑰에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. yolov5l.yaml.

yolov5

YOLOv5 λŠ” 이전 버전과 λΉ„κ΅ν•˜μ—¬ λͺ‡ 가지 μ‚¬μ†Œν•œ λ³€κ²½ 사항이 μžˆμŠ΅λ‹ˆλ‹€:

  1. 그리고 Focus ꡬ쑰가 이전 λ²„μ „μ—μ„œ λ°œκ²¬λ˜λŠ” 6x6 Conv2d ꡬ쑰둜 λ³€κ²½ν•©λ‹ˆλ‹€. 이 λ³€κ²½μœΌλ‘œ νš¨μœ¨μ„± ν–₯상 #4825.
  2. 그리고 SPP ꡬ쑰가 SPPF. 이 λ³€κ²½μœΌλ‘œ 처리 속도가 두 λ°° 이상 λΉ¨λΌμ§‘λ‹ˆλ‹€.

속도λ₯Ό ν…ŒμŠ€νŠΈν•˜λ €λ©΄ SPP 그리고 SPPFλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μŒ μ½”λ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

SPP λŒ€ SPPF 속도 ν”„λ‘œνŒŒμΌλ§ μ˜ˆμ‹œ(μ—΄λ €λ©΄ 클릭)
import time
import torch
import torch.nn as nn


class SPP(nn.Module):
    def __init__(self):
        super().__init__()
        self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
        self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
        self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)

    def forward(self, x):
        o1 = self.maxpool1(x)
        o2 = self.maxpool2(x)
        o3 = self.maxpool3(x)
        return torch.cat([x, o1, o2, o3], dim=1)


class SPPF(nn.Module):
    def __init__(self):
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)


def main():
    input_tensor = torch.rand(8, 32, 16, 16)
    spp = SPP()
    sppf = SPPF()
    output1 = spp(input_tensor)
    output2 = sppf(input_tensor)

    print(torch.equal(output1, output2))

    t_start = time.time()
    for _ in range(100):
        spp(input_tensor)
    print(f"SPP time: {time.time() - t_start}")

    t_start = time.time()
    for _ in range(100):
        sppf(input_tensor)
    print(f"SPPF time: {time.time() - t_start}")


if __name__ == '__main__':
    main()
κ²°κ³Ό:
True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

2. 데이터 증강 기술

YOLOv5 λŠ” λͺ¨λΈμ˜ μΌλ°˜ν™” λŠ₯λ ₯을 ν–₯μƒμ‹œν‚€κ³  과적합을 쀄이기 μœ„ν•΄ λ‹€μ–‘ν•œ 데이터 증강 기법을 μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ κΈ°λ²•μ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ©λ‹ˆλ‹€:

  • λͺ¨μžμ΄ν¬ 증강: 객체 감지 λͺ¨λΈμ΄ λ‹€μ–‘ν•œ 객체 배율과 λ³€ν™˜μ„ 더 잘 μ²˜λ¦¬ν•  수 μžˆλ„λ‘ 4개의 ν›ˆλ ¨ 이미지λ₯Ό ν•˜λ‚˜λ‘œ κ²°ν•©ν•˜λŠ” 이미지 처리 κΈ°λ²•μž…λ‹ˆλ‹€.

λͺ¨μžμ΄ν¬

  • 볡사-λΆ™μ—¬λ„£κΈ° 증강: μ΄λ―Έμ§€μ—μ„œ λ¬΄μž‘μœ„λ‘œ 패치λ₯Ό λ³΅μ‚¬ν•˜μ—¬ λ¬΄μž‘μœ„λ‘œ μ„ νƒν•œ λ‹€λ₯Έ 이미지에 λΆ™μ—¬λ„£μ–΄ μƒˆλ‘œμš΄ ν•™μŠ΅ μƒ˜ν”Œμ„ 효과적으둜 μƒμ„±ν•˜λŠ” ν˜μ‹ μ μΈ 데이터 증강 λ°©λ²•μž…λ‹ˆλ‹€.

볡사-λΆ™μ—¬λ„£κΈ°

  • 랜덀 μ•„ν•€ λ³€ν™˜: μ—¬κΈ°μ—λŠ” μ΄λ―Έμ§€μ˜ λ¬΄μž‘μœ„ νšŒμ „, 크기 μ‘°μ •, 이동 및 전단이 ν¬ν•¨λ©λ‹ˆλ‹€.

랜덀-μ–΄νŒŒμΈ

  • λ―ΉμŠ€μ—… 증강: 두 이미지와 κ΄€λ ¨ λ ˆμ΄λΈ”μ„ μ„ ν˜•μ μœΌλ‘œ μ‘°ν•©ν•˜μ—¬ ν•©μ„± 이미지λ₯Ό λ§Œλ“œλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

λ―ΉμŠ€μ—…

  • λ¬Έμ„œν™”: λ‹€μ–‘ν•œ 증강 κΈ°μˆ μ„ μ§€μ›ν•˜λŠ” κ°•λ ₯ν•œ 이미지 증강 λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

  • HSV 증강: μ΄λ―Έμ§€μ˜ 색쑰, 채도 및 값을 μž„μ˜λ‘œ λ³€κ²½ν•©λ‹ˆλ‹€.

hsv

  • λ¬΄μž‘μœ„ μˆ˜ν‰ 뒀집기: 이미지λ₯Ό λ¬΄μž‘μœ„λ‘œ κ°€λ‘œλ‘œ λ’€μ§‘λŠ” 증강 λ°©μ‹μž…λ‹ˆλ‹€.

μˆ˜ν‰ 뒀집기

3. ꡐ윑 μ „λž΅

YOLOv5 λŠ” λͺ¨λΈμ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ λͺ‡ 가지 μ •κ΅ν•œ ν›ˆλ ¨ μ „λž΅μ„ μ μš©ν•©λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ©λ‹ˆλ‹€:

  • λ©€ν‹°μŠ€μΌ€μΌ νŠΈλ ˆμ΄λ‹: ν›ˆλ ¨ κ³Όμ •μ—μ„œ μž…λ ₯ μ΄λ―Έμ§€μ˜ 크기가 μ›λž˜ 크기의 0.5~1.5λ°° λ²”μœ„ λ‚΄μ—μ„œ μž„μ˜λ‘œ μ‘°μ •λ©λ‹ˆλ‹€.
  • μžλ™ 액컀: 이 μ „λž΅μ€ μ‚¬μš©μž 지정 λ°μ΄ν„°μ˜ κΈ°μ€€ 데이터 μƒμžμ˜ 톡계적 νŠΉμ„±κ³Ό μΌμΉ˜ν•˜λ„λ‘ 이전 액컀 μƒμžλ₯Ό μ΅œμ ν™”ν•©λ‹ˆλ‹€.
  • μ›Œλ°μ—… 및 코사인 LR μŠ€μΌ€μ€„λŸ¬: λͺ¨λΈ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ ν•™μŠ΅ 속도λ₯Ό μ‘°μ •ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • μ§€μˆ˜μ΄λ™ν‰κ· (EMA): κ³Όκ±° λ‹¨κ³„μ˜ λ§€κ°œλ³€μˆ˜ 평균을 μ‚¬μš©ν•˜μ—¬ ν•™μŠ΅ 과정을 μ•ˆμ •ν™”ν•˜κ³  μΌλ°˜ν™” 였λ₯˜λ₯Ό μ€„μ΄λŠ” μ „λž΅μž…λ‹ˆλ‹€.
  • ν˜Όν•© 정밀도 ν›ˆλ ¨: λ°˜μ •λ°€ ν˜•μ‹μœΌλ‘œ 연산을 μˆ˜ν–‰ν•˜μ—¬ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄이고 계산 속도λ₯Ό ν–₯μƒμ‹œν‚€λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • ν•˜μ΄νΌνŒŒλΌλ―Έν„° 진화: 졜적의 μ„±λŠ₯을 λ‹¬μ„±ν•˜κΈ° μœ„ν•΄ ν•˜μ΄νΌνŒŒλΌλ―Έν„°λ₯Ό μžλ™μœΌλ‘œ μ‘°μ •ν•˜λŠ” μ „λž΅μž…λ‹ˆλ‹€.

4. μΆ”κ°€ κΈ°λŠ₯

4.1 손싀 계산

YOLOv5 의 손싀은 μ„Έ 가지 κ°œλ³„ 손싀 ꡬ성 μš”μ†Œμ˜ μ‘°ν•©μœΌλ‘œ κ³„μ‚°λ©λ‹ˆλ‹€:

  • 클래슀 손싀(BCE 손싀): 이진 ꡐ차 μ—”νŠΈλ‘œν”Ό μ†μ‹€λ‘œ, λΆ„λ₯˜ μž‘μ—…μ˜ 였λ₯˜λ₯Ό μΈ‘μ •ν•©λ‹ˆλ‹€.
  • 객체성 손싀(BCE 손싀): 또 λ‹€λ₯Έ 이진 ꡐ차 μ—”νŠΈλ‘œν”Ό μ†μ‹€λ‘œ, νŠΉμ • κ·Έλ¦¬λ“œ 셀에 객체가 μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό 감지할 λ•Œ λ°œμƒν•˜λŠ” 였λ₯˜λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
  • μœ„μΉ˜ 손싀(CIoU 손싀): 전체 IoU 손싀: κ·Έλ¦¬λ“œ μ…€ λ‚΄μ—μ„œ 였브젝트의 μœ„μΉ˜λ₯Ό νŒŒμ•…ν•  λ•Œ λ°œμƒν•˜λŠ” 였λ₯˜λ₯Ό μΈ‘μ •ν•©λ‹ˆλ‹€.

전체 손싀 ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같이 ν‘œμ‹œλ©λ‹ˆλ‹€:

손싀

4.2 μž”μ•‘ 손싀

μ„Έ 가지 예츑 λ ˆμ΄μ–΄μ˜ μ˜€λΈŒμ νŠΈλ‹ˆμŠ€ 손싀(P3, P4, P5)의 κ°€μ€‘μΉ˜λŠ” λ‹€λ₯΄κ²Œ μ μš©λ©λ‹ˆλ‹€. 밸런슀 κ°€μ€‘μΉ˜λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. [4.0, 1.0, 0.4] 둜 각각 μ„€μ •ν•©λ‹ˆλ‹€. 이 μ ‘κ·Ό 방식은 μ„œλ‘œ λ‹€λ₯Έ 규λͺ¨μ˜ 예츑이 총 손싀에 μ μ ˆν•˜κ²Œ κΈ°μ—¬ν•˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

객체 손싀

4.3 κ·Έλ¦¬λ“œ 감도 μ œκ±°ν•˜κΈ°

YOLOv5 μ•„ν‚€ν…μ²˜λŠ” 이전 버전( YOLO)κ³Ό λΉ„κ΅ν•˜μ—¬ λ°•μŠ€ 예츑 μ „λž΅μ— λͺ‡ 가지 μ€‘μš”ν•œ λ³€κ²½ 사항을 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. YOLOv2 및 YOLOv3μ—μ„œλŠ” λ§ˆμ§€λ§‰ λ ˆμ΄μ–΄μ˜ ν™œμ„±ν™”λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°•μŠ€ μ’Œν‘œλ₯Ό 직접 μ˜ˆμΈ‘ν–ˆμŠ΅λ‹ˆλ‹€.

b_x b_y b_w b_h

YOLOv5 κ·Έλ¦¬λ“œ 계산

κ·ΈλŸ¬λ‚˜ YOLOv5 μ—μ„œλŠ” κ·Έλ¦¬λ“œ 감도λ₯Ό 쀄이고 λͺ¨λΈμ΄ λ¬΄ν•œν•œ μƒμž 치수λ₯Ό μ˜ˆμΈ‘ν•˜μ§€ λͺ»ν•˜λ„둝 μƒμž μ’Œν‘œλ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 곡식이 μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

예츑된 λ°”μš΄λ”© λ°•μŠ€λ₯Ό κ³„μ‚°ν•˜λŠ” μˆ˜μ •λœ 곡식은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

bx by bw bh

μŠ€μΌ€μΌλ§ μ „ν›„μ˜ 쀑심점 μ˜€ν”„μ…‹μ„ λΉ„κ΅ν•©λ‹ˆλ‹€. 쀑심점 μ˜€ν”„μ…‹ λ²”μœ„λŠ” (0, 1)μ—μ„œ (-0.5, 1.5)κΉŒμ§€ μ‘°μ •λ©λ‹ˆλ‹€. λ”°λΌμ„œ μ˜€ν”„μ…‹μ€ μ‰½κ²Œ 0 λ˜λŠ” 1이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

YOLOv5 κ·Έλ¦¬λ“œ μŠ€μΌ€μΌλ§

μ‘°μ • μ „ν›„μ˜ 높이와 λ„ˆλΉ„ λΉ„μœ¨(액컀 κΈ°μ€€)을 λΉ„κ΅ν•©λ‹ˆλ‹€. μ›λž˜ yolo/darknet μƒμž λ°©μ •μ‹μ—λŠ” μ‹¬κ°ν•œ 결함이 μžˆμŠ΅λ‹ˆλ‹€. 폭과 λ†’μ΄λŠ” λ‹¨μˆœνžˆ 아웃=μ—‘μŠ€(인)μ΄λ―€λ‘œ μ™„μ „νžˆ λ¬΄ν•œλŒ€μ΄λ©°, μ΄λŠ” 폭주 기울기, λΆˆμ•ˆμ •μ„±, NaN 손싀 및 ꢁ극적으둜 ν›ˆλ ¨μ˜ μ™„μ „ν•œ μ†μ‹€λ‘œ μ΄μ–΄μ§ˆ 수 μžˆμœΌλ―€λ‘œ μœ„ν—˜ν•©λ‹ˆλ‹€. 이 문제λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

YOLOv5 λ¬΄μ œν•œ ν™•μž₯

4.4 λΉŒλ“œ νƒ€κ²Ÿ

YOLOv5 의 λͺ©ν‘œ ꡬ좕 ν”„λ‘œμ„ΈμŠ€λŠ” ν•™μŠ΅ νš¨μœ¨μ„±κ³Ό λͺ¨λΈ 정확도에 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” 좜λ ₯ 맡의 μ μ ˆν•œ κ·Έλ¦¬λ“œ 셀에 기쀀점 μƒμžλ₯Ό ν• λ‹Ήν•˜κ³  μ μ ˆν•œ 액컀 μƒμžμ™€ μΌμΉ˜μ‹œν‚€λŠ” μž‘μ—…μ΄ ν¬ν•¨λ©λ‹ˆλ‹€.

이 ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μŒ 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€:

  • 기쀀점 μƒμž μΉ˜μˆ˜μ™€ 각 액컀 ν…œν”Œλ¦Ώμ˜ 치수의 λΉ„μœ¨μ„ κ³„μ‚°ν•©λ‹ˆλ‹€.

rw

rh

rwmax

rhmax

rmax

일치

YOLOv5 IoU 계산

  • κ³„μ‚°λœ λΉ„μœ¨μ΄ μž„κ³„κ°’ 내에 있으면 κΈ°μ€€κ°’ μƒμžλ₯Ό ν•΄λ‹Ή 액컀와 μΌμΉ˜μ‹œν‚΅λ‹ˆλ‹€.

YOLOv5 κ·Έλ¦¬λ“œ κ²ΉμΉ¨

  • μˆ˜μ •λœ 쀑심점 μ˜€ν”„μ…‹μœΌλ‘œ 인해 기쀀점 μƒμžλ₯Ό 두 개 μ΄μƒμ˜ 액컀에 ν• λ‹Ήν•  수 μžˆλ‹€λŠ” 점을 염두에 두고 μΌμΉ˜ν•˜λŠ” 액컀λ₯Ό μ μ ˆν•œ 셀에 ν• λ‹Ήν•©λ‹ˆλ‹€. 쀑심점 μ˜€ν”„μ…‹ λ²”μœ„κ°€ (0, 1)μ—μ„œ (-0.5, 1.5)둜 μ‘°μ •λ˜μ—ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. GT λ°•μŠ€λ₯Ό 더 λ§Žμ€ 액컀에 ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€.

YOLOv5 액컀 선택

μ΄λ ‡κ²Œ ν•˜λ©΄ λΉŒλ“œ 타깃 ν”„λ‘œμ„ΈμŠ€λŠ” ν•™μŠ΅ κ³Όμ •μ—μ„œ 각 μ‹€μΈ‘ 객체가 μ μ ˆν•˜κ²Œ ν• λ‹Ήλ˜κ³  μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜μ—¬ YOLOv5 객체 감지 μž‘μ—…μ„ 보닀 효과적으둜 ν•™μŠ΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ²°λ‘ 

결둠적으둜, YOLOv5 은 μ‹€μ‹œκ°„ 객체 감지 λͺ¨λΈ 개발의 μ€‘μš”ν•œ 진전을 μ˜λ―Έν•©λ‹ˆλ‹€. λ‹€μ–‘ν•œ μƒˆλ‘œμš΄ κΈ°λŠ₯, κ°œμ„  사항 및 ν›ˆλ ¨ μ „λž΅μ„ ν†΅ν•©ν•˜μ—¬ μ„±λŠ₯κ³Ό νš¨μœ¨μ„± λ©΄μ—μ„œ 이전 λ²„μ „μ˜ YOLO μ œν’ˆκ΅°μ„ λŠ₯κ°€ν•©λ‹ˆλ‹€.

YOLOv5 의 μ£Όμš” κ°œμ„  μ‚¬ν•­μœΌλ‘œλŠ” 동적 μ•„ν‚€ν…μ²˜ μ‚¬μš©, κ΄‘λ²”μœ„ν•œ 데이터 증강 기술, ν˜μ‹ μ μΈ ν›ˆλ ¨ μ „λž΅, μ»΄ν“¨νŒ… 손싀 및 λͺ©ν‘œ ꡬ좕 ν”„λ‘œμ„ΈμŠ€μ˜ μ€‘μš”ν•œ μ‘°μ • 등이 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λ“  ν˜μ‹ μ€ YOLO λͺ¨λΈμ˜ νŠΈλ ˆμ΄λ“œλ§ˆν¬μΈ λΉ λ₯Έ 속도λ₯Ό μœ μ§€ν•˜λ©΄μ„œ 물체 κ°μ§€μ˜ μ •ν™•μ„±κ³Ό νš¨μœ¨μ„±μ„ 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.



생성 2023-11-12, μ—…λ°μ΄νŠΈ 2024-01-14
μž‘μ„±μž: glenn-jocher (5), sergiuwaxmann (1)

λŒ“κΈ€