---
# System prepended metadata

title: 'ST++: Make Self-training Work Better for Semi-supervised Semantic Segmentation'
tags: [semi-supervised, paper_note]

---

## ST++: Make Self-training Work Better for Semi-supervised Semantic Segmentation
CVPR 2022
Lihe Yang, Wei Zhuo, Lei Qi, Yinghuan Shi, Yang Gao
## Introduction
![image](https://hackmd.io/_uploads/HJdgHVHta.png)

近年來隨著Semi-supervised technique(SSL)的不斷發展，consistency regularization的方式逐漸受到重視，促使了日益複雜的模型結構，作者認為傳統的self-training經過改良後也可以適用於SSL的訓練過程中，不需依賴過於精細的輔助模組，可在semi-supervised semantic segmentation中達成不錯的成效。

## Contribution
- Self-training依靠使用labeled data預訓練後的模型生成偽標籤給予unlabeled data再次訓練，導致其有嚴重的overfitting情形，作者提出了一個基於Self-training的strong baseline(ST)，透過在unlabeled data注入Strong data augmentations(SDA)後有效的解決此問題。
- 由於每個unlabeled data品質不一可能使得錯誤預測造成模型效能下降，作者提出更進步的self-training framework(ST++)，從模型較容易預測及不易預測的觀點將unlabeled data分成兩部分進行訓練，且作者證明了在影像分割任務中基於image-level的挑選比基於pixel-level的挑選更為有效。
- 為了證明其有效性，作者在Pascal dataset和Cityscapes dataset兩種不同的公開資料集驗證了ST++的高效能，且相較於其他方法它只須更少的hyper-parameters。

## Plainest Self-training Scheme
1. Supervised Learning: 在![image](https://hackmd.io/_uploads/ryeI8VHtT.png)上藉由一般的cross-entropy loss訓練 teacher model![image](https://hackmd.io/_uploads/H1uYUNSF6.png)
2. Pseudo Labeling: 在訓練好的teacher模型取得![image](https://hackmd.io/_uploads/SyTgPNBtp.png)的one-hot hard pseudo labels![image](https://hackmd.io/_uploads/ryCzwVrKa.png)
3. Re-training: 用![image](https://hackmd.io/_uploads/S1TDw4rYp.png)對student model![image](https://hackmd.io/_uploads/H13HP4SFT.png)做再訓練，輸入都經由weak augmentation做一般的最小化entropy![image](https://hackmd.io/_uploads/ryUVu4BYp.png)
![image](https://hackmd.io/_uploads/HJh2D4SYT.png)




## ST: Inject SDA on Unlabeled Images
![image](https://hackmd.io/_uploads/SJ__dErKT.png)

與原先的self-learning不同處在於他會針對輸入來自unlabel data的照片再做一次strong augmentation，再與teacher生成的pseudo label做cross entropy。
![image](https://hackmd.io/_uploads/H1JMINBYT.png)

## ST++: Select and Prioritize Reliable Images
![image](https://hackmd.io/_uploads/rJpoFNrYp.png)

作者認為可以採用不同訓練階段的預測來計算pseudo label穩定度，越穩定可代表此為模型較容易預測的unlabel data，不須再透過額外的人工定義threshold來篩選可信賴的pseudo label，且使用image-level的資訊取代pixel-level過濾掉不可信的pseudo label，可讓模型更完整取得完整的label資訊。
![image](https://hackmd.io/_uploads/ByMAFNrKp.png)
存取teacher訓練時的k個階段，並將前面k-1的每次預測結果與第k次做mIOU計算，取得unlabel data裡每張圖穩定度的分數

整個流程為:
1. 利用label data預先訓練teacher模型並存取訓練過程中k個模型紀錄點
2. 對unlabel data的每張圖分別依照上述方式計算穩定度分數
3. 選擇前R個最高分數作為較容易預測的unlabel data![image](https://hackmd.io/_uploads/SJDyANBKa.png)並放入teacher模型取得對應的pseudo label，且將剩餘的unlabel data歸類為![image](https://hackmd.io/_uploads/Bk4Aa4SKp.png)

4. 利用剛分出的![image](https://hackmd.io/_uploads/SJDyANBKa.png)與原本的label data聯集後對student模型做ST re-training
5. 用再訓練完的student生成![image](https://hackmd.io/_uploads/Bk4Aa4SKp.png)的pseudo-label
6. 初始化student模型
7. 將所有資料聯集後對student模型做ST re-training


## Framework
![image](https://hackmd.io/_uploads/ByGKBEHYT.png)
