Read this in other languages: English, νκ΅μ΄
Β λꡬ κ²½κΈ°μμ μ μκ° μΌλ§λ 골μ μ λ£μκΉ μκ°ν΄ 보μ μ μ΄ μλμ? λ§μ½ μ΄λ€ μ μμ μΌν¬μ¨μ μμμ μΌλ‘ κ³μ°νλ€κ³ νλ©΄ λ§μ μκ°κ³Ό λ Έλ ₯μ΄ νμν κ²μ λλ€. κ²λ€κ° λ°μ νλμΈλ€μ λ³ΈμΈ νΉμ μ μλ€μ λν λͺ¨λ κ²½κΈ° μμμ μμ²νκ³ λΆμν μκ°μ΄ μμ΅λλ€. μ΄μ²λΌ λꡬ κ²½κΈ°μ λν΄ λΆμνκ³ μΆμ§λ§, μκ°μ΄ μμ΄ λ§μ€μ΄λ μ¬λλ€μ μν΄ μ ν¬λ λ₯λ¬λμ μ¬μ©ν μμ κΈ°λ° λꡬ μ μ μλ κΈ°λ‘ AI μλΉμ€λ₯Ό κ°λ°νμ΅λλ€! π
Β μ°λ¦¬λ λͺ©νλ₯Ό λ¬μ±νκΈ° μν΄ λ κ°μ§μ λͺ¨λΈμ μ¬μ©νμ΅λλ€. 첫 λ²μ§Έ λͺ¨λΈμ μ μ, 곡, 골λ, μ, 골μ κ°μ§νλ λ° μ¬μ©νμμ΅λλ€. λ λ²μ§Έ λͺ¨λΈμ νλ μλ³λ‘ κ°μΈμ idλ₯Ό μΆμ νλ λ° μ¬μ©νμμ΅λλ€. μ¦, μ°λ¦¬λ μΌν¬μ¨ μΆμ κΈ°λ₯Ό ꡬννκΈ° μν΄ Object Detectionκ³Ό Person Re-Identification λͺ¨λΈμ μ¬μ©νμ΅λλ€. Object Detection λͺ¨λΈμ Deci-AIμμ κ°λ°ν super-gradientsμ YOLO-NAS-Lλ₯Ό μ¬μ©νμ΅λλ€. λν Person Re-Identification λͺ¨λΈμ λ λΉ λ₯Έ μΆλ‘ μλμ λ μμ λͺ¨λΈ ν¬κΈ°λ₯Ό 보μ₯νκΈ° μν΄ MobileNetV3λ₯Ό μ¬μ©νμ΅λλ€.
Β λ©νκ° λ§λ Faissλ μ¬λ¬ λ²‘ν° νν κ°μ μ μ¬μ±μ λΉ λ₯΄κ² κ²μν μ μλλ‘ ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬μ λλ€. μ΄λ₯Ό ν΅ν΄ μ΄λ€ μ μκ° μμ μκ³ κ³¨μ λ£μλμ§ νμ ν μ μκΈ° λλ¬Έμ ν΄λΉ νλ‘μ νΈμ κΌ νμν λꡬμ λλ€. μ²μμλ μ μ¬μ±μ μΈ‘μ νκΈ° μν΄ L2 (μ ν΄λ¦¬λ) 거리λ₯Ό μ¬μ©νμ¬ ν μ€νΈνμκ³ μ’μ κ²°κ³Όλ₯Ό μ»μμ΅λλ€. νμ§λ§ μΆκ° μ€νμ κ±°μ³μ Cosine Similarityλ₯Ό νμ©ν κ²μ΄ λ λμ κ²°κ³Όλ₯Ό λμΆνλ€λ κ²μ λ°κ²¬νμ΅λλ€. λ°λΌμ μ°λ¦¬λ μ΅μ’ μ μΈ Cosine Similarityλ₯Ό κ²μ λ°©λ²μΌλ‘ μ±ννκΈ°λ‘ κ²°μ νμμ΅λλ€
Β μλλ μ°λ¦¬ νλ‘μ νΈμ νλ¦μ λνλ΄λ λ€μ΄μ΄κ·Έλ¨μ λλ€. μ λ ₯ νλ μμ΄ μ£Όμ΄μ§λ©΄, Detection λͺ¨λΈμ ν΅ν΄ μ μ, 곡, 골λ, μ, 골 ν΄λμ€λ₯Ό κ°μ§ν©λλ€. μ΄ μ€ μ μ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μΆμΆνμ¬ Re-ID λͺ¨λΈμ μ λ ₯μΌλ‘ μ 곡ν©λλ€. μ΄μ΄μ Re-ID λͺ¨λΈμ κ°κ°μΈμ μ΄λ―Έμ§λ₯Ό λνλ΄λ μλ² λ© λ²‘ν°λ₯Ό μμ±ν©λλ€. ν΄λΉ 벑ν°λ€μ Faissμ μΆκ°λμ΄, κ° μλ² λ© λ²‘ν°μ ν΄λΉνλ μμ 5κ°μ IDλ₯Ό μ»μ μ μκ² λ©λλ€. μ΄λ κ² μ»μ΄μ§ κ²°κ³Όλ€μ λν΄ μ΅μ’ μ μΌλ‘ κ°μ₯ λμ μ λ’°λλ₯Ό κ°μ§ IDλ₯Ό νμ νκΈ° μν΄ hard votingμ νμ©ν©λλ€.
Models | Dataset1 | Input Dimensions | Epochs | Batch Size (Accumulate) | Optimizer | LR | Loss | Augmentations | F1val 0.5 |
mAPval 0.5 |
---|---|---|---|---|---|---|---|---|---|---|
YOLO NAS-L | D1 | (1920,1088) | 50 | 8 (64) |
AdamW | 0.00001 | PPYOLOE | Resize Normalize HorizontalFlip |
0.2811 | 0.6485 |
YOLO NAS-L | D2 | (1920,1088) | 215 | 8 (64) |
AdamW | 0.0001 | PPYOLOE | HSV Mosaic RandomAffine HorizontalFlip PaddedRescale Standardize |
0.8709 | 0.9407 |
Models | Dataset2 | Embedded Dimensions | Epochs | Batch Size | Optimizer | LR | Loss | Augmentations | mAPval |
---|---|---|---|---|---|---|---|---|---|
MobileNetV3 | R1 | 1000 | 100 | 64 | AdamW | 0.001 | TripletLoss | Resize Normalize HorizontalFlip |
0.9829 |
MobileVitV2 | R1 | 1000 | 100 | 64 | AdamW | 0.001 | TripletLoss | Resize Normalize HorizontalFlip |
0.9748 |
ConvNextV2-A | R1 | 1000 | 100 | 64 | AdamW | 0.001 | TripletLoss | Resize Normalize HorizontalFlip |
0.9721 |
SqueezeNet | R1 | 1000 | 100 | 64 | AdamW | 0.001 | TripletLoss | Resize Normalize HorizontalFlip |
0.9758 |
MobileNetV3 | R2 | 1000 | 100 | 64 | AdamW | 0.001 | TripletLoss | Resize Normalize HorizontalFlip |
0.8743 |
MobileNetV3 | R2 | 1000 | 100 | 64 | AdamW | 0.001 | QuadrupletLoss | Resize Normalize HorizontalFlip |
0.9782 |
SqueezeNetMod3 | R2 | 1000 | 500 | 64 | AdamW | 0.001 | QuadrupletLoss | Resize Normalize HorizontalFlip |
0.9857 |
MobileNetV3 | R2 | 1000 | 500 | 64 | AdamW | 0.001 | QuadrupletLoss | Resize Normalize HorizontalFlip |
0.9923 |
git clone https://github.com/boostcampaitech5/level3_cv_finalproject-cv-07.git
cd level3_cv_finalproject-cv-07
conda env create --name <env_name> -f env.yaml
Object Detection κ²½λ‘
Datasetμ λ€μκ³Ό κ°μ κ²½λ‘μ ꡬμ±ν΄ μ£ΌμΈμ:
- data νμΌλͺ
μ νμ΅μ μν₯μ λ―ΈμΉμ§ μμ΅λλ€. νμ§λ§ json νμΌλͺ
μ
train.json
κ³Όvalid.json
λ‘ μ€μ νμ¬μΌ ν©λλ€.
detection
βββ data
β βββ dataset
| | βββ train
| | | βββ <sample1>.jpg
| | | βββ <sample2>.jpg
| | | ...
| | | βββ <sample10>.jpg
| | βββ valid
| | | βββ <sample1>.jpg
| | | βββ <sample2>.jpg
| | | ...
| | | βββ <sample10>.jpg
| | βββ train.json
| | βββ valid.json
β βββ images
β βββ video
...
Person Re-Identifcation κ²½λ‘
Datasetμ λ€μκ³Ό κ°μ κ²½λ‘μ ꡬμ±ν΄ μ£ΌμΈμ:
- κ° λ°μ΄ν° νλͺ©λͺ
μ λ€μκ³Ό κ°μ νμμΌλ‘ ꡬμ±ν΄μΌ ν©λλ€ :
xxxxx_xx.jpg
orxxxxx_xx_xx.jpg
- ν΄λΉ νμμμ μ²μ 5κ°μ μ«μλ μ¬λμ ID λ²νΈλ₯Ό λνλ λλ€.
re_id
βββ data
β βββ custom_dataset
| βββ gallery
| | βββ <00001_01>.jpg
| | βββ <00001_02>.jpg
| | βββ <00002_01>.jpg
| | βββ <00002_02>.jpg
| | ...
| | βββ <00010_2>.jpg
| βββ query
| | βββ <00001_01>.jpg
| | βββ <00001_02>.jpg
| | βββ <00002_01>.jpg
| | βββ <00002_02>.jpg
| | ...
| | βββ <00010_2>.jpg
| βββ training
| βββ <00001_01>.jpg
| βββ <00001_02>.jpg
| βββ <00002_01>.jpg
| βββ <00002_02>.jpg
| ...
| βββ <00010_2>.jpg
...
Magic κ²½λ‘
μ΄κ³³μ μΆλ‘ ν λΉλμ€λ₯Ό μ μ₯ν΄ μ£ΌμΈμ.
datasets
βββ <video1>.mp4
βββ <video2>.mp4
...
cd detection/tools
python3 train.py --exp_name exp1 --input_dim (1920,1088) --epochs 100 --lr 0.0001 --batch_size 8 --optimizer AdamW --num_workers 4 --warmup_initial_lr 0.00001 --lr_warmup_epochs 5 --score_thr 0.8 --nms_thr 0.8 -- metric F1@0.50 --fp16 True
- --exp_name: μ€νλͺ
- --input_dim: input dimensions
- --epochs: epoch
- --lr: learning rate
- --batch_size: batch size
- --optimizer: optimizer
- --num_workers: dataloader num workers
- --warmup_initial_lr: warmup initial learning rate
- --lr_warmup_epochs: learning rate warmup epochs
- --score_thr: score threshold
- --nms_thr: non-max suppression threshold
- --metric: evaluation metric
- --fp16: mixed precision training
cd detection/tools
python3 inference.py --image True --video False --file_name image1.png --conf 0.25 --iou 0.35 --model_weight <your_exp_name>/<your_detection_weight>
image
λ video
λ λμμ True
λ‘ μ€μ ν μ μμ΅λλ€!
- --image: image μΆλ‘
- --video: video μΆλ‘
- --file_name: μΆλ‘ ν image λλ video νμΌ
- --conf: confidence threshold
- --iou: iou threshold
- --model_weight: model weight file
cd re_id/tools
python3 train.py --demo False --seed 1 --model mobilenetv3 --epoch 100 --train_batch 64 --valid_batch 256 --lr 0.001 --num_workers 8 --quadruplet True --scheduler False --fp16 False
- --demo:
True
DeepSportsRadar dataset μ¬μ© |False
Custom dataset μ¬μ© - --seed: seed number
- --model: model. μ¬μ© κ°λ₯ν λͺ¨λΈμ
model.py
μ μ°Έκ³ ν΄ μ£ΌμΈμ. - --epoch: epoch
- --train_batch: train batch size
- --valid_batch: valid batch size
- --lr: learning rate
- --num_workers: dataloader num workers
- --quadruplet:
True
quadruplet loss μ¬μ© |False
triplet loss μ¬μ© - --scheduler: lambda scheduler with 0.95**epoch
- --fp16: mixed precision training
cd re_id/tools
python3 inference.py --demo False --model mobilenetv3 --model_weight <your_reid_weight> --batch_size 256 --num_workers 8 --query_index 0
- --demo:
True
DeepSportsRadar dataset μ¬μ© |False
Custom dataset μ¬μ© - --model: model
- --model_weight: model weight file
- --batch size: test batch size
- --num worker: dataloader num worker
- --query_index: query index
python3 magic.py --detection_weight <exp_name>/<your_detection_weight> --reid_weight <your_reid_weight> --video_file <your_video_file> --reid_model mobilenetv3 --person_thr 0.5 --cosine_thr 0.5
- --detection_weight: detection model trained weight
- --reid_weight: re-id model trained weight
- --video_file: μΆλ‘ ν video νμΌ
- --reid_model: re-id model
- --person_thr: person confidence threshold
- --cosine_thr: cosine similarity threshold
κ³ κΈκ° | κΉλμ° | λ°μ€μΌ | μμ¬κ· | μ΅μ§μ± |
---|---|---|---|---|
Github | Github | Github | Github | Github |
twinkay@yonsei.ac.kr | dwkim8155@gmail.com | joonil2613@gmail.com | jaekyu.1998.bliz@gmail.com | guk9898@gmail.com |
Footnotes
-
D1, D2 Datasetμ μ ν¬μ Custom Datasetμ λλ€. D2μ D1λ³΄λ€ μ½ 3.1λ°° λ§μ λ°μ΄ν°λ₯Ό κ°μ§κ³ μμ΅λλ€. β©
-
R1, R2 Datasetμ μ ν¬μ Custom Datasetμ λλ€. R2κ° R1λ³΄λ€ μ‘°κΈ λ λ§μ λ°μ΄ν°μ idλ₯Ό κ°μ§κ³ μμ΅λλ€. β©
-
8λ°°μ μ±λ μμΆμ ν SqueezeNet + CBAM β©