《learn to count everything》論文閱讀、實驗記錄

七龙猪發表於2024-05-01

《learn to count everything》論文閱讀

模式識別這門課最後選了這篇論文匯報,記錄一下吧。

參考資料:

【論文解讀】CVPR2021 | FamNet:密集場景計數統計實戰 Learning To Count Everything(影像處理|計算機視覺|人工智慧)_嗶哩嗶哩_bilibili

CVPR 2021 | FamNet | Learning To Count Everything - 知乎 (zhihu.com)

image-20240501231246362

本篇論文完成了小樣本新類別密集計數任務,給出少量的樣本標籤即可,是一種半監督的任務。Few-Shot:只給出少量的標籤,讓模型自己學習,讓模型的通用性更強。在本文中,few-shot實現的是:輸入為一張影像以及一些標註資訊,這些標註資訊是少量的目標物體樣例,使用方框標註。輸出是一張“密度圖”,預測和原圖同位置的地方是否有目標。最後對密度圖做一個求和操作。

1.本文創新點:

  1. 將計數看成是few-shot迴歸任務。
  2. 構建了一種新的網路結構FamNet 少樣本適應和匹配性網路。
  3. 在測試時採用了一種新的自適應方案,進一步提高了FamNet的效能。
  4. 提供了一個新的資料集Few-Shot Counting-147(FSC-147)。

image-20240501231521962

2.主要結構

image-20240501231653334

  1. Feature Extraction Module:特徵提取模組。使用ImageNet預訓練的網路進行特徵提取。多由預先訓練好的ResNet-50骨幹網的前四個塊組成(這些塊的引數在訓練期間被凍結),透過第三和第四塊的卷積特徵圖來表示一幅影像。
  2. ROI Pool :只針對關注區域的特徵找到特徵圖。把樣例的特徵圖做上取樣或者下采樣,然後進行拼接。
  3. Feature Correlation Layer:特徵相關層。為了使密度預測模組對視覺類別不可知,不直接使用從特徵提取模組獲得的特徵進行密度預測。只使用不同scale的樣例特徵和整個影像特徵之間的相關性獲得相關圖,作為密度預測模組的輸入。
  4. Density Prediction Module:密度預測模組。由五個卷積塊和放置在第一、第二和第三卷積層之後的三個上取樣層組成。最後一層是 1×1 卷積層預測 2D 密度圖。

3.訓練(訓練集下載見github地址,不大)

FSC-147。由6135張影像組成,涉及147個物件類別。資料集中的物件的大小和計數差異很大,7-3731個物件,平均每幅影像的計數為56個物件。

image-20240418221759026

為了生成目標密度圖,使用具有自適應視窗大小的高斯平滑法。首先,使用點註釋來估計物體的大小。點註釋圖每個點都位於物體的近似中心,計算每個點與其最近的鄰居的距離,對影像中所有的點進行平均,平均距離被用作生成目標密度圖的高斯視窗的大小。高斯的標準偏差被設定為視窗大小的四分之一。為了訓練FamNet,將預測的密度圖和GT密度圖之間的平均平方誤差降到最低。使用Adam最佳化器,學習率為1e-5,批次大小為1。每張圖片的大小調整為固定的384高度,寬度也相應調整保持原始縱橫比。

4.測試適應

引數微調:在測試時要先“熱身,使網路更適應於當前的目標類別,要做某一個類別,先做100次迭代,更新引數。同時,在測試時選擇了兩個在訓練的時候沒有的損失函式。其關鍵思想是利用範例邊界框的位置所提供的資訊。

第一個是Min-count Loss,要求在密度圖的原圖樣例位置,方框內密度值求和至少大於等於1,否則損失就很大。

image-20240501231958490

第二個是Perturbation Loss,將方框的中心視作密度值為1,周圍的密度值呈高斯分佈,離中心位置越遠密度值越小。損失函式定義為預測值與中心點的距離(或者說預測密度值與所在位置的實際密度值之差)的平方和。

image-20240501232043129

The combined adaptation Loss.用於測試時間自適應的損失是MinCount損失和擾動損失的加權組合。

image-20240501232108538

5.有無自適應的測試效果

1.預測的密度圖和FamNet的計數。

image-20240501232204773

2.測試時自適應。顯示的是初始密度圖(Pre Adapt)和適應後的最終密度圖(Post Adapt)。在過度計數的情況下,適應性降低了密集位置的密度值。

image-20240501232212011

6.實驗結果

度量標準:均值絕對誤差MAE、均方誤差RMSE

image-20240501232245172

image-20240501232342226

1.與其他少樣本方法的比較

image-20240501232625711

2.相比於目標檢測的方法

image-20240501232637860

3.消融實驗

image-20240501232658090

image-20240501232703896

4.特定類別的目標計數

image-20240501232719467

實驗過程及結果

1.demo測試:

image-20240417170921528

原圖應該共有36個橘子,無適應測試結果是29.15,有適應的結果是30.05,略有改善。

orange

image-20240423022344126

image-20240501232908425

換example box再測試:

特地挑了幾個有樹葉阻擋的橘子作為example box,結果有所改觀。

無適應的結果32.83.

image-20240423022025443

有適應的結果33.86.

image-20240423022204435

換了一張更密集的羊群圖片來測試,誤差會更明顯。

原圖:羊的數量為110左右。

sheep

image-20240501233259616

無適應47.16 -> 有適應104.39

image-20240423023311195

在不適應的情況下對測試集進行testimage-20240417191610766

適應的情況下對 val 拆分進行test

官方模型的test

image-20240423000244621

我自己訓練的152輪得到model,然後進行testimage-20240423000337218

image-20240423000418865

可以看到結果還是差一點。

起初執行train.py的沒看清epoch的default為1500,然後跑了12小時發現才150+輪,算了算實驗室的四核GPU得跑五天五夜不止,於是就沒跑完,效果還是次了一點。

相關文章