์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Ultralytics ์˜คํ”ˆ์†Œ์Šค YOLO ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ธฐ์—ฌํ•˜๊ธฐ

๋จผ์ €, Ultralytics ์˜คํ”ˆ์†Œ์Šค YOLO ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ธฐ์—ฌ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

  1. ํ–‰๋™ ๊ฐ•๋ น
  2. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ†ตํ•œ ๊ธฐ์—ฌ
  3. ๋ฒ„๊ทธ ์‹ ๊ณ ํ•˜๊ธฐ
  4. ๋ผ์ด์„ ์Šค
  5. ๊ฒฐ๋ก 

ํ–‰๋™ ๊ฐ•๋ น

๋ชจ๋“  ๊ธฐ์—ฌ์ž๋Š” ๋ชจ๋‘๋ฅผ ํ™˜์˜ํ•˜๊ณ  ํฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ–‰๋™ ๊ฐ•๋ น์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ†ตํ•œ ๊ธฐ์—ฌ

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ํ˜•ํƒœ์˜ ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ์›ํ™œํ•œ ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•ด ๋‹ค์Œ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๋”ฐ๋ฅด์„ธ์š”:

  1. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํฌํฌ: Ultralytics YOLO ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ž์‹ ์˜ GitHub ๊ณ„์ •์œผ๋กœ ํฌํฌํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ: ํฌํฌ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  3. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜์„ธ์š”: ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๊ณ  ์ƒˆ๋กœ์šด ์˜ค๋ฅ˜๋‚˜ ๊ฒฝ๊ณ ๋ฅผ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํ…Œ์ŠคํŠธ: ๋กœ์ปฌ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  5. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ปค๋ฐ‹: ์„ค๋ช…์ด ํฌํ•จ๋œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋กœ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ๊ด€๋ จ ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜๋“œ์‹œ ํฌํ•จํ•˜์„ธ์š”.

  6. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ๋งŒ๋“ค๊ธฐ: ํฌํฌ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฉ”์ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ( Ultralytics YOLO )๋กœ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์„ค๋ช…์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์„ธ์š”.

CLA ์„œ๋ช…

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ˆ˜๋ฝํ•˜๋ ค๋ฉด ๋จผ์ € ๊ธฐ์—ฌ์ž ๋ผ์ด์„ ์Šค ๊ณ„์•ฝ(CLA)์— ์„œ๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Ultralytics YOLO ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ธฐ์—ฌํ•˜๋Š” ์กฐ๊ฑด์— ๋™์˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹œํ•˜๋Š” ๋ฒ•์  ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. CLA๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ธฐ์—ฌ์— ์ ์ ˆํ•œ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ AGPL-3.0 ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๊ณ„์† ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

CLA์— ์„œ๋ช…ํ•˜๋ ค๋ฉด PR์„ ์ œ์ถœํ•œ ํ›„ CLA ๋ด‡์ด ์ œ๊ณตํ•˜๋Š” ์ง€์นจ์— ๋”ฐ๋ผ PR์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋Œ“๊ธ€๋กœ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

I have read the CLA Document and I sign the CLA

Google ์Šคํƒ€์ผ ๋ฌธ์„œ ์ŠคํŠธ๋ง

์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก Google ์Šคํƒ€์ผ์˜ ๋ฌธ์„œ ์ŠคํŠธ๋ง์„ ํฌํ•จํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ธฐ์—ฌ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ ๋ฌธ์ž์—ด ์˜ˆ์ œ

์ด ์˜ˆ๋Š” ๋‘ ๊ฐ€์ง€ Google ์Šคํƒ€์ผ ๋ฌธ์„œ ์ŠคํŠธ๋ง์„ ๋ชจ๋‘ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ๋ชจ๋‘ types ๋Š” ํ•ญ์ƒ ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (bool).

def example_function(arg1, arg2=4):
    """
    Example function that demonstrates Google-style docstrings.

    Args:
        arg1 (int): The first argument.
        arg2 (int): The second argument. Default value is 4.

    Returns:
        (bool): True if successful, False otherwise.

    Examples:
        >>> result = example_function(1, 2)  # returns False
    """
    if arg1 == arg2:
        return True
    return False

์ด ์˜ˆ์ œ์—์„œ๋Š” Google ์Šคํƒ€์ผ ๋ฌธ์„œ ๋ฌธ์ž์—ด๊ณผ ์ธ์ˆ˜ ๋ฐ ๋ฐ˜ํ™˜ ์œ ํ˜• ํžŒํŠธ๋ฅผ ๋ชจ๋‘ ๋ณด์—ฌ ์ฃผ์ง€๋งŒ ๋‘˜ ๋‹ค ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ•˜๋‚˜๋Š” ๋‹ค๋ฅธ ํ•˜๋‚˜ ์—†์ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

def example_function(arg1: int, arg2: int = 4) -> bool:
    """
    Example function that demonstrates Google-style docstrings.

    Args:
        arg1: The first argument.
        arg2: The second argument. Default value is 4.

    Returns:
        True if successful, False otherwise.

    Examples:
        >>> result = example_function(1, 2)  # returns False
    """
    if arg1 == arg2:
        return True
    return False

๋” ์ž‘๊ฑฐ๋‚˜ ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๋Š” ํ•œ ์ค„์˜ ๋ฌธ์„œ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ ๋ฌธ์ž์—ด์€ ํฐ๋”ฐ์˜ดํ‘œ 3๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋งˆ์นจํ‘œ๋กœ ๋๋‚˜๋Š” ์™„์ „ํ•œ ๋ฌธ์žฅ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

def example_small_function(arg1: int, arg2: int = 4) -> bool:
    """Example function that demonstrates a single-line docstring."""
    return arg1 == arg2

GitHub ์•ก์…˜ CI ํ…Œ์ŠคํŠธ

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋ ค๋ฉด ๋จผ์ € ๋ชจ๋“  GitHub ๋™์ž‘ ์ง€์†์  ํ†ตํ•ฉ (CI) ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ์—๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ”„๋กœ์ ํŠธ์˜ ํ’ˆ์งˆ ํ‘œ์ค€์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฐํŒ…, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ๊ธฐํƒ€ ๊ฒ€์‚ฌ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. GitHub Actions์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜์„ธ์š”.

๋ฒ„๊ทธ ์‹ ๊ณ ํ•˜๊ธฐ

๋ฒ„๊ทธ ์‹ ๊ณ ๋Š” ํ”„๋กœ์ ํŠธ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋ฏ€๋กœ ์–ธ์ œ๋‚˜ ๊ฐ์‚ฌํ•˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•  ๋•Œ๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ ์˜ˆ์ œ์ธ ์ตœ์†Œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒ„๊ทธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค

Ultralytics ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๊ฐœ๋ฐฉ์„ฑ, ํˆฌ๋ช…์„ฑ, ํ˜‘์—… ํ–ฅ์ƒ์„ ์ด‰์ง„ํ•˜๋Š” GNU Affero ์ผ๋ฐ˜ ๊ณต์ค‘ ์‚ฌ์šฉ ํ—ˆ๊ฐ€์„œ v3.0(AGPL-3.0 )์„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ•๋ ฅํ•œ ์นดํ”ผ๋ ˆํ”„ํŠธ ๋ผ์ด์„ ์Šค๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ, ์ˆ˜์ •, ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ˜‘์—…์„ ์ด‰์ง„ํ•˜์—ฌ ๋ชจ๋“  ๊ฐœ์„  ์‚ฌํ•ญ์„ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์™€ ๊ฐœ๋ฐœ์ž๋Š” Ultralytics ์˜คํ”ˆ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์— ํšจ๊ณผ์ ์ด๊ณ  ์œค๋ฆฌ์ ์œผ๋กœ ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด AGPL-3.0 ์•ฝ๊ด€์„ ์ˆ™์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

Ultralytics ์˜คํ”ˆ์†Œ์Šค YOLO ํ”„๋กœ์ ํŠธ์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฐธ์—ฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ฏธ๋ž˜๋ฅผ ๋งŒ๋“ค๊ณ  ํ˜์‹ ๊ณผ ํ˜‘์—…์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์กฐ์„ฑํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋“ , ๋ฒ„๊ทธ๋ฅผ ๋ณด๊ณ ํ•˜๋“ , ๊ธฐ๋Šฅ์„ ์ œ์•ˆํ•˜๋“ , ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ธฐ์—ฌ๋Š” ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์˜ ์•„์ด๋””์–ด๊ฐ€ ์‹คํ˜„๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋ฉฐ, ๋ฌผ์ฒด ์ธ์‹ ๊ธฐ์ˆ ์„ ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ—Œ์‹ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด ํฅ๋ฏธ์ง„์ง„ํ•œ ์˜คํ”ˆ์†Œ์Šค ์—ฌ์ •์—์„œ ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๊ณ  ํ˜์‹ ํ•ด ๋‚˜๊ฐ‘์‹œ๋‹ค. ํ–‰๋ณตํ•œ ์ฝ”๋”ฉ! ๐Ÿš€๐ŸŒŸ



์ƒ์„ฑ 2023-11-12, ์—…๋ฐ์ดํŠธ 2024-03-08
์ž‘์„ฑ์ž: glenn-jocher (4)

๋Œ“๊ธ€