0
典型的度量學(xué)習(xí)論文會提出一個新的損失函數(shù)或訓(xùn)練過程,然后在一些數(shù)據(jù)集上顯示結(jié)果,如 CUB200、Stanford Cars 和 Stanford Online 產(chǎn)品。每隔幾個月,我們都會看到準(zhǔn)確度有所提高。
這真的是太好了,但有幾點要注意。
這里有一張隨機圖
有些論文對比對象不一致
為了說明一種新的算法優(yōu)于現(xiàn)有的方法,保持盡可能多的參數(shù)不變是很重要的。這樣,我們可以確定是新算法提高了性能,而不是一個無關(guān)的參數(shù)提高了性能。但是在基準(zhǔn)度量學(xué)習(xí)論文中并非如此:
1.網(wǎng)絡(luò)架構(gòu)并沒有保持不變。有些論文用 GoogleNet,而最近的許多論文都在使用 BN-Inception,有時被稱為 batch 標(biāo)準(zhǔn)化的開端「Inception with Batch Normalization」。2017 年一篇被廣泛引用的論文使用 ResNet50,然后聲稱獲得了巨大的性能提升。這是值得懷疑的,因為與之對比的方法使用的是 GoogleNet,這是一個不太強大的架構(gòu)。因此,大部分性能提升可能來自網(wǎng)絡(luò)架構(gòu)的選擇,而不是他們提出的方法。
2.圖像增強并沒有保持不變。大多數(shù)論文聲稱應(yīng)用以下變換:將圖像大小調(diào)整為 256 x 256,隨機裁剪為 227 x 227,并以 50% 的幾率進(jìn)行水平翻轉(zhuǎn)。但最近一些論文的官方開源實現(xiàn)表明,他們實際上使用的是 GoogleNet 論文中描述的更復(fù)雜的裁剪方法(見「訓(xùn)練方法」)。
3.性能提升技巧在論文中沒有提及。在最近一篇 2019 年論文的官方開源代碼中,主干模型的 BatchNorm 參數(shù)在訓(xùn)練期間被凍結(jié)。作者解釋說,這有助于減少過度擬合,讓 CUB200 數(shù)據(jù)集的性能提高 2 個點。但他們的論文中并沒有提到這一點。
在 ImageNet 上預(yù)先訓(xùn)練的模型的準(zhǔn)確性。使用 PCA 將輸出嵌入大小減少到 512。對于每個圖像,較小的邊被縮放到 256,然后中心裁剪到 227x227。
大多數(shù)論文使用的是簡單的訓(xùn)練/測試拆分
他們對一部分?jǐn)?shù)據(jù)進(jìn)行訓(xùn)練,找到在測試集上表現(xiàn)最好的模型,并報告這個數(shù)字。換句話說,它們不使用驗證集。因此,超參數(shù)被調(diào)整,整個算法都是由測試集的直接反饋創(chuàng)建的。這打破了 Machine Learning 101 的最基本規(guī)則。此外,同一個模型訓(xùn)練/測試分離的方法已使用多年。隨著時間的推移,這兩個因素可能會導(dǎo)致測試集的過度擬合。
所以讓我們正確地對這些算法進(jìn)行基準(zhǔn)測試
這就是強大的基準(zhǔn)測試被用到的地方。
為什么要用這個工具?
透明性。你運行的每個實驗都附帶了詳細(xì)的配置文件,這些文件精確地顯示了使用了哪些模型、損失、轉(zhuǎn)換等等。所以現(xiàn)在我們可以公平地比較各種方法的優(yōu)缺點。
更好的性能衡量指標(biāo)。使用比回憶更具信息性的指標(biāo)。
用正確的方法測量精度。在多個基于類的訓(xùn)練/val/測試分段上測量精度?;蛘吣憧梢允褂门f的 50/50 訓(xùn)練/測試拆分進(jìn)行比較。
保存詳細(xì)的記錄。在 Tensorboard 上查看有關(guān)訓(xùn)練過程的深入信息。
配置文件的靈活性。通過配置文件控制實驗的大部分標(biāo)準(zhǔn)。通過合并現(xiàn)有的配置文件來擴展現(xiàn)有配置文件。下面是如何指定模型的示例:
models:
trunk:
bninception:
pretrained: imagenet
embedder:
MLP:
layer_sizes:
- 512
下面是如何合并 3 個配置文件的方法:
python run.py \
--experiment_name test \
--config_general default daml train_with_classifier
加大命令行的靈活性。使用標(biāo)準(zhǔn) Python 字典表示法指定復(fù)雜配置選項:
python run.py \
--experiment_name test \
--optimizers {metric_loss_optimizer: {SGD: {lr: 0.01}}}
更多詳情,請查看相關(guān) github 項目:https://github.com/KevinMusgrave/powerful_benchmarker#override-config-options-at-the-command-line
算法的靈活性。混合匹配損失、函數(shù)、采樣器和訓(xùn)練方法。要使用硬批處理的多相似性損失?沒問題:
loss_funcs:
metric_loss:
MultiSimilarityLoss:
alpha: 0.1
beta: 40
base: 0.5
mining_funcs:
post_gradient_miner:
BatchHardMiner: {}
訪問 torchvision 和 pretrainedmodels 包中的所有模型。在配置模型文件中,只需指定出現(xiàn)在 torchvision 或 pretrainedmodels 中的函數(shù)名。
獲取 torch.nn 和 pytorch_metric_learning 中的所有損失。在 config_loss_and_miners 文件中,只需指定出現(xiàn)在 torch.nn 或 pytorch_metric_learning 中的類名。
它真的有用嗎?
下表是在 CVPR 2019 和 ICCV2019 上發(fā)表的一系列度量學(xué)習(xí)論文的結(jié)果。每種顏色代表不同的模型和嵌入大小配置。由于沒有標(biāo)準(zhǔn)的實驗方法,很難比較各種算法的性能。這阻礙了研究進(jìn)展,因為我們不知道哪種方法最有效。因此,重要的是要有一個基準(zhǔn)工具,使我們能夠做公平的比較。
綠色:BN-Inception,512;藍(lán)色:Blue: Resnet50, 128;黃色:Resnet50, 512;紅色:GoogleNet, 512。前 8 行的數(shù)字來自各自的論文。
要查看這些實驗和其他實驗的配置文件,請參閱此電子表格,我將隨時間添加到其中:https://docs.google.com/spreadsheets/d/1kiJ5rKmneQvnYKpVO9vBFdMDNx-yLcXV2wbDXlb-SB8/edit?usp=sharing
表格的底部是使用基準(zhǔn)測試工具獲得的結(jié)果。 triplet loss 和 contrastive loss 都接近最新水平。然而,這兩種方法常常被排除在結(jié)果表之外,或者被認(rèn)為是性能最差的方法之一。強大的基準(zhǔn)測試程序使檢查這些基準(zhǔn)算法變得容易。
寫在最后
你對這個工具的看法和度量學(xué)習(xí)的現(xiàn)狀怎么看?如果你有任何問題或想添加某些功能,請訪問 GitHub repos 以了解強大的 powerful_benchmarker 和 pytorch_metric_learning 。
via:https://medium.com/@tkm45/benchmarking-metric-learning-algorithms-the-right-way-90c073a83968
雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。