<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>과연 나는 열심히 할까..?</title>
    <link>https://cooling0.tistory.com/</link>
    <description>혼자 공부하면서 자료를 남기기 위해 시작했습니당.. 혹시나 저같은 사람들을 위하여...</description>
    <language>ko</language>
    <pubDate>Tue, 7 Apr 2026 13:56:56 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>cooling0</managingEditor>
    <image>
      <title>과연 나는 열심히 할까..?</title>
      <url>https://tistory1.daumcdn.net/tistory/8278689/attach/7ab44b278bcb4ac39cc8f20fa946c47e</url>
      <link>https://cooling0.tistory.com</link>
    </image>
    <item>
      <title>[Paper Review] LLaVA : Visual Instruction Tuning</title>
      <link>https://cooling0.tistory.com/entry/Paper-Review-LLaVA-Visual-Instruction-Tuning</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;machine이 생성한 instruction-following data를 사용한 instruction tuning LLM들은 새로운 task에서 zero-shot 성능 향상을 보여줌
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하지만, 이러한 아이디어는 멀티모달 분야에서는 덜 탐구됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;본 연구는 language-only GPT-4를 사용하여 multimodal language-image instruction-following data를 생성하기 위한 첫 번째 시도를 제시&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;이렇게 생성된 데이터에 대한 instruction tuning을 통해, 범용적인 visual and language 이해를 위한&amp;nbsp;&lt;b&gt;vision encoder와 LLM을 연결한 end-to-end로 훈련된 large multimodal model인 LLaVA(Large Language and Vision Assistant)를 소개&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;instruction-following data : 모델이 특정한 지시나 명령을 이해하고 따를 수 있도록 설계된 데이터.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 데이터는 instruction(질문이나 요청)과 이에 대한 following(답변이나 설명)으로 구성되며 모델이 지시 사항에 맞춰 task를 수행할 수 있도록 훈련하는 데 사용.&lt;/li&gt;
&lt;li&gt;이렇게 구성된 데이터는 모델이 다양한 유형의 질문이나 요청을 이해하고 요구사항을 충족하는 방식으로 답변하도록 훈련.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Introduction&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;멀티모달 vision-and-language instruction을 효과적으로 따르며 인간의 의도에 맞춰 다양한 real-world task를 수행할 수 있는 범용적인 assistant를 개발&lt;/li&gt;
&lt;li&gt;본 연구에서는 visual instruction-tuning을 제안하는데, 이는 language-image multimodal 공간으로 instruction-tuning을 확장하려는 첫 번째 시도로, 범용적인 visual assistant를 구축하는 길을 열기 위함이다&lt;/li&gt;
&lt;li&gt;한 가지 주요 과제는 vision-language instruction-following 데이터 부족
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래서 본 논문은 ChatGPT/GPT-4를 이용하여 image-text 쌍을 적절한 instruction-following 형식으로 변환하기 위한 데이터 재구성 관점 및 파이프라인을 제시&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CLIP의 visual encoder를 language decoder Vicuna와 연결하고 생성된 instructional vision-language data를 end-to-end로 fine-tuning하여 large multimodal model (LMM)을 개발&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;GPT-assisted Visual Instruction Data Generation&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;multimodal instruction-following data에 있어서는 이용가능한 양이 제한적&lt;/li&gt;
&lt;li&gt;최근 text-annotation task에서 GPT 모델들의 성공에 영감받아, 기존에 존재하는 image 쌍 데이터를 기반으로 multimodal instruction-following data 수집을 위해 ChatGPT/GPT-4를 활용할 것을 제안&lt;/li&gt;
&lt;li&gt;기존 CC에서 LAION 같은 데이터셋은 단순한 Image 캡셔닝에 그침
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래서 LLaVA 를 학습하기 위한 instruction-following Dataset 생성이 필요&lt;/li&gt;
&lt;li&gt;직접 작성 &amp;rarr; cost 높은, human crowd-sourcing &amp;rarr; 데이터 정의가 잘안됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multimodal instruction-following Dataset 생성&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;image $X_v$ 와 해당하는 Caption $X_c$ 가 있는 경우 이미지를 서술해 달라는 내용을 질문 $X_q$ 로한 데이터셋 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \text{Human : } X_qX_v \text{ &amp;lt;STOP&amp;gt;} \text{Assistant : } X_c \text{ &amp;lt;STOP&amp;gt;} $$&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하지만 다양성 부족 / 심도 있는 Reasoning 부족&lt;/li&gt;
&lt;li&gt;이를 해결하기 위하여 GPT 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ChatGPT/ GPT-4 가 visual content 를 이지 못함 &amp;rarr; Symbolic Representations 으로 해결&lt;/li&gt;
&lt;li&gt;instruction-following Dataset 의 형태 &amp;rarr; Conversation, Detailed description, Complex reasoning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Symbolic Representations&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (13).png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCQGuD/btsQVre3qas/1oUWbnkqq4IXCTqU8hO2kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCQGuD/btsQVre3qas/1oUWbnkqq4IXCTqU8hO2kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCQGuD/btsQVre3qas/1oUWbnkqq4IXCTqU8hO2kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCQGuD%2FbtsQVre3qas%2F1oUWbnkqq4IXCTqU8hO2kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;863&quot; height=&quot;529&quot; data-filename=&quot;image (13).png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;language-only GPT-4 또는 ChatGPT 가 visual content를 포함한 instruction following 데이터를 생성하기 위해 화용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Captions 을 시각적으로 다양한 관점에서 바라본 image Scence 에 대해 설명&lt;/li&gt;
&lt;li&gt;즉 language-only 가 이해할수 있게 encode&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bounding Boxes
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Scence 에서 특정 물체가 어디에 위치했는지 설명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;instruction-following Dataset 의 형태&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Conversation&amp;nbsp;: 이미지에 대해 질문하는 사람과 assistant 사이의 대화형식으로 디자인한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;답변은 마치 assistant가 이미지를 보고 질문에 답하는 듯한 톤으로 되어있다. 객체 유형, 객체 수, 객체 동작, 객체 위치, 객체 간의 상대적 위치를 포함하여 이미지의 시각적 내용에 대해 다양한 질문을 한다. 명확한 답변이 있는 질문만 고려한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Detailed description : 이미지에 대한 풍부하고 포괄적인 설명을 포함하기 위해 질문 목록을 만든다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 이미지에 대해 질문 목록에서 하나의 질문을 무작위로 샘플링하여 GPT-4에 상세한 설명을 생성하도록 요청한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;답변은 일반적으로 엄격한 논리를 따르는 step-by-step reasoning process를 필요로한다.Complex reasoning : 위의 두 가지 유형은 content에 중점을 두며 이를 기반으로 심층 추론 질문을 추가로 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Methodologies&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (14).png&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfYyXm/btsQWcuRfz4/inStmczgkseLLM2N6nfaOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfYyXm/btsQWcuRfz4/inStmczgkseLLM2N6nfaOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfYyXm/btsQWcuRfz4/inStmczgkseLLM2N6nfaOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfYyXm%2FbtsQWcuRfz4%2FinStmczgkseLLM2N6nfaOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;809&quot; height=&quot;230&quot; data-filename=&quot;image (14).png&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Training&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;training data&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 image $X_v$ 에 대해 multi-turn conversation data $(X^1_q , X^1_a , &amp;middot; &amp;middot; &amp;middot; , X^T_q , X^T_a )$ 확보&lt;/li&gt;
&lt;li&gt;각 conversation 의 답변을 assistant 의 답변으로 정의&lt;/li&gt;
&lt;li&gt;t 번째 instruction은 아래와 같이 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (15).png&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sAqv8/btsQTOWxZyV/jlXXbg2td7vfaVk5hQgGp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sAqv8/btsQTOWxZyV/jlXXbg2td7vfaVk5hQgGp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sAqv8/btsQTOWxZyV/jlXXbg2td7vfaVk5hQgGp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsAqv8%2FbtsQTOWxZyV%2FjlXXbg2td7vfaVk5hQgGp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;843&quot; height=&quot;72&quot; data-filename=&quot;image (15).png&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (16).png&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6E3w1/btsQWAoHvjZ/8k4JQWRFWnzXCVX7PA25RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6E3w1/btsQWAoHvjZ/8k4JQWRFWnzXCVX7PA25RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6E3w1/btsQWAoHvjZ/8k4JQWRFWnzXCVX7PA25RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6E3w1%2FbtsQWAoHvjZ%2F8k4JQWRFWnzXCVX7PA25RK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703&quot; height=&quot;64&quot; data-filename=&quot;image (16).png&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Stage 1: Pre-training for Feature Alignment&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;image 에 대한 간ㄷ단한 요약을 요청하는 질문을 설정 후 GT 는 원 그림의 캡션으로 정의&lt;/li&gt;
&lt;li&gt;이때는 linear 레이어만 학습함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;question Xq가 무작위로 샘플링되는데 이는 assistant에게 이미지를 간단히 설명하도록 요청하는 language instruction&lt;/b&gt;이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ground-truth prediction answer Xa는 original caption&lt;/b&gt;이다. 학습에서, visual encoder와 LLM 가중치들을 frozen한 상태로 두고 학습 가능한 파라미터 &amp;theta; = projection matrix&amp;nbsp;&lt;b&gt;W만을 사용하여 식 (3)의 likelihood를 최대화&lt;/b&gt;한다.&lt;/li&gt;
&lt;li&gt;이렇게 함으로써 image feature Hv는 pre-trained LLM word embedding과 align된다. 이 stage는 frozen LLM에 대해 호환 가능한 visual tokenizer를 학습하는 것으로 이해할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Stage 2: Fine-tuning End-to-End&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;visual encoder weight를 계속 frozen 상태로 유지하고 projection layer와 LLM의 사전학습된 가중치를 업데이트한다. 즉, 학습 가능한 파라미터 식 (3)에서 &amp;theta; = {W, &amp;phi;} 이다. 본 논문은 두 가지 특정 사례에 대해 고려
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Multimodal Chatbot : Section 3에서 설명된&amp;nbsp;&lt;b&gt;158K language-image instruction-following data에 대해 chatbot을 finetuning하여 개발&lt;/b&gt;한다. 세 가지 유형중에서 conversation은 multi-turn 형식이고 나머지 두 개는 single-turn 형식이다. 학습 시 이들 응답 유형은 균일하게 샘플링된다.&lt;/li&gt;
&lt;li&gt;Science QA : ScienceQA benchmark에서 본 논문의 방법을 연구한다. ScienceQA는 상세한 강의와 설명으로 답변에 주석을 다는 최초의 대규모 multimodal science question dataset이다. 각 질문은 자연어 혹은 이미지 context로 제공되된다. assistant는 자연어로 추론 과정을 제공하고 객관식에서 대답을 선택한다. 식 (2)에서 학습 시, 데이터를 single turn conversation 형태로 구성하며, question &amp;amp; context를 Xinstruct로 reasoning &amp;amp; answer를 Xa로 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Paper Review</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/17</guid>
      <comments>https://cooling0.tistory.com/entry/Paper-Review-LLaVA-Visual-Instruction-Tuning#entry17comment</comments>
      <pubDate>Tue, 30 Sep 2025 13:26:22 +0900</pubDate>
    </item>
    <item>
      <title>[Paper Review] Flamingo: a Visual Language Model for Few-Shot Learning</title>
      <link>https://cooling0.tistory.com/entry/Paper-Review-Flamingo-a-Visual-Language-Model-for-Few-Shot-Learning</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소수의 주석이 달린 예제만으로 새로운 작업에 신속하게 적응할 수 있는 모델을 구축하는 것은 멀티모달 머신 러닝 연구의 미해결 과제&lt;/li&gt;
&lt;li&gt;본 연구에서는 이러한 기능을 갖춘 시각 언어 모델(VLM) 제품군인 Flamingo를 소개&lt;/li&gt;
&lt;li&gt;(i) 강력한 사전 학습된 vision-only and language-only models 을 연결&lt;/li&gt;
&lt;li&gt;(ii) 임의로 삽입된 visual and textual data 시퀀스를 처리&lt;/li&gt;
&lt;li&gt;(iii) 이미지 또는 비디오를 입력으로 원활하게 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Introduction&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Recently, multimodal vision-language models trained with a contrastive objective have enabled zero-shot adaptation to novel tasks, without the need for fine-tuning.&lt;/li&gt;
&lt;li&gt;이러한 모델은 단순히 텍스트와 이미지 간의 유사도 점수만 제공하기 때문에, 사전에 유한한 결과 집합이 제공되는 분류와 같은 제한적인 사용 사례에만 적용될 수 있음&lt;/li&gt;
&lt;li&gt;이러한 모델은 언어 생성 능력이 매우 부족하여 캡션 작성이나 시각적 질의응답과 같은 보다 개방적인 작업에는 적합하지 않음&lt;/li&gt;
&lt;li&gt;A single large LM은 텍스트 인터페이스만으로도 여러 과제에서 뛰어난 성능을 달성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;과제 예시 몇 가지가 모델에 프롬프트 형태로 제공 &amp;rarr; 쿼리 입력과 함께 모델이 해당 쿼리에 대한 예측 출력을 생성하는 연속적인 구문을 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;분류, 캡션, 질의응답과 같은 이미지 및 비디오 이해 과제에도 동일한 작업이 가능함을 보여줍니다. 이러한 과제는 시각적 입력 조건화를 통해 텍스트 예측 문제로 변환될 수 있&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Approach&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Flamingo: a visual language model that accepts text interleaved with images/videos as input and outputs free-form text&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (10).png&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bU19yu/btsQTBP00RM/VG1nz2CXmBcN7yXKbFqi3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bU19yu/btsQTBP00RM/VG1nz2CXmBcN7yXKbFqi3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bU19yu/btsQTBP00RM/VG1nz2CXmBcN7yXKbFqi3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU19yu%2FbtsQTBP00RM%2FVG1nz2CXmBcN7yXKbFqi3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;357&quot; data-filename=&quot;image (10).png&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그림 3에 제시된 주요 아키텍처 구성 요소는 pretrained vision and language models 을 활용하고 효과적으로 연결하기 위해 선택&lt;/li&gt;
&lt;li&gt;Perceiver Resampler
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vision Encoder 로부터 시공간적 특징(이미지 또는 비디오에서 획득)을 수신하여 고정된 개수의 visual tokens을 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이러한 visual tokens 은 pretrained LM 계층 사이에 인터리빙된 새로 초기화된 cross-attention layers (2.2절)을 사용하여 동결된 LM을 조정하는 데 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이러한 새로운 레이어는 LM이 다음 토큰 예측 작업에 visual information를 통합할 수 있는 표현적인 방법을 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Flamingo는 인터리브된 이미지와 비디오  를 조건으로 텍스트  의 가능성을 다음과 같이 모델링합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (11).png&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9vt1D/btsQTD1pO9H/NsbVkl5zMoDp5DscwpQii1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9vt1D/btsQTD1pO9H/NsbVkl5zMoDp5DscwpQii1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9vt1D/btsQTD1pO9H/NsbVkl5zMoDp5DscwpQii1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9vt1D%2FbtsQTD1pO9H%2FNsbVkl5zMoDp5DscwpQii1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;61&quot; data-filename=&quot;image (11).png&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$ y_\ell $ 은 입력 텍스트의 $ \ell $번째 언어 토큰을 의미한다.&lt;/li&gt;
&lt;li&gt;$ y_{&amp;lt;\ell} $ 은 해당 토큰 이전의 모든 토큰 집합을 나타낸다.&lt;/li&gt;
&lt;li&gt;$ x_{\leq \ell} $ 은 인터리브(interleaved)된 시퀀스 내에서 $ y_\ell $ 이전에 등장하는 이미지/비디오들의 집합을 의미한다.&lt;/li&gt;
&lt;li&gt;확률 분포 $ p $ 는 &lt;b&gt;Flamingo 모델&lt;/b&gt;에 의해 파라미터화된다.&lt;/li&gt;
&lt;li&gt;인터리브된 텍스트와 시각적 시퀀스(2.3절 참조)를 처리할 수 있는 기능 덕분에 Flamingo 모델을 맥락 내 퓨샷 학습에 자연스럽게 활용할 수 있습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Visual processing and the Perceiver Resampler&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vision Encoder: from pixels to features&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;frozen NormalizerFree ResNet(NFNet)[10]을 비전 인코더에 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Perceiver Resampler: from varying-size large feature maps to few visual tokens&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 모듈은 그림 3과 같이 비전 인코더를 동결된 언어 모델에 연결
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비전 인코더에서 가변 개수의 이미지 또는 비디오 특징을 입력으로 받아 고정된 개수의 시각적 출력(64)을 생성하여 vision-text cross-attention 의 계산 복잡도를 줄임.&lt;/li&gt;
&lt;li&gt;Perceiver [48] 및 DETR [13]과 유사하게 Transformer에 공급되고 시각적 특징에 교차 참여하는 미리 정의된 개수의 잠재 입력 쿼리를 학습&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 Conditioning frozen language models on visual representations&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트 생성은 Transformer decoder에 의해 수행되며, 이는 Perceiver Resampler 에서 생성된 시각적 표현을 기반&lt;/li&gt;
&lt;li&gt;사전 학습되고 동결된 텍스트 전용 LM 블록과, Perceiver Resampler 의 시각적 출력에 교차 반응하는 처음부터 학습된 블록을 인터리빙&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (12).png&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/saV6U/btsQUjoeuKq/lqqEBwVp6Ri21VqrZLvVs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/saV6U/btsQUjoeuKq/lqqEBwVp6Ri21VqrZLvVs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/saV6U/btsQUjoeuKq/lqqEBwVp6Ri21VqrZLvVs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsaV6U%2FbtsQUjoeuKq%2FlqqEBwVp6Ri21VqrZLvVs0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;382&quot; data-filename=&quot;image (12).png&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Interleaving new GATED XATTN-DENSE layers within a frozen pretrained LM.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;We freeze the pretrained LM blocks 학습된 원래 계층 사이에 gated cross-attention dense blocks (그림 4)을 삽입&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3 Multi-visual input support: per-image/video attention masking&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방정식 (1)에 도입된 image-causal modelling 은 전체 text-to-image cross-attention matrix 을 마스킹하여 모델이 각 텍스트 토큰에서 보는 시각적 토큰을 제한함으로써 얻어짐.&lt;/li&gt;
&lt;li&gt;주어진 텍스트 토큰에서, 모델은 이전 모든 이미지가 아닌 interleaved sequence 에서 바로 앞에 나타난 이미지의 시각적 토큰에 주의를 기울임&lt;/li&gt;
&lt;li&gt;Though the model only directly attends to a single image at a time, LM의 self-attn 을 통해 이전 모든 이미지에 대한 종속성은 유지&lt;/li&gt;
&lt;li&gt;이 단일 이미지 교차 어텐션 방식은 모델이 훈련 중 사용되는 시각적 입력의 개수에 관계없이 모든 개수의 시각적 입력에 대해 원활하게 일반화할 수 있도록 하는 중요한 역할&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Paper Review</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/16</guid>
      <comments>https://cooling0.tistory.com/entry/Paper-Review-Flamingo-a-Visual-Language-Model-for-Few-Shot-Learning#entry16comment</comments>
      <pubDate>Tue, 30 Sep 2025 11:10:48 +0900</pubDate>
    </item>
    <item>
      <title>[Paper Review] BLIP-2 : Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models</title>
      <link>https://cooling0.tistory.com/entry/Paper-Review-BLIP-2-Bootstrapping-Language-Image-Pre-training-with-Frozen-Image-Encoders-and-Large-Language-Models</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;large-scale models 의 end to end 학습으로 인해 vision-and-language pre-training 의 cost 가 높음&lt;/li&gt;
&lt;li&gt;BLIP-2 : a generic and efficient pretraining strategy that bootstraps vision-language pre-training from off-the-shelf frozen pre-trained image encoders and frozen large language models&lt;/li&gt;
&lt;li&gt;BLIP-2는 두 단계로 사전 학습되는 경량 쿼리 변환기(Querying Transformer)를 사용하여 모달리티 간 격차를 해소
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 단계는 frozen image encoder 에서 시각-언어 표현 학습을 부트 스트랩&lt;/li&gt;
&lt;li&gt;두 번째 단계는 frozen language model 에서 시각-언어 생성 학습을 부트 스트랩&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;BLIP-2는 기존 방법보다 학습 가능한 매개변수가 훨씬 적음에도 불구하고 다양한 시각-언어 작업에서 최고 수준의 성능을 달성&lt;/li&gt;
&lt;li&gt;자연어 명령을 따를 수 있는 제로샷 이미지-텍스트 생성이라는 모델의 새로운 기능을 보여줌&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Introduction&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;본 논문에서는 기성품인 사전 훈련된 시각 모델과 언어 모델을 부트스트래핑하여 일반적이고 계산 효율적인 VLP(Virtual Lab Proof) 기법을 제안&lt;/li&gt;
&lt;li&gt;사전 훈련된 언어 모델, 특히 대규모 언어 모델(LLM)은 강력한 언어 생성 및 제로샷 전이(zero-shot transfer) 기능을 제공&lt;/li&gt;
&lt;li&gt;In order to leverage pre-trained unimodal models for VLP, it is key to facilitate cross-modal alignment.&lt;/li&gt;
&lt;li&gt;그러나 LLM은 unimodal 사전 훈련 과정에서 이미지를 접하지 않았기 때문에, 이미지를 고정하는 것은 특히 시각-언어 정렬을 어렵게 만듬&lt;/li&gt;
&lt;li&gt;To achieve effective vision-language alignment with frozen unimodal models, we propose a Querying Transformer (QFormer) pre-trained with a new two-stage pre-training strategy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (7).png&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZxjKr/btsQTzEEQrP/uhIfBV23U6Rp3fyxSIkJ4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZxjKr/btsQTzEEQrP/uhIfBV23U6Rp3fyxSIkJ4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZxjKr/btsQTzEEQrP/uhIfBV23U6Rp3fyxSIkJ4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZxjKr%2FbtsQTzEEQrP%2FuhIfBV23U6Rp3fyxSIkJ4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;417&quot; height=&quot;198&quot; data-filename=&quot;image (7).png&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그림 1에서 볼 수 있듯이, Q-Former는 학습 가능한 쿼리 벡터 집합을 사용하여 Frozen 이미지 인코더에서 시각적 특징을 추출하는 경량 변환기&lt;/li&gt;
&lt;li&gt;Q-Former : Frozen 이미지 인코더와 Frozen LLM 사이의 정보 병목 지점 역할을 하며, LLM이 원하는 텍스트를 출력할 수 있도록 가장 유용한 시각적 특징을 제공&lt;/li&gt;
&lt;li&gt;첫 번째 사전 학습 단계에서는 시각-언어 표현 학습을 수행하여 Q-Former가 텍스트와 가장 관련성이 높은 시각적 표현을 학습&lt;/li&gt;
&lt;li&gt;두 번째 사전 학습 단계에서는 Q-Former의 출력을 Frozen LLM에 연결하여 시각-언어 생성 학습을 수행하고, LLM이 출력 시각적 표현을 해석할 수 있도록 Q-Former를 학습&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Method&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (8).png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCrVaB/btsQTCnO8t9/2g0dmaHNtOnLm69YdcqmL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCrVaB/btsQTCnO8t9/2g0dmaHNtOnLm69YdcqmL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCrVaB/btsQTCnO8t9/2g0dmaHNtOnLm69YdcqmL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCrVaB%2FbtsQTCnO8t9%2F2g0dmaHNtOnLm69YdcqmL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;844&quot; height=&quot;179&quot; data-filename=&quot;image (8).png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;179&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1. Model Architecture&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;본 연구에서는 고정 이미지 인코더와 고정 LLM 간의 간극을 메우는 학습 가능 모듈로 Q-Former를 제안&lt;/li&gt;
&lt;li&gt;Q-Former는 입력 이미지 해상도와 관계없이 이미지 인코더에서 고정된 개수의 출력 특징을 추출&lt;/li&gt;
&lt;li&gt;위의 그림에서 볼수 있듯이 Q-Former는 동일한 self-attention layers 를 공유하는 두 개의 transformer 하위 모듈로 구성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(1) 시각적 특징 추출을 위해 고정 이미지 encoder 와 상호작용 하는 이미지 변환기&lt;/li&gt;
&lt;li&gt;(2) 텍스트 encoder 와 텍스트 decoder 역할을 모두 수행할 수 있는 텍스트 변환기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;We create a set number of learnable query embeddings as input to the image transformer&lt;/li&gt;
&lt;li&gt;pre-training task에 따라, query-text interaction을 제어하기 위해 다양한 self-attention masks 적용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Q-Former는 총 18,800만 개의 파라미를 포함합니다. 쿼리는 모델 매개변수로 간주&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2. Bootstrap Vision-Language Representation Learning from a Frozen Image Encoder&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;representation learning stage : Q-Former를 Frozen 이미지 인코더에 연결하고 이미지-텍스트 쌍을 사용하여 사전 학습을 수행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;query들이 text의 가장 유익한 visual representation을 추출하기 위해 학습할 수 있도록 Q-Former를 학습하는 것을 목표&lt;/li&gt;
&lt;li&gt;BLIP(Li et al., 2022)에서 영감을 얻어, 동일한 입력 형식과 모델 매개변수를 공유하는 세 가지 사전 학습 목표를 공동으로 최적화.&lt;/li&gt;
&lt;li&gt;Each objective employs a different attention masking strategy between queries and text to control their interaction.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Image-Text Contrastive Learning (ITC)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ITC는 이미지와 텍스트 표현간의 mutual information이 최대화하기 위해 image representation과 text representation을 align하는 방법을 학습
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지와 대응하는 텍스트(positive pair) 간의 유사성은 높이는 동시에, negative pair 간의 유사성은 낮추는 방식으로 mutual information을 최대화&lt;/li&gt;
&lt;li&gt;image transformer로부터 얻은 output query representation $Z$ 를 text transformer로부터 얻은 text representation $t$ 와 align&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Image-grounded Text Generation (ITG)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ITG loss는 텍스트 생성을 위해 주어진 input image를 조건으로 Q-Former를 학습
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Q-Former의 아키텍처는 frozen image encoder와 text token 간의 직접적인 상호작용을 허용하지 않기 때문에, 텍스트 생성에 필요한 정보는 query들에 의해 먼저 추출&lt;/li&gt;
&lt;li&gt;그 후, self-attention layers를 통해 text token에 전달된다. 그러므로, query들은 텍스트에 관한 모든 정보들을 포착하는 visual feature들을 추출하기 위해 집중&lt;/li&gt;
&lt;li&gt;query-text 상호작용을 제어하기 위해 UniLM에서 사용한 것과 유사하게 multimodal causal self-attention mask를 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Image-Text Matching (ITM)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ITM은 이미지와 텍스트 표현 간의 fine-grained alignment를 학습하는 것을 목표
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이는 binary classification task로 모델은 image-text pair가 positive (일치) 한지 negative (비일치) 한지 예측하도록 요청&lt;/li&gt;
&lt;li&gt;모든 query들과 텍스트들이 서로 attend할 수 있도록 bi-directional self-attention mask를 사용&lt;/li&gt;
&lt;li&gt;그러므로 output query embedding Z는 multimodal 정보를 포착&lt;/li&gt;
&lt;li&gt;로짓값을 얻기위해 각 output query embedding을 two-class linear classifier에 제공한 후, 모든 query들에 대한 로짓값을 평균화하여 output matching score를 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.3 Bootstrap Vision-to-Language &lt;/b&gt;&lt;b&gt;Generative Learning from a Frozen LLM&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (9).png&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0P2Xg/btsQVvIcGqg/8D4HrNNPNkbk0q9JzP8wV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0P2Xg/btsQVvIcGqg/8D4HrNNPNkbk0q9JzP8wV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0P2Xg/btsQVvIcGqg/8D4HrNNPNkbk0q9JzP8wV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0P2Xg%2FbtsQVvIcGqg%2F8D4HrNNPNkbk0q9JzP8wV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;795&quot; height=&quot;221&quot; data-filename=&quot;image (9).png&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;</description>
      <category>Paper Review</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/15</guid>
      <comments>https://cooling0.tistory.com/entry/Paper-Review-BLIP-2-Bootstrapping-Language-Image-Pre-training-with-Frozen-Image-Encoders-and-Large-Language-Models#entry15comment</comments>
      <pubDate>Tue, 30 Sep 2025 08:54:10 +0900</pubDate>
    </item>
    <item>
      <title>[Paper Review] Sigmoid Loss for Language Image Pre-Training</title>
      <link>https://cooling0.tistory.com/entry/Paper-Review-Sigmoid-Loss-for-Language-Image-Pre-Training</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (3).png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NlBAO/btsQQWF2yqI/lnwGsF6xlYwwi2bXgyx6ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NlBAO/btsQQWF2yqI/lnwGsF6xlYwwi2bXgyx6ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NlBAO/btsQQWF2yqI/lnwGsF6xlYwwi2bXgyx6ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNlBAO%2FbtsQQWF2yqI%2FlnwGsF6xlYwwi2bXgyx6ek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;830&quot; height=&quot;466&quot; data-filename=&quot;image (3).png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리에 앞서 해당에서 VLM 에 관해 잘표현된 그림이 있어 가져왔습니다. 공부하는 입장에서 도움이 많이됨&amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kyujinpy.tistory.com/166#introduction&quot;&gt;https://kyujinpy.tistory.com/166#introduction&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1758867204777&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[SigLip 논문 리뷰] - Sigmoid Loss for Language Image Pre-Training&quot; data-og-description=&quot;*SigLip를 위한 논문 리뷰 글입니다! 궁금하신 점은 댓글로 남겨주세요!&amp;nbsp;SigLip paper: https://arxiv.org/abs/2303.15343&amp;nbsp;Sigmoid Loss for Language Image Pre-TrainingWe propose a simple pairwise Sigmoid loss for Language-Image Pre-train&quot; data-og-host=&quot;kyujinpy.tistory.com&quot; data-og-source-url=&quot;https://kyujinpy.tistory.com/166#introduction&quot; data-og-url=&quot;https://kyujinpy.tistory.com/166&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cjlPNW/hyZJ2wAJdg/Vv3pkFykyK5KR4C4MWrdI1/img.png?width=508&amp;amp;height=167&amp;amp;face=0_0_508_167,https://scrap.kakaocdn.net/dn/llUPj/hyZJPxeLhP/wpTZHsck6Rk205pbxVnK5k/img.png?width=508&amp;amp;height=167&amp;amp;face=0_0_508_167,https://scrap.kakaocdn.net/dn/N0YF9/hyZJSOgAYC/rrQqabqtkNzgfAm28NVCe1/img.png?width=1057&amp;amp;height=815&amp;amp;face=0_0_1057_815&quot;&gt;&lt;a href=&quot;https://kyujinpy.tistory.com/166#introduction&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kyujinpy.tistory.com/166#introduction&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cjlPNW/hyZJ2wAJdg/Vv3pkFykyK5KR4C4MWrdI1/img.png?width=508&amp;amp;height=167&amp;amp;face=0_0_508_167,https://scrap.kakaocdn.net/dn/llUPj/hyZJPxeLhP/wpTZHsck6Rk205pbxVnK5k/img.png?width=508&amp;amp;height=167&amp;amp;face=0_0_508_167,https://scrap.kakaocdn.net/dn/N0YF9/hyZJSOgAYC/rrQqabqtkNzgfAm28NVCe1/img.png?width=1057&amp;amp;height=815&amp;amp;face=0_0_1057_815');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[SigLip 논문 리뷰] - Sigmoid Loss for Language Image Pre-Training&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;*SigLip를 위한 논문 리뷰 글입니다! 궁금하신 점은 댓글로 남겨주세요!&amp;nbsp;SigLip paper: https://arxiv.org/abs/2303.15343&amp;nbsp;Sigmoid Loss for Language Image Pre-TrainingWe propose a simple pairwise Sigmoid loss for Language-Image Pre-train&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kyujinpy.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;We propose a simple pairwise Sigmoid loss for Language-Image Pre-training (SigLIP)&lt;/li&gt;
&lt;li&gt;softmax normalization 를 사용하는 표준 대조 학습과 달리, sigmoid loss 은 이미지-텍스트 쌍에만 적용되며 정규화를 위해 쌍별 유사성에 대한 전반적인 관점을 필요로 하지 않음&lt;/li&gt;
&lt;li&gt;sigmoid loss은 배치 크기를 더욱 확장할 수 있게 하는 동시에 더 작은 배치 크기에서도 더 나은 성능을 보임&lt;/li&gt;
&lt;li&gt;배치 크기와 손실의 분리를 통해 쌍과 샘플의 영향, 그리고 음수 대 양수 비율을 더욱 자세히 연구할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Introduction&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CLIP 과 ALIGN 이 대조학습을 통해 image-text pairs 의 선구자가 됨.&lt;/li&gt;
&lt;li&gt;이러한 모델을 사전 학습하는 표준 방법은 이미지-텍스트 대조 목적 함수를 활용하는 것
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이는 이미지와 텍스트 임베딩을 정렬하여 일치하는(긍정적인) 이미지-텍스트 쌍을 찾는 동시에, 관련 없는(부정적인) 이미지-텍스트 쌍이 임베딩 공간에서 서로 다르도록 함.&lt;/li&gt;
&lt;li&gt;이는 batch-level softmax-based contrastive loss 을 통해 달성되며, 모든 이미지와 모든 텍스트에 대한 pairwise 유사도 점수를 정규화하기 위해 두 번 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;일반적으로 소프트맥스를 적용하기 전에 최대 입력 값을 빼서 안정화하는데[18], 이를 위해서는 전체 배치에 대한 추가 단계가 필요&lt;/li&gt;
&lt;li&gt;In this paper, we propose a simpler alternative: the sigmoid loss.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 배치에 걸쳐 어떠한 연산도 필요하지 않으므로 분산 손실 구현을 크게 단순화하고 효율성을 높임&lt;/li&gt;
&lt;li&gt;제안된 시그모이드 손실을 여러 설정에서 표준 소프트맥스 손실과 비교&lt;/li&gt;
&lt;li&gt;특히 이미지-텍스트 학습을 위한 두 가지 주요 접근 방식인 CLIP[36]과 LiT[59]를 사용하여 시그모이드 기반 손실을 조사합니다.&lt;/li&gt;
&lt;li&gt;이를 각각 시그모이드 언어 이미지 사전 학습(SigLIP)과 시그모이드 LiT(SigLiT)라 정의&lt;/li&gt;
&lt;li&gt;그러나 소프트맥스와 시그모이드 모두 배치 크기가 증가함에 따라 성능이 포화되는 것을 확인&lt;/li&gt;
&lt;li&gt;다행히 이미지-텍스트 사전 학습에는 32k의 적절한 배치 크기가 충분&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Method&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;image-text pairs : 미니배치 $B = \{ (I_1, T_1), (I_2, T_2), ...,\}$&lt;/li&gt;
&lt;li&gt;미니배치가 주어졌을때 contrastive learning은 pair 가 서로 정렬되도록 유도하는 반면, 일치하지 않은 것은 분리하도록한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그러나 실제적으로 모든 이미지 i에 대해 다른 이미지 j와 연관된 텍스트는 i와 관련이 없으며, 그 반대의 경우도 마찬가지라고 가정&lt;/li&gt;
&lt;li&gt;이러한 가정은 일반적으로 노이즈가 많고 불완전합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Softmax loss for language image pre-training&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 목적을 공식화하기 위해 소프트맥스 손실을 사용할 때 이미지 모델 f(&amp;middot;)와 텍스트 모델 g(&amp;middot;)는 다음 목적을 최소화하도록 훈련됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (4).png&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;99&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BQRgD/btsQR9LldF9/Gj81CFlU50IIWLTDafmj61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BQRgD/btsQR9LldF9/Gj81CFlU50IIWLTDafmj61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BQRgD/btsQR9LldF9/Gj81CFlU50IIWLTDafmj61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBQRgD%2FbtsQR9LldF9%2FGj81CFlU50IIWLTDafmj61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;427&quot; height=&quot;99&quot; data-filename=&quot;image (4).png&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;99&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Sigmoid loss for language image pre-training&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;softmax-based contrastive loss 대신, 전역 정규화 계수 계산이 필요 없는 더 간단한 대안을 제안&lt;/li&gt;
&lt;li&gt;sigmoid-based loss 는 모든 이미지-텍스트 쌍을 독립적으로 처리하여, 학습 문제를 모든 쌍 조합의 데이터셋에 대한 표준 이진 분류로 효과적으로 변환&lt;/li&gt;
&lt;li&gt;이때 일치하는 쌍 $(I_i, T_i)$에는 양의 레이블을, 다른 모든 쌍 $(I_i, T_{i \neq j})$에는 음의 레이블을 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (5).png&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;99&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S9FZV/btsQQWstjjR/fV6ZjM5dHZpESazBsWXD2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S9FZV/btsQQWstjjR/fV6ZjM5dHZpESazBsWXD2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S9FZV/btsQQWstjjR/fV6ZjM5dHZpESazBsWXD2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS9FZV%2FbtsQQWstjjR%2FfV6ZjM5dHZpESazBsWXD2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;99&quot; data-filename=&quot;image (5).png&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;99&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Sigmoid loss for language image pre-training&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;softmax-based contrastive loss 대신, 전역 정규화 계수 계산이 필요 없는 더 간단한 대안을 제안&lt;/li&gt;
&lt;li&gt;sigmoid-based loss 는 모든 이미지-텍스트 쌍을 독립적으로 처리하여, 학습 문제를 모든 쌍 조합의 데이터셋에 대한 표준 이진 분류로 효과적으로 변환&lt;/li&gt;
&lt;li&gt;이때 일치하는 쌍 $(I_i, T_i)$에는 양의 레이블을, 다른 모든 쌍 $(I_i, T_{i \neq j})$에는 음의 레이블을 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cynnHZ/btsQR704YQH/4rQMfKxjhYjtwyVRk09dB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cynnHZ/btsQR704YQH/4rQMfKxjhYjtwyVRk09dB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cynnHZ/btsQR704YQH/4rQMfKxjhYjtwyVRk09dB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcynnHZ%2FbtsQR704YQH%2F4rQMfKxjhYjtwyVRk09dB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;955&quot; height=&quot;500&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Paper Review</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/14</guid>
      <comments>https://cooling0.tistory.com/entry/Paper-Review-Sigmoid-Loss-for-Language-Image-Pre-Training#entry14comment</comments>
      <pubDate>Fri, 26 Sep 2025 15:14:18 +0900</pubDate>
    </item>
    <item>
      <title>[Paper review] EVA: Exploring the Limits of Masked Visual Representation Learning at Scale</title>
      <link>https://cooling0.tistory.com/entry/Paper-review-EVA-Exploring-the-Limits-of-Masked-Visual-Representation-Learning-at-Scale</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EVA는 visible image patches 를 조건으로 마스크 처리된 이미지-텍스트 정렬 vision features 을 재구성하도록 사전 학습된 vanilla ViT 모델&lt;/li&gt;
&lt;li&gt;pretext task 을 통해 EVA를 10억 개의 매개변수로 효율적으로 확장하고, image recognition, video action recognition, object detection, instance segmentation and semantic segmentation 과 같은 광범위한 대표적 시각 하위 작업에서 고강도 지도 학습 없이 새로운 기록을 세울 수 있음&lt;/li&gt;
&lt;li&gt;Moreover, we observe quantitative changes in scaling EVA result in qualitative changes in transfer learning performance that are not present in other models
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들어, EVA는 까다로운 대규모 어휘 인스턴스 분할 작업에서 큰 도약을 이룹니다. 저희 모델은 1,000개 이상의 범주를 가진 LVISv1.0 데이터셋과 80개만 있는 COCO 데이터셋에서 거의 동일한 최첨단 성능을 달성&lt;/li&gt;
&lt;li&gt;EVA는 단순한 시각 인코더를 넘어 이미지와 텍스트를 연결하는 시각 중심의 다중 모달 피벗 역할도 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Introduction&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;413&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg3HIK/btsQREZqpcb/BO6mJ86WRaOU0MgSGuMST1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg3HIK/btsQREZqpcb/BO6mJ86WRaOU0MgSGuMST1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg3HIK/btsQREZqpcb/BO6mJ86WRaOU0MgSGuMST1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg3HIK%2FbtsQREZqpcb%2FBO6mJ86WRaOU0MgSGuMST1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;413&quot; height=&quot;342&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;413&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사전 학습된 언어 모델(PLM)의 확장은 지난 몇 년 동안 자연어 처리(NLP)에 혁명을 일으켰습니다&lt;/li&gt;
&lt;li&gt;이를 통해 Transformer 모델[101]은 거의 무제한의 레이블이 지정되지 않은 데이터를 사용하여 수십억 개의 매개변수로 확장될 수 있었고, 거의 튜닝 없이 다양한 하위 작업으로 일반화&lt;/li&gt;
&lt;li&gt;그러나 가장 경쟁력 있는 10억 개 규모의 비전 사전 학습 모델[33, 64, 71, 123]은 여전히 수억 개의(종종 공개적으로 접근 불가능한) 레이블이 지정된 데이터를 사용하는 지도 학습 또는 약 지도 학습에 크게 의존&lt;/li&gt;
&lt;li&gt;masked image modeling (MIM) 은 heavily supervised pre-training 이전의 초기화 단계로만 채택되거나, 순수한 MIM 사전 학습 모델은 10억 개 규모의 모델 크기에서 유리한 성능을 달성할 수 없음.&lt;/li&gt;
&lt;li&gt;우리는 이러한 격차가 자연 이미지가 원시적이고 정보가 희소하다는 사실에서 비롯된다고 생각&lt;/li&gt;
&lt;li&gt;이상적인 비전 사전 텍스트 작업에는 저수준 기하학 및 구조 정보뿐만 아니라 고수준 의미론의 추상화가 필요한데, 이는 픽셀 수준 복구 작업에서는 거의 포착되지 않음&lt;/li&gt;
&lt;li&gt;In this work,
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대규모 비전 표현 학습에 적합한 MIM pretext task을 찾고, 수천만 개의 레이블이 지정되지 않은 데이터가 있는 10억 개의 매개변수 규모에서 그 한계를 탐구&lt;/li&gt;
&lt;li&gt;(i) 토큰화된 semantic features 이 비전에서 마스크된 모델링을 위한 더 나은 supervision signal 를 제공할 수 있다는 점&lt;/li&gt;
&lt;li&gt;(ii) 마스크된 예측 작업 없이 간단한 사후 증류 과정을 통해서도 좋은 성능을 얻을 수 있다는 점&lt;/li&gt;
&lt;li&gt;파일럿 경험 연구를 통해 MIM에서 예측 대상으로 이미지-텍스트 정렬(즉, CLIP[73]) 비전 특징만 사용하면 확장성이 뛰어나고 광범위한 다운스트림 벤치마크에서 만족스러운 성능을 달성한다는 것을 발견&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Fly EVA to the Moon&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 &amp;sect;2.1에서 이상적인 vision pretext task 을 선택하기 위한 일련의 파일럿 실험을 수행하고, &amp;sect;2.2에서 선택된 사전 학습 목표를 통해 EVA 사전 학습을 확장&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1. The Feature Instrumentality Project&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(i) recovering the masked out tokenized semantic vision features&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(ii) feature distillation from strong pre-trained representation&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (1).png&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boVtCe/btsQQHWRvMP/Njhzp2rbkRHCyOUtXQnm2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boVtCe/btsQQHWRvMP/Njhzp2rbkRHCyOUtXQnm2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boVtCe/btsQQHWRvMP/Njhzp2rbkRHCyOUtXQnm2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboVtCe%2FbtsQQHWRvMP%2FNjhzp2rbkRHCyOUtXQnm2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;403&quot; height=&quot;302&quot; data-filename=&quot;image (1).png&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(i) 의미적 특징 양자화/토큰화[5, 70] 및 (ii) BEiT-3[104]에서처럼 이미지-텍스트 쌍 사전 학습 데이터와 대규모 코퍼스를 명시적으로 사용하지 않고도 비전 중심 표현 학습을 위해 최대 10억 규모의 매개변수와 수천만 개의 레이블이 지정되지 않은 이미지까지 확장될 수 있음을 보여줌&lt;/li&gt;
&lt;li&gt;추가적인 CLIP feature 토큰화나 증류나 다 필요 없음.&lt;/li&gt;
&lt;li&gt;그냥 단순히 마스크 된 CLIP vision feature를 재구성하면 좋은 성능이 나온다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2. Pre-training&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (2).png&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/56jaR/btsQSoal13P/IICDkQgVEkQjKp1pGJdGy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/56jaR/btsQSoal13P/IICDkQgVEkQjKp1pGJdGy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/56jaR/btsQSoal13P/IICDkQgVEkQjKp1pGJdGy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F56jaR%2FbtsQSoal13P%2FIICDkQgVEkQjKp1pGJdGy0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;821&quot; height=&quot;172&quot; data-filename=&quot;image (2).png&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EVA는 1.0B 매개변수를 갖는 바닐라 ViT[33]입니다. 그녀의 모양은 ViT 거대[123]와 BEiT-3[104]의 비전 인코더를 따릅니다.&lt;/li&gt;
&lt;li&gt;사전 학습 중에는 상대 위치 임베딩[89] 및 레이어 스케일[99]을 사용하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Pre-training objective&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EVA is pre-trained to reconstruct the masked out image-text aligned vision features conditioned on visible image patches. (마스크 처리된 이미지-텍스트 정렬 비전 특징을 재구성하도록 사전 학습)&lt;/li&gt;
&lt;li&gt;입력 패치를 [MASK] 토큰으로 손상시키고에 따라 40%의 마스킹 비율을 갖는 블록별 마스킹을 사용&lt;/li&gt;
&lt;li&gt;MIM 사전 학습의 대상은 224&amp;times;224 픽셀 이미지에서 학습된 공개 OpenAI CLIP-L/14 비전 타워&lt;/li&gt;
&lt;li&gt;EVA의 출력 특징은 먼저 정규화되고[3] 선형 계층을 통해 CLIP 특징과 동일한 차원으로 투영됩니다. 손실 함수로 음수 코사인 유사도를 사용합니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Paper Review</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/13</guid>
      <comments>https://cooling0.tistory.com/entry/Paper-review-EVA-Exploring-the-Limits-of-Masked-Visual-Representation-Learning-at-Scale#entry13comment</comments>
      <pubDate>Fri, 26 Sep 2025 14:43:42 +0900</pubDate>
    </item>
    <item>
      <title>1주차 : clip performance tuning (part 1)</title>
      <link>https://cooling0.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-clip-performance-tuning-part-1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 포스트에서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cooling0.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cooling0.tistory.com/11&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1758846502211&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;1주차: CLIP &amp;amp; Contrastive Learning 맛보기&quot; data-og-description=&quot;clip 논문에 관한 paper reivew 는 아래에서 볼 수 있습니다.https://cooling0.tistory.com/8이미지&amp;rarr;카테고리 매칭 코드 설명 (CLIP, ViT-B/32)아래 코드는 이미지 10장과 카테고리별 텍스트 동의어를 CLIP의 공통 &quot; data-og-host=&quot;cooling0.tistory.com&quot; data-og-source-url=&quot;https://cooling0.tistory.com/11&quot; data-og-url=&quot;https://cooling0.tistory.com/11&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/byHCvN/hyZJY8HrFv/z5CNoLCBkntEZQPMlTVdLk/img.png?width=800&amp;amp;height=320&amp;amp;face=0_0_800_320,https://scrap.kakaocdn.net/dn/Bn1kt/hyZJXvcXRZ/bW7NYwDJdYzJKKPkjCHP70/img.png?width=800&amp;amp;height=320&amp;amp;face=0_0_800_320,https://scrap.kakaocdn.net/dn/dAzUHx/hyZJ06zgmh/r3n6b5vJDDCgRhZ84u6MH1/img.png?width=979&amp;amp;height=353&amp;amp;face=0_0_979_353&quot;&gt;&lt;a href=&quot;https://cooling0.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cooling0.tistory.com/11&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/byHCvN/hyZJY8HrFv/z5CNoLCBkntEZQPMlTVdLk/img.png?width=800&amp;amp;height=320&amp;amp;face=0_0_800_320,https://scrap.kakaocdn.net/dn/Bn1kt/hyZJXvcXRZ/bW7NYwDJdYzJKKPkjCHP70/img.png?width=800&amp;amp;height=320&amp;amp;face=0_0_800_320,https://scrap.kakaocdn.net/dn/dAzUHx/hyZJ06zgmh/r3n6b5vJDDCgRhZ84u6MH1/img.png?width=979&amp;amp;height=353&amp;amp;face=0_0_979_353');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1주차: CLIP &amp;amp; Contrastive Learning 맛보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;clip 논문에 관한 paper reivew 는 아래에서 볼 수 있습니다.https://cooling0.tistory.com/8이미지&amp;rarr;카테고리 매칭 코드 설명 (CLIP, ViT-B/32)아래 코드는 이미지 10장과 카테고리별 텍스트 동의어를 CLIP의 공통&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cooling0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 카테고리들을 정확히 맞추지만 확률이 미미한것을 해결하기 위한 방법을 찾아서 적용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 결과에 대한 코드는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_01_clip_advance_part1.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_01_clip_advance_part1.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1758859980544&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;VLM-SIDE-PROJECT/notebooks/01_01_clip_advance_part1.ipynb at main &amp;middot; cooling-0/VLM-SIDE-PROJECT&quot; data-og-description=&quot;Contribute to cooling-0/VLM-SIDE-PROJECT development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_01_clip_advance_part1.ipynb&quot; data-og-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_01_clip_advance_part1.ipynb&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bMpzU2/hyZJRaJwdK/okAkrnoCLltsznKlurP580/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/b7yHIe/hyZJTl5wqo/wAt771VnF2Y1fbHPkBdKl1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_01_clip_advance_part1.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_01_clip_advance_part1.ipynb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bMpzU2/hyZJRaJwdK/okAkrnoCLltsznKlurP580/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/b7yHIe/hyZJTl5wqo/wAt771VnF2Y1fbHPkBdKl1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;VLM-SIDE-PROJECT/notebooks/01_01_clip_advance_part1.ipynb at main &amp;middot; cooling-0/VLM-SIDE-PROJECT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to cooling-0/VLM-SIDE-PROJECT development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그중 첫번째는&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Prompt Ensemble and Negative Prompting 입니다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;**Radford&amp;nbsp;et&amp;nbsp;al.&amp;nbsp;(2021),&amp;nbsp;*Learning&amp;nbsp;Transferable&amp;nbsp;Visual&amp;nbsp;Models&amp;nbsp;From&amp;nbsp;Natural&amp;nbsp;Language&amp;nbsp;Supervision&amp;nbsp;(CLIP)***&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;CLIP&amp;nbsp;원&amp;nbsp;논문에서도&amp;nbsp;단일&amp;nbsp;텍스트&amp;nbsp;대신&amp;nbsp;여러&amp;nbsp;템플릿(예:&amp;nbsp;*&amp;ldquo;a&amp;nbsp;photo&amp;nbsp;of&amp;nbsp;a&amp;nbsp;{label}&amp;rdquo;,&amp;nbsp;&amp;ldquo;a&amp;nbsp;picture&amp;nbsp;of&amp;nbsp;a&amp;nbsp;{label}&amp;rdquo;*)을&amp;nbsp;평균해서&amp;nbsp;class&amp;nbsp;prototype을&amp;nbsp;만듦.&amp;nbsp;**핵심**:&amp;nbsp;단일&amp;nbsp;표현&amp;nbsp;대신&amp;nbsp;프롬프트&amp;nbsp;앙상블이&amp;nbsp;성능을&amp;nbsp;안정화/개선.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;nbsp;**Zhou&amp;nbsp;et&amp;nbsp;al.&amp;nbsp;(2022),&amp;nbsp;*Learning&amp;nbsp;to&amp;nbsp;Prompt&amp;nbsp;for&amp;nbsp;Vision-Language&amp;nbsp;Models&amp;nbsp;(CoOp)***&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  수동 템플릿 대신 *learnable prompt*를 제안. 하지만 아이디어의 뿌리는 **다양한 프롬프트 조합 &amp;rarr; 임베딩 평균**. - **Zhou et al. (2022), *Conditional Prompt Learning for Vision-Language Models (CoCoOp)***&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;카테고리마다&amp;nbsp;다르게&amp;nbsp;조정되는&amp;nbsp;프롬프트를&amp;nbsp;학습.&amp;nbsp;**핵심**:&amp;nbsp;다양한&amp;nbsp;텍스트&amp;nbsp;표현으로&amp;nbsp;프로토타입을&amp;nbsp;풍부하게&amp;nbsp;만드는&amp;nbsp;것이&amp;nbsp;중요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;**Shen&amp;nbsp;et&amp;nbsp;al.&amp;nbsp;(2022),&amp;nbsp;*How&amp;nbsp;Much&amp;nbsp;Can&amp;nbsp;CLIP&amp;nbsp;Benefit&amp;nbsp;Vision-and-Language&amp;nbsp;Tasks?***&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;단순히&amp;nbsp;긍정&amp;nbsp;프롬프트만&amp;nbsp;쓰지&amp;nbsp;않고,&amp;nbsp;혼동되는&amp;nbsp;다른&amp;nbsp;class를&amp;nbsp;**음성&amp;nbsp;프로토타입**으로&amp;nbsp;추가해&amp;nbsp;차이를&amp;nbsp;강조하는&amp;nbsp;기법&amp;nbsp;소개.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;**Kim&amp;nbsp;et&amp;nbsp;al.&amp;nbsp;(2023),&amp;nbsp;*DeBiasing&amp;nbsp;CLIP&amp;nbsp;via&amp;nbsp;Prompt&amp;nbsp;Regularization***&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;잘못된/헷갈리는&amp;nbsp;프롬프트를&amp;nbsp;넣어&amp;nbsp;감점하는&amp;nbsp;방식이&amp;nbsp;**bias&amp;nbsp;완화**와&amp;nbsp;**decision&amp;nbsp;sharpening**에&amp;nbsp;유효함을&amp;nbsp;보임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1758846769260&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CATEGORIES: Dict[str, List[str]] = {
    &quot;white_dress_shirt&quot;: [
        &quot;a photo of a white dress shirt&quot;, &quot;a white button-up shirt&quot;, &quot;a white long-sleeve shirt&quot;
    ],
    &quot;hat&quot;: [
        &quot;a photo of a baseball cap&quot;, &quot;a photo of a hat&quot;, &quot;a black cap&quot;
    ],
    &quot;denim_shirt&quot;: [
        &quot;a photo of a denim shirt&quot;, &quot;a blue denim shirt&quot;
    ],
    &quot;jeans&quot;: [
        &quot;a photo of blue jeans&quot;, &quot;a photo of denim pants&quot;
    ],
    &quot;white_tshirt&quot;: [
        &quot;a photo of a white t-shirt&quot;, &quot;a plain white tee&quot;
    ],
    &quot;pants&quot; : [
        &quot;a photo of a pants&quot;
    ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 prompt 의 다양성을 향상하기 위해 아래와 같은 templates, Attribution, negative prompts 를 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1758851881521&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# -----------------------------------------
# 1) 속성 사전 (전역 기본 + 카테고리별 오버라이드 가능)
#    * 영어 위주 권장 (CLIP 영문 최적화)
# -----------------------------------------
ATTR_LEXICON_GLOBAL = {
    &quot;color&quot;:  [&quot;white&quot;, &quot;blue&quot;, &quot;black&quot;, &quot;navy&quot;, &quot;beige&quot;, &quot;grey&quot;],
    &quot;material&quot;:[&quot;cotton&quot;, &quot;denim&quot;, &quot;linen&quot;, &quot;polyester&quot;],
    &quot;fit&quot;:    [&quot;slim-fit&quot;, &quot;regular&quot;, &quot;oversized&quot;],
    &quot;detail&quot;: [&quot;with collar&quot;, &quot;with buttons&quot;, &quot;with chest pocket&quot;]
}

# 카테고리별 특화 속성 (없으면 전역 사용)
ATTR_LEXICON_PER_CATEGORY = {
    &quot;white_dress_shirt&quot;: {
        &quot;color&quot;: [&quot;white&quot;],
        &quot;material&quot;: [&quot;cotton&quot;, &quot;poplin&quot;],
        &quot;fit&quot;: [&quot;slim-fit&quot;, &quot;regular&quot;, &quot;oversized&quot;],
        &quot;detail&quot;: [&quot;with collar&quot;, &quot;with buttons&quot;]
    },
    &quot;denim_shirt&quot;: {
        &quot;color&quot;: [&quot;blue&quot;, &quot;light blue&quot;, &quot;dark blue&quot;],
        &quot;material&quot;: [&quot;denim&quot;],
        &quot;fit&quot;: [&quot;regular&quot;, &quot;oversized&quot;],
        &quot;detail&quot;: [&quot;with chest pocket&quot;, &quot;with snap buttons&quot;]
    },
    &quot;jeans&quot;: {
        &quot;color&quot;: [&quot;blue&quot;, &quot;light blue&quot;, &quot;dark blue&quot;, &quot;black&quot;],
        &quot;material&quot;: [&quot;denim&quot;],
        &quot;fit&quot;: [&quot;slim-fit&quot;, &quot;regular&quot;, &quot;straight&quot;],
        &quot;detail&quot;: [&quot;with five pockets&quot;]
    },
    &quot;white_tshirt&quot;: {
        &quot;color&quot;: [&quot;white&quot;],
        &quot;material&quot;: [&quot;cotton&quot;],
        &quot;fit&quot;: [&quot;regular&quot;, &quot;oversized&quot;],
        &quot;detail&quot;: [&quot;crew neck&quot;, &quot;round neck&quot;]
    },
    &quot;pants&quot;: {
        &quot;color&quot;: [&quot;black&quot;, &quot;navy&quot;, &quot;beige&quot;, &quot;grey&quot;],
        &quot;material&quot;: [&quot;cotton&quot;, &quot;wool&quot;, &quot;polyester&quot;],
        &quot;fit&quot;: [&quot;slim-fit&quot;, &quot;regular&quot;, &quot;tapered&quot;],
        &quot;detail&quot;: [&quot;with belt loops&quot;, &quot;with side pockets&quot;]
    },
    &quot;hat&quot;: {
        &quot;color&quot;: [&quot;black&quot;, &quot;navy&quot;, &quot;white&quot;],
        &quot;material&quot;: [&quot;cotton&quot;, &quot;wool&quot;],
        &quot;fit&quot;: [&quot;adjustable&quot;],
        &quot;detail&quot;: [&quot;with curved brim&quot;, &quot;with strapback&quot;]
    }
}

# -----------------------------------------
# 2) 프롬프트 템플릿
#    * 간단&amp;middot;중간&amp;middot;풍부형 혼합
# -----------------------------------------
TEMPLATES = [
    &quot;{color} {material} {fit} {category} {detail}&quot;,
    &quot;{fit} {color} {category}&quot;,
    &quot;{color} {category}&quot;,
    &quot;a {color} {category} {detail}&quot;,
    &quot;a photo of a {color} {category}&quot;,
]

# -----------------------------------------
# 3) 음성(negative) 카테고리 매핑 (헷갈리는 이웃)
#    * 필요 시 자유롭게 수정
# -----------------------------------------
NEG_NEIGHBORS = {
    &quot;white_dress_shirt&quot;: [&quot;white_tshirt&quot;, &quot;denim_shirt&quot;, &quot;hat&quot;],
    &quot;denim_shirt&quot;: [&quot;white_dress_shirt&quot;, &quot;white_tshirt&quot;],
    &quot;jeans&quot;: [&quot;pants&quot;],
    &quot;pants&quot;: [&quot;jeans&quot;],
    &quot;white_tshirt&quot;: [&quot;white_dress_shirt&quot;],
    &quot;hat&quot;: [&quot;white_tshirt&quot;, &quot;denim_shirt&quot;]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 프롬포트 를 하나하나 작성하는건 매우 비효율적이므로 자동 생성을 진행하기 위하여 아래 코드 작성&lt;/p&gt;
&lt;pre id=&quot;code_1758851981834&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Weights:
    cat: float = 0.5
    color: float = 0.2
    fit: float = 0.15
    detail: float = 0.15
    material: float = 0.0  

def get_attr_lexicon(category: str):
    base = ATTR_LEXICON_GLOBAL
    over = ATTR_LEXICON_PER_CATEGORY.get(category, {})
    merged = {k: over.get(k, base.get(k, [])) for k in [&quot;color&quot;, &quot;material&quot;, &quot;fit&quot;, &quot;detail&quot;]}
    return merged
    
 def sample_prompts_for_category(category: str, n: int = 30) -&amp;gt; List[str]:
    attrs = get_attr_lexicon(category)
    bag = set()
    for _ in range(n * 2):  # 여유롭게 뽑고 중복 제거
        t = random.choice(TEMPLATES)
        s = t.format(
            color=random.choice(attrs[&quot;color&quot;]) if attrs[&quot;color&quot;] else &quot;&quot;,
            material=random.choice(attrs[&quot;material&quot;]) if attrs[&quot;material&quot;] else &quot;&quot;,
            fit=random.choice(attrs[&quot;fit&quot;]) if attrs[&quot;fit&quot;] else &quot;&quot;,
            detail=random.choice(attrs[&quot;detail&quot;]) if attrs[&quot;detail&quot;] else &quot;&quot;,
            category=category.replace(&quot;_&quot;, &quot; &quot;)
        ).replace(&quot;  &quot;, &quot; &quot;).strip()
        bag.add(s)
        if len(bag) &amp;gt;= n:
            break
    return list(bag)
    
 def make_attribute_phrases(category: str) -&amp;gt; Dict[str, List[str]]:
    attrs = get_attr_lexicon(category)
    phrases = {
        &quot;color&quot;:  [f&quot;{c} {category.replace('_',' ')}&quot; for c in attrs[&quot;color&quot;]],
        &quot;fit&quot;:    [f&quot;{f} {category.replace('_',' ')}&quot; for f in attrs[&quot;fit&quot;]],
        &quot;detail&quot;: [f&quot;{category.replace('_',' ')} {d}&quot; for d in attrs[&quot;detail&quot;]],
        &quot;material&quot;:[f&quot;{m} {category.replace('_',' ')}&quot; for m in attrs[&quot;material&quot;]],
    }
    # 간단한 기본 카테고리 문장
    phrases[&quot;category&quot;] = [f&quot;a photo of a {category.replace('_',' ')}&quot;, f&quot;a {category.replace('_',' ')}&quot;]
    return phrases&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1758852006554&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def build_negative_prototype(category: str, prototypes: Dict[str, torch.Tensor]) -&amp;gt; Optional[torch.Tensor]:
    neg_cands = NEG_NEIGHBORS.get(category, [])
    if not neg_cands:
        return None
    negs = [prototypes[c] for c in neg_cands if c in prototypes]
    if not negs:
        return None
    neg = torch.stack([t.squeeze(0) for t in negs], dim=0).mean(dim=0, keepdim=True)
    neg = neg / neg.norm(dim=-1, keepdim=True)
    return neg
    
 def build_all_prototypes(categories: Dict[str, List[str]], n_samples:int=30) -&amp;gt; Tuple[Dict[str, torch.Tensor], TextEmbedder]:
    embedder = TextEmbedder()
    prototypes = {}
    for cat in categories.keys():
        prototypes[cat] = build_prototype_for_category(cat, embedder, n_samples=n_samples)
    return prototypes, embedder&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당을 기반으로 앙상블 속성 가중 평균 진행&lt;/p&gt;
&lt;pre id=&quot;code_1758852041866&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def build_prototype_for_category(category: str, embedder: TextEmbedder, n_samples:int=30) -&amp;gt; torch.Tensor:
    # (a) 템플릿&amp;times;속성 자동 확장
    prompts = sample_prompts_for_category(category, n=n_samples)
    emb_a = embedder.embed_texts(prompts).mean(dim=0, keepdim=True)
    # (b) 속성 가중 평균
    phrases = make_attribute_phrases(category)
    cat_e = embedder.embed_texts(phrases[&quot;category&quot;]).mean(0, keepdim=True)
    color_e = embedder.embed_texts(phrases[&quot;color&quot;]).mean(0, keepdim=True) if phrases[&quot;color&quot;] else 0
    fit_e = embedder.embed_texts(phrases[&quot;fit&quot;]).mean(0, keepdim=True) if phrases[&quot;fit&quot;] else 0
    detail_e = embedder.embed_texts(phrases[&quot;detail&quot;]).mean(0, keepdim=True) if phrases[&quot;detail&quot;] else 0
    material_e = embedder.embed_texts(phrases[&quot;material&quot;]).mean(0, keepdim=True) if phrases[&quot;material&quot;] else 0

    weighted = (
        WEIGHTS.cat * cat_e +
        (WEIGHTS.color * color_e if isinstance(color_e, torch.Tensor) else 0) +
        (WEIGHTS.fit * fit_e if isinstance(fit_e, torch.Tensor) else 0) +
        (WEIGHTS.detail * detail_e if isinstance(detail_e, torch.Tensor) else 0) +
        (WEIGHTS.material * material_e if isinstance(material_e, torch.Tensor) else 0)
    )

    proto = (emb_a + weighted) / 2.0
    proto = proto / proto.norm(dim=-1, keepdim=True)
    return proto  # shape: (1, d)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위의 과정 코드들을 기반으로 이전 포스팅과 비슷하게 이미지에 대한 매칭 확률을 구해보았습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1758852090929&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@torch.no_grad()
def score_images(
    image_paths: List[str],
    prototypes: Dict[str, torch.Tensor],
    embedder: TextEmbedder,
    beta: float = 0.2,
    temperature: float = 0.7,
    zscore_per_image: bool = True
):
    imgs = [Image.open(p).convert(&quot;RGB&quot;) for p in image_paths]
    inputs = embedder.proc(images=imgs, return_tensors=&quot;pt&quot;).to(embedder.device)
    img_feats = embedder.model.get_image_features(**inputs)
    img_feats = img_feats / img_feats.norm(dim=-1, keepdim=True)  # (B, d)

    cat_names = list(prototypes.keys())
    P = torch.cat([prototypes[c] for c in cat_names], dim=0)  # (K, d)

    neg_map = {c: build_negative_prototype(c, prototypes) for c in cat_names}

    pos_scores = img_feats @ P.T
    neg_scores = torch.zeros_like(pos_scores)
    for j, c in enumerate(cat_names):
        nproto = neg_map[c]
        if nproto is not None:
            neg_scores[:, j] = (img_feats @ nproto.T).squeeze(-1)

    scores = pos_scores - beta * neg_scores

    if zscore_per_image:
        mu = scores.mean(dim=1, keepdim=True)
        std = scores.std(dim=1, keepdim=True).clamp_min(1e-6)
        scores = (scores - mu) / std

    logits = scores / max(1e-6, temperature)
    probs = torch.softmax(logits, dim=-1)  # (B, K)
    return probs, cat_names&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4HMc0/btsQOMYtHSm/MkWyDA2CatnTlbdBKEC3W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4HMc0/btsQOMYtHSm/MkWyDA2CatnTlbdBKEC3W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4HMc0/btsQOMYtHSm/MkWyDA2CatnTlbdBKEC3W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4HMc0%2FbtsQOMYtHSm%2FMkWyDA2CatnTlbdBKEC3W1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1057&quot; height=&quot;433&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ4Rnc/btsQOaE5hwF/Tk69RWfPkOdgV3kBHO2A70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ4Rnc/btsQOaE5hwF/Tk69RWfPkOdgV3kBHO2A70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ4Rnc/btsQOaE5hwF/Tk69RWfPkOdgV3kBHO2A70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ4Rnc%2FbtsQOaE5hwF%2FTk69RWfPkOdgV3kBHO2A70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;582&quot; height=&quot;490&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해본 결과 성능이 말도 안되게 좋아진 것을 느끼며... 마무리하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 저는 time series 를 기반으로 직접 모델링을 진행하거나 SOTA 모델을 가져와 구조를 변경하여 처음부터 학습을 진행시키며 업무를 진행했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VLM 의 성능에 한번더 놀라고 갑니다...&lt;/p&gt;</description>
      <category>사이드 프로젝트</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/12</guid>
      <comments>https://cooling0.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-clip-performance-tuning-part-1#entry12comment</comments>
      <pubDate>Fri, 26 Sep 2025 11:03:05 +0900</pubDate>
    </item>
    <item>
      <title>1주차: CLIP &amp;amp; Contrastive Learning 맛보기</title>
      <link>https://cooling0.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-CLIP-Contrastive-Learning-%EB%A7%9B%EB%B3%B4%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;clip 논문에 관한&amp;nbsp; paper reivew 는 아래에서 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://cooling0.tistory.com/8&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cooling0.tistory.com/8&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1758859921580&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Paper Review]Learning Transferable Visual Models From Natural Language Supervision&quot; data-og-description=&quot;Abstract제한된 형태의 지도 학습은 다른 시각적 개념을 명시하기 위해 추가적인 레이블링된 데이터가 필요하기 때문에 일반성과 유용성을 제한함.이미지에 대한 원시 텍스트로부터 직접 학습하&quot; data-og-host=&quot;cooling0.tistory.com&quot; data-og-source-url=&quot;https://cooling0.tistory.com/8&quot; data-og-url=&quot;https://cooling0.tistory.com/8&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5OcPP/hyZJTfj3yW/6DXOcHdnoZofYAYvTxR99K/img.png?width=800&amp;amp;height=372&amp;amp;face=0_0_800_372,https://scrap.kakaocdn.net/dn/laBNy/hyZJ3vqMlW/2KrEhklYpdTt6IAGXBIwO0/img.png?width=800&amp;amp;height=372&amp;amp;face=0_0_800_372,https://scrap.kakaocdn.net/dn/z7s8i/hyZJWJTmQT/GvkKE2Zibs284VeME7Vv50/img.png?width=921&amp;amp;height=429&amp;amp;face=0_0_921_429&quot;&gt;&lt;a href=&quot;https://cooling0.tistory.com/8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cooling0.tistory.com/8&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5OcPP/hyZJTfj3yW/6DXOcHdnoZofYAYvTxR99K/img.png?width=800&amp;amp;height=372&amp;amp;face=0_0_800_372,https://scrap.kakaocdn.net/dn/laBNy/hyZJ3vqMlW/2KrEhklYpdTt6IAGXBIwO0/img.png?width=800&amp;amp;height=372&amp;amp;face=0_0_800_372,https://scrap.kakaocdn.net/dn/z7s8i/hyZJWJTmQT/GvkKE2Zibs284VeME7Vv50/img.png?width=921&amp;amp;height=429&amp;amp;face=0_0_921_429');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Paper Review]Learning Transferable Visual Models From Natural Language Supervision&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Abstract제한된 형태의 지도 학습은 다른 시각적 개념을 명시하기 위해 추가적인 레이블링된 데이터가 필요하기 때문에 일반성과 유용성을 제한함.이미지에 대한 원시 텍스트로부터 직접 학습하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cooling0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이미지&amp;rarr;카테고리 매칭 코드 설명 (CLIP, ViT-B/32)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드는 이미지 10장과 카테고리별 텍스트 동의어를 CLIP의 공통 임베딩 공간으로 투영한 뒤,&lt;br /&gt;이미지마다 Top-3 카테고리를 예측하는 파이프라인&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목적&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지와 텍스트(카테고리 설명)를 같은 차원   의 임베딩으로 변환&lt;/li&gt;
&lt;li&gt;임베딩을 L2 정규화하여 내적 = 코사인 유사도&lt;/li&gt;
&lt;li&gt;카테고리마다 여러 표현(동의어)을 평균해 프로토타입 임베딩 생성&lt;/li&gt;
&lt;li&gt;각 이미지가 어떤 카테고리에 가장 가까운지 Top-K 매칭 산출&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_clip_intro.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_clip_intro.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1758859912082&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;VLM-SIDE-PROJECT/notebooks/01_clip_intro.ipynb at main &amp;middot; cooling-0/VLM-SIDE-PROJECT&quot; data-og-description=&quot;Contribute to cooling-0/VLM-SIDE-PROJECT development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_clip_intro.ipynb&quot; data-og-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_clip_intro.ipynb&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cBIfDs/hyZJSnbzkL/iEK3DAODurqJ9cjIiwbXi0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bQw9SV/hyZKepuBoj/ylypuCAOK7rdvQRUFIEJTk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_clip_intro.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT/blob/main/notebooks/01_clip_intro.ipynb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cBIfDs/hyZJSnbzkL/iEK3DAODurqJ9cjIiwbXi0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bQw9SV/hyZKepuBoj/ylypuCAOK7rdvQRUFIEJTk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;VLM-SIDE-PROJECT/notebooks/01_clip_intro.ipynb at main &amp;middot; cooling-0/VLM-SIDE-PROJECT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to cooling-0/VLM-SIDE-PROJECT development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Model&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CLIP 모델/프로세서 로드: ViT-B/32 백본의 CLIP을 불러와 평가 모드로 올림.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- processor는 이미지 리사이즈/정규화, 토큰화 등 전처리를 자동 수행(기본 224&amp;times;224).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 환경&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;# syntax=docker/dockerfile:1
ARG PYTHON_VERSION=3.11
FROM python:${PYTHON_VERSION}-slim

# --- basic envs ---
ENV PYTHONDONTWRITEBYTECODE=1     PYTHONUNBUFFERED=1     PIP_NO_CACHE_DIR=1     MPLBACKEND=Agg     DEBIAN_FRONTEND=noninteractive

WORKDIR /workspace

# --- system deps (minimal, headless) ---
RUN apt-get update &amp;amp;&amp;amp; apt-get install -y --no-install-recommends     git ca-certificates curl     &amp;amp;&amp;amp; rm -rf /var/lib/apt/lists/*

# --- python deps ---
COPY requirements.txt /tmp/requirements.txt
RUN python -m pip install --upgrade pip &amp;amp;&amp;amp;     pip install -r /tmp/requirements.txt

# for notebooks &amp;amp; outputs
RUN mkdir -p /workspace/notebooks /workspace/data/images /workspace/out

# Default command: Jupyter Lab (no token; local dev)
EXPOSE 8888
CMD [&quot;bash&quot;, &quot;-lc&quot;, &quot;jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --NotebookApp.token='' --NotebookApp.password=''&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 환경은 다음과 같이 docker 컨테이너를 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 경우 다음과 같이 웹 사이트에서 이미지를 가져왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데님 셔츠 2장, 흰 티셔츠 2장, 모자 2장, 바지 2장 , 흰 셔츠 2장으로 총 10장으로 구성.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVDSC9/btsQQmYMvrS/p0detgfCetOziU9uAPSnk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVDSC9/btsQQmYMvrS/p0detgfCetOziU9uAPSnk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVDSC9/btsQQmYMvrS/p0detgfCetOziU9uAPSnk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVDSC9%2FbtsQQmYMvrS%2Fp0detgfCetOziU9uAPSnk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;993&quot; height=&quot;260&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입력/출력 개념&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;입력&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\texttt{imgs}$: 이미지 경로 리스트 $(N\ \text{장})$&lt;/li&gt;
&lt;li&gt;$\texttt{CATEGORIES}$: ${\ \text{카테고리명} : [\text{동의어 문장들}]\ }$ $(K\ \text{개})$&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력 (주요 변수)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\mathbf{F}_{\text{img}} \in \mathbb{R}^{N \times D}$: 이미지 임베딩 &lt;i&gt;(정규화)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;$\mathbf{F}_{\text{txt}}^{\text{proto}} \in \mathbb{R}^{K \times D}$: 카테고리 &lt;b&gt;프로토타입&lt;/b&gt; 임베딩 &lt;i&gt;(정규화)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;$\mathbf{S}&lt;i&gt;{\text{ic}} = \mathbf{F}&lt;/i&gt;{\text{img}}\ \mathbf{F}_{\text{txt}}^{\text{proto}\top} \in \mathbb{R}^{N \times K}$: 이미지&amp;ndash;카테고리 &lt;b&gt;코사인 유사도&lt;/b&gt; 행렬&lt;/li&gt;
&lt;li&gt;$\texttt{mapping}$: 각 이미지의 &lt;b&gt;Top-3 카테고리&lt;/b&gt;와 유사도 점수 리스트&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 $D=512$. 예: $N=10$, $K=5$ 이면&lt;br /&gt;$\mathbf{F}&lt;i&gt;{\text{img}} \in \mathbb{R}^{10 \times 512}$, $\mathbf{F}&lt;/i&gt;{\text{txt}}^{\text{proto}} \in \mathbb{R}^{5 \times 512}$, $\mathbf{S}_{\text{ic}} \in \mathbb{R}^{10 \times 5}$.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;테스트&lt;/h3&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# === 3) 임베딩 ===
@torch.no_grad()
def get_image_features(paths):
    ims=[Image.open(p).convert(&quot;RGB&quot;) for p in paths]
    x=processor(images=ims, return_tensors=&quot;pt&quot;).to(device)
    f=model.get_image_features(**x); f=f/f.norm(dim=-1, keepdim=True)
    return f

@torch.no_grad()
def text_feats(texts):
    x=processor(text=texts, return_tensors=&quot;pt&quot;, padding=True, truncation=True).to(device)
    f=model.get_text_features(**x); f=f/f.norm(dim=-1, keepdim=True)
    return f&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;get_image_features(...)로 이미지 임베딩 $\mathbf{F}_{\text{img}} \in \mathbb{R}^{N\times D}$ 추출&lt;/li&gt;
&lt;li&gt;text_feats(...)로 텍스트 임베딩을 뽑고, 동의어 평균으로 카테고리 프로토타입 $\mathbf{F}_{\text{txt}}^{\text{proto}} \in \mathbb{R}^{K\times D} $ 생성&lt;/li&gt;
&lt;li&gt;둘 다 L2 정규화 &amp;rarr; 내적이 코사인 유사도랑 같아짐&lt;/li&gt;
&lt;li&gt;유사도 행렬 $\mathbf{S}&lt;i&gt;{\text{ic}} = \mathbf{F}&lt;/i&gt;{\text{img}}\ \mathbf{F}_{\text{txt}}^{\text{proto}\top} \in \mathbb{R}^{N\times K} $ 계산&lt;/li&gt;
&lt;li&gt;각 이미지별로 Top-K 카테고리(예: Top-3) 뽑아서 mapping에 저장&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;F_img = get_image_features(imgs)

# 카테고리별 텍스트 프로토타입(동의어 평균)
cat_names = list(CATEGORIES.keys())
proto = []
for name in cat_names:
    F_t = text_feats(CATEGORIES[name])
    proto.append(F_t.mean(dim=0, keepdim=True))
F_txt_proto = torch.cat(proto, dim=0)              # [K, D]
F_txt_proto = F_txt_proto / F_txt_proto.norm(dim=-1, keepdim=True)

# === 4) 이미지&amp;rarr;카테고리 매칭 (Top-3) ===
S_ic = (F_img @ F_txt_proto.T).cpu().numpy()       # [N_img, K]
idx_top = np.argsort(-S_ic, axis=1)[:, :3]

mapping = []
for i in range(len(imgs)):
    top3 = [(cat_names[j], float(S_ic[i, j])) for j in idx_top[i]]
    mapping.append({
        &quot;image_idx&quot;: i+1, &quot;image_file&quot;: imgs[i].name,
        &quot;pred1&quot;: top3[0][0], &quot;score1&quot;: round(top3[0][1], 4),
        &quot;pred2&quot;: top3[1][0], &quot;score2&quot;: round(top3[1][1], 4),
        &quot;pred3&quot;: top3[2][0], &quot;score3&quot;: round(top3[2][1], 4),
    })&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 과정을 통해 Clip 을 통해 image feature 와 text feats 에 embedding 을 추출하여&lt;br /&gt;코사인 유사도를 구한 결과 아래와 같이 모두 원하는 결과를 도출 하였지만&lt;br /&gt;예측 확률의 차이가 크지 않은 것을 발견했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LbDiC/btsQQ7z1aVF/XvmXmWlF6Gk9RKZ3DqY4s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LbDiC/btsQQ7z1aVF/XvmXmWlF6Gk9RKZ3DqY4s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LbDiC/btsQQ7z1aVF/XvmXmWlF6Gk9RKZ3DqY4s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLbDiC%2FbtsQQ7z1aVF%2FXvmXmWlF6Gk9RKZ3DqY4s1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;979&quot; height=&quot;353&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1CEVs/btsQQFRefBU/23uXpxDdwAsZLyQyhUoHH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1CEVs/btsQQFRefBU/23uXpxDdwAsZLyQyhUoHH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1CEVs/btsQQFRefBU/23uXpxDdwAsZLyQyhUoHH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1CEVs%2FbtsQQFRefBU%2F23uXpxDdwAsZLyQyhUoHH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;477&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1주차의 경우 CLIP 에 대한 이해와 활용을 목표로 하였지만 VLM 의 성능이 이정도 일줄은 몰랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼에도 해당 카테고리들의 확률의 차이가 없어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 다음에는 이를 방법들을 공부해 볼 생각이다.&lt;/p&gt;</description>
      <category>사이드 프로젝트</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/11</guid>
      <comments>https://cooling0.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-CLIP-Contrastive-Learning-%EB%A7%9B%EB%B3%B4%EA%B8%B0#entry11comment</comments>
      <pubDate>Fri, 26 Sep 2025 08:28:11 +0900</pubDate>
    </item>
    <item>
      <title>  12주차 VLM &amp;times; 반대추천 프로젝트 로드맵</title>
      <link>https://cooling0.tistory.com/entry/%F0%9F%93%85-12%EC%A3%BC%EC%B0%A8-VLM-%C3%97-%EB%B0%98%EB%8C%80%EC%B6%94%EC%B2%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%A1%9C%EB%93%9C%EB%A7%B5</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;computer vision 을 공부하고 싶어 퇴근 후 사이드 프로젝트 해보기로 결정하였습니다.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 계획을 세워서 진행해볼 예정입니다......&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과연 할 수 있을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 프로젝트의 코드는 아래 github 에 등록할 예정입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/cooling-0/VLM-SIDE-PROJECT&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1758858739469&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - cooling-0/VLM-SIDE-PROJECT&quot; data-og-description=&quot;Contribute to cooling-0/VLM-SIDE-PROJECT development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT&quot; data-og-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rNVxF/hyZKik7E55/WSjH1k3WSnx2RufeZG5cS0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/YtUBz/hyZJ7w8yCf/Ojc7499dhvze2UEtAInKK0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/cooling-0/VLM-SIDE-PROJECT&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rNVxF/hyZKik7E55/WSjH1k3WSnx2RufeZG5cS0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/YtUBz/hyZJ7w8yCf/Ojc7499dhvze2UEtAInKK0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - cooling-0/VLM-SIDE-PROJECT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to cooling-0/VLM-SIDE-PROJECT development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  1주차: CLIP &amp;amp; Contrastive Learning 맛보기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CLIP 논문 [fig.1,2] 읽기: contrastive loss, temperature 역할&lt;/li&gt;
&lt;li&gt;&amp;ldquo;이미지 인코더 + 텍스트 인코더 &amp;rarr; 공통 latent space&amp;rdquo; 구조&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HuggingFace openai/clip-vit-base-patch32 실행&lt;/li&gt;
&lt;li&gt;옷 이미지 10장, 문장 10개로 임베딩 뽑기 &amp;rarr; 매칭&lt;/li&gt;
&lt;li&gt;matplotlib으로 매칭 결과 시각화&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;notebooks/01_clip_intro.ipynb&lt;/li&gt;
&lt;li&gt;결과 캡처 + 개념 메모&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  2주차: Vision Encoder &amp;amp; 리뷰 텍스트 임베딩&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ViT, EVA-CLIP, SigLIP 구조 비교&lt;/li&gt;
&lt;li&gt;BLIP-2 그림(프로젝터 Q-Former) 확인&lt;/li&gt;
&lt;li&gt;Aspect-based Sentiment Analysis(ABSA) 개념 이해&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리뷰 샘플 50&amp;ndash;100개 모으기&lt;/li&gt;
&lt;li&gt;multilingual-e5-large 또는 bge-m3로 문장 임베딩&lt;/li&gt;
&lt;li&gt;규칙 기반 &lt;b&gt;aspect-opposites.json&lt;/b&gt; 작성&lt;/li&gt;
&lt;li&gt;샘플 리뷰에 (aspect, sentiment) 태깅 함수 작성&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;notebooks/02_text_embeddings.ipynb&lt;/li&gt;
&lt;li&gt;src/nlp/aspect_rules.py, data/aspect_opposites.json&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  3주차: 데이터 수집&amp;middot;정제&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VLM 학습 데이터셋 구성 방식(CLIP의 WIT, LAION) 참고&lt;/li&gt;
&lt;li&gt;데이터 전처리(이미지 resize, 텍스트 정규화) 기초&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아마존 공개 데이터셋에서 &lt;b&gt;상의 카테고리 1&amp;ndash;3k 상품&lt;/b&gt; + 리뷰 5&amp;ndash;20k 수집&lt;/li&gt;
&lt;li&gt;스키마 확정: products.jsonl, reviews.jsonl&lt;/li&gt;
&lt;li&gt;이미지 로컬 캐싱 / 텍스트 정규화&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;data/bronze/products.jsonl, reviews.jsonl&lt;/li&gt;
&lt;li&gt;src/ingest/loader.py&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  4주차: 임베딩&amp;middot;인덱스 구축&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FAISS 기본 구조 (IndexFlatIP, IndexIVF, HNSW)&lt;/li&gt;
&lt;li&gt;검색 효율화 기초(코사인 유사도)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CLIP으로 상품 대표 이미지 임베딩 &amp;rarr; FAISS 인덱스 구축&lt;/li&gt;
&lt;li&gt;텍스트 임베딩도 저장(선택)&lt;/li&gt;
&lt;li&gt;Top-K 유사 이미지 검색 실험&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;src/embeddings/image_embed.py&lt;/li&gt;
&lt;li&gt;src/index/faiss_image.py&lt;/li&gt;
&lt;li&gt;artifacts/faiss.index&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  5주차: 반대추천 로직 v0&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;InfoNCE loss = softmax with temperature &amp;rarr; contrastive ranking&lt;/li&gt;
&lt;li&gt;Retrieval &amp;amp; Ranking 개념 (BM25, embedding ranking 비교)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력: A상품 + 불평 리뷰(&amp;ldquo;작다&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;단계:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Top-K 유사 이미지 검색&lt;/li&gt;
&lt;li&gt;후보 B에서 반대 sentiment(&amp;ldquo;크다&amp;rdquo;) 리뷰 수 집계&lt;/li&gt;
&lt;li&gt;품질 가중치(평점/리뷰수) 반영&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;가중합 점수 함수 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;src/reco/opposite_recommender.py&lt;/li&gt;
&lt;li&gt;CLI로 추천 Top-10 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  6주차: UI 데모 v1&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Streamlit 기본 사용법&lt;/li&gt;
&lt;li&gt;Explainability: 추천 이유 표시 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Streamlit UI &amp;rarr; 입력(A상품, 불평문장) &amp;rarr; 추천 리스트 출력&lt;/li&gt;
&lt;li&gt;추천된 상품마다 근거 리뷰 문장 하이라이트&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;app/demo_streamlit.py&lt;/li&gt;
&lt;li&gt;데모 스크린샷 &amp;amp; GIF&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  7주차: 반대성 검증(NLI)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자연어추론(NLI) 개념: entailment vs contradiction&lt;/li&gt;
&lt;li&gt;MNLI 데이터셋, 사전학습된 모델(deberta-v3-large-mnli)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;불평문 vs 후보 리뷰 문장 &amp;rarr; NLI 추론&lt;/li&gt;
&lt;li&gt;contradiction 확률로 opp_sent 점수 보정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;src/nlp/contradiction.py&lt;/li&gt;
&lt;li&gt;notebooks/07_nli_eval.ipynb&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  8주차: 품질&amp;middot;룰 튜닝&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Aspect term expansion: 동의어/표현 다양성 처리&lt;/li&gt;
&lt;li&gt;데이터 클리닝 기법(스팸 리뷰 필터링)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오버핏/루즈핏/타이트/와이드 등 용어 사전 보강&lt;/li&gt;
&lt;li&gt;리뷰 스팸 필터 추가(짧은 반복문, URL, 과한 이모지)&lt;/li&gt;
&lt;li&gt;품질 점수 계산 개선(별점 보정, 리뷰 helpful 가중치)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;data/dicts/aspect_terms.txt&lt;/li&gt;
&lt;li&gt;정규화 파이프라인 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  9주차: 성능 평가(오프라인)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IR 평가 지표: Precision@K, Recall@K, nDCG&lt;/li&gt;
&lt;li&gt;추천 시스템 평가 기초&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인력 라벨링 100&amp;ndash;200샘플: 반대성 정확도, 유사성 만족도&lt;/li&gt;
&lt;li&gt;다양성, 커버리지 지표 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;reports/offline_eval.md&lt;/li&gt;
&lt;li&gt;문제 사례 분석 표&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  10주차: 경량 튜닝(LoRA)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LoRA, QLoRA 원리(어댑터 기반 미세조정)&lt;/li&gt;
&lt;li&gt;Instruction tuning과의 차이&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소량 라벨(수백&amp;ndash;수천)로 ABSA 분류기 LoRA 튜닝&lt;/li&gt;
&lt;li&gt;zero-shot vs fine-tune 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;src/train/lora_absa.py&lt;/li&gt;
&lt;li&gt;artifacts/absa_lora.bin&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  11주차: 서빙 &amp;amp; 최적화&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FastAPI 기본 API 설계&lt;/li&gt;
&lt;li&gt;모델 양자화(4bit/8bit) 원리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/recommend API 구현 (입력: product_id, complaint)&lt;/li&gt;
&lt;li&gt;Dockerfile 작성, 메모리 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;app/server.py&lt;/li&gt;
&lt;li&gt;deploy/Dockerfile&lt;/li&gt;
&lt;li&gt;간단 부하테스트 결과&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  12주차: 마무리 &amp;amp; 문서화&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;벤치마크 관리(MMBench/MMMU 참고)&lt;/li&gt;
&lt;li&gt;프로젝트 문서화/모델카드 작성법&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최종 README + 설치 가이드 + 데모 영상&lt;/li&gt;
&lt;li&gt;CHANGELOG, 다음 단계 로드맵(다국어 확장, 카테고리 확장 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산출물&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;README.md, CHANGELOG.md, reports/final_report.md&lt;/li&gt;
&lt;li&gt;데모 GIF/영상&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>사이드 프로젝트</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/10</guid>
      <comments>https://cooling0.tistory.com/entry/%F0%9F%93%85-12%EC%A3%BC%EC%B0%A8-VLM-%C3%97-%EB%B0%98%EB%8C%80%EC%B6%94%EC%B2%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%A1%9C%EB%93%9C%EB%A7%B5#entry10comment</comments>
      <pubDate>Wed, 24 Sep 2025 09:08:59 +0900</pubDate>
    </item>
    <item>
      <title>[Paper Review] AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE</title>
      <link>https://cooling0.tistory.com/entry/Paper-Review-AN-IMAGE-IS-WORTH-16X16-WORDSTRANSFORMERS-FOR-IMAGE-RECOGNITION-AT-SCALE</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비전 분야에서 어텐션은 합성곱 신경망과 함께 적용되거나, 합성곱 신경망의 전체 구조는 그대로 유지하면서 특정 구성 요소를 대체하는 데 사용&lt;/li&gt;
&lt;li&gt;본 연구에서는 CNN에 대한 이러한 의존성이 불필요하며, 이미지 패치 시퀀스에 직접 적용된 순수 트랜스포머가 이미지 분류 작업에서 매우 우수한 성능을 발휘할 수 있음을 보여줌&lt;/li&gt;
&lt;li&gt;대량의 데이터로 사전 학습된 Vision Transformer(ViT)는 학습에 필요한 연산 리소스를 크게 줄이면서도 최첨단 합성곱 신경망에 비해 탁월한 결과를 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Introduction&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Self-attention-based architectures 특히 트랜스포머(Transformers, Vaswani et al., 2017)는 자연어 처리(NLP) 분야에서 선호되는 모델이 되었음&lt;/li&gt;
&lt;li&gt;주된 접근 방식은 large text corpus 를 pre-train 한 후, 더 작은 작업별 데이터셋을 사용하여 fine-tune 하는 것&lt;/li&gt;
&lt;li&gt;자연어 처리(NLP)의 성공 사례에 영감을 받아, 여러 연구에서 CNN 유사 아키텍처와 셀프 어텐션(self-attention)을 결합하는 시도가 이루어지고 있으며, 일부는 합성곱을 완전히 대체하기도 합니다&lt;/li&gt;
&lt;li&gt;후자의 모델은 이론적으로는 효율적이지만, 특수 어텐션 패턴을 사용하기 때문에 최신 하드웨어 가속기에서 효과적으로 확장되지는 못함.&lt;/li&gt;
&lt;li&gt;따라서 대규모 이미지 인식 분야에서는 고전적인 ResNet 유사 아키텍처가 여전히 최첨단 기술로 남아 있음&lt;/li&gt;
&lt;li&gt;자연어 처리(NLP)에서 트랜스포머 확장 성공 사례에서 영감을 받아, 최소한의 수정만으로 표준 트랜스포머를 이미지에 직접 적용하는 실험을 진행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지를 패치로 분할하고, 각 패치의 선형 임베딩 시퀀스를 트랜스포머에 입력으로 제공&lt;/li&gt;
&lt;li&gt;이미지 패치는 자연어 처리 애플리케이션에서 tokens (words) 과 동일한 방식으로 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;저희의 Vision Transformer(ViT)는 충분한 규모로 pre-trained 하고 데이터 포인트가 더 적은 작업에 적용했을 때 탁월한 결과를 얻음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공개 ImageNet-21k 데이터 세트 또는 자체 JFT-300M 데이터 세트로 사전 학습했을 때, ViT는 여러 이미지 인식 벤치마크에서 최첨단 수준에 근접하거나 이를 능가&lt;/li&gt;
&lt;li&gt;최고 모델은 ImageNet에서 88.55%, ImageNet-ReaL에서 90.72%, CIFAR-100에서 94.55%, 그리고 VTAB 19개 작업 세트에서 77.63%의 정확도를 달성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;METHOD&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (30).png&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nbdfK/btsQLhKAraU/HEHZf6dB59I80mk5vcPPpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nbdfK/btsQLhKAraU/HEHZf6dB59I80mk5vcPPpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nbdfK/btsQLhKAraU/HEHZf6dB59I80mk5vcPPpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnbdfK%2FbtsQLhKAraU%2FHEHZf6dB59I80mk5vcPPpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;853&quot; height=&quot;491&quot; data-filename=&quot;image (30).png&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 설계에서는 기존 Transformer 를 최대한 충실히 따랐습니다. 의도적으로 단순하게 설계된 이 모델의 장점은 확장 가능한 NLP Transformer 아키텍처와 효율적인 구현을 거의 즉시 사용할 수 있다는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;VISION TRANSFORMER (VIT)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Standard Transformer 는 1D sequence of token embeddings 를 받음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이를 위하여 2D images &amp;rarr; reshape $\mathbf{x} \in \mathbb{R}^{H \times W \times C}$ &amp;rarr; $\mathbf{x}_p \in \mathbb{R}^{N \times (P^2 C)}$&lt;/li&gt;
&lt;li&gt;where (H, W) is the resolution of the original image, C is the number of channels, (P, P) is the resolution of each image patch, and $N = HW/P^2$ is the resulting number of patches, which also serves as the effective input sequence length for the Transformer&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (31).png&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;137&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S1SF7/btsQMq09UXN/S2VsubigZfKJO5fkgtwPH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S1SF7/btsQMq09UXN/S2VsubigZfKJO5fkgtwPH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S1SF7/btsQMq09UXN/S2VsubigZfKJO5fkgtwPH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS1SF7%2FbtsQMq09UXN%2FS2VsubigZfKJO5fkgtwPH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;756&quot; height=&quot;137&quot; data-filename=&quot;image (31).png&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;137&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Transformer는 모든 레이어에 걸쳐 일정한 latent vector 크기 $D$ 를 사용하므로, 패치를 평탄화하고 학습 가능한 linear projection(식 1)을 사용하여 D 차원으로 매핑&lt;/li&gt;
&lt;li&gt;BERT의 [class] 토큰과 유사하게, learnable embedding 을 sequence of embedded patches ( $\mathbf{z}0^0 = \mathbf{x}{class}$ ) 에 추가합니다. 이 임베딩의 트랜스포머 인코더 출력 상태 ( $\mathbf{z}_L^0$ ) 는 이미지 표현 y (식 4)로 사용&lt;/li&gt;
&lt;li&gt;pre-training and fine-tuning 모두에서 classification head 가 $\mathbf{z}_L^0$ 에 연결됩니다. 분류 헤드는 사전 학습 시 하나의 은닉층을 갖는 MLP(Multiple Layer)로 구현되고, 미세 조정 시 하나의 선형층으로 구현&lt;/li&gt;
&lt;li&gt;Position embeddings 유지하기 위해 패치 임베딩에 위치 임베딩을 추가 (1D 임베딩 사용 &amp;rarr; 2D 도 의미 없었음)&lt;/li&gt;
&lt;li&gt;The Transformer encoder consists of alternating layers of multiheaded self-attention and MLP blocks (Eq. 2, 3). Layernorm (LN) is applied before every block, and residual connections after every block.&lt;/li&gt;
&lt;li&gt;The MLP contains two layers with a GELU non-linearity&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Inductive bias&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vision Transformer는 CNN보다 이미지별 귀납적 편향이 훨씬 적습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CNN에서는 지역성, 2차원 이웃 구조, 그리고 이동 등가성이 모델 전체에 걸쳐 각 계층에 내장되어 있습니다.&lt;/li&gt;
&lt;li&gt;ViT에서는 MLP 계층만 지역적이고 이동 등가성을 가지며, 셀프 어텐션 계층은 전역적이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Hybrid Architecture&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;As an alternative to raw image patches, the input sequence can be formed from feature maps of a CNN&lt;/li&gt;
&lt;li&gt;이 하이브리드 모델에서는 패치 임베딩 투영 E(식 1)가 CNN 특징 맵에서 추출된 패치에 적용&lt;/li&gt;
&lt;li&gt;특별한 경우로, 패치의 공간 크기가 1x1일 수 있는데, 이는 특징 맵의 공간 차원을 평탄화하고 변환기 차원으로 투영하여 입력 시퀀스를 얻는다는 것을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;FINE-TUNING AND HIGHER RESOLUTION&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적으로 ViT는 대용량 데이터셋을 사용하여 pre-train 하고, (더 작은) downstream tasks 에 맞춰 fine-tune 합니다.&lt;/li&gt;
&lt;li&gt;For this, we remove the pre-trained prediction head and attach a zero-initialized D &amp;times; K feedforward layer, where K is the number of downstream classes.&lt;/li&gt;
&lt;li&gt;사전 학습보다 고해상도에서 미세 조정하는 것이 종종 유용&lt;/li&gt;
&lt;li&gt;고해상도 이미지를 입력할 때는 패치 크기를 동일하게 유지하여 유효 시퀀스 길이를 늘림.&lt;/li&gt;
&lt;li&gt;Vision Transformer는 메모리 제약 조건 내에서 임의의 시퀀스 길이를 처리할 수 있지만, 사전 학습된 위치 임베딩은 더 이상 의미가 없을 수 있습니다. 따라서 원본 이미지에서의 위치에 따라 사전 학습된 위치 임베딩의 2D 보간을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Paper Review</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/9</guid>
      <comments>https://cooling0.tistory.com/entry/Paper-Review-AN-IMAGE-IS-WORTH-16X16-WORDSTRANSFORMERS-FOR-IMAGE-RECOGNITION-AT-SCALE#entry9comment</comments>
      <pubDate>Wed, 24 Sep 2025 08:42:40 +0900</pubDate>
    </item>
    <item>
      <title>[Paper Review]Learning Transferable Visual Models From Natural Language Supervision</title>
      <link>https://cooling0.tistory.com/entry/Learning-Transferable-Visual-Models-From-Natural-Language-Supervision</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (27).png&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wbYp3/btsQK4RDxo5/sWSkkNAk2G7L0vl49OWg9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wbYp3/btsQK4RDxo5/sWSkkNAk2G7L0vl49OWg9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wbYp3/btsQK4RDxo5/sWSkkNAk2G7L0vl49OWg9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwbYp3%2FbtsQK4RDxo5%2FsWSkkNAk2G7L0vl49OWg9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;921&quot; height=&quot;429&quot; data-filename=&quot;image (27).png&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제한된 형태의 지도 학습은 다른 시각적 개념을 명시하기 위해 추가적인 레이블링된 데이터가 필요하기 때문에 일반성과 유용성을 제한함.&lt;/li&gt;
&lt;li&gt;이미지에 대한 원시 텍스트로부터 직접 학습하는 것은 훨씬 더 광범위한 지도 학습 소스를 활용하는 유망한 대안&lt;/li&gt;
&lt;li&gt;인터넷에서 수집된 4억 개의 (이미지, 텍스트) 쌍으로 구성된 데이터셋을 기반으로 어떤 캡션이 어떤 이미지에 속하는지 예측하는 간단한 사전 학습 작업이 SOTA 이미지 표현을 처음부터 학습하는 효율적&lt;/li&gt;
&lt;li&gt;사전 학습 후, 자연어를 사용하여 학습된 visual concepts 을 참조하거나 새로운 개념을 설명함으로써 모델을 후속 작업으로 즉시 이전할 수 있음 (zero-shot transfer of the model to downstream tasks)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Introduction and Motivating Work&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Task-agnostic objectives such as autoregressive and masked language modeling have scaled across many orders of magnitude in compute, model capacity, and data, steadily improving capabilities&lt;/li&gt;
&lt;li&gt;그러나 컴퓨터 비전과 같은 다른 분야에서는 ImageNet과 같은 crowd-labeled 데이터셋을 사용하여 모델을 사전 학습하는 것이 여전히 표준 관행&lt;/li&gt;
&lt;li&gt;최근의 아키텍처와 사전 학습 방식을 채택한 VirTex, ICMLM 및 ConVIRT는 최근 transformer-based language modeling, masked language modeling 및 contrastive objectives 텍스트에서 이미지 표현을 학습하는 잠재력을 입증&lt;/li&gt;
&lt;li&gt;본 연구에서는 이러한 차이를 줄이고 자연어 지도 학습을 통해 대규모로 학습된 이미지 분류기의 동작을 연구&lt;/li&gt;
&lt;li&gt;인터넷에서 이러한 형태의 방대한 공개 데이터를 활용하여 4억 개의 (이미지, 텍스트) 쌍으로 구성된 새로운 데이터 세트를 생성하고, 처음부터 학습된 ConVIRT의 단순화된 버전인 CLIP(Contrastive Language-Image Pre-training)이 자연어 지도 학습을 위한 효율적인 방법임을 보여줌.&lt;/li&gt;
&lt;li&gt;우리는 거의 두 자릿수의 연산량에 걸쳐 8개의 모델을 학습시켜 CLIP의 확장성을 연구했으며, 전이 성능이 연산 능력의 함수로서 원활하게 예측 가능함을 확인&lt;/li&gt;
&lt;li&gt;GPT 계열과 유사하게 CLIP은 사전 학습 과정에서 OCR, 지리적 위치 인식, 동작 인식 등 다양한 작업을 수행하도록 학습&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Approach&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1. Natural Language Supervision&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;At the core of our approach is the idea of learning perception from supervision contained in natural language. &amp;rarr; natural language supervision&lt;/li&gt;
&lt;li&gt;초기 연구에서는 주제 모델과 n-gram 표현을 사용할 때 자연어의 복잡성을 해결해야 했지만, deep contextual representation learning 의 개선을 통해 이제는 풍부한 감독 소스를 효과적으로 활용할 수 있는 도구가 있음을 알 수 있음.&lt;/li&gt;
&lt;li&gt;자연어 학습은 다른 학습 방법에 비해 여러 가지 잠재적인 장점을 가지고 있음.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지 분류를 위한 표준 크라우드소싱 레이블링에 비해 자연어 지도 학습을 확장하기가 훨씬 쉬움&lt;/li&gt;
&lt;li&gt;자연어를 기반으로 하는 방법은 인터넷에 있는 방대한 양의 텍스트에 포함된 지도 학습을 통해 수동적으로 학습할 수 있음&lt;/li&gt;
&lt;li&gt;자연어 학습은 대부분의 비지도 학습 또는 자기 지도 학습 방식보다 중요한 이점을 가지고 있는데, 단순히 표현을 학습하는 것이 아니라 해당 표현을 언어에 연결하여 유연한 제로샷 전이를 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2. Creating a Sufficiently Large Dataset&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;natural language supervision 의 주요 동기는 인터넷에 공개적으로 이용 가능한 이러한 형태의 방대한 데이터이다.&lt;/li&gt;
&lt;li&gt;인터넷에서 공개적으로 이용 가능한 다양한 출처에서 수집한 4억 개의 (이미지, 텍스트) 쌍으로 구성된 새로운 데이터셋을 구축&lt;/li&gt;
&lt;li&gt;To attempt to cover as broad a set of visual concepts as possible, we search for (image, text) pairs as part of the construction process whose text includes one of a set of 500,000 queries.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3. Selecting an Efficient Pre-Training Method&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VirTex와 유사한 초기 접근법은 이미지 CNN과 텍스트 변환기를 처음부터 공동 학습하여 이미지 캡션을 예측하는 것&lt;/li&gt;
&lt;li&gt;그림 2는 ResNet-50 이미지 인코더보다 두 배 더 많은 계산량을 사용하는 6,300만 개의 매개변수를 가진 변환기 언어 모델이 동일한 텍스트의 Bag-of-Words 인코딩을 예측하는 훨씬 더 간단한 기준선보다 세 배 더 느리게 ImageNet 클래스를 인식하는 것을 보여줌&lt;/li&gt;
&lt;li&gt;Both these approaches share a key similarity &amp;rarr; 각 이미지에 수반되는 텍스트의 정확한 단어를 예측하려고 시도
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이는 이미지와 함께 나타나는 다양한 설명, 주석 및 관련 텍스트로 인해 어려운 작업&lt;/li&gt;
&lt;li&gt;이미지에 대한 contrastive representation learning 에 대한 최근 연구에서는 contrastive objectives 가 equivalent predictive objective 보다 더 나은 표현을 학습할 수 있음을 발견&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;we explored training a system to solve the potentially easier proxy task of predicting only which text as a whole is paired with which image and not the exact words of that text.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 단어 묶음 인코딩 기준선을 시작으로, 그림 2에서 예측 목적을 대조 목적으로 바꾸었고 ImageNet으로의 제로샷 전송 속도에서 효율성이 4배 더 향상되는 것을 관찰&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (28).png&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QtTTD/btsQMFpNKed/4k5YcJBEk8NKjUbm3Kcnk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QtTTD/btsQMFpNKed/4k5YcJBEk8NKjUbm3Kcnk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QtTTD/btsQMFpNKed/4k5YcJBEk8NKjUbm3Kcnk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQtTTD%2FbtsQMFpNKed%2F4k5YcJBEk8NKjUbm3Kcnk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;468&quot; height=&quot;295&quot; data-filename=&quot;image (28).png&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;N개의 (이미지, 텍스트) 쌍으로 구성된 배치가 주어지면, CLIP은 배치 전체에서 가능한 N &amp;times; N개의 (이미지, 텍스트) 쌍 중 실제로 발생한 쌍을 예측하도록 학습&lt;/li&gt;
&lt;li&gt;이를 위해 CLIP은 이미지 인코더와 텍스트 인코더를 공동으로 학습하여 배치 내 N개의 실수 쌍의 이미지 및 텍스트 임베딩의 코사인 유사도를 최대화하는 동시에 $N^2 - N$ 개의 잘못된 쌍의 임베딩의 코사인 유사도를 최소화함으로써 다중 모달 임베딩 공간을 학습
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이러한 유사도 점수에 대한 대칭적 교차 엔트로피 손실을 최적화&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (29).png&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p6l28/btsQKbjuYwP/oMe5K3IXtqHdJhE9fXBWRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p6l28/btsQKbjuYwP/oMe5K3IXtqHdJhE9fXBWRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p6l28/btsQKbjuYwP/oMe5K3IXtqHdJhE9fXBWRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp6l28%2FbtsQKbjuYwP%2FoMe5K3IXtqHdJhE9fXBWRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;468&quot; data-filename=&quot;image (29).png&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mageNet 가중치로 이미지 인코더를 초기화하거나 사전 학습된 가중치로 텍스트 인코더를 초기화하지 않고 처음부터 CLIP을 학습&lt;/li&gt;
&lt;li&gt;표현과 대조 임베딩 공간 사이의 비선형 투영을 사용하지 않음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대신 각 인코더의 표현에서 다중 모달 임베딩 공간으로 매핑하기 위해 선형 투영만 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이미지 transformation function 을 단순화
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;학습 과정에서는 크기가 조정된 이미지에서 무작위로 정사각형을 잘라내는 것만 데이터 증강에 사용&lt;/li&gt;
&lt;li&gt;소프트맥스에서 로짓의 범위를 제어하는 temperature parameter &amp;tau;는 하이퍼파라미터로 변환되는 것을 방지하기 위해 학습 과정에서 log-parameterized multiplicative scalar 로 직접 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.4. Choosing and Scaling a Model&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지 인코더를 위해 두 가지 아키텍처를 고려
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 아키텍처는 널리 채택되고 성능이 검증된 ResNet-50&lt;/li&gt;
&lt;li&gt;두 번째 아키텍처에서는 최근 도입된 비전 트랜스포머(Vision Transformer, ViT)(Dosovitskiy et al., 2020)를 실험&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;텍스트 인코더는 Radford et al.(2019)에서 설명한 아키텍처 수정을 적용한 Transformer
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 크기로 8개의 어텐션 헤드가 있는 63M 매개변수 12계층 512폭 모델을 사용&lt;/li&gt;
&lt;li&gt;Transformer는 49,152개의 어휘 크기를 갖는 텍스트의 소문자 바이트 쌍 인코딩(BPE) 표현에서 작동&lt;/li&gt;
&lt;li&gt;계산 효율성을 위해 최대 시퀀스 길이는 76으로 제한&lt;/li&gt;
&lt;li&gt;텍스트 시퀀스는 [SOS] 및 [EOS] 토큰으로 괄호로 묶이고 [EOS] 토큰에서 Transformer의 최상위 계층의 활성화는 계층 정규화된 다음 다중 모달 임베딩 공간으로 선형 투영되는 텍스트의 특징 표현으로 처리&lt;/li&gt;
&lt;li&gt;사전 훈련된 언어 모델로 초기화하거나 언어 모델링을 보조 목표로 추가하는 기능을 유지하기 위해 텍스트 인코더에서 마스크된 자기 주의가 사용되었지만, 이에 대한 탐구는 향후 작업으로 남겨둠.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 실험&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서는 그냥 좋은 아이디어를 정리하면
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;embedding ensemble&lt;/li&gt;
&lt;li&gt;Prompt engineering (up acc)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Paper Review</category>
      <author>cooling0</author>
      <guid isPermaLink="true">https://cooling0.tistory.com/8</guid>
      <comments>https://cooling0.tistory.com/entry/Learning-Transferable-Visual-Models-From-Natural-Language-Supervision#entry8comment</comments>
      <pubDate>Tue, 23 Sep 2025 14:28:27 +0900</pubDate>
    </item>
  </channel>
</rss>