Skip to content

Latest commit

 

History

History
209 lines (184 loc) · 8.99 KB

Readme.md

File metadata and controls

209 lines (184 loc) · 8.99 KB

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 資料夾底下