Skip to content

b06b01073/dcslab-ai-cup2024

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Readme

Static Badge

Rules of conduct

Read this page first before you start working on this project.

簡介

該repo實現了單鏡頭多物體追蹤,接收監視器的每一幀作為輸入,並輸出每幀畫面中每個物體的邊界框座標和 ID。輸出格式遵循 AI-CUP 數據集的結構。

可以透過track_evaluation.sh進行fine-tune.

環境建立

如果是使用linux環境,輸入以下指令即可:

conda env create -f environment.yml

環境建立完成後:

conda activate aicup2024

single camera tracking 用法

  1. git clone
git clone https://github.com/b06b01073/dcslab-ai-cup2024.git
  1. 準備資料集,目錄結構如下:
LABEL
└── 0902_150000_151900
    ├── 0_00001.TXT
    ├── 0_00002.TXT
    ├── 0_00003.TXT
    ├── 0_00004.TXT
    ├── 0_00005.TXT
    ├── 0_00006.TXT
    ├── 0_00007.TXT
    ├── 0_00008.TXT
    ├── 0_00009.TXT
    └── 0_00010.TXT
    └── ...
IMAGE
└── 0902_150000_151900
    ├── 0_00001.jpg
    ├── 0_00002.jpg
    ├── 0_00003.jpg
    ├── 0_00004.jpg
    ├── 0_00005.jpg
    ├── 0_00006.jpg
    ├── 0_00007.jpg
    ├── 0_00008.jpg
    ├── 0_00009.jpg
    └── 0_00010.jpg
    └── ...
  1. 執行 main.py
python main.py -f IMAGE/0902_150000_151900/ -l LABEL/0902_150000_151900/ --out aicup_ts/labels/0902_150000_151900 --cam 0 --model swin_reid
  • --frame_dir:輸入畫面的目錄。
  • --label_dir:輸入標籤的目錄。
  • --model:用於特徵提取的模型的名稱(默認為 'resnet101_ibn_a')。
  • --out:保存輸出的目錄。
  • --width:裁剪圖片的寬度(默認為 224)。
  • --buffer_size:儲存過去的frame的buffer的大小。
  • --threshold:threshold for tracking objects。
  • --lambda_value:用於re-ranking的 Lambda 值。
  • --re_rank : 是否要使用re-rank。
  • --visualize : 是否要輸出影片
  • --cam : 指定要追蹤的camera編號
  • --finetune : 指定是否為fine-tune模式

輸出會儲存在指定的目錄裡,目錄結構如下所示:

aicup_test/labels/0902_150000_151900
├── 0
│   ├── 0_00001.txt
│   ├── 0_00002.txt
│   ├── 0_00003.txt
|   └── 0_00004.TXT
|   └── ...
├── 1
├── 2
├── 3
├── 4
├── 5
├── 6
└── 7

evaluate.py 使用方法

  1. 使用parseAicup.py將aicup ground truth的label根據cam編號分成8個資料夾
python parseAicup.py -s aicup_gt/labels/0902_150000_151900 -l LABEL/0902_150000_151900/
  1. 將ground truth的label和預測的label轉換成MOT15格式
python tools/datasets/AICUP_to_MOT15.py --AICUP_dir aicup_gt/labels/0902_150000_151900 --MOT15_dir MOT15/aicup_gt/0902_150000_151900
python tools/datasets/AICUP_to_MOT15.py --AICUP_dir aicup_ts/labels/0902_150000_151900 --MOT15_dir MOT15/aicup_ts/0902_150000_151900
* --AICUP_dir : 要被轉換的label的目錄
* --MOT15_dir : 保存轉換後label的目錄
  1. 評估結果
python tools/evaluate.py --gt_dir MOT15/aicup_gt/0902_150000_151900 --ts_dir MOT15/aicup_ts/0902_150000_151900 --mode single_cam --cam 0
* --gt_dir : MOT15格式的ground truth的目錄
* --ts_dir : MOT15格式的預測的label的目錄
* --mode : 設定使用multi camera模式還是single camera來評價結果
* --cam : 指定評價哪一個camera(只有在single cam模式下有用)

評估結果會儲存在ts_result目錄下:

ts_result
└── 0902_150000_151900
    └── 0.txt

fine-tune參數使用方法

若要評估單一模型執行track_evaluation.sh,track_evaluation.sh會遍歷所有模型所有日期以及相機

./track_evaluation.sh -p threshold -s 50 -e 60 -t 1 -d m

若要評估集成模型執行track_evaluation._ensemble.sh,

./track_evaluation.sh -p threshold -s 50 -e 60 -t 1 -d m
  • -p : 指定fine-tune的參數,[buffer_size, threshold]
  • -s 、 -e 、-t : 設置參數的區間,-s代表參數開始的值,-e代表參數結束的值,-t代表步長,因為shell script無法運算浮點數, 因此在輸入參數時需要將值都乘以100,例如threshold的區間為0.5至0.6,步長為0.01,則須輸入-s 50 -e 60 -t 1。
  • -d : 設定使用早上還是晚上的資料集,m代表使用早上的資料集,n代表使用晚上的資料集

若為單一模型則評分結果會儲存在ts_result目錄下以cam編號為名字的目錄裡面的文字檔,檔名為fine-tune的參數,如下所示:

ts_result
└── 7
    └── buffer_size.txt

文字檔裡的內容為各參數值在不同天同一個cam的平均分數:

buffer_size 1.0, AVE IDF1 : 0.8576504865060863, AVE MOTA : 0.9541107325987048
buffer_size 2.0, AVE IDF1 : 0.9355950572352348, AVE MOTA : 0.9698999148566754

Multi-Camera tracking 用法

  1. 執行 main.py
python multi_match.py --date 0920_150000_151900 --model swin_reid --mode min --finetune True -t 40 -f ../32_33_AI_CUP_testdataset/AI_CUP_testdata/images/0920_150000_151900 -l RE_RESULT/labels/0920_150000_151900 --out MULTI_MATCH_RESULT
  • --frame_dir、-f:輸入畫面的目錄。
  • --label_dir、-l:single camera tracking輸出的結果的目錄。
  • --model:用於特徵提取的模型的名稱(默認為 'resnet101_ibn_a')。
  • --out:保存輸出的目錄。
  • --width:裁剪圖片的寬度(默認為 224)。
  • --threshold:相似度閥值。
  • --date : 輸入畫面的拍攝日期
  • --finetune : 指定是否為fine-tune模式
  • --mode : 相似度計算的方式,{min, max, ave_v1, ave_v2}
    • $min$ $d(C_i, C_j)$ : $\mathop{\min}_{a \in C_i, b \in C_j} d(a,b)$

    • $max$ $d(C_i, C_j)$ : $\mathop{\max}_{a \in C_i, b \in C_j} d(a,b)$

    • $ave_{v1}$ $d(C_i,C_j)$ : $\sum_{a \in C_i,b \in C_j} \frac{d(a,b)}{|C_i||C_j|}$

    • $ave_v2$ $d(C_i,C_j)$ : $d(\frac{\sum_{a \in C_i}a}{|C_i|}, \frac{\sum_{b \in C_j}b}{|C_j|})$

    • $d(a,b)$是Cosine Similarity

評估Multi-Camera Tracking的結果

  1. 將ground truth的label和Multi-Camera Tracking的結果轉換成MOT15格式
python tools/datasets/AICUP_to_MOT15.py --AICUP_dir LABEL/labels/0902_150000_151900 --MOT15_dir MOT15/multi_cam_gt
python tools/datasets/AICUP_to_MOT15.py --AICUP_dir MULTI_MATCH_RESULT/labels/swin_reid_min_40/0902_150000_151900 --MOT15_dir MOT15/MULTI_MATCH_RESULT/
  1. 執行evaluate.py
python tools/evaluate.py --gt_dir MOT15/multi_cam_gt/ --ts_dir MOT15/MULTI_MATCH_RESULT/swin_reid_min_40

Multi-Camera Tracking Result

ave_v1 ave_v2 min max
IDF1 80.7 63.5 96.2 57.1
MOTA 98.1 96.4 99.7 96.4

fine-tuned models

# options: [resnet101_ibn_a, se_resnet101_ibn_a, densenet169_ibn_a, swin_reid, resnext101_ibn_a]
net = torch.hub.load('b06b01073/dcslab-ai-cup2024', 'resnet101_ibn_a') # you can also set use_test=True if you want to use the model trained with training + testing set

eu_embedding, cos_embedding, _ = net(processed_img) # processed_img.shape: (b, c, h, w)

# The rest is the same as the code example from veri776-pretrain repo

About fine-tuning and pre-training

關於 fine-tuning 以及 pre-training 相關的程式碼以及說明分別被放在 contest-finetune 以及 veri776-pretrained 資料夾底下

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •