[논문분석] Learning Pixel-level Semantic Affinity with Image-level Supervision for Weakly Supervised Semantic Segmentation (CVPR 2018)
논문링크 .
한줄요약 ✔
- 기존 WSSS는 CAM으로 GT를 생성하는데, CAM이 생성한 feature map은 local discriminative parts만을 강조하여 전체 이미지에 대해 robust한 map을 생성하지 못한다.
- AffinityNet은 CAM으로 얻은 이러한 local activation을 인접 픽셀들로 propagate하여 보다 potent한 semantic entity를 추출한다.
- AffinityNet은 오로지 image-level supervision을 따르며, 추가적인 annotations은 필요없다.
Preliminaries 🍱
CRF
- CNN 기반 모델보다 더 detail하게 segmentation 특징 추출이 가능하다.
- CNN으로 얻은 feature map에 표현된 객체별 segmentation의 가장자리를 보다 다듬기 위해 사용.
- 상기 이미지에서 CRF 출력은 details도 잘 잡아내는 모습이며, CNN 결과와 CRF 결과 간의
KL-Divergence
을 Loss func.에 포함하여 semantic entity의 가장자리를 post-processing한다.
- 상기 이미지에서 CRF 출력은 details도 잘 잡아내는 모습이며, CNN 결과와 CRF 결과 간의
보다 자세한 공식 설명은 본 글에서는 각설한다.
CAM
- CNN의 최종 layer 출력인 feature map에 channel-wise 계산법인 GAP를 적용하여 feature map의 spatial info.를 유지 (기존 CAM에서는 1차원 배열로 point-wise하게 flatten시킨 후 fc-layer의 인풋으로 활용한다).
- 각 채널은 이미지에서 각 객체의 특징을 표현한다 (채널 개수=커널 개수).
- 이후, FC-layer에서 각 특징을 담고있는 feature map의 평균값을 인풋으로 받고, 각 인풋의 각 class에 대한 민감도를 softmax를 거쳐 weights로 표현한다.
Equation
\(Y^c=\Sigma_k w^c_k {1 \over Z} \Sigma_{i,j} A^k_{i,j}\)
- \(Y^c\): class \(c\)에 대한 score (모델 예측 logit/output).
- \({1 \over Z} \Sigma_{i,j} A^k_{i,j}\): feature map \(k\)의 GAP 값.
- \(Z\): feature map \(k\)에서 pixel 개수.
- \(w^c_k\): feature map \(k\)의 class \(\)c\(\)에 대한 민감도.
- \(A^k_{i,j}\): feature map \(k\)의 \(\)i,j\(\)에 해당하는 pixel 값.
Challenges and Main Idea💣
C1) CAM이 생성한 feature map은 local discriminative parts만을 강조한다 .
Idea) CAM의 local activation을 인접 픽셀들로 propagate하여 보다 potent한 semantic entity를 추출 .
Problem Definition ❤️
Given a model \(\mathcal{T}\).
Return a model \(\mathcal{S}\).
Such that \(\mathcal{S}\) outweighs the segmentation performance of \(\mathcal{T}\).
Proposed Method 🧿
Model Architecture
- CAM
- object area 강조하는 feature map \(\mathcal{F}\) 추출.
- AffinityNet
- entire image area에 대하여 segmentation을 반영하기 위해, \(\mathcal{F}\) 에서 표현된 class별 픽셀 semantic 정보를 nearby area로 적절히 propagate하여 CAM의 quality를 높인다.
- DNN (Seg Net)
- 앞서 추출한 segmentation label을 기반으로 segmentation을 수행하는 network.
AffinityNet
\(W_{ij}=exp^{- \Vert f^{aff}(x_i,y_i)-f^{aff}(x_j,y_j) \Vert_1}\) .
- \(f^{aff}\): feature map에서 \(x_i, y_i\) 위치에 놓인 픽셀의 affinity score.
- 상기 이미지의 학습 가능한 network를 통해 계산된다.
- 해당 network를 학습시키기 위해 semantic affinity label이 필요하다.
- 상기 이미지의 학습 가능한 network를 통해 계산된다.
- \(W_{ij}\): 서로 다른 픽셀들 간의 affinity score 차이 (= 연관성 정도).
Semantic affinity label
- CAM으로 background를 표현하는 feature maps \(M_c\)와 \(M_{bg}(x,y)\) 추출.
- \(M_{bg}(x,y)=\{1-max_{c \in C} M_c(x,y)\}^{\alpha}\); where \(M_c(x,y)=\bf{w}^T_c f^{cam}(x,y)\) .
- \(x,y\): 픽셀 위치.
- \(C\): class.
- \(f^{cam}\): a feature vector before GAP.
- \(\bf{w}_c\): classification weights.
- \(\alpha\): background score 활성화 정도 조절.
- \(M_c\): GAP 이후 얻은 CAM 출력.
- \(M_{bg}(x,y)=\{1-max_{c \in C} M_c(x,y)\}^{\alpha}\); where \(M_c(x,y)=\bf{w}^T_c f^{cam}(x,y)\) .
- Object confident area 획득 과정:
- \(\alpha\)를 감소시키면 \(M_{bg}\)가 증가되어 background score가 강조되어 feature map \((c)\)를 얻는다.
- \(M_c\) 에 dense CRF (dCRF)를 적용하여 나온 feature map \((b)\) 에서 객체별로 가장 높은 class 점수를 달성한 class label이 부여되어 semantic entities가 표현된다.
- Confident background area 획득 과정:
- 앞서 구한 \((b)\) 와 \((c)\) 를 비교하여 확실히 background인 영역을 선별한다.
- 그 외 나머지는 중립 영역으로 labeling.
- Semantic affinity label 획득.
Loss Function
\(\mathcal{L}=\mathcal{L}^+_{fg}+\mathcal{L}^+_{bg}+2\mathcal{L}^-\)
- \(\mathcal{L}^+_{fg}=-\frac{1}{\mathcal{P}^+_{fg}} \Sigma_{(i,j) \in \mathcal{P}^+_{fg}} log W_{ij}\).
- \(\mathcal{L}^+_{bg}=-\frac{1}{\mathcal{P}^+_{bg}} \Sigma_{(i,j) \in \mathcal{P}^+_{bg}} log W_{ij}\).
- \(\mathcal{L}^-=-\frac{1}{\mathcal{P}^-} \Sigma_{(i,j) \in \mathcal{P}^-} log (1-W_{ij})\).
또한, 전체 손실 함수를 구성하는 \(\mathcal{P}\) 는 다음과 같이 정의한다.
\(\mathcal{P}=\{ (i,j) \vert d((x_i,y_i),(x_j,y_j)) < \gamma, \forall i \neq j \}\)
- \(\mathcal{P}^+=\{ (i,j) \vert (i,j) \in \mathcal{P}, W^*_{ij}=1\).
- \(W^*_{ij}=1\): \((i,i)\) 과 \((j,j)\) 위치의 픽셀이 같은 label일 경우.
- \(\mathcal{P}^-=\{ (i,j) \vert (i,j) \in \mathcal{P}, W^*_{ij}=0\).
CAM with AffinityNet
\(vec(M^*_c)=T^t \cdot vec(M_c)\)
- \(t\): number of iterations.
- \(T=D^{-1} W^{\circ \beta}\): Transition matrix.
- \(D_{ii}=\Sigma_j W^{\beta}_{ij}\).
- \(W^{\circ \beta}\): hadamard power.
- \(\beta >1\): 중요하지 않은 affinity 값을 무시하도록 해준다.
Experiment 👀
- \((c)\)에서 소파 객체의 가장자리는 non-discriminative 하기 때문에 CAM이 segmentation을 제대로 수행하지 못한 모습이다. 하나 \((d)\)에서 AffinityNet을 통해 소파의 가장자리까지 적절히 propagate하여 semantic entities를 생성한 모습이다.
그 외 다른 실험 결과들은 PASCAL Voc 2012에서 SOTA를 달성했다는 자료들이니 자세한 설명은 각설한다.
Open Reivew 💗
NA
Discussion 🍟
NA
Major Takeaways 😃
NA
Conclusion ✨
NA
Reference
https://velog.io/@kowoonho/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Learning-Pixel-level-Semantic-Affinity-with-Image-level-Supervision-for-Weakly-Supervised-Semantic-Segmentation
댓글남기기