[모델 구현]_Rethinking CAM & weakly supervised object localization

코넬·2023년 7월 30일
0

Modeling_Pytorch

목록 보기
1/1
post-thumbnail

Rethinking CAM & weakly supervised object localization

논문 리뷰 파트에서 리뷰하였던 Rethinking CAM을 활용하여 기존의 CAM을 Grad-CAM 과 Grad-CAM++ 로 변형하여 모델을 구축하는 과정을 진행하였습니다.

논문 코드 구현 Github 링크

각 CAM 종류들이 성능이 논문만큼 나왔는지 확인하고, 기존에 존재하지 않았던 Grad-CAM++을 활용하면 성능이 어느정도 나오는지 확인해보아요 !

Grad-CAM & weakly supervised object localization

WSOL 에 변형된 rethinkingCAM이 아닌 기존에 구현되어있던 Grad-CAM 을 활용해서 모델을 변형해보았습니다.

마지막에서 두번째 layer을 target layer 로 두었을 때 Top-1 Loc 을 확인해보겠습니다.

기존 grad-CAM 논문에서 따로 실행한 Weakly supervised localization 에서 Top-1 Loc을 보면 100-56.51= 43.49 정도를 확인할 수 있는데,

구현해본 결과 Top-1 Loc은 42.51 정도, Top-1 Cls 는 77.91 을 확인할 수 있었습니다.


데이터셋 종류가 논문에서는 ILSVRC-15 이며, 제가 진행한 데이터셋은 CUB200-2011 이였으므로 이부분에서 차이가 발생하였다고 판단하였습니다.

Grad-CAM++ & weakly supervised object localization

이번에는 WSOL 에서 Grad-CAM++을 활용하여 진행해보았습니다.

Grad-CAM 과 Grad-CAM++ 의 경우, 논문에서 제시한 CAM 모델들 을 활용하여 진행하였습니다.

구현해본 결과 Top-1 Cls 의 경우에는 77.91, Top-1 Loc은 57.34 정도로 매우 잘 나오는 것을 확인할 수 있네요 !

Another backbone : ResNet-50

이번에는 Vgg16 모델이 아닌 ResNet-50 모델로 학습을 진행시키고, eval 까지 진행해보는 과정을 거쳐보았습니다.

  • 여기서 보아야할 점은 ResNet50 과 본 코드의 WSOL 에 ResNet을 붙인 경우, Top-1 Cls 가 62.51, 75.03 이라는 점입니다.

  • 여기서 보아야할 차이점은, 여기서 고안한 CAM + Backbone 모델은 Vgg16 만 주요로 다뤘으며, ResNet50-SE의 경우에는 기존 base CAM 인 Vanilia CAM 과 구축한 WSOL 모델을 합친 경우만 표로 나타나 있습니다.

돌린 코드의 결과를 확인해보겠습니다. Top-1 Cls 의 경우 본 논문과 비슷하게 79.12로 나오는 것을 확인할 수 있으나, Top-1 Loc 를 확인해보면 38.73이라는 결과를 볼 수 있습니다. 상당히 낮은 수치인데요, 논문에서 ResNet50과 수정된 CAM을 합친 경우가 존재하지 않아서 명확한 비교군이 없습니다.

논문에서 Vgg16 과 수정한 CAM을 합친 경우로 비교해서 보면, Cls 는 당연히 ResNet을 사용하였기 때문에 성능이 올라갔지만 Loc 의 경우에는 현저히 떨어지는 모습을 확인할 수 있으며, 이전에 실험했었던 Vgg16 + Gradcam++ 의 57.34보다 확실히 떨어지는 모습을 확인할 수 있습니다. 논문에서 이와 같은 결과때문에 나머지 비교군과의 실험을 안넣지 않았을까,, 라는 생각이 들었습니다.

Grad-CAM++ Visualization



성능이 좋지 않은 이유?

기존 ResNet50-SE 코드에 RethinkingCAM을 연결해보았습니다.(No pretrained)

ResNet50 코드에 RethinkingCAM 을 연결하였습니다. (pretrained)

기존 vgg16 에 Rethinkingcam은? (no-pretrained 시)

결과가 상당히 좋지 않게 나왔습니다..

기존 vgg16 + rethinkingcam (pretrained 시) 은

논문 수치랑 똑~같게 나왔다. (근데 왜 pretrained 해야한다고 말 안해줬어..)

이렇게 비교를 진행한 후,

  • pretrained 된 모델을 사용해야할 것
  • resnet50 의 구조에는 문제가 없음

을 확인한 후에, resnet50 pretrained 된 것으로 학습 시킨 후 grad-cam++ 를 돌려보았습니다.

egin_smooth를 추가해보았습니다.

egin_smooth + aug_smooth 를 추가해보았습니다.

43.80 으로 현재까지 가장 잘 나오는 모습을 확인할수있습니다.

아래가 grad-cam 입니다.

egin_smooth를 추가해보았습니다. 성능이 확실히 올라오네요 !

egin_smooth + aug_smooth 를 추가해보았습니다.

43.94 로 grad-cam 인데도 불구하고 제일 좋게 나오네요,,

loc 이 더 안나오네요,,

Score-CAM + ResNet50

ScoreCAM을 붙여보았습니다. batch를 4로 바꿔서 진행하였습니다. (메모리 용량 초과 문제로 인해서 학습까지 재진행)
Top-1 Cls 는 76.06 이고, Top-1 Loc 은 43.99 로 다른 grad-cam, grad-cam++ 보다는 높게 나오는 모습을 확인할 수 있어서 Vgg16에서는 성능이 좋게 나오지 않을까 싶어 실험을 추가적으로 진행해보았습니다.

profile
어서오세요.

2개의 댓글

comment-user-thumbnail
2023년 7월 30일

공감하며 읽었습니다. 좋은 글 감사드립니다.

1개의 답글