Python影像辨識筆記(二十八):BalancedMetaSoftmax — Instance Segmentation

注意事項

在imbalanced dataset訓練且在imbalanced dataset進行Testing的時候,Balance softmax表現可能會不如一般的Softmax

開發環境安裝

# PyTorch 1.6版本(CUDA 9.2版)

取得 dataset

Note: LVIS uses the COCO 2017 train, validation, and test image sets. If you have already downloaded the COCO images, you only need to download the LVIS annotations. LVIS val set contains images from COCO 2017 train in addition to the COCO 2017 val split.

lvis是採用coco2017作為其dataset;lvis作為annotation

根據Expected dataset structure for LVIS instance segmentation,我們必須要有以下結構的dataset分布。若要使用預設值路徑,請將coco和lvis資料夾都放在balancedmetasoftmax-instanceseg/datasets/裡面。

coco/
{train,val,test}2017/
lvis/
lvis_v0.5_{train,val}.json
lvis_v0.5_image_info_test.json
lvis_v1_{train,val}.json
lvis_v1_image_info_test{,_challenge}.json
# 下載coco dataset
wget https://raw.githubusercontent.com/ultralytics/yolov3/master/data/scripts/get_coco.sh

下載 pre-trained weight並進行訓練

作者提供的程式碼可能有一些BUG存在,在進行訓練的時候,我遇到了Checkpoint not found的錯誤,Detectron2找不到Detectron Model Zoo提供的pre-trained weight去進行訓練。

閱讀 Source Code之後發現可以透過:

  1. 下載weight到指定目錄(請自行建立pretrains資料夾)

(如BalancedMetaSoftmax-InstanceSeg/pretrains/)

wget https://dl.fbaipublicfiles.com/detectron/ImageNetPretrained/MSRA/R-50.pkl

2.開啟defaults.py檔案的第314行,發現問題的癥結點:

#修改BalancedMetaSoftmax-InstanceSeg/detectron2/engine/defaults.py

3. 進行訓練

# Baseline 訓練
python ./projects/BALMS/train_net.py --num-gpus 4 --config-file ./projects/BALMS/configs/feature/sigmoid_resampling_mask_rcnn_R_50_FPN_1x.yaml MODEL.WEIGHTS ./pretrains/R-50.pkl
使用TESLA V100 GPU的訓練結果

應用場合:BALMS vs. Softmax

Train和val set都是Imblanced;Test是Balanced用BALMS

Train和val set都是Imblanced;Test也是Imblanced用Softmax

如何將Balanced Softmax加到自己的深度學習程式當中?

  1. 新增BalancedSoftmaxLoss.py,其中freq_path指向一個json檔案,裡面包含了Training set中每個class的各別樣本數量。
    ( 可用pandas的df[‘class’].value_counts()進行計算)

例如有6個class:

[551463, 246249, 12372, 11586, 10298, 6474]

2. 在自己原有的訓練程式當中,修改loss function

# 例如原本使用nn.CrossEntropyLoss(),將其註解

3. 接下來就依照正常的訓練進行即可

Machine Learning | Deep Learning | https://linktr.ee/yanwei

Machine Learning | Deep Learning | https://linktr.ee/yanwei