이번 포스팅은 아래 article에 대한 내용을
번역한 포스팅입니다.
오역이 있을 수 있으니 참고하시며,
발견하시면 댓글 부탁드립니다:)
How to Apply Distance Metric Learning to Street-to-Shop Problem
원문 페이지 링크 :
- street-to-shop 문제에 대한 정의 : 유저 이미지에서 패션 아이템을 확인하고 그것을 온라인 샵에서 찾는 것
- 이 분야는 distance metric learning 기술을 적용해보기 좋은 분야
Dataset
처음으로, 위 문제에 접근 하기 위해서 데이터 셋이 필요함. 이번에는 여자 상의에 집중하여, Aliexpress 이미지를 이용하기로 함
# aliexpress : https://www.aliexpress.com
아래는 이 글을 쓴 저자가 스크랩핑한 카테고리 리스트
- Dresses, Blouses & Shirts, Hoodies $ Sweatshirts, Sweaters, Jackets & Coats
스크랩핑을 하기위해 requests와 BeautifulSoup 라이브러리 사용, 판매자의 이미지는 아이템의 메인화면에서 가져옴.
사용자의 이미지는 feedback 페이지에서 가져옴. 아이템마다 colors의 종류가 다양함.
색상은 완벽하게 다른 아이템으로 사용이 가능함. 따라서 여기에서는 다른 색상의 아이템에 대해서는 다른 아이템으로 여겨지도록 함
스크랩핑에 관한 모든 정보는 아래 링크에서 코드 확인이 가능함
>> https://github.com/movchan74/street_to_shop_experiments/blob/master/get_item_info.py
카테고리 별로 모든 페이지를 검색해야하고, 모든 아이템에 대한 url을 가져오고 아이템을 가져오기 위한 스크랩핑을 위에 링크에 있는 코드를 사용하여 정보를 수집 함. 각 아이템에 대해 2개의 이미지 세트를 가짐
- 하나는 판매자의 상품 이미지
- 또 다른 하나는 사용자의 리뷰 이미지
각각의 색상에 대해, 판매자로부터 하나의 이미지를 가지게 됨.
그러나 사용자의 사진에서는 각 색상마다 하나의 사진도 없거나, 하나 이상의 이미지를 가질 수 있음.
- 사용자의 리뷰 데이터에는 많은 노이지 이미지가 존재함 (패킹 된 상태의 이미지, 소재나 패턴에 대한 사진, 아이템의 일부분에 대한 사진, 관련없는 사진)
이 문제를 완화하기 위해 2개의 카테고리(Good Images, Noise Images)로 5000개의 이미지를 라벨 작업을 함. 이 저자의 초기의 계획은 2개의 카테고리를 나눠서 학습시키고, 클린 데이터 셋을 사용하는 것이었음. 그러나 결국 이 작업은 Future work으로 미루고, 단지 클린 이미지를 테스트와 검증 데이터 셋으로 사용함
- 두번째 문제점은 몇몇 판매자에 의해 판매되는 상품에 대한 문제. 때떄로 판매자들은 같은 이미지를 가지고 판매하는 경우가 있음(또는 약간의 수정만 거친 같은 이미지).
이 문제를 어떻게 처리하는가에 대해 가장 쉬운 방법은 아무것도 하지 않는 것. 그리고 distance metric learning에 대해 강력한 알고리즘을 사용하는 것이다. 그러나 그것은 검증시 영향을 미칠 수 있음. 같은 아이템이 검증과 학습 데이터 셋에도 있기 때문. 이것은 데이터 유실로 이어짐.
또다른 방법은 비슷한 것을 찾는 것, 그리고 그것을 하나의 아이템으로 합치는 방법이다. 우리는 같은 이미지를 찾기 위해 perceptual hashing을 사용할 수있다. 또는 noisy한 데이터에 대한 모델을 학습시키기고, 비슷한 이미지를 찾기위한 모델을 적욯한다. 이 저자는 2번째 옵션을 선택함. 약간씩 편집 된 이미지를 하나로 합치게 하기 위함
Distance Metric Learning
가장 유명한 distance metric learning 방법 중에 하나로는 Triplet loss 가 있다.
$$L_{triplet}(a,p,n) = max(d(F(a), F(p)) - d(F(a),F(n)) + M,0)$$
max(x, 0)은 hinge function일 때, d(x, y)는 x와 y사이의 distance function이다. F(x)는 deep neural network를 말하고, M은 마진, a는 anchor, p는 positive데이터, n은 negative데이터를 말함
F(a), F(p), F(n)은 딥 뉴럴 네트워크에 의해 제공된 embeddings된 공간의 point들이다. 임베딩은 종종 단위 길이, 즉 || x ||를 갖도록 정규화되어야 할 필요가 있다. 그 이유는 조명과 대비 변화에도 학습의 안정성을 강하게 하기 위해서. anchor와 positive 데이터는 같은 클래스에 속해있고, negetive데이터는 다른 클래스에 속해있어야 한다.
그래서 triplet loss의 주된 아이디어는 negative쌍과 positive쌍의 임베딩 공간이 마진 M의 거리에 의해 분리되어야 된다는 것이다.
그러나 triplet(a,p,n)을 어떻게 선택할 것인가? 우리는 단순히 랜덤하게 샘플을 triplet으로서 선택할 것이다. 그러나 이렇게 하는 것은 다음과 같은 문제들의 원인이 됨.
1. NNN 만큼의 triplets이 가능해진다.
-이것은 모든 가능한 triplets을 확인 하기위해 굉장히 많은 시간을 필요로 한다는 것을 의미한다.
-그러나 실제로, 우리는 그렇게 할 필요가 없다.
'Translation > Article_translation' 카테고리의 다른 글
[번역] gRPC with Golang and Python (0) | 2020.09.20 |
---|---|
[Sequence Modeling With CTC]번역글 (0) | 2019.04.12 |
[Connectionist Temporal Classification]번역 글 (0) | 2019.04.09 |