めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
μ½”λ”© 짐 πŸ’ͺ
めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
  • μΉ΄ν…Œκ³ λ¦¬ (135)
    • 개발 ν™˜κ²½ ꡬ좕 (12)
      • 개발 ν™˜κ²½ (5)
      • DB (0)
      • Node.js (4)
      • ν˜•μƒ 관리 (2)
      • Spring (1)
    • μ›Ή (11)
      • React (5)
      • 슀파λ₯΄νƒ€μ½”λ”©ν΄λŸ½__μ›Ή (6)
    • λͺ¨λ°”일 (2)
      • μ•ˆλ“œλ‘œμ΄λ“œ (2)
    • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (55)
      • C (13)
      • Python (15)
      • SQL (5)
      • Java (22)
    • 사물인터넷 (11)
      • 아두이노 (11)
    • 일상 (31)
      • λ§›μ§‘ (13)
      • λž­ν‚Ήλ‹­μ»΄ (4)
      • ν›„κΈ° (11)
      • μš”λ¦¬ (3)
      • μž‘λ‹΄ (0)
    • ꡐ양 (4)
      • 심리학 (3)
      • ν…Œλ‹ˆμŠ€ (1)
    • 자격증 (9)
      • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ (9)

λΈ”λ‘œκ·Έ 메뉴

  • πŸ’» github

인기 κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ

μ½”λ”© 짐 πŸ’ͺ

[Python] YOLOv5λ₯Ό ν™œμš©ν•œ 객체 인식(Object Detection) (2)
ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Python

[Python] YOLOv5λ₯Ό ν™œμš©ν•œ 객체 인식(Object Detection) (2)

2023. 8. 4. 11:34

이전 ν¬μŠ€νŒ…μ—μ„œ 이미지 라벨링 μž‘μ—…μ„ μ™„λ£Œ ν–ˆλ‹€λ©΄

라벨링 된 데이터λ₯Ό YOLO ν˜•μ‹μœΌλ‘œ μ „ν™˜ 해주도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

γ€Š 데이터 μ…‹ ν˜•μ‹ λ³€ν™˜ 》

ν˜„μž¬ CVAT을 톡해 λ‹€μš΄λ°›μ€ λ°μ΄ν„°λŠ” COCOν˜•μ‹μ˜ json νŒŒμΌμž…λ‹ˆλ‹€.

이λ₯Ό Yolov5μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ convert2Yoloλ₯Ό ν™œμš©ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

covert2Yolo νŒ¨ν‚€μ§€μ™€ yolov5의 경우 μ•„λž˜μ˜ git νŽ˜μ΄μ§€μ—μ„œ

zip ν˜•μ‹μ„ 톡해 λ‹€μš΄λ°›μ•„λ„ 되고

μ½˜μ†” ν˜Ήμ€ 터미널을 톡해 λ‹€μš΄λ‘œλ“œ 받을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

 

[.zip ν˜•μ‹μœΌλ‘œ 직접 λ‹€μš΄]

yolov5 κΉƒν—ˆλΈŒ νŽ˜μ΄μ§€

 

GitHub - ultralytics/yolov5: YOLOv5 πŸš€ in PyTorch > ONNX > CoreML > TFLite

YOLOv5 πŸš€ in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.

github.com

 

convert2Yolo κΉƒν—ˆλΈŒ νŽ˜μ΄μ§€

 

GitHub - ssaru/convert2Yolo: This project purpose is convert voc annotation xml file to yolo-darknet training file format

This project purpose is convert voc annotation xml file to yolo-darknet training file format - GitHub - ssaru/convert2Yolo: This project purpose is convert voc annotation xml file to yolo-darknet t...

github.com

 

 

γ€Žμ½˜μ†” ν˜Ήμ€ 터미널을 ν†΅ν•œ git clone 생성』

## git clone ν•  μœ„μΉ˜μ—μ„œ μˆ˜ν–‰ [convert2Yolo]
git clone https://github.com/ssaru/convert2Yolo.git
cd convert2Yolo

## yolov5 μˆ˜ν–‰μ„ μœ„ν•œ ν”ŒλŸ¬κ·ΈμΈ μ„€μΉ˜
# pip install -r requirements.txt

## git clone ν•  μœ„μΉ˜μ—μ„œ μˆ˜ν–‰ [yolov5]
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
## yolov5 μˆ˜ν–‰μ„ μœ„ν•œ ν”ŒλŸ¬κ·ΈμΈ μ„€μΉ˜
# pip install -r requirements.txt

 

convert2Yolo, yolov5 νŒ¨ν‚€μ§€λ₯Ό ν”„λ‘œμ νŠΈ 폴더 ν•˜μœ„μ— clone ν•˜κ³ 

μ•„λž˜μ˜ 폴더 ꡬ쑰둜 ν”„λ‘œμ νŠΈλ₯Ό 관리해 μ€λ‹ˆλ‹€.

 

# ν”„λ‘œμ νŠΈ
# β”œβ”€β”€ yolov5

# └── convert2Yolo
# └── ship (데이터 셋을 담을 νŒ¨ν‚€μ§€)

#     β””── class.names 

#     β””── labels.json(CVAT을 ν†΅ν•œ COCO ν˜•μ‹μ˜ 이미지 μ–΄λ…Έν…Œμ΄μ…˜ 파일)

#     β””── data

#         β””── images (CVAT을 톡해 라벨링할 λ•Œ μ‚¬μš©λ˜μ—ˆλ˜ 이미지 νŒŒμΌμ„ λ‹΄λŠ” 폴더)
#         β””── labels (convert2Yoloλ₯Ό ν†΅ν•œ YOLO μ–΄λ…Έν…Œμ΄μ…˜ νŒŒμΌμ„ 담을 폴더)

 

 

이 λ•Œ class.names 파일의 경우 λ°μ΄ν„°μ…‹μ˜ ν΄λž˜μŠ€λ“€λ₯Ό κ΅¬λΆ„ν•˜λŠ” νŒŒμΌμ΄λ―€λ‘œ

ν•΄λ‹Ήν•˜λŠ” 클래슀λͺ…듀을 μž‘μ„±ν•΄μ€λ‹ˆλ‹€.

## class.names
# CVAT을 톡해 λΆ„λ₯˜ν•œ labelλͺ…을 ν•œ 쀄씩 κΈ°μž…
ship

 

 

이제 ν•˜λ‚˜μ˜ json 파일 이미지에 λ§žλŠ” YOLO μ–΄λ…Έν…Œμ΄μ…˜ 파일(.txt)둜 λ³€ν™˜μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.

# convert2Yolo ν΄λ”λ‘œ 이동
cd convert2Yolo

# labels.json 파일 txt λ³€ν™˜
'''
python(python3, pip..) install example.py \
--datasets 'λ³€ν™˜ labels 포맷' \
--img_path '이미지 경둜' \
--img_type '이미지 νƒ€μž…' \
--label 'label.json파일 경둜' \
--convert_output_path 'λ³€ν™˜ txt 파일 μ €μž₯ 경둜' \ 
--manifest_path '해당사항 μ—†μœΌλ‚˜ μ˜΅μ…˜ μ œμ™Έ λΆˆκ°€ν•œ 경우 κΈ°λ³Έκ°’ ./둜 μž‘μ„±' \
--cls_list_file 'class.names 파일 경둜' \
'''

# μ‹€μ œ μ‹€ν–‰ μ½”λ“œ
python example.py \
--dataset COCO \
--label ../ship/labels.json \
--convert_output_path ../ship/data/labels \
--cls_list_file ../ship/class.names \
--img_path ../ship/data/images \
--img_type ".jpg" \
--manifest_path ./

 

ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό 톡해 completeκ°€ 뜨면 λ³€ν™˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ κ²ƒμž…λ‹ˆλ‹€.

convert_output_path둜 μ§€μ •ν•œ

../ship/data/labels 폴더에 λ³€ν™˜ν•œ txt 파일이 μ‘΄μž¬ν•˜λŠ”μ§€ 확인해보도둝 ν•©λ‹ˆλ‹€.

μ΄λ―Έμ§€μ˜ κ°―μˆ˜μ™€ λ™μΌν•œ 갯수, μ΄λ¦„μ˜ .txtκ°€ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

#   β””── data

#       β””── images 
#       β””── labels

#           β””── ship1.txt

#           β””── ship2.txt

#           β””── ship3.txt...

 

 

이제 yaml νŒŒμΌμ„ 생성해주도둝 ν•©λ‹ˆλ‹€.

yaml νŒŒμΌμ€ YOLO에 데이터 μœ„μΉ˜, 클래슀 개수 λ“±μ˜ 정보λ₯Ό μ „λ‹¬ν•˜λŠ” νŒŒμΌμž…λ‹ˆλ‹€.

## custom.yaml

'''
path: 기본경둜 μ§€μ •
train: training 경둜 μ§€μ •
test : test 경둜 μ§€μ •
val: val 경둜 μ§€μ •

nc: 클래슀 갯수 μ§€μ •
names = 클래슀λͺ… μ§€μ •
'''
 
 # μ‹€μ œ μž‘μ„± μ½”λ“œ
 path: C:/Users/ν”„λ‘œμ νŠΈλͺ…/ship/data
 train: images/train
 test : images/test
 val: images/val
 
 nc: 1
 names: ['ship']

 

이제 λͺ¨λΈμ„ ν›ˆλ ¨ν•  ν™˜κ²½μ΄ λ˜μ—ˆμœΌλ‹ˆ 데이터 셋을 

train, val, test둜 λΆ„λ₯˜ν•΄μ£Όλ„둝 ν•©λ‹ˆλ‹€.

 

보톡 데이터셋은 Train/Validation으둜 λ‚˜λˆŒ λ•ŒλŠ” 70/30 λΉ„μœ¨λ‘œ,

Train/Validation/Test둜 λ‚˜λˆŒ κ²½μš°μ—λŠ” 70/20/10 λΉ„μœ¨λ‘œ λ‚˜λˆˆλ‹€κ³  ν•©λ‹ˆλ‹€.

 

ν˜„μž¬ μ œκ°€ CVAT을 톡해 λΌλ²¨λ§ν•œ 이미지 νŒŒμΌμ€ 100개이고

이λ₯Ό 톡해 exportν•œ labels.json νŒŒμΌμ„ convert2Yoloλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€ν™˜λœ

txtνŒŒμΌλ˜ν•œ λ™μΌν•˜κ²Œ 100κ°œμ΄λ―€λ‘œ

 

이제 ν•΄λ‹Ή νŒŒμΌλ“€μ„ 70/20/10으둜 λ‚˜λˆ„μ–΄ μ£Όμ–΄μ•Ό ν•˜λŠ”λ°

이전에 파이썬 크둀링을 톡해 λ‹€μš΄λ°›μ€ μ΄λ―Έμ§€μ˜ λͺ…칭이

쑰금 μƒμ΄ν•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή 이미지 파일과 txt파일 λͺ…칭을

λΆ„λ₯˜ν•˜μ—¬ λ‹€μ‹œ 각 폴더에 λ„£μ–΄μ£Όκ² μŠ΅λ‹ˆλ‹€.

 

이λ₯Ό μœ„ν•΄ images 폴더와 labels 폴더 ν•˜μœ„μ— 각각 폴더듀을 μƒμ„±ν•΄μ€λ‹ˆλ‹€.

 

# └── ship

#     β””── data

#         β””── images 

#             β””── test (ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  20μž₯의 이미지λ₯Ό λ‹΄λŠ” 폴더)

#             β””── train (train을 μˆ˜ν–‰ν•  70μž₯의 이미지λ₯Ό λ‹΄λŠ” 폴더) 

#             β””── val (val을 μˆ˜ν–‰ν•  10μž₯의 이미지λ₯Ό λ‹΄λŠ” 폴더)

#         β””── labels

#             β””── test (ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  20μž₯의 ν…μŠ€νŠΈλ₯Ό λ‹΄λŠ” 폴더)

#             β””── train (train을 μˆ˜ν–‰ν•  70μž₯의 ν…μŠ€νŠΈλ₯Ό λ‹΄λŠ” 폴더) 

#             β””── val (val을 μˆ˜ν–‰ν•  10μž₯의 ν…μŠ€νŠΈλ₯Ό λ‹΄λŠ” 폴더)

 

 

ν˜„μž¬ μ‹€μ œ 이미지와 μ–΄λ…Έν…Œμ΄μ…˜(txt) νŒŒμΌλ“€μ€ 각각

/images ν•˜μœ„, 

/labels ν•˜μœ„μ— 각각 100κ°œμ”© μ‘΄μž¬ν•˜λŠ” μƒνƒœμž…λ‹ˆλ‹€.

 

이λ₯Ό 파이썬 μ½”λ“œλ‘œ μž‘μ„±λœ convert_file.py νŒŒμΌμ„ μƒμ„±ν•˜μ—¬

이미지 파일과 ν…μŠ€νŠΈ νŒŒμΌλ“€μ„ λΆ„λ₯˜ν•΄μ£Όκ² μŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή νŒŒμΌμ—μ„œ FILE_PATH와 FILE_EX λΆ€λΆ„λ§Œ ν•œλ²ˆμ”© λ³€κ²½ν•΄ μ‹€ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€.

 

γ€Žμ΄λ―Έμ§€ 및 μ–΄λ…Έν…Œμ΄μ…˜ 파일 λΆ„λ₯˜γ€

## /ship/data/convert_file.py
import os

FILE_PATH = "./labels/"     # ν˜„μž¬ μˆ˜μ •ν•  폴더 경둜: labels, images
FILE_EX = ".txt"            # 파일 νƒ€μž… μˆ˜μ •: images, txt
TRAIN_FILE_PATH = FILE_PATH + "train"
VAL_FILE_PATH = FILE_PATH + "val"
TEST_FILE_PATH = FILE_PATH + "test"

file_list = [file for file in os.listdir(FILE_PATH) if file.endswith(FILE_EX)]

train_cnt, val_cnt, test_cnt = 1, 1, 1

def convert_img_file(o_file_name, c_file_name, c_file_path):
    src = os.path.join(FILE_PATH, o_file_name)
    c_file_name = c_file_name + FILE_EX
    dst = os.path.join(c_file_path, c_file_name)
    os.rename(src, dst)

for i, file_name in enumerate(file_list):
    if i < 70:
        convert_img_file(file_name, f"train_{train_cnt}", TRAIN_FILE_PATH)
        train_cnt += 1
    elif i < 90:
        convert_img_file(file_name, f"val_{val_cnt}", VAL_FILE_PATH)
        val_cnt += 1
    elif i < 100:
        convert_img_file(file_name, f"test_{test_cnt}", TEST_FILE_PATH)
        test_cnt += 1

 

ν•΄λ‹Ή μ½”λ“œλ₯Ό 톡해 νŒŒμΌλ“€μ˜ λΆ„λ₯˜κ°€ μ •μƒμ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆλ‹€λ©΄

이제 ν•΄λ‹Ή 데이터셋을 YOLOv5 λͺ¨λΈμ„ 톡해 ν›ˆλ ¨μ‹œν‚€λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

 

γ€Š 데이터 셋을 ν†΅ν•œ λͺ¨λΈ ν•™μŠ΅ 》

yolov5μ—μ„œ μ œκ³΅ν•˜λŠ” λͺ¨λΈμ€ 4가지이며 였λ₯Έμͺ½μ˜ λͺ¨λΈμΌμˆ˜λ‘

정확도가 μƒμŠΉν•˜μ§€λ§Œ ν•™μŠ΅ μ‹œκ°„μ΄ μ˜€λž˜κ±Έλ¦¬λŠ” λͺ¨λΈμž…λ‹ˆλ‹€. 

본인의 ν”„λ‘œμ νŠΈμ— λ§žμΆ°μ„œ μ•Œλ§žκ²Œ μ‚¬μš©ν•˜λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

 

μ €μ˜ 경우 YOLOv5m λͺ¨λΈμ„ μ‚¬μš©ν–ˆμœΌλ©°,

에포크 μˆ˜μ™€ λ°°μΉ˜λŠ” λ”°λ‘œ μ‘°μ •ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

(에포크 수 λ―Έ μ§€μ • μ‹œ κΈ°λ³Έκ°’ : 100)

 

γ€Žλͺ¨λΈ Train』

## yolov5 경둜 이동
cd ../yolov5

## λͺ¨λΈ Train μˆ˜ν–‰
'''
python train.py \
--img '이미지 μ‚¬μ΄μ¦ˆ' \
--batch '배치 μ‚¬μ΄μ¦ˆ' \
--data 'custom.yaml 파일 경둜' \
--cfg 'μ‚¬μš©ν•  λͺ¨λΈμ˜ yaml 파일 경둜' \
--weights 'ν•™μŠ΅μ— μ‚¬μš©ν•  λͺ¨λΈ' \
--name 'ν•™μŠ΅λœ 정보λ₯Ό runs 폴더 μ•ˆμ— μ €μž₯ν•  이름'
--project 'wandb에 μ €μž₯ν•  ν”„λ‘œμ νŠΈ λͺ…'
'''

## μ‹€μ œ μ‹€ν–‰ μ½”λ“œ
python train.py \
--data ../ship/custom.yaml \
--weights yolov5m.pt

 

Train ν•™μŠ΅ κ²°κ³ΌλŠ” yolov5/runs/train κ²½λ‘œμ— μ΅œμ΄ˆμ—

/expλΌλŠ” ν΄λ”λ‘œ μ €μž₯되게 λ©λ‹ˆλ‹€.

ν•™μŠ΅μ„ λ°˜λ³΅ν•˜λ©΄ /train ν•˜μœ„ κ²½λ‘œμ— exp1, exp2, exp3...

ν˜•νƒœλ‘œ 폴더가 μƒμ„±λ˜λ©° ν•™μŠ΅ κ²°κ³Όκ°€ κΈ°λ‘λ©λ‹ˆλ‹€.

 

이 λ–„ ν•™μŠ΅ κ²°κ³Ό ν΄λ”μ—μ„œ

val_batch_labels νŒŒμΌμ€ 각 이미지 별 μ •λ‹΅ λ°”μš΄λ”©λ°•μŠ€λ₯Ό μ˜λ―Έν•˜κ³ 

val_batch_pred.jpg νŒŒμΌμ€ 예츑된 λ°”μš΄λ”©λ°•μŠ€κ°’μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

이λ₯Ό 톡해 예츑 정확도λ₯Ό λŒ€λž΅μ μœΌλ‘œ νŒλ³„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

(쒌) μ •λ‹΅ label     (우) 예츑 pred

 

기본적으둜 YOLOv5 λͺ¨λΈμ„ ν†΅ν•œ Train을 μ§„ν–‰ν•  경우

Val도 같이 μ§„ν–‰λ˜μ–΄ ν•™μŠ΅ κ²°κ³Όκ°€ 같이 μ €μž₯λ©λ‹ˆλ‹€.

λ§Œμ•½ Val 진행을 ν™•μΈν•˜κ³  μ‹Άλ‹€λ©΄

μ•„λž˜μ˜ ν•΄λ‹Ή μ½”λ“œλ₯Ό 톡해 확인 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

이 ν›„ Inference, Val, Test ν•™μŠ΅ λͺ¨λ‘ Train을 톡해

ν•™μŠ΅λœ λͺ¨λΈ 쀑 κ°€μž₯ 쒋은 λͺ¨λΈμΈ /exp/weights/best.ptλ₯Ό μ΄μš©ν•©λ‹ˆλ‹€.

 

γ€Ž λͺ¨λΈ Val 』

## yolov5 폴더 κ²½λ‘œμ—μ„œ μ§„ν–‰
# λͺ¨λΈ Val μˆ˜ν–‰
python val.py \
--data ../ship/custom.yaml \
--weights 'runs/train/exp/weights/best.pt' \
--save-txt

--save-txt νŒŒλΌλ―Έν„°λ₯Ό 톡해 bounding box 데이터λ₯Ό

ν…μŠ€νŠΈ 파일둜 확인 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

λ˜ν•œ Test의 경우

val.py μ‹€ν–‰ νŒŒλΌλ―Έν„°λ‘œ --task "test"λ₯Ό 전달할 경우 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

 

γ€Ž λͺ¨λΈ Test 』

## yolov5 폴더 κ²½λ‘œμ—μ„œ μ§„ν–‰
# λͺ¨λΈ Test μˆ˜ν–‰
python val.py \
--task "test" \
--data ../ship/custom.yaml \
--weights 'runs/train/exp/weights/best.pt' \
--save-txt

Test νŒŒμΌλ“€μ˜ 경우 라벨링 κ³Όμ •μ—μ„œ 4κ°œκ°€ μ†Œμ‹€λ˜μ–΄ 6개의 νŒŒμΌλ“€λ‘œ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

 

 

이제 ν•™μŠ΅ λͺ¨λΈκ³Ό ν›ˆλ ¨ 데이터λ₯Ό 톡해

ν…ŒμŠ€νŠΈ 데이터λ₯Ό λ„£μ–΄

Inferenceλ₯Ό μ§„ν–‰ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

γ€Žν…ŒμŠ€νŠΈ 데이터 Inference』

## yolov5 폴더 κ²½λ‘œμ—μ„œ μ§„ν–‰

'''
python detect.py \
--source ν…ŒμŠ€νŠΈν•  파일 경둜 \
--weights 'runs/train/exp/weights/best.pt'
'''

# μ‹€μ œ μˆ˜ν–‰ μ½”λ“œ
python detect.py \
--source './test_img.jgp' \
--weights 'runs/train/exp/weights/best.pt'

 

ν…ŒμŠ€νŠΈ 이미지 ν•˜λ‚˜μ™€ 유튜브 링크λ₯Ό 톡해 μ§„ν–‰ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

생각보닀 μ •κ΅ν•˜κ²Œ κ²€μ¦ν•˜μ§€λŠ” λͺ»ν•˜λ„€μš”

 

κΈ€μžλ₯Ό μ„ λ°•μœΌλ‘œ μΈμ‹ν•˜λŠ” λ“± μ•„μ£Ό λͺ…ν™•ν•˜κ²ŒλŠ” μ•„λ‹ˆμ§€λ§Œ 
일정 λΆ€λΆ„ κΈ°λŠ₯ν•˜κ³  μžˆμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

https://youtu.be/lUqnxu4lbSs

 

 


μ°Έκ³ 

https://magicode.tistory.com/55#article-1--1--%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%A4%80%EB%B9%84
https://developnote-blog.tistory.com/161
https://minmiin.tistory.com/16
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)
    'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Python] YOLO λͺ¨λΈ ν•™μŠ΅μ„ μœ„ν•œ μ˜€ν”ˆ 데이터 μ…‹ μ€€λΉ„ (2)
    • [Python] YOLO λͺ¨λΈ ν•™μŠ΅μ„ μœ„ν•œ μ˜€ν”ˆ 데이터 μ…‹ μ€€λΉ„ (1)
    • [Python] YOLOv5λ₯Ό ν™œμš©ν•œ 객체 인식(Object Detection) (1)
    • [Python] μ£Όν”Όν„° λ…ΈνŠΈλΆμ„ μ΄μš©ν•œ 데이터 μ‹œκ°ν™” πŸ“ˆ (6)
    めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
    めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
    πŸ‘Š λΈ”λ‘œκ·Έλ„ 근성이닀? πŸ‘Š

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”