## 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)