рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

рдорд▓реНрдЯреА-рдЬреАрдкреАрдпреВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг

ЁЯУЪ рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ GPU рдХрд╛ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ YOLOv5 ЁЯЪА рдПрдХрд▓ рдпрд╛ рдПрдХрд╛рдзрд┐рдХ рдорд╢реАрди рдкрд░ред

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ

рд░реЗрдкреЛ рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ рдФрд░ requirements.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

ЁЯТб рдкреНрд░реЛ рдЯрд┐рдк! рдбреЙрдХрд░ рдЫрд╡рд┐ рд╕рднреА рдорд▓реНрдЯреА-рдЬреАрдкреАрдпреВ рдкреНрд░рд╢рд┐рдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред рджреЗрдЦрдирд╛ рдбреЙрдХрд░ рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб рдбреЙрдХрд░ рдкреБрд▓

ЁЯТб рдкреНрд░реЛ рдЯрд┐рдк! torch.distributed.run рдмрджрд▓рддрд╛ torch.distributed.launch рдореЗрдВ PyTorch>=1.9. рджреЗрдЦрдирд╛ рдбреЙрдХреНрд╕ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдПред

рдкреНрд░рд╢рд┐рдХреНрд╖рдг

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдпрд╣рд╛рдВ рд╣рдо рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдФрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдореЙрдбрд▓ YOLOv5s рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рдореЙрдбрд▓реЛрдВ рдХреА рдкреВрд░реА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА README рддрд╛рд▓рд┐рдХрд╛ рджреЗрдЦреЗрдВред рд╣рдо рдЗрд╕ рдореЙрдбрд▓ рдХреЛ COCO рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдорд▓реНрдЯреА-GPU рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред

YOLOv5 рдореЙрдбрд▓

рд╕рд┐рдВрдЧрд▓ рдЬреАрдкреАрдпреВ

python train.py  --batch 64 --data coco.yaml --weights yolov5s.pt --device 0

рдЖрдк рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ device DataParallel рдореЛрдб рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

python train.py  --batch 64 --data coco.yaml --weights yolov5s.pt --device 0,1

рдпрд╣ рд╡рд┐рдзрд┐ рдзреАрдореА рд╣реИ рдФрд░ рдХреЗрд╡рд▓ 1 GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЛ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдЧрддрд┐ рджреЗрддреА рд╣реИред

рдЖрдкрдХреЛ рдкрд╛рд╕ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ python -m torch.distributed.run --nproc_per_node, рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХреЛрдВ рдХреЗ рдмрд╛рджред

python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0,1

--nproc_per_node рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рддрдиреЗ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ 2 рд╣реИред --batch рдХреБрд▓ рдмреИрдЪ-рдЖрдХрд╛рд░ рд╣реИред рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ GPU рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ 64/2 = 32 рдкреНрд░рддрд┐ GPU рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ 0... (N-1).

рд╡рд┐рд╢рд┐рд╖реНрдЯ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ) рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ GPU рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ '--device' рдкрд╛рд╕ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рд╣рдо GPU '2,3' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --device 2,3
SyncBatchNorm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ) [SyncBatchNorm](https://pytorch.org/docs/master/generated/torch.nn.SyncBatchNorm.html) could increase accuracy for multiple gpu training, however, it will slow down training by a significant factor. It is **only** available for Multiple GPU DistributedDataParallel training. It is best used when the batch-size on **each** GPU is small (<= 8). To use SyncBatchNorm, simple pass `--sync-bn` to the command like below,
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --sync-bn
рдПрдХрд╛рдзрд┐рдХ рдорд╢реАрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ) рдпрд╣ **рдХреЗрд╡рд▓** рдПрдХрд╛рдзрд┐рдХ GPU рд╡рд┐рддрд░рд┐рдд рдбреЗрдЯрд╛рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЬрд╛рд░реА рд░рдЦреЗрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рдорд╢реАрдиреЛрдВ рдкрд░ рдлрд╛рдЗрд▓реЗрдВ рд╕рдорд╛рди рд╣реИрдВ, рдбреЗрдЯрд╛рд╕реЗрдЯ, рдХреЛрдбрдмреЗрд╕, рдЖрджрд┐ред рдмрд╛рдж рдореЗрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдорд╢реАрдиреЗрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЖрдкрдХреЛ рдПрдХ рдорд╛рд╕реНрдЯрд░ рдорд╢реАрди (рд╡рд╣ рдорд╢реАрди рдЬрд┐рд╕рд╕реЗ рджреВрд╕рд░реЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ) рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдкрддрд╛ ('master_addr') рдиреЛрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдкреЛрд░реНрдЯ ('master_port') рдЪреБрдиреЗрдВред рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 'master_addr = 192.168.1.1' рдФрд░ 'master_port = 1234' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
# On master machine 0
python -m torch.distributed.run --nproc_per_node G --nnodes N --node_rank 0 --master_addr "192.168.1.1" --master_port 1234 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights ''
# On machine R
python -m torch.distributed.run --nproc_per_node G --nnodes N --node_rank R --master_addr "192.168.1.1" --master_port 1234 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights ''
рдЬрд╣рд╛рдВ 'G' рдкреНрд░рддрд┐ рдорд╢реАрди GPU рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, 'N' рдорд╢реАрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ 'R' '0' рд╕реЗ рдорд╢реАрди рдирдВрдмрд░ рд╣реИ... (рдПрди-1)'ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдЬреАрдкреАрдпреВ рдХреЗ рд╕рд╛рде рджреЛ рдорд╢реАрдиреЗрдВ рд╣реИрдВ, рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд▓рд┐рдП 'рдЬреА = 2', 'рдПрди = 2', рдФрд░ 'рдЖрд░ = 1' рд╣реЛрдЧрд╛ред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рддрдм рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рд╕рдм 'рдПрди' рдорд╢реАрдиреЗрдВ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВред рдЖрдЙрдЯрдкреБрдЯ рдХреЗрд╡рд▓ рдорд╛рд╕реНрдЯрд░ рдорд╢реАрди рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛!

рдиреЛрдЯреНрд╕

  • рд╡рд┐рдВрдбреЛрдЬ рд╕рдорд░реНрдерди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рд┐рдирдХреНрд╕ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред
  • --batch GPU рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЧреБрдгрдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • GPU 0 рдЕрдиреНрдп GPU рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рд▓реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ EMA рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЪреЗрдХрдкреЙрдЗрдВрдЯрд┐рдВрдЧ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
  • рдпрджрд┐ рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ RuntimeError: Address already in use, рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рд╕рдордп рдореЗрдВ рдХрдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдЕрд▓рдЧ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ --master_port рдиреАрдЪреЗ рдХреА рддрд░рд╣,
python -m torch.distributed.run --master_port 1234 --nproc_per_node 2 ...

рдкрд░рд┐рдгрд╛рдо

DDP рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо AWS EC2 P4d рдЙрджрд╛рд╣рд░рдг рдкрд░ 8x A100 SXM4-40GB рдХреЗ рд╕рд╛рде YOLOv5l рдХреЗ рд▓рд┐рдП 1 COCO рдпреБрдЧ рдХреЗ рд▓рд┐рдПред

рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЛрдб
# prepare
t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all -v "$(pwd)"/coco:/usr/src/coco $t
pip3 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
cd .. && rm -rf app && git clone https://github.com/ultralytics/yolov5 -b master app && cd app
cp data/coco.yaml data/coco_profile.yaml

# profile
python train.py --batch-size 16 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0
python -m torch.distributed.run --nproc_per_node 2 train.py --batch-size 32 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1
python -m torch.distributed.run --nproc_per_node 4 train.py --batch-size 64 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1,2,3
python -m torch.distributed.run --nproc_per_node 8 train.py --batch-size 128 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1,2,3,4,5,6,7
рдЬреАрдкреАрдпреВ
рдП100
рдмреИрдЪ рдХрд╛ рдЖрдХрд╛рд░ CUDA_mem
рдбрд┐рд╡рд╛рдЗрд╕0 (рдЬреА)
рдХреЛрдХреЛ
рд░реЗрд▓рдЧрд╛рдбрд╝реА
рдХреЛрдХреЛ
рд╡реИрд▓
1x 16 26рдЬреАрдмреА 20:39 0:55
2x 32 26рдЬреАрдмреА 11:43 0:57
4x 64 26рдЬреАрдмреА 5:57 0:55
8x 128 26рдЬреАрдмреА 3:09 0:57

рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди

рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдкрд╣рд▓реЗ рдиреАрдЪреЗ рджреА рдЧрдИ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдкрдврд╝реЗрдВ! (рдпрд╣ рдЖрдкрдХрд╛ рд╕рдордп рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ)

рдЪреЗрдХрд▓рд┐рд╕реНрдЯ (рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ)
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдареАрдХ рд╕реЗ рдкрдврд╝рд╛ рд╣реИ?
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХреЛрдбрдмреЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдХреЛрдб рдкреНрд░рддрд┐рджрд┐рди рдмрджрд▓рддрд╛ рд╣реИред
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреА рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реЛ рдФрд░ рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕рдорд╛рдзрд╛рди рд╣реЛред
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рд╕рд╣реА рд╕рд╣рд┐рдд) Python рдФрд░ Pytorch рд╕рдВрд╕реНрдХрд░рдг)?
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рдиреАрдЪреЗ "рд╡рд╛рддрд╛рд╡рд░рдг" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдЕрдиреНрдп рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ?
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ coco128 рдпрд╛ coco2017 рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ? рдЗрд╕рд╕реЗ рдореВрд▓ рдХрд╛рд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрдП рд╣реИрдВ, рддреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╡рд┐рд╡рд░рдг рджреЗрдХрд░ рдПрдХ рдореБрджреНрджрд╛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рд╕рдорд░реНрдерд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг

Ultralytics рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдЬреИрд╕реЗ CUDA, CUDNN рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд, PythonрдФрд░ PyTorch, рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХрд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐

YOLOv5 рд╕реАрдЖрдИ

рдпрд╣ рдмреИрдЬ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА YOLOv5 GitHub рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рддрдд рдПрдХреАрдХрд░рдг (CI) рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд╕ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдпреЗ рд╕реАрдЖрдИ рдкрд░реАрдХреНрд╖рдг рд╕рдЦреНрддреА рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ YOLOv5 рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдореБрдЦ рдкрд╣рд▓реБрдУрдВ рдХреЗ рдкрд╛рд░: рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рд╕рддреНрдпрд╛рдкрди, рдЕрдиреБрдорд╛рди, рдирд┐рд░реНрдпрд╛рдд рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХред рд╡реЗ macOS, Windows рдФрд░ Ubuntu рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрдЪрд╛рд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рд░ 24 рдШрдВрдЯреЗ рдореЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдХреНрд░реЗрдбрд┐рдЯреНрд╕

рд╣рдо @MagicFrogSJTU рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рднреА рднрд╛рд░реА рднрд╛рд░реЛрддреНрддреЛрд▓рди рдХрд┐рдП, рдФрд░ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @glenn-рдЬреЛрдЪрд░ред



2023-11-12 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2023-12-03
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (2)

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ