본문 바로가기
다양한 취미가 있지요/네크로맨서

[삽질을 해요] Weakly Supervised Learning with Side Information for Noisy Labeled Images 읽음

by 포숑은 맛있어 2022. 4. 25.
반응형

(내용 추가)

CVPR22 알리바바 챌린지 구경중인데, 공식 사이트에 데이터셋 설명이라면서 이 논문이 걸려있어서 읽게 되었다.

그런데 AliProducts와 AliProducts2는 다른 데이터셋이었다. AliProducts2에 대한 논문이나 설명은 없고, 챌린지 페이지에 있는게 전부다.

심지어 주어진 task도 다르다.

 

ㄱ-.......

 

 

image retrieval이랑 image classification이라 완전히 다른데 말이다.

아무튼 이 논문이랑 웹비전같은건 무시하고 그냥 retrieval 보러 갑니다 ㅃ


! 굉장히 급하게 하루 이틀만에 새로운 분야를 조사하는거라 틀린내용 있을 수 있음 !

 

 

읽는다 논문

언제나 그렇듯 의역과 주관적 의견이 가득한 글을 쓰겠다

fine grained image classification을 이제 처음 해봐서 헛소리가 많을 수 있다

 

Weakly Supervised Learning with Side Information for Noisy Labeled Images
ECCV 2020
알리바바

 

인용수 9건.

올해 CVPR 워크샵 알리바바 챌린지에 이 논문을 걸어놓고 인용해달라고 써있고, 데이터셋 관련 논문인데 9건인게 약간 의심스럽긴 한데.. 홍보가 덜 되었나

 

 

Keywords:

weakly supervised learning, noisy labels, side information, large scale web images

 

논문의 contribution은?

WebVision과 같은 real-world dataset에서 DNN classifier를 만들더라 해도 noisy label 때문에 잘 안되기도 한다.

이 문제를 해결하기 위해서 image related side information을 활용하기도 한다. 예를 들면 captions, tags를 생각하 면 되는데, 이것들은 종종 이미지간에 기저에 깔린 관계성을 내포하기도 한다. 그래서 이걸 잘 활용하려나보다.

 

1. SINet 고안

그래서 이 논문에서는 weakly-supervised learning by using a Side Information Network (SINet)을 제안하는데, 얘는 효율적으로 large scale classification을 noisy label이 심하게 있음에도 잘 수행할 수 있다. 이 네트워크는 visual prototype module과 noise weighting module 이렇게 2가지로 나뉘어있다.

참고로 image-label pair로 학습을 하지만, human annotation은 전혀 없다고 한다. 그래서 weakly supervised.

 

- visual prototype module의 경우, 각 카테고리에 대해 아주 간결한 representation을 만들기 위함인데 여기에 side information을 활용할 것이다.

- noise weighting module의 경우, 각 noisy image의 correctness를 추정하며, image ranking을 위하여 학습중에 confidence score를 만든다. 이를 통해 SINet은 noisy label의 효과를 상당히 경감시킬 수 있어 모델 성능이 잘 나왔다고 한다.

 

2. 데이터셋 공개

한편으로는, 이 논문의 또 다른 contribution으로는 fine-grained product dataset인 AliProduct를 릴리즈 하였다는 점이다. 250만 이상의 noisy web images를 인터넷을 통해 크롤링하였다. 크롤링 쿼리 날릴 때 사용한 fine-grained semantic classes가 5만가지라고 한다.

 

성능이 좋은가요?

데이터셋을 새로 릴리즈 하긴 했지만 그래도 SINet의 성능 검증을 위해 이미 유명한 다양한 데이터셋에서도 실험을 했다고 한다. (Webvision, ImageNet and Clothing-1M) SOTA라고 하는데 이건 이따 논문 진짜로 읽고 보도록 하자. 아무튼 이 논문이 나올 당시에 WebVision Challenge 2019가 있었다는데, 5000 카테고리 classification task에서 다른 논문들과 큰 격차를 두고 1등을 차지했다고 한다.

 

 

-

여담: CVPR 챌린지

 

아마 2019-2020 시기라고 하면 self-supervised learning, constrastive learning (SimCLR 이쯤 나왔나 그럼)과 함께 learning with noisy label이 유행했던 것으로 기억한다. 이때 어노테이션과 generalization에 대한 고민을 하면서 잠깐 서베이를 했던 기억이 나는데. co-teaching, co-teaching+, meta cleaner, meta weight net, CleanNet 기타 등등.. 아무튼 그래서 이 논문도 유행에 따라(?) LNL 얘기를 하는 것 같다. 관련 조사내용은 2년전에 ppt 만들어둔게 있어서 나중에 정리해서 글 쓰는걸로...

 

이 글을 읽는 현재 CVPR 2022에서도 지금 챌린지가 열렸다. 공식 챌린지 사이트에서는 참고논문에 이걸 걸어놨는데. 어떤 방식으로 풀어나갈지는 고민인데, 뭐가 되었든 간에 fine-grained image classification이라는점과 함께 LNL(Learning with Noisy Label)이라는 데이터셋 특성을 고려하는건 좋은 성적을 거두기 위한 필수요건으로 보인다. 왜냐면 이걸 무시하기에는 noisy label이 있으면 학습 성능이 많이 안좋아진다는 사전 연구들이 있기 때문이다. 예를 들면 rethinking generalization 논문에서도 random noise를 데이터셋으로 두어도 딥러닝은 memorization해버려서 오히려 generalization 측면에서는 좋지 못하다는 연구가 있었다. 물론 ViT를 시작으로 최근들에 transformer가 유행하면서 기존 CNN의 차이점에 대해서 많은 연구가 있었는데, 이를 통해 밝혀진 것은 transformer는 noise에 굉장히 robust하게 학습된다는 특성이 있었다. 다만 내가 봤던 transformer 논문은 데이터셋 자체에 내포된 noise가 아니라, 이미지 하나하나 단위로 훼손시켰을 경우에 멀쩡한 부분에 attention을 두어 잘 학습해낸다는 연구라서 label noise까지 잘 해줄거라는건 보장이 없다. 이 논문 읽고나서 최신 연구를 찾아봐야 하는 부분이고, 지금은 시작일 뿐이다.

 

음... 근데 요즘엔 foundation model 유행하면서 그냥 왕창 큰 이미지 모델에 NLP계열의 임베딩 정보 같이 활용해서 알아서 되겠거니 하지 않을까 싶긴 하다... SOTA 모델을 찾는건 또 다른 이야기일듯

 

 

잠깐, Noisy Label이란?

바로 이런 것

 

 

참고자료: Learning with Noise Label 모음 (한달 전 업데이트된 깃허브)

이 논문 다 읽고 봐야지

https://github.com/subeeshvasu/Awesome-Learning-with-Label-Noise

 

GitHub - subeeshvasu/Awesome-Learning-with-Label-Noise: A curated list of resources for Learning with Noisy Labels

A curated list of resources for Learning with Noisy Labels - GitHub - subeeshvasu/Awesome-Learning-with-Label-Noise: A curated list of resources for Learning with Noisy Labels

github.com

 

 


Method.

모델 구성은 3가지로 나뉜다.

- Class Relation Graph

- Visual Prototype Generation

- Noise Weighting

 

 

N개의 데이터셋, C개의 클래스가 있다고 하자. 웹크롤링한 큰 규모의 데이터셋이므로 noisy하다.

아무 생각 없이 모델을 만들면 학습중에 이 노이즈에 overfitting하면 generalization 성능이 구릴 수 있다.

 

그러면 이걸 어떻게 해결하는가? 요약하자면, 이 논문에서는 class relation graph를 활용하여 visual prototype을 만들고 이를 활용해 similarity를 계산해 noisy label인지를 판단하여 noise weighting을 한다. (위 그림 참고)

 

이 논문에서 인용한 [38] 논문에서 "different classes look different"에 의거하여, 이 논문에서도 클래스간의 visual similarity를 고려하도록 한다. 그래서 semantic similarity를 구하기 위해서 side information을 쓴다고 한다.

그래서 이 논문에서는 클래스별 visual representation으로서 prototype v_k를 정의하는데, 여기서 k는 C개의 class 중 하나를 나타내는 인덱스. 그니까 클래스를 대표하는 어떤 벡터를 만들겠다는 의미. 이 정보는 clean, reliable하기 때문에 새로운 인풋 데이터가 들어왔을때 mislabeled인지 제대로 된 데이터인지 알 수 있다.

이 class prototype 벡터를 어떻게 사용하냐면, image feature와의 distance를 측정해서 noisy sample인지 아닌지를 재는 것이다. 다만 thresholding을 해서 noisy image를 버리는 구조는 아니고, 뒤에 noise weighting 모듈에서 가중치를 두는 방식으로 조절한다.

 

모델에 대한 loss는 그냥 일반적인 cross entropy loss를 쓸건데 여기에 가중치를 붙여서 학습한다.

 

 

Class Relation Graph

 

앞서 설명했듯, inter-class semantic knowledge를 가지고 그래프 임베딩을 하는게 필요하다. 이 논문에서는 2가지 그래프를 만든다. 각각 다른 similarity metric을 활용한다. 일단 각 노드는 class를 의미한다.

 

1. graph G_w을 만들기 위해서 트리구조의 WordNet을 이용

wordNet tree에서 shortest path의 distance를 edge값으로 가진다. 그러면 similarity가 C*C matrix로 정의

이걸 S_w로 표기

 

2. label description을 활용

예를 들어, "Manx cat: A short-haired tailless breed of cat believed to originate on the Isle of Man" 이라는 설명이 있으면 이 논문에서는 BERT를 사용해서 word embedding을 구한다. 그다음에 bidirectional LSTM에 넣어 (class label level의) label embedding을 구한다. 여기서 BERT는 pretrained 되었으며 파라미터는 고정이고, LSTM만 튜닝한다. 아무튼 그러면 class 개수만큼의 임베딩이 있을테니까, 여기서 pair단위로 similarity를 구할건데 이때 cosine similarity를 계산한다. 마찬가지로 C*C matrix가 정의될거고, 이걸 S_l로 표기한다.

 

이제 1, 2에서 구한 similarity를 더해주면 끝!

논문에서 S_t로 표기한다. 이렇게 클래스간의 정보 임베딩 끝

 

 

Visual Prototype Generation

image sample x_i: CNN model에 넣어서 visual representation을 만든다.

그리고 클래스 레이블이 c라고 하면, 이에 해당하는 similarity representation은 아까 그래프에서 얻을 수 있는데 s_t^i 라고 표기.

 

처음에는 모든 이미지에서 클래스별 top-k 이미지에 대해 구한 것을 initial class prototype으로 정의

CNN feature g_i와 모든 클래스의 prototype들과 각각 similarity를 구한 게 s_t^v

 

방금 구한 similarity 2개의 KLD가 p_i이다.

 

그리고 visual prototype v_c는 이미지 피쳐들의 weighted sum이며, 위에 계산한 p_i를 활용해서 구한다.

이렇게 계속 업데이트 한다고 함

 

 

 

 

Noise Weighting

아무튼 위에서 구한 prototype vector를 활용할거다.

이미지 피쳐와 프로토의 유클리디안 거리가 가까우면 가중치를 더 주고, 멀리 떨어져 있으면 덜 학습하겠다는 의미다.

이걸 가지고 이미지별로 CE loss 조절해서 학습한다. 끝.

 

 

WebVision Challenge의 디테일

  • resneXt-101 사용
  • optimizer SGD, 2500 미니 배치 사용 (미니가 아닌데요?)
  • 100 에폭 돌림, lr 0.1부터 몇번 드랍했음
  • augmentation도 여러개 사용하여 오버피팅 방지
  • GAP 뒷단에서 dropout rate 0.25 적용

레이블 스무딩 어쩌구는 더 찾아보기로 하고....

 

 

AliProduct Dataset

제일 궁금한 것.

다행스럽게 validation, test는 noisy하지 않구나

 

Experiment 대충 보기

 

WebVision 내용이 대부분이고 AliProduct 내용은 별로 없다.

근데 내가 기억하기로 CleanNet은 초기 논문이라 17년도 쯤에 나왔고, MetaCleaner가 19년도 논문인데  성능이 더 떨어진다. 무엇보다 이 논문의 SINet 성능 차이가 그렇게 많이 나지도 않음..

ViT 도입된 이후 연구에서 성능이 많이 점프 되는지 확인해볼 필요가 있어보인다.

 

 

 

 

일단 퇴근좀 하겠습니다

내일 웹비전 보고 실험 보겠습니다

 

지금 AliProduct 데이터셋 보는중인데, 텍스트 information이랑 레이블이 뭐가 다른지, 학습 및 테스트에서 뭐가 주어지고 뭐가 안 주어지는건지, 평가방식이 뭔지 헷갈리기 때문에 아키텍쳐는 이정도 보고 넘어가겠음.

 

알리바바 데이터셋 논문이라고 걸어뒀던데 이게 거의 아키텍쳐 위주의 논문이라 저런 부분 알아보기가 불편하다.

 

아니 다른 데이터셋인데 이걸 왜 걸어둠

참고할 필요가 없는 논문이었다

 

 

 

 


여담: 현 시점 V+L SOTA, ALBEF는?

마찬가지로 image-text 정보를 사용하는데 여기서도 noisy data를 다루는 기법이 있다.

여기서는 momentum distillation을 사용한다. momentum model의 경우, image-text contrastive learning과 MLM을 위한 psedo label을 생성하는 용도로 쓰인다.

뭐.. 웹 크롤링 한거보단 텍스트를 생성하여 pseudo label처럼 만들어주는게 클린할테니깐

 

 

암튼 아직 하루이틀밖에 조사 안했지만 결론이라고 하면,

1. noisy label을 고려하는 것은 적어도 옛날에만 반짝 떴다가 사라진건 아닌 것 같고, 이런 종류의 웹크롤링한 Large-scale 데이터를 다루기 위해서는 중요한 것으로 보인다.
label noisiness에 따라 re-weighting 하거나, clean한 데이터에서 뽑은 representation을 가지고 있거나, co teaching처럼 모델을 여럿 두어서 서로 학습에 도움되도록 하는 접근 방식이 있었으며, 최근에 ALBEF의 경우에는 label noise문제를 다루기 위해 knowledge distillation을 활용하기도 했다.

2. image, text 둘다 활용한다. visual semantic space와 언어의 semantic space 각각에서 임베딩하는건 상당히 다를거고, 둘다 활용한다면 부족한 정보를 잘 보완할 수 있을 것이기 때문이다.
그래서 텍스트 처리에서는 pretrained BERT를 많이 쓰는 것 같고, CNN은 SINet처럼 resnext 쓸수도 있고 요즘처럼 transformer 유행하는거 보면 ViT를 쓸수도 있어보인다. 요즘에 트랜스포머 유행해서 그런건진 몰라도 foundation model 만든다고 정보 다 때려박는데, 과거의 이런 연구 맥락에서 나온거 아닌가 싶을정도로 겹치는 개념이 많아보인다. 아 근데 트랜스포머면 느린 학습속도+연산량이 약간 걱정이긴 함. (plain ViT의 경우.)

3. 모델 대충 봤으니 이젠 task 이해 좀 할게여

 

https://blog.salesforceairesearch.com/align-before-fuse/

 

Align before Fuse (ALBEF): Advancing Vision-language Understanding with Contrastive Learning

TL; DR: We propose a new vision-language representation learning framework which achieves state-of-the-art performance by first aligning the unimodal representations before fusing them.Vision and language are two of the most fundamental channels for humans

blog.salesforceairesearch.com

 

 

돌려보려니까 문제점

모델이 넘 크다 + 이 분야 특성상 데이터 양이 많다 -> 학습 느림

모델 크기를 줄여볼까 싶은데 줄인 사이즈에 대해서도 pretrained model이 제공되나 확인을 해봐야겠다

반응형

댓글