<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>dbwls-log 님의 블로그</title>
    <link>https://dbwls-log.tistory.com/</link>
    <description>이게 왜 안돼 </description>
    <language>ko</language>
    <pubDate>Wed, 22 Jul 2026 19:23:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>dbwls-log</managingEditor>
    <image>
      <title>dbwls-log 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7999984/attach/181e1018ead64c9e9c9d3f57c7c764d5</url>
      <link>https://dbwls-log.tistory.com</link>
    </image>
    <item>
      <title>[NeurIPS-2017] Attention is All you Need</title>
      <link>https://dbwls-log.tistory.com/127</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;해당 논문의 제목은 &quot;Attention is All you Need&quot;로 Transformer가 처음으로 제안된 논문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2017년 NeurIPS에 게재되었고, RNN/CNN 없이 attention만으로 시퀀스 변환(번역)을 하는 Transformer 아키텍처를 제안했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1784009761754&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Attention is All you Need&quot; data-og-description=&quot;Requests for name changes in the electronic proceedings will be accepted with no questions asked. However name changes may cause bibliographic tracking issues. Authors are asked to consider this carefully and discuss it with their co-authors prior to reque&quot; data-og-host=&quot;proceedings.neurips.cc&quot; data-og-source-url=&quot;https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html&quot; data-og-url=&quot;https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Attention is All you Need&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Requests for name changes in the electronic proceedings will be accepted with no questions asked. However name changes may cause bibliographic tracking issues. Authors are asked to consider this carefully and discuss it with their co-authors prior to reque&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;proceedings.neurips.cc&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서론&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN 특히 LSTM/GRU 계열은 언어 모델링과 기계번역 같은 시퀀스 변환 문제에서 오랫동안 표준으로 자리 잡고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN 구조는 입력 시퀀스의 위치 t를 계산 스텝에 그대로 대응시킨다. 즉, t번째 hidden state $h_t$는 이전 상태 $h_{t-1}$과 현재 입력으로 계산된다.&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;여기서 근본적인 병목이 발생한다. 이 구조는 본질적으로 순차적이라 학습 샘플 내부에서 병렬화가 불가능하다. 시퀀스 길이가 길어질수록 문제가 심각해지는데, 메모리 제약 때문에 여러 샘플을 배치로 묶어 처리하는 것도 제한을 받기 때문이다. fatorization trick, conditional computation 같은 기법들로 효율을 개선하려는 시도는 있었지만, 순차적 계산이라는 근본 제약 자체는 그대로 남아있다.&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;Attention 메커니즘 자체는 이미 여러 시퀀스 모델링 task에서 사용이 되고 있었다. 입력이나 출력 시퀀스 내에서 거리에 상관없이 의존 관계를 모델링할 수 있다는 장점이 있기 때문이다. 거의 모든 경우 어텐션은 RNN과 함께 사용되었는데, RNN을 보조하는 역할을 수행했다는 것이다.&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;해당 논문에서는 Recurrence를 완전히 없애고, attention 메커니즘만으로 입력과 출력 사이의 global dependency를 이끌어내는 모델을 제안한다. 이 모델을 통해 병렬화가 가능해지고, 번역 품질 SOTA도 도달했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;제안하는 모델&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;전체적인 구조&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEjLhe/dJMb9979vNY/OWhPzUDixCKhcjqEnIR5uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEjLhe/dJMb9979vNY/OWhPzUDixCKhcjqEnIR5uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEjLhe/dJMb9979vNY/OWhPzUDixCKhcjqEnIR5uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEjLhe%2FdJMb9979vNY%2FOWhPzUDixCKhcjqEnIR5uk%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;352&quot; height=&quot;489&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;489&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;Transformer는 encoder-decoder 구조를 따르되, 둘 다 stacked self-attention + point-wise fully connected layer로만 구성된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;Encoder&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N=6개의 동일한 레이어를 쌓은 구조를 가진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이어 하나당 sub-layer를 2개씩 가진다.&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Multi-head self-attention&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Position-wise fully connected feed-forward network&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 sub-layer마다 residual connection을 적용한 뒤 layer Normalization을 수행한다. 즉, sub-layer의 출력은 $LayerNorm(x+Sublayer(x))$이 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Residual Connection을 원활하게 하기 위하여 embedding 레이어를 포함한 모든 sub-layer의 출력 차원을 $d_{model}=512$로 통일했다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;Decoder&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인코더와 마찬가지로 N=6개의 동일 레이어를 쌓은 구조를 가진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 encoder와 달리 sub-layer를 3개씩 가진다.&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Masked multi-head self-attention&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Encoder-decoder attention : 인코더 출력에 대해 MHA 수행&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Position-wise feed-forward network&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인코더와 동일하게 각 sub-layer에 resiudal connection + layer Normalization을 적용한다.&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;여기서 핵심은 masking 파트이다. self-attention sub-layer를 수정해서 특정 위치가 자기보다 위에 있는 위치를 보지 못하게 막는다. 출력 임베딩이 한 칸씩 밀려있는 것(offset by one position)과 이 masking이 합쳐져서, position i의 예측이 i보다 앞선 위치의 출력에만 의존하도록 보장하여 auto-regressive 속성을 유지한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Attention : Scaled Dot-Product Attention, Multi-Head Attention&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attention 함수는 query와 key-value 쌍 집합을 output으로 매핑하는 함수라고 볼 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;query, key, value, output은 모두 vector이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;output은 value들의 가중합으로 계산되는데, 각 value에 곱해지는 가중치는 해당 query와 대응되는 key 사이의 호환성 함수로 결정된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;Scaled Dot-Product Attention&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmBWNh/dJMcaic3hoB/0rOpFyMXrvKGkQU2xSxQFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmBWNh/dJMcaic3hoB/0rOpFyMXrvKGkQU2xSxQFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmBWNh/dJMcaic3hoB/0rOpFyMXrvKGkQU2xSxQFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmBWNh%2FdJMcaic3hoB%2F0rOpFyMXrvKGkQU2xSxQFk%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;229&quot; height=&quot;247&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;247&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 : query와 key(차원 : $d_k$), value(차원 $d_v$)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계산 과정&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;query와 모든 key의 내적(dot product)을 구함&amp;nbsp;&lt;/li&gt;
&lt;li&gt;그 값을 $\sqrt d_k$로 나눔 (스케일링)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;softmax를 적용해서 value에 대한 가중치를 얻음&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$Attention(Q, K, V) = softmax(QK^T / \sqrt{d_k})V$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;additive attention과 이론적 복잡도는 비슷하지만, dot-product는 행렬곱 최적화 코드로 구현 가능해서 훨씬 빠르고 공간 효율적이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 $\sqrt d_k$를 해주는 이유는 $d_k$가 크면 내적 값 자체가 커지는데, softmax가 극도로 작은 기울기 영역으로 밀려난다. 이를 막기 위해 $1/\sqrt d_k$로 나눠서 값 크기를 조정해준다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;MHA : Multi-Head Attention&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvimYK/dJMcacqlCb3/fOaQOy91T5OCy0kgA3n88k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvimYK/dJMcacqlCb3/fOaQOy91T5OCy0kgA3n88k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvimYK/dJMcacqlCb3/fOaQOy91T5OCy0kgA3n88k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvimYK%2FdJMcacqlCb3%2FfOaQOy91T5OCy0kgA3n88k%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;240&quot; height=&quot;267&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;267&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;blockquote data-ke-style=&quot;style2&quot;&gt;$MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O$ &lt;br /&gt;$head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d_{model}$ 차원으로 attention을 한 번 하는 대신, Q/K/V를 h개의 서로 다른 학습된 linear projection으로 각각 $d_k, d_k, d_v$ 차원에 투영한 뒤, h개를 병렬로 attention 계산을 수행한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 단일 Head는 평균을 내는 과정에서 정보가 뭉개질 수 있고, multi-head는 서로 다른 표현 부분 공간, 서로 다른 위치의 정보를 동시에 attend 가능하기 때문이다.&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;본 논문에서는 $h = 8, d_k=d_v=d_{model}/h = 64$로 설정하여 head를 늘리는 대신 각 head 차원을 줄여서, 전체 연산량은 단일 head + full dimension일 때와 비슷하도록 한다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;모델 내 Attention 활용 3가지 방식&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Encoder-Decoder Attention&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Query는 이전 디코더 레이어에서, Key/Value는 인코더의 출력에서 나온다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코더의 모든 위치가 입력 시퀀스의 모든 위치를 attend할 수 있게 해준다. 기존 sequence-to-sequence 모델에서 흔히 쓰이던 인코더-디코더 어텐션 메커니즘을 그대로 모방한 것이다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Encoder Self-Attention&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Query/Key/Value 모두 인코더의 이전 레이어 출력에서 나온 것을 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인코더 안의 각 위치가 이전 레이어의 모든 위치를 attend할 수 있다. self-attention이라서 Q/K/V가 다 같은 시퀀스에서 나온다는게 핵심이다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Decoder Self-Attention (Masked)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Query, Key, Value 모두 디코더 이전 레이어에서 나온다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코더의 각 위치가 자기 자신을 포함해 그 이전 위치까지만 attend 가능하다. masking이 필요한 이유는 디코더는 auto-regressive 특성을 유지해야 하기 때문에, 미래 위치의 정보가 새어 들어가면 안되기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scaled dot-product attention 내부에서, softmax에 들어가기 전에 미래 위치에 해당하는 값들을 전부 $-\infty$로 마스킹 처리한다.&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;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Position-wise Feed-Forward Networks&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;encoder와 decoder의 각 레이어는 attention sub-layer 외에도, fully connected feed-forward network를 하나씩 포함한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 FFN은 각 위치마다 개별적으로, 동일하게 적용한다. 즉 시퀀스 내 모든 토큰 위치에 같은 FFN을 독립적으로 통과시키는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$FFN(x) = max(0, xW_1 + b_1)W_2 + b_2$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;linear tranformation 자체는 위치마다 동일하지만, 레이어마다는 파라미터가 다르다. 다르게 표현하면, 커널 크기 1인 conv를 두 번 적용하는 것과 같다는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차원은 $d_{model}$ = 512, 중간 hidden layer는 $d_{ff}$=2048로 설정한다. (한번 확장했다가 축소)&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;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Embeddings and Softmax&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 시퀀스 변환 모델처럼, 학습된 임베딩을 사용해 입력/출력 토큰을 $d_{model}$ 차원 벡터로 변환한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docoder 출력을 다음 토큰 확률로 바꿀 때도 학습된 linear transformation + softmax를 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 임베딩 레이어와 pre-softmax linear transformation이 동일한 가중치 행렬을 공유한다. 임베딩 레이어에서는 가중치에 $\sqrt d_{model}$을 곱해준다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b94ZFJ/dJMcahLT1Zn/lJf1vbgzU1mpYKqOLsQQ1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b94ZFJ/dJMcahLT1Zn/lJf1vbgzU1mpYKqOLsQQ1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b94ZFJ/dJMcahLT1Zn/lJf1vbgzU1mpYKqOLsQQ1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb94ZFJ%2FdJMcahLT1Zn%2FlJf1vbgzU1mpYKqOLsQQ1k%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;547&quot; height=&quot;127&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;106&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Positional Encoding&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer는 recurrence도 없고 Conv도 없다. 그래서 시퀀스의 순서 정보를 모델이 활용하려면 별도로 위치 정보를 주입해줘야 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 인코더와 디코더 스택 맨 아래에서, 입력 임베딩에 &quot;positional encoding&quot;을 더해준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Positional Encoding은 임베딩과 동일한 차원을 가지기 때문에 그냥 더할 수 있고, 위치 인코딩 방식은 학습 되는 것과 고정된 것 둘 다 존재한다.&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;해당 논문에서는 sine, cosine 함수를 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$PE(pos, 2i) = sin( pos / 10000^{2i/d_model} )$ &lt;br /&gt;$PE(pos, 2i+1) = cos( pos / 10000^{2i/d_model} )$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pos = 위치, i = 차원 인덱스를 나타낸다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;positional encoding은 각 차원마다 서로 다른 주파수를 가진 sinusoid가 대응된다. 파장은 $2\pi$부터 $10000 \cdot 2\pi$까지 등비수열을 이룬다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;sin/cos를 사용하는 이유&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상대 위치 학습 용이성&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임의의 고정 offset k에 대해, PE(pos+k)는 PE(pos)의 선형 함수로 표현 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 모델이 상대적인 위치 관계를 attention을 통해 쉽게 학습할 수 있을거라 가정하는 것이다.&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;2. 길이 외삽(extrapolation)&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;실험 결과&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bya7vj/dJMcaiqvb13/CDMinFUyiKgAGKSymefcE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bya7vj/dJMcaiqvb13/CDMinFUyiKgAGKSymefcE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bya7vj/dJMcaiqvb13/CDMinFUyiKgAGKSymefcE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbya7vj%2FdJMcaiqvb13%2FCDMinFUyiKgAGKSymefcE0%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;556&quot; height=&quot;243&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;243&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer가 번역 외 다른 task에도 잘 일반화하는지 수행하기 위해서 영어 구문 해석을 수행했고, 데이터셋은 4-layer Transformer, $d_{model}$=1024를 WSJ(Wall Street Journal)을 사용했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;두 가지 학습 조건&lt;/span&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;WSJ only&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약 4만 문장으로 소량의 데이터로 구성되어있다. 기존 최고 모델인 Dyer et al.의 91.7%보다는 0.4%정도 낮긴하지만, 다른 모델들에서는 기존 모델을 뛰어 넘는 성능을 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, task-specific 튜닝 없이도 소량 데이터 환경에서 거의 SOTA급 성능을 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;Semi-supervised&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약 1700만 문장으로 BerkleyParser sorpus 등이 추가되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 다른 모델의 성능을 모두 뛰어 넘는 F1 score 92.7%를 달성하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;semi-supervised 조건에서는 이 표의 discriminative/semi-supervised 모델 중 최고 성능을 보인다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 실험의 목적은 번역 특화 모델이 아니라 범용 아키텍처임을 증명하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구문 분석은 출력이 강한 구조적 제약을 받고 입력보다 훨씬 긴 특성이 있어, RNN이나 seq2seq 모델은 소량 데이터에서 SOTA를 달성하지 못했던 task였다. 하지만 transformer는 task-specific 튜닝을 거의 안했음에도 소량/대량 데이터 양쪽에서 경쟁력 있는 성능을 보여 범용성을 입증하였다.&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;&lt;/p&gt;</description>
      <category>석사과정 기록/논문 리뷰</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/127</guid>
      <comments>https://dbwls-log.tistory.com/127#entry127comment</comments>
      <pubDate>Wed, 15 Jul 2026 17:05:36 +0900</pubDate>
    </item>
    <item>
      <title>[IEEE] PDENet: A High-Precision Forest Fire Detection Network Enabled by Dual-Stream Hierarchical and Elastic Response</title>
      <link>https://dbwls-log.tistory.com/126</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 리뷰할 논문은 IEEE에 게재된 산불 탐지 관련 논문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/11077377&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/11077377&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1783493657293&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;https://ieeexplore.ieee.org/document/11077377&quot; data-og-description=&quot;&quot; data-og-host=&quot;ieeexplore.ieee.org&quot; data-og-source-url=&quot;https://ieeexplore.ieee.org/document/11077377&quot; data-og-url=&quot;https://ieeexplore.ieee.org/document/11077377&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/11077377&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ieeexplore.ieee.org/document/11077377&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;https://ieeexplore.ieee.org/document/11077377&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ieeexplore.ieee.org&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;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;아래 작성된 내용 및 이미지는 모두 해당 논문에 나와있는 내용이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서론&lt;/span&gt;&lt;/h2&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;기존의 감지 방법들은 육안 순찰, 고정 CCTV, 위성 원격 탐사 등이 있는데 실시간 대응이 어렵거나 정확하지 않다는 한계가 있었다. 따라서 최근에는 UAV와 딥러닝을 결합하여 실시간+고해상도로 앞선 방법들의 단점을 보완할 수 있게 되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 해당 방법도 아직 완벽하지 않고, 다음과 같은 3가지 문제가 있다고 언급한다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 화재와 연기의 특징을 제대로 살리지 못한다.&amp;nbsp;&lt;br /&gt;2. 주변 배경과 헷갈린다.&amp;nbsp;&lt;br /&gt;3. 화재 크기가 너무 다양하다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 3가지 문제를 해결하기 위해 해당 모델이 제안되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;제안하는 방법&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wAgGK/dJMcaa0e1jd/tvwk8S7xbd14APSltyORDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wAgGK/dJMcaa0e1jd/tvwk8S7xbd14APSltyORDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wAgGK/dJMcaa0e1jd/tvwk8S7xbd14APSltyORDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwAgGK%2FdJMcaa0e1jd%2Ftvwk8S7xbd14APSltyORDk%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;731&quot; height=&quot;491&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;DSHDB : Dual-Stream Hierarchical Detection Backbone&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DSHDB는 forest fire/smoke의 특징 추출과 상호작용 문제를 해결하기 위해 설계되었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특히 스케일이 다양하고, 배경이 복잡한 상황에서도 잘 동작하도록 만드는게 목표이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP6zqh/dJMcafN5DMd/DQYJKZ8MY5gC2gnQRXi9p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP6zqh/dJMcafN5DMd/DQYJKZ8MY5gC2gnQRXi9p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP6zqh/dJMcafN5DMd/DQYJKZ8MY5gC2gnQRXi9p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP6zqh%2FdJMcafN5DMd%2FDQYJKZ8MY5gC2gnQRXi9p1%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;538&quot; height=&quot;423&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;423&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;먼저 기존 백본들과 비교해보자.&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;1. BiCSNet-48&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;양방향 cross-scale 구조지만, 다운 샘플링 방식이 고정되어 있어서 산불과 연기처럼 불규칙하고 유동적인 형태를 따라가지 못한다.&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;2. LSKNet&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 커널을 분해해서 receptive field를 동적으로 조절하는 방식으로, 일반 객체 탐지에서는 좋은데 초기 단계의 미세한 화재 신호를 복잡한 숲 텍스처와 구분하는 특화 기능은 없다.&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;3. DPFANet&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN과 Swin Transformer를 섞은 하이브리드 구조로 로컬+글로벌을 다 보려고 하지만, 대용량 원격탐사 이미지 처리에는 비효율적이다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;DSHDB의 핵심 아이디어&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DSHDB의 구조 철학은 두 개의 스트림이 서로 다른 역할을 맡는다는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DSHDB는 이름 그대로 dual-stream 구조이다. 두 흐름이 완전히 분리된 게 아니라 서로 정보를 주고받는게 핵심이다.&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;b&gt;1번째 스트림 : Stream 1&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 특징을 추출하고 attention의 역할을 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속적인 conv layer와 SFEM(Selective Feature Enhancement Module)을 거치며 단계적으로 다운 샘플링된다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2번째 스트림 : Stream 2&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alignment(정렬)과 aggregation(집계) 역할을 수행한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 conv layer와 SFEM으로 구성되지만, 여기에 concat 모듈이 추가되어 다단계 특징을 정리 및 통합한다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 스트림이 CSFI라는 메커니즘을 통해 서로 특징을 주고받으면서 결과적으로는 저수준 공간 정보와 고수준 의미 정보를 교환하고, 두 정보가 계속 섞이면서 균형을 잡는 역할을 한다.&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;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;CSFI : Cross-Stream Feature Interaction&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btOPUS/dJMcafAuM84/dPNoVZRM7MxXHLWZ17s7w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btOPUS/dJMcafAuM84/dPNoVZRM7MxXHLWZ17s7w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btOPUS/dJMcafAuM84/dPNoVZRM7MxXHLWZ17s7w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtOPUS%2FdJMcafAuM84%2FdPNoVZRM7MxXHLWZ17s7w1%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;1078&quot; height=&quot;413&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;CSFI가 하는 일&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSFI는 1번 스트림에서 뽑은 특징을 채널 수 기준으로 잘라서, 2번 스트림의 각 단계에 뿌려주고 거기서 합치게 만드는 메커니즘이다.&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;DSHDB는 두 스트림으로 나눠져있다. (초기 추출 vs 정렬 및 집계)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 두 스트림이 완전히 따로 돌아가면 의미가 없다. 결국 서로 상호작용해야 저수준 디테일과 고수준 semantic이 잘 섞이기 때문이다. CSFI가 바로 이 상호작용을 구체적으로 구현한 부분이다.&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;b&gt;1단계 - Stream 1 : 순차적 특징 추출&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 이미지가 conv layer와 SFEM을 반복해서 거치며 단계적으로 다운 샘플링된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 단계마다(P1~P5) SFEM 출력이 나온다.&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;b&gt;2단계 - 채널 기준으로 분할(Split)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 단계의 SFEM 출력을 채널 수 기준으로 나눈다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 64, 128, 256, 521, 1024 채널로 서로 다른 크기의 조각들이 만들어진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 채널 수를 맞춰서 자르는 이유는 나중에 2번 스트림에서 concat할 때 정렬이 쉬워지도록 하기 위해서이다.&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;b&gt;3단계 - Stream2로 전달 및 Concat&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쪼개진 조각들이 화살표처럼 2번 스트림의 해당 단계 concat 모듈로 이동한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번 스트림은 자기 conv + SFEM 결과에 이 조각들을 concat으로 합친다. 합쳐진 결과는 다시 Conv &amp;gt; SFEM을 거쳐 다음 단계로 넘어간다.&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;b&gt;4단계 - 반복&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정이 P1부터 P5까지 단계마다 반복되면서, 매 단계 두 스트림의 정보가 계속 섞인다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 다른 스케일(깊이)에서 나온 특징은 채널 수가 다 다르다. 이걸 그냥 합치면 정렬이 안 맞는데, 채널 수 기준으로 미리 나눠놓으면 2번 스트렘에서 대응되는 크기끼리 깔끔하게 맞춰서 합칠 수 있다. 즉, 스케일이 다른 특징들을 억지로 맞추지 말고, 채널 수로 나눠서 애초에 맞는 크기로 잘라서 보내주자라는 전략이다.&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;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 낮은 레벨 디테일 + 높은 레벨 추상화의 결합&amp;nbsp;&lt;br /&gt;1번 스트림의 초기 및 저수준 정보가 2번 스트림의 후기 및 고수준 처리 단계까지 직접 전달된다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;2. feature reuse&amp;nbsp;&lt;br /&gt;이미 계산해둔 특징을 다시 계산하지 않고 그대로 넘겨 쓰니까 중복 연산이 줄어든다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;3. 점진적 민감도 향상&amp;nbsp;&lt;br /&gt;각 단계마다 섞이는 과정을 거치면서 미세한 특징에 대한 민감도가 점점 높아져 작은 화재와 연기도 놓치지 않게 된다.&amp;nbsp;&lt;/blockquote&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;SFEM : Selective Feature Enhancement Module&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chHdUi/dJMcaf1vtGd/ryNKVngGBWVUwD34WpkDa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chHdUi/dJMcaf1vtGd/ryNKVngGBWVUwD34WpkDa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chHdUi/dJMcaf1vtGd/ryNKVngGBWVUwD34WpkDa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchHdUi%2FdJMcaf1vtGd%2FryNKVngGBWVUwD34WpkDa0%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;761&quot; height=&quot;445&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;638&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;SFEM이 하는 일&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SFEM은 입력 특징을 두 갈래로 나눠 처리한 뒤 다시 합쳐서, 배경 노이즈는 누르고 화재와 연기의 세밀한 디테일은 살리는 모듈이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산불 이미지는 배경이 복잡하고 노이즈가 많다. 단순 conv만 쌓으면 이런 잡음에 특징이 묻히기 쉬운데, SFEM은 어디에 집중할지 선택적으로 걸러내는 역할을 한다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;구조 : Dual-branch&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 tensor X가 들어오면 두 브랜치로 갈린다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUAG7J/dJMcaf1vtYD/MVzCHwTizln6ytQlU2zka1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUAG7J/dJMcaf1vtYD/MVzCHwTizln6ytQlU2zka1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUAG7J/dJMcaf1vtYD/MVzCHwTizln6ytQlU2zka1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUAG7J%2FdJMcaf1vtYD%2FMVzCHwTizln6ytQlU2zka1%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;261&quot; height=&quot;414&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;414&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;b&gt;Branch 1 : 단순 경로&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Conv 하나만 통과하여 저수준 공간 정보를 추출한다.&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;&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;b&gt;Branch 2 : 정교한 경로&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Conv를 통과하고 Partial Conv(PConv)를 통과한다. PConv를 통과시키면 특징 맵에서 관련 있는 영역만 선택적으로 남기고 배경 노이즈는 억제한다. 이게 노이즈가 많은 배경에서 오는 특징 손상을 완화하는 핵심 단계이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pconv에 대한 정보는 아래 블로그에 정리해두었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dbwls-log.tistory.com/125&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dbwls-log.tistory.com/125&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1783501328434&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;PConv : Partial Convolution&quot; data-og-description=&quot;PConv란 ? PConv는 Chen et al., &amp;quot;Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks&amp;quot; (CVPR 2023)에서 처음 제안된 개념이다. FasterNet라고 부르기도 한다. 논문 링크 : https://arxiv.org/abs/2303.03667 Run, Don't Walk: Chas&quot; data-og-host=&quot;dbwls-log.tistory.com&quot; data-og-source-url=&quot;https://dbwls-log.tistory.com/125&quot; data-og-url=&quot;https://dbwls-log.tistory.com/125&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1si8T/dJMb81f4hhD/qa39Upa2a39x8z0Q6MkU70/img.png?width=192&amp;amp;height=143&amp;amp;face=0_0_192_143,https://scrap.kakaocdn.net/dn/cBbZC9/dJMb85v0H92/Dr4ixLaLs46UXPzaT76T4K/img.png?width=192&amp;amp;height=143&amp;amp;face=0_0_192_143,https://scrap.kakaocdn.net/dn/c3Fofu/dJMb81f4hhE/1K0kjQ2iRCQRRAlrLdRM11/img.png?width=905&amp;amp;height=377&amp;amp;face=0_0_905_377&quot;&gt;&lt;a href=&quot;https://dbwls-log.tistory.com/125&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dbwls-log.tistory.com/125&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1si8T/dJMb81f4hhD/qa39Upa2a39x8z0Q6MkU70/img.png?width=192&amp;amp;height=143&amp;amp;face=0_0_192_143,https://scrap.kakaocdn.net/dn/cBbZC9/dJMb85v0H92/Dr4ixLaLs46UXPzaT76T4K/img.png?width=192&amp;amp;height=143&amp;amp;face=0_0_192_143,https://scrap.kakaocdn.net/dn/c3Fofu/dJMb81f4hhE/1K0kjQ2iRCQRRAlrLdRM11/img.png?width=905&amp;amp;height=377&amp;amp;face=0_0_905_377');&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;PConv : Partial Convolution&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;PConv란 ? PConv는 Chen et al., &quot;Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks&quot; (CVPR 2023)에서 처음 제안된 개념이다. FasterNet라고 부르기도 한다. 논문 링크 : https://arxiv.org/abs/2303.03667 Run, Don't Walk: Chas&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dbwls-log.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;그 다음 DWFA(Dual-Weighted Fusion Attention)을 통과시키면 채널과 영역 attention을 동시에 적용해서 중요한 특징을 강조한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 DropPath를 적용하여 학습 중 일부 경로를 랜덤으로 꺼서 과적합을 방지하고 일반화 성능을 향상시킨다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;합치기&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Branch 1의 결과와 Branch 2의 결과를 concat한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 Conv Layer 하나로 최종 정리를 하여 원본 정보와 정제된 정보가 함께 유지될 수 있도록 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$Y_{SFEM} = C(concat(C(X), Dp(DWFA(P(C(X))))))$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C = Conv, P = PConv, Dp = droppath&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;DWFA : Dual-Weighted Fusion Attention&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VhKRT/dJMcaicYzeD/aeQaB3xmn46GwK80WQY3pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VhKRT/dJMcaicYzeD/aeQaB3xmn46GwK80WQY3pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VhKRT/dJMcaicYzeD/aeQaB3xmn46GwK80WQY3pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVhKRT%2FdJMcaicYzeD%2FaeQaB3xmn46GwK80WQY3pk%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;438&quot; height=&quot;270&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;270&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;DWFA는 SFEM 안에서 실제로 Attention을 담당하는 서브 모듈로, 총 2단계로 구성되어있다.&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;b&gt;1. ChannelBoostingLayer (채널 어텐션)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GAP로 채널별 요약 정보를 뽑는다. 그 후 Conv를 통과 시켜 채널 어텐션 맵을 생성한다.&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;&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;b&gt;2. RegionAttentionLayer (영역/위치 어텐션)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채널 축을 기준으로 평균과 최댓값을 concat한다. 그 후 Conv를 통과시켜 region 어텐션 맵을 생성한다.&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;&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;b&gt;최종 합산&amp;nbsp;&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$Y_{DWFA} = (X &amp;middot; &amp;sigma;(fc(pool(X)))) + (X &amp;middot; &amp;sigma;(cv1(concat(mean(X), max(X)))))$&lt;/blockquote&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;PFIM : Progressive Flow Integration Mechanism&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;기존 neck 구조들과 비교&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOfjfI/dJMcaf8f29w/rJ2w8QvPPDzEyP4TpVk8Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOfjfI/dJMcaf8f29w/rJ2w8QvPPDzEyP4TpVk8Xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOfjfI/dJMcaf8f29w/rJ2w8QvPPDzEyP4TpVk8Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOfjfI%2FdJMcaf8f29w%2FrJ2w8QvPPDzEyP4TpVk8Xk%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;545&quot; height=&quot;558&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;558&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;해당 논문은 기존 neck(feature fusion) 구조의 한계를 언급하고있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Info-FPN은 pixel shuffle 모듈과 feature alignment 모듈로 작은 객체 탐지를 강화했다. 하지만 해당 구조는 숲 환경의 다양한 스케일과 복잡한 텍스처에 대응하기에는 부족하다는 한계가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HR-FPN은 고해상도 특징을 네트워크 전체에 유지하는 구조이며, 미묘한 화재 신호와 주변 식생을 구분하는 특화 메커니즘이 없다는 한계가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HS-FPN은 채널 어텐션과 특징 융합으로 스케일 변화에 대응하는 구조이지만, 대규모 원격 탐사 이미지 속 산불의 고유한 스펙트럼 특성을 충분히 잡지 못한다는 한계가 있다.&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;결론적으로 기존 neck 구조들은 산불탐지에 특화되지 않았다는 문제의식이 반복된다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;PFIM의 핵심 아이디어&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;451&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1yEfx/dJMcah6ckQr/Yrb65krWvq5n4Jz1gFKWC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1yEfx/dJMcah6ckQr/Yrb65krWvq5n4Jz1gFKWC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1yEfx/dJMcah6ckQr/Yrb65krWvq5n4Jz1gFKWC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1yEfx%2FdJMcah6ckQr%2FYrb65krWvq5n4Jz1gFKWC0%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;544&quot; height=&quot;451&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;451&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;PFIM은 수직 융합(vertical fusion) + 수평 전파(horizontal propagation) 두 가지를 결합한 구조이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vertical fusion : 서로 다른 해상도의 특징들을 lateral conv(옆 경로에서 들어오는 특징의 채널 수를 맞춰주는 1x1 Conv) + 업샘플링으로 공간 크기를 맞춰 통합&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Horizontal propagation : 통합된 특징을 BCFM(Bifurcated Contextual Fusion Module)으로 다듬어 local + global 정보를 함께 반영하고, top-down 방식으로 여러 스케일에 전파한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;blockquote data-ke-style=&quot;style3&quot;&gt;1. 백본에서 나온 3개의 다른 해상도 스케일 특징이 입력으로 들어온다.&amp;nbsp;&lt;br /&gt;2. Lateral Conv + 업샘플링으로 공간 크기를 통일시킨다. (vertical fusion)&amp;nbsp;&lt;br /&gt;3. 통합된 특징이 BCFM을 거쳐 local detail과 dilated Conv 기반 global contex를 동시에 포착한다.&amp;nbsp;&lt;br /&gt;4. 이 과정이 백본에서 뽑힌 여러 abstraction level마다 반복되면서, top-down 방향으로 정보가 계속 전파된다.&amp;nbsp;&lt;br /&gt;5. 최종적으로 공간적으로 세밀하면서도 의미적으로 풍부한 특징 표현이 만들어져서 detection head로 전달된다.&amp;nbsp;&amp;nbsp;&lt;/blockquote&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;BCFM : Bifurcated Contextual Fusion Module&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dISbic/dJMcaixefXe/W1euhJk1w1JdQkHNlKhhqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dISbic/dJMcaixefXe/W1euhJk1w1JdQkHNlKhhqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dISbic/dJMcaixefXe/W1euhJk1w1JdQkHNlKhhqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdISbic%2FdJMcaixefXe%2FW1euhJk1w1JdQkHNlKhhqK%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;550&quot; height=&quot;246&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;246&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;PFIM 안에서 실제로 local + global 핵심 서브 모듈이다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 해결하려면 local detail과 global context를 둘 다 봐야하는데, BCFM이 이 역할을 담당한다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 특징을 $x &amp;isin; R^{C&amp;times;H&amp;times;W}$라 할 때, BCFM은 세 갈래로 나뉘어 각각 다른 처리를 한다.&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;b&gt;Branch 1 : Local + Global 특징 추출&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 두 번의 Conv를 거친다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_1 = C_1(X), X_2 = C_2(X_1)$&lt;/blockquote&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;2. $X_2$를 두 갈래로 다시 나눠서 처리한다.&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;Depthwise Separable Conv : 채널별로 독립 연산을 수행하고, 연산량을 절감하며 local feature $X_l$를 추출한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Depthwise Dilated Conv : dilation을 넣어 receptive field를 넓혀 global feature $X_g$를 추출한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_l = C_l(X_2), X_g = C_g(X_2)$&lt;/blockquote&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;3. $X_l$과 $X_g$를 concat하고 BN을 거쳐 PReLU를 통과시킨다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_f = A(N(concat(X_l, X_g)))$&lt;/blockquote&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;4. 이렇게 만든 $X_f$를 DWFA에 통과시켜 채널과 영역 중요도를 다시 가중시킨다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_{at} = X_f ⊙ DWFA(X_f)$&lt;/blockquote&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Branch 2 : Skip Connection&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처리 없이 원본 입력 X를 그대로 가지고와서, Branch 1의 결과 $X_{at}$와 더한다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_{fi} = X_{at} + X$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 residual/skip connection 역할을 한다. 기울기 소실을 막고, 원본 정보를 잃지 않게 해준다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Branch 3 : 단순 Conv 정제&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본 입력 X에 Conv 하나만 적용해서 추상적인 특징을 다시 뽑는다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_3 = C_3(X)$&lt;/blockquote&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최종 결합&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Branch 3의 결과 $X_3$와 Branch 1+2 결과 $X_{fi}$를 concat한 뒤, 마지막 Conv $C_4$로 정리한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_{ot} = C_4(concat(X_3, X_{fi}))$&lt;/blockquote&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;ERH : Elastic Response Head&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PDENet의 마지막 핵심 모듈로 입력 스케일 변화에 탄력적으로 반응하는 detection head이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A5Xr6/dJMcaa0eY2Y/A3es2p1mwXNXgEv668rAH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A5Xr6/dJMcaa0eY2Y/A3es2p1mwXNXgEv668rAH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A5Xr6/dJMcaa0eY2Y/A3es2p1mwXNXgEv668rAH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA5Xr6%2FdJMcaa0eY2Y%2FA3es2p1mwXNXgEv668rAH0%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;570&quot; height=&quot;384&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;384&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;기존의 detection head들은 fire/smoke의 동적인 형태 변화에 대응하는 능력이 없다고 지적하고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불과 연기는 계속 모양이 바뀌고 커지는데, 고정된 conv 커널로는 이런 변형에 유연하게 대응하기 어렵다는 것이다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;ERH의 핵심 아이디어&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ERH의 핵심 아이디어는 &quot;입력 내용에 따라 Conv 커널의 위치와 모양을 동적으로 바꾸자&quot;이다.&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;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$X_{aff}$ : spatial offset, 공간 위치 이동값&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$X_{mask}$ : importance mask, 중요도 마스크&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 둘을 deformable convolution에 적용해서, 커널이 고정된 격자가 아니라 입력 내용에 맞게 위치를 옮겨가며 연산하도록 만든다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;동작 흐름&lt;/span&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1단계 - Elastic Convolution (MDC + GroupNorm)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Modulated Deformable Convolution(MDC)와 GroupNorm을 결합한다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_{mod} = ElasticConv(X, X_{off}, X_{mask})$&lt;/blockquote&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;MDC : 입력의 국소적 변화에 따라 커널이 변형되면서 복잡한 구조를 포착한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;GroupNorm : 변형 후 특징 맵을 정규화해서 학습 안정성을 확보한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;2단계 - Adaptive Average Pooling + Conv + ReLU&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공간 차원을 압축하면서 전역 정보를 보존한다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_t = ReLU(C(AdaptiveAvgPool2d(X_{mod})))$&lt;/blockquote&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;b&gt;3단계 - Hard Sigmoid로 채널 가중치 생성&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 채널을 부각시키는 동적 반응을 생성한다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_{dyn} = X_{mod} &amp;times; h\_sigmoid(X_t)$&lt;/blockquote&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;b&gt;4단계 - DYReLU 활성화&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GAP 후 학습 가능한 파라미터로 비선형 변환을 수행한다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$X_t = &amp;sigma;_2(W_2 &amp;middot; ReLU(W_1 &amp;middot; Pool(X_{dyn}) + b_1) + b_2)$&lt;/blockquote&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;b&gt;5단계 - 최종 출력&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&amp;nbsp;$Y_{ERH} = max(&amp;alpha;_1 &amp;middot; X_t + &amp;beta;_1, &amp;alpha;_2 &amp;middot; X_t + &amp;beta;_2)$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\alpha_1, \alpha_2$(기울기), $\beta_1, \beta_2$(절편) 모두 학습 가능한 파라미터를 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 형태는 DYReLU(Dynamic ReLU)라는 활성화 함수로, 입력에 따라 활성화 함수 모양 자체가 바뀌는 것이 특징이다.&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;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;실험 결과&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;정량적 결과&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ydavh/dJMcac4OLsg/8l0M9kYdmEU9fcdzkxIv50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ydavh/dJMcac4OLsg/8l0M9kYdmEU9fcdzkxIv50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ydavh/dJMcac4OLsg/8l0M9kYdmEU9fcdzkxIv50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fydavh%2FdJMcac4OLsg%2F8l0M9kYdmEU9fcdzkxIv50%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;569&quot; height=&quot;178&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;178&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;DSHDB를 추가했을 때 mAP50이 1.5%p 향상되었고, ERH를 추가했을 땐 0.6%p, PFIM을 추가했을 때는 0.5%p 향상며 최종적으로 2.6%p 향상되는 모습을 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bczkLd/dJMcac4OLZZ/4EEJNjgN74lc7msRGjDtlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bczkLd/dJMcac4OLZZ/4EEJNjgN74lc7msRGjDtlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bczkLd/dJMcac4OLZZ/4EEJNjgN74lc7msRGjDtlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbczkLd%2FdJMcac4OLZZ%2F4EEJNjgN74lc7msRGjDtlK%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;266&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;266&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;PDENet과 YOLOv3부터 YOLOv11까지 총 11개의 YOLO 계열 모델과 비교하였다.&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;PDENet이 mAP50에서 1등을 차지했고, 2위인 YOLOv9c보다도 1.7%가 높았고 가장 최신 모델인 YOLOv11과 비교해도 2.6% 앞서는 수치이다. 특히 화재 탐지 성능을 보면 PDENet은 $AP_{fire}$가 77.2%로 비교 모델 중 가장 낮은 YOLOv3-tiny보다 무려 19.5%나 높았다.&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;Precision과 Recall 측면에서도 PDENet이 우수했는데, 특히 recall이 전체 모델 중 가장 높았다. 재현율이 높다는 것은 실제로 존재하는 화재를 놓치지 않고 잡아낸다는 뜻이라 산불 조기 경보 시스템 입장에서는 정확도만큼 중요한 지표이다.&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;더 인상적인 점은 모든 성능을 훨씬 가벼운 모델로 달성했다는 점이다. 다른 무거운 모델과 비교해봐도 더 좋은 성능을 보인다. 즉, PDENet은 가벼우면서도 정확한 모델이라는 것을 해당 표가 말해주고 있는 것이다.&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;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;정성적 평가&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;825&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHwkM8/dJMcahE2h4O/8BjtnodXNnosu8gFf0ADY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHwkM8/dJMcahE2h4O/8BjtnodXNnosu8gFf0ADY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHwkM8/dJMcahE2h4O/8BjtnodXNnosu8gFf0ADY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHwkM8%2FdJMcahE2h4O%2F8BjtnodXNnosu8gFf0ADY1%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;851&quot; height=&quot;825&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;825&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;해당 그림 전체를 관통하는 메시지는 조명 조건이 나쁠수록 기존 모델에 비해 좋은 성능을 낸다는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;결론&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PDENet은 DSHDB, PFIM, ERH 세 모듈을 결합해, 기존 YOLO계열보다 정확하면서도 훨씬 가벼운 산불 탐지 모델을 제안했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 극한 기상 대응과 실시간 처리 최적화는 여전히 과제로 남아있다.&amp;nbsp;&lt;/p&gt;</description>
      <category>석사과정 기록/논문 리뷰</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/126</guid>
      <comments>https://dbwls-log.tistory.com/126#entry126comment</comments>
      <pubDate>Thu, 9 Jul 2026 15:45:19 +0900</pubDate>
    </item>
    <item>
      <title>PConv : Partial Convolution</title>
      <link>https://dbwls-log.tistory.com/125</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;PConv란 ?&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB7gwp/dJMcaiKGzJn/wUTkPKZdMIvNTXaJdyUeF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB7gwp/dJMcaiKGzJn/wUTkPKZdMIvNTXaJdyUeF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB7gwp/dJMcaiKGzJn/wUTkPKZdMIvNTXaJdyUeF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB7gwp%2FdJMcaiKGzJn%2FwUTkPKZdMIvNTXaJdyUeF1%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;905&quot; height=&quot;377&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PConv는 Chen et al., &lt;b&gt;&quot;Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks&quot;&lt;/b&gt; (CVPR 2023)에서 처음 제안된 개념이다. FasterNet라고 부르기도 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문 링크 : &lt;a href=&quot;https://arxiv.org/abs/2303.03667&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2303.03667&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1783501126909&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks&quot; data-og-description=&quot;To design fast neural networks, many works have been focusing on reducing the number of floating-point operations (FLOPs). We observe that such reduction in FLOPs, however, does not necessarily lead to a similar level of reduction in latency. This mainly s&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/2303.03667&quot; data-og-url=&quot;https://arxiv.org/abs/2303.03667v3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUN9Uy/dJMb8TClyve/9klJY448ur1GKdHXAjwKvK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/ebsGXH/dJMb8SpTKKt/c6bLMDP3s0sYDwsbAI9LUk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2303.03667&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/2303.03667&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUN9Uy/dJMb8TClyve/9klJY448ur1GKdHXAjwKvK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/ebsGXH/dJMb8SpTKKt/c6bLMDP3s0sYDwsbAI9LUk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&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;Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;To design fast neural networks, many works have been focusing on reducing the number of floating-point operations (FLOPs). We observe that such reduction in FLOPs, however, does not necessarily lead to a similar level of reduction in latency. This mainly s&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&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;FLOPs를 줄여도 실제로 빨라지지 않는 문제를 다룬다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 경량화 모델들은 Depthwise Convolution으로 연산량을 확 줄였다. 하지만 저자들은 연산량이 낮다고 해서 실제 속도(latency)가 빠른건 아니라는 점을 지적하고 있다.&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;그 이유는 메모리 접근 비용때문이다. DWConv는 채널마다 따로따로 연산하다보니, 연산 자체는 적어도 메모리를 왔다갔다하는 오버헤드가 커서 실제 하드웨어에서는 느려지는 경우가 많았다.&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;이를 해결하기 위해 모든 채널을 다 계산하지 않고, 일부 채널만 계산하고 나머지는 그대로 두는 방법인 PConv를 만들게 되었다.&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;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;PConv 동작 방법&amp;nbsp;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1GG0B/dJMcaftHpxM/RMQ70RkWgGCqNKhoCkhy91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1GG0B/dJMcaftHpxM/RMQ70RkWgGCqNKhoCkhy91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1GG0B/dJMcaftHpxM/RMQ70RkWgGCqNKhoCkhy91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1GG0B%2FdJMcaftHpxM%2FRMQ70RkWgGCqNKhoCkhy91%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;192&quot; height=&quot;143&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 입력 채널 C개 중에서 앞쪽 $C_p$개 채널만 선택한다. (보통은 전체의 1/4정도)&lt;br /&gt;2. 이 $C_p$개 채널에만 일반 Conv를 적용한다.&amp;nbsp;&lt;br /&gt;3. 나머지 $C-C_p$개 채널은 아무 연산 없이 그대로 통과시킨다.&amp;nbsp;&lt;br /&gt;4. 두 그룹을 concat해서 원래 채널 수로 복원한다.&amp;nbsp;&lt;/blockquote&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;blockquote data-ke-style=&quot;style2&quot;&gt;$h &amp;times; w &amp;times; k^2 &amp;times; {c_{p}}^2$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 일반 Conv인 &lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;$h &amp;times; w&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&amp;times; k^2&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&amp;times; c^2$에 비해 보통 1/16 수준으로 훨씬 작아진다.&amp;nbsp;&lt;/span&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;span style=&quot;color: #666666; text-align: left;&quot;&gt;단 PConv는 단독으로 사용하기에는 문제가 있다. PConv만 사용하게 되면 처리된 채널과 안된 채널이 서로 소통을 하지 못하는 문제가 생길 수 있다. 따라서 바로 뒤에 1x1 PWConv(Pointwise Conv)를 붙여 전체 채널 정보를 다시 섞어주는데, 이를 합쳐 FasterNet Block이라고 하는 것이다.&amp;nbsp;&lt;/span&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;span style=&quot;color: #666666; text-align: left;&quot;&gt;DWConv는 모든 채널을 각각 따로 계산하기 때문에 연산은 적지만 메모리 접근이 채널 수만큼 흩어진다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;반면 PConv는 일부 채널만 묶어서 Conv로 계산하기때문에 메모리 접근이 연속적이라 실제 하드웨어에서 훨씬 효율적이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;즉, 이론상 연산량 뿐만 아니라 실제 메모리 접근 패턴까지 고려하여 설계한 것이 핵심이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>석사과정 기록/CV</category>
      <category>cv</category>
      <category>PConv</category>
      <category>딥러닝</category>
      <category>컴퓨터비전</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/125</guid>
      <comments>https://dbwls-log.tistory.com/125#entry125comment</comments>
      <pubDate>Wed, 8 Jul 2026 18:01:46 +0900</pubDate>
    </item>
    <item>
      <title>[IEEE] FCLGYOLO: Feature Constraint and Local Guided Global Feature for Fire Detection in Unmanned Aerial Vehicle Imagery</title>
      <link>https://dbwls-log.tistory.com/124</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 리뷰할 논문은 IEEE에 2024년에 게재된 산불과 관련된 논문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문 링크 : &lt;a href=&quot;https://ieeexplore.ieee.org/document/10414188&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/10414188&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1783475200646&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;https://ieeexplore.ieee.org/document/10414188&quot; data-og-description=&quot;&quot; data-og-host=&quot;ieeexplore.ieee.org&quot; data-og-source-url=&quot;https://ieeexplore.ieee.org/document/10414188&quot; data-og-url=&quot;https://ieeexplore.ieee.org/document/10414188&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/10414188&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ieeexplore.ieee.org/document/10414188&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;https://ieeexplore.ieee.org/document/10414188&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ieeexplore.ieee.org&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;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;아래에 작성된 내용 및 이미지는 모두 논문에 나와있는 내용이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서론&amp;nbsp;&lt;/span&gt;&lt;/h2&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제를 해결하기 위해 본 연구에서는 실시간 처리가 가능하면서도 가벼운 1-Stage 객체 탐지기를 제안한다.&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;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;제안하는 방법&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2IqSI/dJMcaf1vlDG/GNeG39a0D6tJwAXS0RVnhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2IqSI/dJMcaf1vlDG/GNeG39a0D6tJwAXS0RVnhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2IqSI/dJMcaf1vlDG/GNeG39a0D6tJwAXS0RVnhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2IqSI%2FdJMcaf1vlDG%2FGNeG39a0D6tJwAXS0RVnhk%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;896&quot; height=&quot;626&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;FICC : Feature Invariance and Covariance Constraint&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;핵심 아이디어&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 YOLO 계열 탐지기는 오직 detection label로만 학습을 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FICC는 여기에 같은 물체를 나타내는 feature들끼리는 서로 비슷해야 하고, feature의 각 차원끼리는 서로 다른 정보를 담아야한다는 self-supervised 스타일의 추가 제약을 걸어둔다.&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;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 같은 이미지를 서로 다른 방식으로 augmentation해서 두 장 (X1, X2)를 만든다.&amp;nbsp;&lt;br /&gt;2. 이 둘을 가중치를 공유하는 동일한 네트워크 두 개에 각각 통과시킨다.&amp;nbsp;&lt;br /&gt;3. 각 네트워크는 자기 detection loss로 학습되면서, 동시에 두 네트워크의 중간 feature끼리 비교하는 feature supervision loss로도 학습된다.&amp;nbsp;&lt;br /&gt;4. 추론 시에는 한쪽 네트워크만 사용하고 나머지 네트워크와 feature supervision 모듈은 버린다. 즉, 학습에만 관여하고 실제 속도/파라미터에는 영향이 없다.&amp;nbsp;&lt;/blockquote&gt;
&lt;div data-math=&quot;Cm(Z)=\frac{1}{3n-1}\sum_{i=0}^{3n-1}(z_{i}-\overline{z})^{T}(z_{i}-\overline{z})&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;Positive Sample과 box 디코딩&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;YOLO는 feature map의 gride point마다 물체가 있는지 예측한다. 물체 중심과 매칭되는 grid point들을 positive sample이라 부르고, 한 물체 당 보통 3개의 positive smaple이 배정된다. (A - a1, a2, a3)&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;쉽게 이야기하면 YOLO는 이미지를 grid로 쪼개는데, 예를 들어 20x20 grid로 나눴다면, 각 grid cell마다 &quot;여기에 물체가 있다면 박스가 어디쯤일까&quot;를 예측하는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 네트워크가 직접 박스 좌표를 출력하지는 못한다. 대신 grid cell 기준 상대 값인 $t_x, t_y, t_w, t_h$를 출력하고, 이걸 실제 좌표로 변환하는 공식이 필요하다.&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;다음은 각 positive sample은 raw 출력값 (tx, ty, tw, th)을 실제 박스 좌표로 바꾸는 디코딩 과정이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$b_{x}=c_{x}+\sigma(t_{x})\times2-0.5$&lt;br /&gt;$b_{y}=c_{y}+\sigma(t_{y})\times2-0.5$&lt;br /&gt;$b_{w}​=p_{w}​&amp;times;(2&amp;times;&amp;sigma;(t_{w}​))^2$&lt;br /&gt;$b_{h}​=p_{h}​&amp;times;(2&amp;times;&amp;sigma;(t_{h}​))^2$&lt;br /&gt;$\sigma(x)=\frac{1}{1+e^{-x}}$&lt;/blockquote&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;$c_x, c_y$ : 몇 번째 grid cell인가에 대한 좌표다. 예를 들어 물체 중심이 15번째 행, 8번째 열 grid에 있으면 $c_x=8, c_y=15$ 같은 값이 된다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$\sigma(t_x)$ : 네트워크가 뱉은 $t_x$를 시그모이드에 넣으면 0~1 사이 값이 된다. 이건 grid cell안에서 정확히 몇% 위치에 중심이 있는가를 나타낸다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$b_x = c_x + \sigma(t_x) &amp;times;2 -0.5$ : grid cell 번호에 저 비율을 더해서 최종 중심 좌표를 얻는다. x2, -0.5는 YOLO가 grid 경계 근처 물체를 더 잘 잡기 위해 넣은 보정값이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$b_w, b_h$ : 너비와 높이는 미리 정해둔 anchor box 크기 ($p_w,p_h$)에 배율을 곱해서 구한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 식에서 주목해야 될 부분은 단 하나이다. 바로 박스 좌표 $b_x, b_y$를 구하려면 grid 위치인 $c_x, c_y$가 필요하다는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 박스 좌표 = grid 위치 + feature가 예측한 상대값이다.&amp;nbsp;&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;같은 grid 위치에 있는 feature라면 grid 위치가 같으니까 feature가 조금이라도 다르면 박스도 달라진다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;그래서 논문은 같은 grid에 있는데 다른 view(X1, X2)에서 나온 feature라면, 그 feature들이 서로 같아야 일관된 박스가 나온다라는 논리를 펼치는데, 이게 FICC의 invariance 제약의 근거이다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;왜 어떤 feature는 같아야 하고 어떤건 달라야 하는가?&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Variance : 달라야 하는 경우&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 물체 A의 3개 positive sample은 같은 이미지 안에서 서로 다른 grid 위치에 있다. 위치가 다르니 요구되는 $t_x, t_y$도 다르고, 따라서 이 세 feature는 서로 달라야 각각 자기 위치에 맞는 박스를 예측할 수 있다. 만약 셋이 똑같은 feature라면 다 같은 offset을 예측하려 들어서 문제가 생긴다.&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;Invariance : 같아야 하는 경우&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 X1, X2에서 같은 grid 위치에 있는 feature 쌍은 같은 위치 정보를 나타낸다. 앞서 본 것처럼 박스 좌표는 grid 위치에 의존하므로, 같은 grid에 있는데 view만 다르다고 feature가 달라지면 같은 위치에서 서로 다른 박스가 나오는 모순이 생긴다. 그래서 이 경우엔 feature가 서로 같아야 일관된 박스가 나온다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;임베딩 행렬 구성&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X1, X2 각각을 네트워크에 통과시키면 물체별 Positive sample feature들이 나온다. 이걸 모아서 행렬 $Y_1, Y_2$로 만들고, projector(작은 네트워크)를 한 번 더 거쳐서 임베딩 $Z_1, Z_2$를 얻는다.&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;행 개수 : 물체 수 x 3 (물체 하나당 positive sample이 3개니까)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열 개수 : feature의 채널 수&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;즉 $Z_1$은 X1에서 나온 모든 물체의 positive sample feature를 쌓아놓은 표, $Z_2$는 X2 버전이라고 보면된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;Invariance term&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$S(Z_{1},Z_{2})=\dfrac{1}{3n}\displaystyle\sum_{i=0}^{3n-1}(z_{i1}-z_{i2})^{2}$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$Z_1$의 i번째 행과 $Z_2$의 i번째 행(같은 물체, 같은 위치)끼리 뺀 다음 제곱해서 평균을 낸 값이다. (MSE)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 값이 작아지도록 학습시키면 같은 위치를 나타내는 두 view의 feature와 점점 비슷해진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;Covariance term&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$\bar{z}=\dfrac{1}{3n-1}\displaystyle\sum_{i=0}^{3n-1}z_{i}$&lt;br /&gt;$Cm(Z)=\dfrac{1}{3n-1}\displaystyle\sum_{i=0}^{3n-1}(z_{i}-\bar{z})^{T}(z_{i}-\bar{z})$&lt;br /&gt;$C(Z)=\dfrac{1}{3n-1}\displaystyle\sum_{i\neq j}[Cm(Z)]_{i,j}^{2}$&lt;/blockquote&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;$\bar{z}$ : 모든 feature 벡터의 평균&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$Cm(Z)$ : 채널과 채널 사이의 상관관계를 담은 공분산 행렬&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$C(Z)$ : 공분산 행렬에서 대각선 (i=j)을 뺀 나머지(서로 다른 채널끼리의 상관관계)를 제곱해서 더한 것&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채널끼리 상관관계가 높으면(비슷한 정보를 중복해서 담고 있으면) 이 값이 커지고, 이걸 줄이도록 학습시켜서 각 채널이 서로 다른 정보를 담게 만든다. (feature collapse 방지)&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 invariance term과 covariance term은 self-supervised 방법 VICReg에서 그대로 가져온 아이디어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;최종 feature loss&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$Loss_{feat}=\alpha\times S(Z_{1},Z_{2})+\beta\times[C(Z_{1})+C(Z_{2})]$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\alpha = 1, \beta=25$로 고정 (VICReg 설정을 따름)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;invariance term과 covariance term을 합쳐 하나의 loss로 만든 것이다.&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;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;LGGM : Local Guided Global Module&lt;/span&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;핵심 아이디어&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산불 이미지는 작은 물체가 많고, 이런 작은 물체는 주로 P3에서 검출이 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 P3는 receptive field가 좁아서 이미지 전체를 보지 못하고, 위치 정보가 부족하다는 한계가 있다.&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;LGGM은 이 문제를 풀기 위하여 Fourier transform으로 이미지 전체를 보는 global feature와 기존 conv로 뽑는 local feature를 결합한다. local feature의 학습을 가이드 해준다고 해서 이름이 local guided global module이다.&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;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. FreBlock (frequency block) : Fourier transform으로 global feature 추출&amp;nbsp;&lt;br /&gt;$F_{freIn}=FreBlock(F)$&lt;br /&gt;&lt;br /&gt;2. SpaBlock (spatial block) : 일반 conv로 local feature 추출&amp;nbsp;&lt;br /&gt;$F_{spaIn}=SpaBlock(F)$&lt;br /&gt;&lt;br /&gt;3. FuseBlock : 둘을 합쳐 auxiliary head 학습에 사용&amp;nbsp;&lt;br /&gt;$F_{out}=FuseBlock(F_{freIn},F_{spaIn})$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 F는 입력 feature map이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 시에는 세 블록이 다 관여하지만, 추론 시에는 FreBlock만 남고 SpaBlock, FuseBlock은 버려진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 SpaBlock과 FuseBlock은 학습 중에 FreBlock이 더 잘 학습되도록 도와주는 코치 역할만 하고, 실제 배포되는 모델에는 포함되지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;FreBlock : Frequency Block&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$fre=fft2d(F)$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 feature map F를 2D Fourier transform으로 주파수 영역으로 변환한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$pha=abs(fre),\quad amp=angle(fre)$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fourier transform 결과에서 크기(magnitude)와 각도(phase) 성분을 뽑아낸다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$pha_{ref}=Conv2d(ReLU(Conv2d(pha)))$&lt;br /&gt;$amp_{ref}=Conv2d(ReLU(Conv2d(amp)))$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 성분을 conv layer 2개로 각각 정제(refine)한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$real=amp_{ref}\times\cos(pha_{ref})$&lt;br /&gt;$imag=amp_{ref}\times\sin(pha_{ref})$&lt;br /&gt;$fre_{ref}=complex(real,imag)$&lt;/blockquote&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;rarr; 직교좌표 변환)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$F_{freIn}=abs(ifft2d(fre_{ref}))+F$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역 Fourier transform으로 다시 공간 영역으로 되돌리고, 원래 입력 F를 더해준다. (residual 연결)&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;Fourier transform을 거치면 이미지의 한 픽셀 값이 전체 이미지 정보를 반영하게 되므로, 작은 conv kernel로는 얻기 힘든 전역적인 receptive field를 얻을 수 있다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;SpaBlock : Spatial Block&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$Res(F)=Conv2d(ReLU(Conv2d(F)))+F$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 residual block을 정의한다. (conv 2개 통과시킨 뒤 입력을 다시 더해주는 구조)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$F_{spaIn}=Conv2d(Res(ReLU(Conv2d(F))))$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;conv &amp;rarr; residual block &amp;rarr; conv 순서로 통과시켜서 Local 공간 정보를 추출한다. FreBlock과 반대되는 역할이라고 보면 된다.&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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;FuseBlock&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$F_{fre}=ReLU(Conv2d(F_{freIn}))$&lt;br /&gt;$F_{spa}=ReLU(Conv2d(F_{spaIn}))$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FreBlock과 SpaBlock에서 나온 두 feature를 각각 conv로 한 번 더 처리한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$F_{cat}=Concat(F_{fre},F_{spa})$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 feature를 채널 방향으로 이어붙인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$F_{fuse}=TokenMixer(F_{cat})$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어붙인 feature를 TokenMixer에 통과시켜 정보를 섞는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$TokenMixer(F)=\Re(fft(F))$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TokenMixer는 feature map을 HxW를 한 줄로 펼친 뒤 Fourier transform을 하고, 그 결과의 실수부만 취하는 방식이다. 이 방식은 self-attention과 비슷한 정보 통합 효과를 내면서도 학습 파라미터가 전혀 없어서 계산량을 크게 줄일 수 있다는 것이 논문의 주장이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$F_{out}=Dropout(ReLU(Conv2d(F_{fuse})))$&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 conv와 dropout을 거쳐 최종 출력을 얻는다.&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;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Loss&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;핵심 아이디어 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 loss는 세 부분으로 구성된다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 메인 detection head의 loss (두 브랜치 모두)&amp;nbsp;&lt;br /&gt;2. auxiliary detection head의 loss (두 브랜치 모두)&amp;nbsp;&lt;br /&gt;3. feature supervision loss (앞서 정리한 FICC의 $Loss_{feat}$ )&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;전체 Loss&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$Loss=Loss_{det}+W_{a}\times Loss_{aux}+W_{f}\times Loss_{feat}$&lt;/blockquote&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;$Loss_{det}$ : 메인 detection head의 loss&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$Loss_{aux}$ : auxiliary detection head의 loss (LGGM의 SpaBlock / FuseBlock을 학습시키기 위한 것&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$Loss_{feat}$ : FICC 파트에서 다룬 feature supervision loss&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$W_a, W_f$ : 각각 auxiliary loss와 feature loss에 곱하는 가중치. 세 loss의 중요도 균형을 맞추기 위한 값이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;detection loss 세부 구성&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;$Loss_{det}=\gamma\times Loss_{pos}+\eta\times Loss_{obj}$&lt;br /&gt;$Loss_{aux}=\gamma\times Loss_{apos}+\eta\times Loss_{aobj}$&lt;/blockquote&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;$Loss_{pos}$ : 박스 위치 회귀 관련 loss&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$Loss_{obj}$ : 객체 존재 여부(confidence) 관련 loss&amp;nbsp;&lt;/li&gt;
&lt;li&gt;$Loss_{apos, Loss_{aobj}}$ : 위 두 항의 auxiliary head 버전&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;gamma;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&amp;eta; : 두 항의 가중치 (논문에서는 각각 0.05, 1.0으로 고정)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;정리&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;결국 FCLGYOLO의 학습은 &quot;기본 detection loss + LGGM의 auxiliary head loss + FICC의 feature supervision loss&quot;를 전부 더한 하나의 loss로 이루어진다. 세 가지 서로 다른 목적(정확한 박스 예측, LGGM의 global feature 학습 유도, feature 간 Invariance/covariance 제약)이 각각의 가중치를 달고 하나의 학습 신호로 합쳐지는 구조이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;실험 결과&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;데이터셋&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;드론으로 촬영한 산불 영상인 FLAME, FLAME2 데이터셋을 사용하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해상도는 3840 x 2160, 1920 x 1080 두 종류이며, 원본 영상에서 프레임을 추출해 불이 있는 이미지 2533장, 2559장을 각각 랜덤 선택한다. 영상 좌상단에 있던 타임스탬프/좌표 정보를 제거하는 과정에서 최종 해상도는 1611x907로 조정된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라벨링 툴로 라벨링해서 총 5092장의 YOLO 포맷 데이터로 구성되어 있으며, train:val:test = 7:2:1로 나누어 학습을 진행한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터셋의 약 60%가 32x3xpx 이하의 small object인데, 이는 작은 불꽃 검출이 이 데이터셋의 핵심 난이도라는 것을 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;구현 상세&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크 : PyTorch&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPU : NVIDIA 3090&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 이미지 크기 : 640 x 640 (학습 및 추론 동일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 시 augmentation : HSV 조정, translation, 좌우/상하 flip, mosaic (추론시에는 적용 x)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵티마이저 : SGD (모멘텀 : 0.937, weight decay : 0.0005)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배치 사이즈 : 8&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 lr : 0.01&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;epochs : 300&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;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;실험 결과&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;정량적 평가&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pNHRo/dJMcaiKGopI/NLtNidpiXXJpVVm7k4HUN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pNHRo/dJMcaiKGopI/NLtNidpiXXJpVVm7k4HUN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pNHRo/dJMcaiKGopI/NLtNidpiXXJpVVm7k4HUN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpNHRo%2FdJMcaiKGopI%2FNLtNidpiXXJpVVm7k4HUN1%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;395&quot; height=&quot;249&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;249&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;논문은 본격적으로 FICC와 LGGM을 적용하기 전에, 어떤 모델을 베이스라인으로 삼을지부터 실험으로 확인했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 표는 여러 YOLO 계열 모델을 각각 학습시켜 파라미터 수, 연산량, 정확도를 비교한 결과이다.&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;정확도만 보면 YOLOv5x가 80.8%로 가장 높다. 하지만 파라미터가 86.2M, 연산량이 204.6으로 YOLOv5s 대비 각각 12.3배, 12.8배가 더 크다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YOLOv5s는 mAP50이 79.1로 다른 YOLOv5 모델들보다는 살짝 낮지만, 파라미터와 연산량 면에서 압도적으로 가볍다. 논문은 이 지점에서 UAV 위에서 실시간으로 돌아가야 한다는 목적을 고려해, 정확도의 소폭 손실을 감수하고 YOLOv5s를 최종 베이스라인 모델로 선정했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTdBoW/dJMcaiKGor9/s3O0fzpA9gTR4opbipJsV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTdBoW/dJMcaiKGor9/s3O0fzpA9gTR4opbipJsV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTdBoW/dJMcaiKGor9/s3O0fzpA9gTR4opbipJsV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTdBoW%2FdJMcaiKGor9%2Fs3O0fzpA9gTR4opbipJsV1%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;316&quot; height=&quot;168&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;168&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;이번엔 FICC와 LGGM을 각각 붙였을 때 성능이 어떻게 변화하는지에 대한 ablation 결과이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FICC만 추가했을 때는 mAP50이 1.2%p 상승했고, LGGM만 추가했을 때는 1.1p 상승했다. 두 모듈을 동시에 적용했을 때는 2.0%p 향상된 모습을 볼 수 있다. 두 모듈을 각각 추가했을 때보다 동시에 적용했을 때 베이스라인 대비 성능이 향상되었고, 동시에 사용해도 서로 충돌 없이 함께 향상 효과를 낸다는 것을 보여준다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgcHel/dJMcaa0d4Cr/7rTPJzK6RryY1iHUZraOM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgcHel/dJMcaa0d4Cr/7rTPJzK6RryY1iHUZraOM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgcHel/dJMcaa0d4Cr/7rTPJzK6RryY1iHUZraOM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgcHel%2FdJMcaa0d4Cr%2F7rTPJzK6RryY1iHUZraOM1%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;297&quot; height=&quot;185&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;185&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;이번엔 LGGM 안에서 FreBlock만 단독으로 사용했을 때와 auxiliary block까지 함께 사용했을 때를 나눠서 비교한 실험이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LGGM은 학습 시 FreBlock, SpaBlock, FuseBlock 세 개가 함께 동작하는데, 이 중 SpaBlock, FuseBlock은 auxiliary head가 있어야만 loss를 받아 학습이 된다. auxiliary head가 없으면 SpaBlock과 FuseBlock은 학습되지 않고, 사실상 FreBlock만 동작하는 셈이 된다.&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;LGGM만 추가했을 때, 즉 FreBlock만 사용햇을 경우 0.5%p가 향상되었고, AUX만 추가했을 때는 0.3%p, LGGM과 AUX를 함께 사용하면 1.1%p 향상을 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZKBI1/dJMcaiDY4Sz/jBSjyUDGmKaQgXbk2CrGOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZKBI1/dJMcaiDY4Sz/jBSjyUDGmKaQgXbk2CrGOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZKBI1/dJMcaiDY4Sz/jBSjyUDGmKaQgXbk2CrGOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZKBI1%2FdJMcaiDY4Sz%2FjBSjyUDGmKaQgXbk2CrGOk%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;359&quot; height=&quot;126&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;126&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;LGGM은 neck의 P3, P4, P5 중 어느 위치에 넣어도 되지만, 논문은 세 위치에 각각 넣어보고 어디가 가장 효과적인지 비교했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 P3에 넣었을 때 80.2%로 가장 높았고 P4, P5 순으로 이어진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;정성적 평가&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOzmjx/dJMb99748ef/KzCvljWKKoLFm28LxqXUt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOzmjx/dJMb99748ef/KzCvljWKKoLFm28LxqXUt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOzmjx/dJMb99748ef/KzCvljWKKoLFm28LxqXUt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOzmjx%2FdJMb99748ef%2FKzCvljWKKoLFm28LxqXUt0%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;606&quot; height=&quot;585&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;585&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;DINO는 a,b,c,e에서 작은 불꽃을 놓쳤다. global feature 위주라 local 정보에 약하기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AutoAssign, FreeAnchor는 d에서 심한 연기 가려짐 상황에서 박스가 여러 개로 쪼개진 모습을 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FCLGYOLO는 두 문제 다 덜하다. FICC덕분에 연기로 색 변형돼도 안정적으로 탐지할 수 있고, LGGM의 넓은 receptive field 덕분에 가려진 불도 하나의 완전한 화염으로 탐지할 수 있게된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;결론&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UAV를 통한 산불 탐지의 핵심 난제인 연기 가려짐과 작은 물체 탐지를 각각 FICC와 LGGM으로 해결했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FICC는 feature 관계 기반의 제약과 추가 추론 비용이 없고, LGGM은 local-guided global feature, 파라미터/연산량 증가가 미미하다는 이점이 있다. 그 결과 SOTA 대비 가장 작은 모델 크기로 최고 성능을 달성할 수 있었다.&amp;nbsp;&lt;/p&gt;</description>
      <category>석사과정 기록/논문 리뷰</category>
      <category>Computer Vision</category>
      <category>cv</category>
      <category>논문리뷰</category>
      <category>컴퓨터비전</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/124</guid>
      <comments>https://dbwls-log.tistory.com/124#entry124comment</comments>
      <pubDate>Wed, 8 Jul 2026 15:30:16 +0900</pubDate>
    </item>
    <item>
      <title>석사 1학기 끝!</title>
      <link>https://dbwls-log.tistory.com/123</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 2026년 6월 19일 금요일이고, 종강을 했따!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 내 수업은 수요일에 끝났는데, TA 하는 교과목 시험이 오늘이라 .. 시험 감독하고 왔다.&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;드디어 석사 1학기가 끝났다. 사실 완전히 끝난건 아니고 ...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TA 과목 이것저것 채점도 해야하는데, 성적 처리기간이 다음주까지라 매우 바쁘게 채점을 해야한다. ㅠㅠ&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;그리고 다음주 월요일부터는 학교에서 하는 AI 부트캠프 TA도 하게 됐다. 3주동안 아침부터 점심시간까지 TA 일을 하는데 방학 때 용돈벌이 차원에서 신청했다 ㅎㅎ&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;사실 1학기는 적응? 하느라 시간을 다 써버린 것 같다. 근데 참 바빠서 그런지 한학기가 너무 순식간에 지나가버렸다.&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;&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; 9-6 근무도 처음이라 첨에는 진짜 피곤하고 너무 힘들었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 9시 정시 출근 6시 칼퇴는 아니였지만, 나름 규칙적으로 출퇴근을 하니 먼가 직장인이 된 것 같은? 막이래 ㅋㅋ&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;&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;&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대학원와서 공부도 열심히? 하고 있고, 다행히 TA나 장학금 등 돈도 잘 나와서 등록금이나 생활비 걱정도 덜하고, 인간관계에서의 스트레스도 없다. 한가지 아쉬운건 휴학하고 내 진로를 너무 늦게 정해서 학석사 연계로 하지 못한것.. 부들부들 ...&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;&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨋든 이렇게 내 석사 1학기는 끝났다. 앞으로 남은 3학기도 열심히 해보자 !&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;&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>석사과정 기록/일기</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/123</guid>
      <comments>https://dbwls-log.tistory.com/123#entry123comment</comments>
      <pubDate>Fri, 19 Jun 2026 16:59:04 +0900</pubDate>
    </item>
    <item>
      <title>그냥 내가 보려고 만든 기본 개념 정리 모음 ~</title>
      <link>https://dbwls-log.tistory.com/122</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Conv Block (CBS)&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAuF9G/dJMcaf1clUH/iA2wKoKyzJThckthwt2u1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAuF9G/dJMcaf1clUH/iA2wKoKyzJThckthwt2u1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAuF9G/dJMcaf1clUH/iA2wKoKyzJThckthwt2u1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAuF9G%2FdJMcaf1clUH%2FiA2wKoKyzJThckthwt2u1k%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;850&quot; height=&quot;331&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;331&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;그냥 Conv라고 하기도 하고 CBS라고 쓰는 곳도 있는 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 처음 참고한 논문에서는 Conv2d &amp;gt; BN &amp;gt; SiLU를 Conv로 불렀는데 다른 논문들을 몇개 읽어보니 CBS라고 쓰기도 하더라.&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;Conv 블록은 특징 추출만 담당하는 것이 아닌 안정적이고 매끄럽게 다듬는 고성능 필터 역할을 수행한다.&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;b&gt;1. Conv2d&amp;nbsp;&lt;/b&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;필터를 이동시키며 이미지의 가로세로 해상도는 줄이고, 대신 채널(특징의 종류) 수를 늘려 정보를 압축하는 역할을 수행한다.&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;b&gt;2. BN : Batch Normalization&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Conv2d를 거치며 데이터의 값들이 너무 커지거나 작아져서 한쪽으로 치우치는 현상을 방지해준다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. SiLU&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwfy0E/dJMcahdHqVA/hIpRjSydYzKfAkI9skbgbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwfy0E/dJMcahdHqVA/hIpRjSydYzKfAkI9skbgbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwfy0E/dJMcahdHqVA/hIpRjSydYzKfAkI9skbgbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcwfy0E%2FdJMcahdHqVA%2FhIpRjSydYzKfAkI9skbgbK%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;351&quot; height=&quot;278&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;772&quot;/&gt;&lt;/span&gt;&lt;/figure&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;특히 SiLU는 기존에 흔히 쓰던 함수들보다 꺾이는 부분이 훨씬 부드러운 곡선 형태를 띠고 있어서, 층이 깊어져도 정보의 흐름이 끊기지 않고 아주 섬세한 학습을 가능하게 해준다.&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;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;C2f 모듈&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPSEKg/dJMcagZ532u/qKFpu8xQ7Iv5sz88Ml0Cl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPSEKg/dJMcagZ532u/qKFpu8xQ7Iv5sz88Ml0Cl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPSEKg/dJMcagZ532u/qKFpu8xQ7Iv5sz88Ml0Cl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPSEKg%2FdJMcagZ532u%2FqKFpu8xQ7Iv5sz88Ml0Cl1%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;480&quot; height=&quot;90&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;90&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;C2f 모듈은 YOLOv8의 백본에서 핵심이 되는 모듈 중 하나이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 만들어진 Conv 블록을 재료로 삼아, 모델이 더 효율적으로 똑똑해지도록 정보의 길을 설계하는 역할을 한다.&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;b&gt;1. 정보의 분할과 병렬처리&amp;nbsp;&lt;/b&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;한쪽은 Conv 블록 여러개로 이루어진 Bottleneck 구간을 지나가고, 다른 한쪽은 연산 없이 그대로 옆으로 우회하도록하여 Concat 한다.&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;b&gt;2. 풍부한 정보 결합&amp;nbsp;&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Conv + C2f&lt;/h2&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;b&gt;1. 안정적인 깊이 확장&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 Conv2d만 반복하면 망이 깊어질수록 학습 신호가 약해지거나 망가질 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 BN과 SiLU가 포함된 Conv 블록을 사용했기 때문에, 네트워크를 아무리 깊게 쌓아도 기울기 소실 문제 없이 아주 튼튼하게 학습을 이어갈 수 있다.&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;b&gt;2. 부드럽고 정교한 추상화 과정&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Conv 블록으로 해상도를 부드럽게 줄이면서 핵심만 압축하고, 그 직후에 바로 C2f 모듈로 채널 간의 정보를 아주 풍부하게 섞어주는 과정을 반복한다.&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;b&gt;3. 수용 영역의 극대화&amp;nbsp;&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SPPF : Spatial Pyramid Pooling-Fast&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F7EaX/dJMb99UeVlT/aQeAKTslOwRwukf30QIq2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F7EaX/dJMb99UeVlT/aQeAKTslOwRwukf30QIq2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F7EaX/dJMb99UeVlT/aQeAKTslOwRwukf30QIq2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF7EaX%2FdJMb99UeVlT%2FaQeAKTslOwRwukf30QIq2k%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;272&quot; height=&quot;185&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;185&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;백본의 가장 깊은 곳, 즉 특징 추출의 마지막 단계에 위치한 이 모듈은 모델이 다양한 크기의 객체를 놓치지 않고 잘 인식하도록 돕는 핵심 기술이다.&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;b&gt;1. 주요 목적&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SPPF의 가장 큰 목표는 모델의 수용 영역, 즉 네트워크가 한 번에 바라보는 시야를 효율적으로 넓히는 데 있다.&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;SPPF는 좁은 영역부터 넓은 영역까지 다양한 크기의 공간적 맥락을 한꺼번에 뽑아내어 묶어주기 때문에, 객체의 크기나 형태가 극단적으로 변해도 모델이 안정적으로 탐지할 수 있게 해준다.&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;b&gt;2. 작동 방식과 내부 구조&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 특징맵을 5x5 크기의 최대 풀링 레이어를 통과시키는데, 이를 직렬 방식으로 연결한 것이 특징이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징맵을 첫 번째 5x5 풀링에 통과시켜 작은 영역의 특징을 요약하고, 그 결과물을 다시 두 번째 5x5 풀링에 통과시키면 수학적으로 9x9 크기의 넓은 풀링을 한 것과 완전히 동일한 시야를 확보하게 된다. 그 결과를 한 번 더 5x5 풀링에 통과시키면 13 x 13 크기만큼의 더 넓은 시야를 얻게 되고, 마지막으로는 통과 전의 원본특징맵과 1,2,3 번째 풀링을 거친 특징 맵들을 채널 방향으로 모두 Concat해서 다음 층으로 넘겨준다.&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;b&gt;3. Fast라는 이름이 붙은 이유&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거의 딥러닝 모델들은 넓은 시야를 얻기 위해 실제로 5x5, 9x9, 13x13 크기의 큰 필터를 각각 따로 연산한다.(기존 SPP 방식)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방식은 연산량이 너무 많아 속도가 느리지만, SPPF처럼 작은 5x5 연산을 직렬로 연달아 재사용하면, 최종적으로 얻는 정보량과 시야의 넓이는 기존과 똑같으면서도 컴퓨터가 처리해야 할 계산량은 크게 줄어들게 된다. 이렇게 하면 속도와 성능을 모두 잡을 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;GAP&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. GAP의 기본적인 동작 원리&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GAP는 이름 그대로 전역적으로 평균을 내는 풀링 기법이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 채널 하나에 H x W 크기의 픽셀들이 모여있다고 할 때, 이 픽셀들이 가진 모든 숫자 값을 다 더한 다음에 전체 픽셀의 개수로 나누어주는 아주 단순한 산술평균 연산이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식을 표현하면 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;div data-math=&quot;y_c = \frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} x_c(i, j)&quot;&gt;$$y_c = \frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} x_c(i, j)$$&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 어떤 채널의 크기가 3x3이고 픽셀 값이 1부터 9까지 들어있다면, 이 9개의 숫자를 모두 더한 값인 45를 9로 나눈 5라는 단 하나의 결과값을 만들어내는 것이다. 이 과정을 모든 채널마다 각각 독립적으로 수행한다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. GAP는 왜 등장했는가?&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GAP는 원래 Network In Network라는 논문에서 처음 제안되었다. 이전까지의 전통적인 CNN 모델들은 피처맵의 특징을 추출한 뒤, 마지막에 고양이인지 강아지인지 분류하기 위해 피처맵을 일렬로 쭉 펴는 Flatten 작업을 하고 여러 층의 FC 레이어를 통과시켰다.&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;&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;둘째, FC 레이어는 파라미터 수가 매우 많기 때문에 모델이 무거워지고 과적합이 아주 쉽게 발생한다.&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;이러한 문제를 해결하기 위해 등장한 것이 바로 GAP이다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. GAP의 작동 목적과 장점&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류해야 할 클래스가 1000개라면, 모델의 마지막 Conv 층에서 채널의 개수를 딱 1000개로 맞춘다. 그리고 각 채널에 GAP를 적용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 1000개의 채널은 각각 1000개의 스칼라 값으로 변하게 되고, 이 값들을 그대로 Softmax 함수에 넣어서 확률을 구하는 방식이다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째, 학습할 파라미터가 0개이다. GAP는 단순히 평균을 내는 연산이기 때문에 모델이 학습해야할 가중치가 전혀 없다. 당연히 과적합도 방지되고 모델도 가벼워진다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드로 보는 GAP&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1781246317103&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.nn as nn

# 입력 피처맵 정의: (배치 크기=1, 채널 수=2, 높이=3, 너비=3)
x = torch.tensor([[[[1.0, 2.0, 3.0],
                    [4.0, 5.0, 6.0],
                    [7.0, 8.0, 9.0]],
                   
                   [[9.0, 8.0, 7.0],
                    [6.0, 5.0, 4.0],
                    [3.0, 2.0, 1.0]]]])

# 1x1 크기로 공간 차원을 압축하는 GAP 모듈 선언
gap = nn.AdaptiveAvgPool2d(1)

# 연산 적용
output = gap(x)

print(output)
# 첫 번째 채널 연산 결과: (1+2+3+4+5+6+7+8+9) / 9 = 5.0
# 두 번째 채널 연산 결과: (9+8+7+6+5+4+3+2+1) / 9 = 5.0
# 최종 출력 형태: tensor([[[[5.]], [[5.]]]])&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;정리하자면 GAP는 복잡한 가중치 연산 없이, 해당 채널이 가진 공간 전체의 정보량을 단순 평균을 통해 하나의 대푯값으로 깔끔하게 요약해주는 강력하고 가벼운 연산기법이라고 생각하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;GMP&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. GMP의 기본적인 동작 원리&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GMP는 채널 내에 있는 H x W 크기의 픽셀들 중에서 가장 큰 숫자 딱 하나만 골라내는 덧셈이나 나눗셈이 없는 아주 단순한 연산이다.&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;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;$$y_c = \max_{i,j} x_c(i, j)$$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;만약 3x3 크기의 피처맵에 숫자들이 있다면, 그 숫자들을 다 더해서 나누는게 아니라 그 중 제일 높은 Peak 값 하나만 남기고 나머지는 전부 무시해버린다.&amp;nbsp;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;2. GMP의 작동 목적과 특징&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;전체적인 평균을 구하는 GAP와 달리, GMP는 가장 두드러진 특징을 포착하는데 목적이 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;예를들어 넓은 산림을 촬영한 이미지에서 아주 작은 불씨나 뚜렷한 불꽃의 시작점을 찾는다고 생각해보자. 배경이 숲으로 가득 차 있기 때문에 전체를 평균 내어버리면 이 작은 불씨의 신호가 배경 정보에 묻혀서 값이 작아질 수 있다. 하지만 GMP를 사용하면 그 좁은 영역에서 발생한 가장 높은 활성화 값 하나를 그대로 살려서 가져올 수 있다.&amp;nbsp;&lt;/span&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;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;특히 픽셀 정보가 아직 잘 보존되어 있는 네트워크의 초기 레이어에서 뚜렷한 RGB 특징이나 날카로운 패턴을 잡아낼 때, 해당 채널이 목표물에 얼마나 강하게 반응했는지를 평가하는 데 아주 효과적이다.&amp;nbsp;&lt;/span&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;b&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;코드로 보는 GMP&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1781246918110&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.nn as nn

# 입력 텐서 생성: 배치 크기 1, 채널 수 2, 높이 3, 너비 3
x = torch.tensor([[[[1.0, 2.0, 3.0],
                    [4.0, 5.0, 6.0],
                    [7.0, 8.0, 2.0]],
                   
                   [[9.0, 1.0, 2.0],
                    [3.0, 4.0, 5.0],
                    [6.0, 7.0, 8.0]]]])

# 1x1 출력 크기로 최댓값을 추출하는 GMP 레이어 초기화
gmp = nn.AdaptiveMaxPool2d(1)

# 최댓값 풀링 연산 수행
output = gmp(x)

print(output)
# 첫 번째 채널 최댓값 추출 결과: 8.0
# 두 번째 채널 최댓값 추출 결과: 9.0
# 결과 텐서 형태: tensor([[[[8.]], [[9.]]]])&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;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;이렇게 GMP는 공간 정보 중에서 가장 강한 신호만 뽑아내어, 해당 채널이 가진 특징의 최댓값을 단 하나의 스칼라 값으로 요약해주는 연산이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GAP vs GMP&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;1. 연산 방식의 차이&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GAP는 채널 안의 모든 픽셀값을 더한 뒤 픽셀 개수로 나누어 평균을 구한다. 공간 전체의 정보를 골고루 섞어버리는 느낌으로 동작한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GMP는 채널 안의 픽셀 값 중 가장 큰 숫자 하나만 뽑아낸다. 나머지 정보는 완전히 버리고 가장 뾰족한 특징 하나만 가져오게 되는 것이다.&amp;nbsp;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;2. 정보 요약의 성격&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GAP는 전체적인 숲을 보는 방식으로 동작한다. 이미지 전반에 걸쳐 해당 채널의 특징이 얼마나 넓고 부드럽게 퍼져있는지 문맥을 파악한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GMP는 나무 하나에 집중하는 방식이다. 특징이 얼마나 좁은 영역에 있든 상관없이, 가장 강렬하게 반응한 핵심 피크 신호를 놓치지 않고 잡아낸다.&amp;nbsp;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;&lt;b&gt;3. 노이즈에 대한 민감도&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GAP는 모든 픽셀값을 반영하기 때문에, 배경 노이즈가 많거나 쓸데없는 정보가 섞여있으면 평균값이 떨어지면서 신호가 약해질 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GMP는 가장 큰 값만 취하기 때문에 배경 노이즈를 완벽하게 무시한다. 타겟이 작더라도 강하게 빛난다면 그 신호를 온전히 유지할 수 있다. &lt;/span&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;b&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;4. 언제 사용하면 되나?&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GAP는 객체가 이미지 전체에 크게 분포하거나, 이미지의 전반적인 분위기나 클래스를 파악해야 할 때 유리하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-index-in-node=&quot;18&quot; data-math=&quot;y_c = \max_{i,j} x_c(i, j)&quot;&gt;GMP는 객체가 아주 작고 뚜렷하거나, 특정 부위의 날카로운 패턴을 잡아내야 할 때 유리하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>석사과정 기록/개인 연구</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/122</guid>
      <comments>https://dbwls-log.tistory.com/122#entry122comment</comments>
      <pubDate>Fri, 12 Jun 2026 16:03:02 +0900</pubDate>
    </item>
    <item>
      <title>대학원 한달차 후기(?)</title>
      <link>https://dbwls-log.tistory.com/121</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;랩미팅 때 발표할 발표자료도 만들기 벅찬 사람이기때문에 한달에 한번이라도 블로그에 기록을 남겨보도록 하겠다 ~&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;&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;&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;&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;일단은 교수님의 도움을 받으면서 쓰고 있다. 내가 1차로 작성을 해서 교수님께 드리면, 교수님이 피드백을 해주시고, 그 피드백을 바탕으로 다시 논문을 작성하는 식으로 작성하고 있다.&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;&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;석사 과정 시작하기 전부터 실험을 해왔던거라서 거의 3월 되자마자 논문을 쓰기 시작했고, 교수님께서도 최대한 빨리 쓰자고 하셨는데, 그게 벌써 한달이나 지났다. 진짜 빨리 자리를 잡아서 논문도 빨리 쓰고 어디든 내 소중한 첫 논문이 게재되었으면 좋겠다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>석사과정 기록/일기</category>
      <category>대학원</category>
      <category>대학원생</category>
      <category>딥러닝</category>
      <category>인공지능</category>
      <category>컴퓨터비전</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/121</guid>
      <comments>https://dbwls-log.tistory.com/121#entry121comment</comments>
      <pubDate>Mon, 6 Apr 2026 16:09:46 +0900</pubDate>
    </item>
    <item>
      <title>학부 인턴 마지막 정리</title>
      <link>https://dbwls-log.tistory.com/120</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;작년 여름 학부 인턴을 시작하고 벌써 6개월이라는 시간이 흘렀다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음에는 연구실에 오는 것 조차 어색해서 도서관이나 카페에서 공부를 하곤 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;나름 연구 일지도 블로그에 작성하고, 뭘 공부하고 있는지도 블로그에 남겨놨는데 이제는 그것조차 귀찮아서 노션에 개인적으로 정리하고 있다니 ...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 이제는 거의 매일 연구실에 와서 연구실에서 공부도 하고, 내가 하고 있는 프로젝트도 하고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;26년 2월 ... 대학교는 졸업했고, 다음주에는 대학원 입학을 앞두고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘이 학부 인턴으로서 연구실에 오는게 마지막이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음주부터는 석사 학생으로서 연구실에 출근하게 되었다!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;나름 반년동안 연구를 한다고 하고 있는데, 딱히 성과는 없었다. ㅠㅠ&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;연구실 오는 것도 오후에 잠깐 오고 주말에는 쉬고 그래서 그런지 결과가 나오는 속도가 더딘 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제부터는 진짜 대학원생이니까 더 열심히 해야겠다는 생각이 든다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2025 학부 인턴/N주차 리뷰</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/120</guid>
      <comments>https://dbwls-log.tistory.com/120#entry120comment</comments>
      <pubDate>Fri, 27 Feb 2026 15:22:15 +0900</pubDate>
    </item>
    <item>
      <title>검출 : Detection 기초</title>
      <link>https://dbwls-log.tistory.com/119</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;검출 문제 &lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;물체의 위치와 함께 부류의 정보를 알아내야 하므로 분류보다 어렵다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;검출 알고리즘은 물체의 위치와 함게 부류 신뢰도를 나타내는 확률 벡터도 출력해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지 내에 여러 &lt;span style=&quot;color: #f89009;&quot;&gt;객체의 클래스(label)&lt;/span&gt;과 &lt;span style=&quot;color: #f89009;&quot;&gt;위치 (bounding box)&lt;/span&gt;를 동시에 예측하는 작업이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지 내에 객체가 몇개가 있는지 알 수 없고 클래스도 다양해서 예측 개수조차 불확실한 문제이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Localization &lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하나의 이미지에 단 하나의 객체만 존재한다고 가정하고, 그 객체의 위치를 바운딩 박스로 찾아내는 작업이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1개의 바운딩 박스와 1개의 클래스만 예측하는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 입력 이미지 준비&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반 RGB 이미지를 가지고와서 크기를 통일해준다. (224x 224, 300x300 등)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이때 &lt;span style=&quot;color: #f89009;&quot;&gt;ground truth는 클래스 레이블과 바운딩 박스 좌표&lt;/span&gt;로 구성된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;※ 바운딩 박스 표현 방식&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. (xmin, ymin, xmax, ymax) &amp;gt; 코너 기반 : 좌하단 우상단&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VOC, COCO등의 어노테이션 포맷에서 사용된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. (cx, cy, w, h) &amp;gt; 중심 기반 : 중심점 + 크기&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;YOLO계열이나 RetinaNet 등에서 사용된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. CNN을 통한 특징 추출&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지를 ResNet이나 VGG 등 CNN을 통과시킨다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;CNN은 &lt;span style=&quot;color: #f89009;&quot;&gt;입력 이미지를 다채널 특징맵으로 변환&lt;/span&gt;한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 2개의 출력 가지로 분기&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;Classification Head : 분류 (Softmax) &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특징맵을 FC Layer에 통과시켜 클래스 확률을 출력한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Softmax 함수를 통해 확률 분포로 해석하고, 가장 높은 확률의 클래스를 선택하면 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;Bounding box Regression Head : 위치 회귀 (Bounding Box)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;같은 특징맵에서 또다른 FC Layer를 통해 좌표 회귀값을 출력한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출력 포맷은 위의 포맷을 참고하여 출력한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 좌표는 이미지 내에서의 객체 위치를 나타낸 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. 학습과 Loss 구성&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 과정을 통해 모델은 어떤 클래스인지 맞추고, 동시에 정확한 위치를 예측하는 방향으로 학습한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;손실함수는 분류용으로는 CE, 바운딩 박스 회귀용으로는 Smooth L1(Huber) Loss 를 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;※ Smooth L1 Loss&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;객체 탐지에서 바운딩 박스 회귀에 가장 널리 사용되는 손실함수이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;L1 Loss (MAE)의 안정성과 L2 Loss (MSE)의 민감함을 절충한 구조이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgVg69/dJMcagD4LW7/Vbb0bT3bFBsNQCz2rV5p30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgVg69/dJMcagD4LW7/Vbb0bT3bFBsNQCz2rV5p30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgVg69/dJMcagD4LW7/Vbb0bT3bFBsNQCz2rV5p30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgVg69%2FdJMcagD4LW7%2FVbb0bT3bFBsNQCz2rV5p30%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;568&quot; height=&quot;124&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단 각 좌표를 독립적으로 예측하고 평가해서 수치적 거리 차이만 보고 박스가 실제로 어떻게 겹치는지에 대한 IoU는 고려하지 않는다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 박스가 눈으로 봐서는 거의 겹쳐있는데, x좌표가 5픽셀 어긋나면 그 자체로도 오차로 취급한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이러한 문제를 해결하기 위해서 IoU 기반의 손실함수가 등장한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반적인 객체 탐지 파이프라인&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #7e98b1; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;1단계 : 영역 추정 (Region Proposal)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지 전체에서 &lt;span style=&quot;color: #f89009;&quot;&gt;물체가 있을 법한 후보 위치를 미리 선택&lt;/span&gt;한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex) RPN , Selective Search&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;2단계 : 딥러닝 기반 예측 (Feature + Detection Head)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Backbone : CNN backbone으로 &lt;span style=&quot;color: #f89009;&quot;&gt;특징을 추출&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex) ResNet, EfficientNet 등&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Neck : 다양한 크기의 특징맵을 &lt;span style=&quot;color: #f89009;&quot;&gt;연결 및 보강&lt;/span&gt;한다. (다중 스케일 대응)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Head : 각 셀에서 &lt;span style=&quot;color: #f89009;&quot;&gt;물체의 종류를 분류&lt;/span&gt;하고, &lt;span style=&quot;color: #f89009;&quot;&gt;박스의 위치와 크기를 예측&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #7e98b1; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;3단계 : 후처리 및 성능 평가 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;NMS (Non-Maximum Suppression) : 같은 객체에 대해 &lt;span style=&quot;color: #f89009;&quot;&gt;중복된 예측박스 중 하나만 남기고 제거&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IoU (Intersection over Union) : 예측 박스와 실제 박스가 &lt;span style=&quot;color: #f89009;&quot;&gt;얼마나 겹치는지&lt;/span&gt;를 측정한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;mAP (mean Average Precision) : 모델의 정확도에 대한 평가 지표로 각 클래스에 대해 &lt;span style=&quot;color: #f89009;&quot;&gt;Precision-Recall curve 기반의 평균 정확도 계산&lt;/span&gt;이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw0soI/dJMcagKPoSW/3ru4lyALdxFOczGzW003kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw0soI/dJMcagKPoSW/3ru4lyALdxFOczGzW003kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw0soI/dJMcagKPoSW/3ru4lyALdxFOczGzW003kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw0soI%2FdJMcagKPoSW%2F3ru4lyALdxFOczGzW003kk%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;1135&quot; height=&quot;385&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;입력 및 영역 제안 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;&lt;b&gt;1단계. 입력 및 전처리 : 이미지를 모델이 받아들이기 좋은 형태로 변형&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;입력 이미지의 크기를 조정하고 정규화나 증강 등 전처리를 진행하고 배치 구성을 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;2단계. (선택) 영역 제안 (Region Proposal)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지 전체에서 물체가 있을 법한 위치 후보를 생성한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;RPN, Selective Search 등을 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단 해당 단계는 Two-stage 모델에서만 사용되고, One-stage 모델에서는 사용하지 않는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;two-stage : R-CNN, Fast R-CNN, Faster R-CNN 등&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;one-stage : YOLO, SSD, RetinaNet 등&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특징 추출 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #7e98b1;&quot;&gt;3단계. 특징 추출 : 이미지에서 유용한 특징을 추출&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Backbone : CNN 기반 특징 추출&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;입력 이미지를 여러 단계로 처리하여 &lt;span style=&quot;color: #f89009;&quot;&gt;다양한 크기/정보수준의 시간적 특징을 추출하는 역할&lt;/span&gt;을 수행한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대표적인 구조로는 ResNet, CSPNet, EfficientNet 등이 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;다양한 해상도의 특징맵을 출력하여 Neck에 전달&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Neck : &lt;span style=&quot;color: #f89009;&quot;&gt;다양한 크기의 특징맵을 연결 및 보강하여 다중 스케일에 대응&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;백본에서 추출한 특징맵을 재구성하여 &lt;span style=&quot;color: #f89009;&quot;&gt;작은 것부터 큰 것까지 다양한 크기의 물체를 동시에 인식&lt;/span&gt;할 수 있도록 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대표적인 구조로는 FPN, PAN, BiFPN, CSP-PAN 등이 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;다중 해상도의 특징맵을 출력하여 Detection Head에 전달&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예측&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #7e98b1;&quot;&gt;4단계. 객체 예측 (Head) : 클래스 분류 + 박스 위치 예측&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;※ Anchor 기반 모델&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Faster R-CNN, YOLOv2~7, SSD등이 Anchor 기반 모델이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지 내의 각 위치에서 크기, 비율, 위치가 다양하므로 하나의 고정된 박스 형태로는 예측이 불가능하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서 &lt;span style=&quot;color: #f89009;&quot;&gt;다양한 종횡비와 스케일을 가지는 anchor를 한 위치에 여러개 할당&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&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; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. bounding box offset (tx, ty, tw, th) : 어떻게 이 &lt;span style=&quot;color: #f89009;&quot;&gt;anchor를 이동 및 스케일링해서 GT box에 맞출 수 있을지&lt;/span&gt;를 학습 시 정답과 비교하여 학습한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. Objectness : &lt;span style=&quot;color: #f89009;&quot;&gt;GT와 IoU 기반&lt;/span&gt;으로 이 &lt;span style=&quot;color: #f89009;&quot;&gt;anchor에 객체가 있는지 없는지에 대한 확률&lt;/span&gt;을 표현한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;배경이면 0, 객체가 존재하면 1에 가깝게 표현한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. Class probabilities : 객체가 있다고 가정하고 그게 &lt;span style=&quot;color: #f89009;&quot;&gt;무슨 클래스인지에 대한 확률&lt;/span&gt;을 표현한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;객체가 있는 anchor에 대해서만 클래스 라벨을 학습하고, softmax or simoid로 다중 클래스 확률을 출력한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;학습 시에는 객체가 있는 anchor에 대해서만 loss가 적용된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;✲ Anchor 학습 과정&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 입력 이미지를 CNN을 통과시켜 다중 해상도의 특징맵 생성&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex) 416 x 416 &amp;gt; 13 x 13 (각 셀에서 물체를 예측)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 특징맵의 &lt;span style=&quot;color: #f89009;&quot;&gt;각 Grid Cell&lt;/span&gt;에 여러개의 &lt;span style=&quot;color: #f89009;&quot;&gt;다양한 크기와 비율을 가진 anchor 박스 생성&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;그리드 셀이란 특징맵을 구성하는 개별적인 최소 단위를 의미한다. 예를들어 13 x 13 그리드로 나눈다는 것은 전체 이미지를 13x13 즉 169개의 그리드 셀로 나눈다는 것과 동일하다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex) 13 x 13 그리드마다 anchor box를 3개씩 놓는다고 하면 총 13 x 13 x 3 = 507개의 anchor 박스가 생성된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. &lt;span style=&quot;color: #f89009;&quot;&gt;GT를 anchor에 매칭&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지에 실제로 있는 객체와 anchor box 사이의 겹침 정도인&lt;span style=&quot;color: #f89009;&quot;&gt; IoU를 비교&lt;/span&gt;해서 &lt;span style=&quot;color: #f89009;&quot;&gt;가장 잘 맞는 anchor 박스에 정답을 할당&lt;/span&gt;한다. 이 과정을 anchor 선택 또는 GT 할당이라고 부른다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. 선택된 anchor 에 대하여 예측값 vs 정답값으로 &lt;span style=&quot;color: #f89009;&quot;&gt;손실 계산&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실제 박스와 예측된 박스 사이의 거리 &lt;span style=&quot;color: #f89009;&quot;&gt;Localization Loss&lt;/span&gt; : 일반적으로 GIoU, DIoU, CIoU 사용&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;객체 여부 예측 정확도 &lt;span style=&quot;color: #f89009;&quot;&gt;Objectness Loss&lt;/span&gt; : Binary CE Loss 사용 (0 or 1)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클래스 예측 정확도 &lt;span style=&quot;color: #f89009;&quot;&gt;Classification Loss&lt;/span&gt; : CE or BCE 사용&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5. 이 손실을 바탕으로 모델을 업데이트 (&lt;span style=&quot;color: #f89009;&quot;&gt;역전파&lt;/span&gt;)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✲ Anchor matching&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Anchor matching이란 &lt;span style=&quot;color: #f89009;&quot;&gt;GT(정답)를 Anchor에 할당하는 방법&lt;/span&gt;이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지 안에 &lt;span style=&quot;color: #f89009;&quot;&gt;정답 박스가 있다면&lt;/span&gt;, 모델은 &lt;span style=&quot;color: #f89009;&quot;&gt;모든 anchor box와 IoU를 계산&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그 중 &lt;span style=&quot;color: #f89009;&quot;&gt;GT와 가장 많이 겹치는 anchor box를 하나 골라 정답 anchor로 선택&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;정답 anchor에만 objectness =1 , class= GT의 클래스, offset= anchor 위치 기준으로 GT 차이 (yx, yt, tw, ty)를 할당&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나머지 anchor에는&lt;span style=&quot;color: #f89009;&quot;&gt; IoU&amp;gt; low threshold면 objectness=0&lt;/span&gt;으로 설정하여 배경으로 취급을, &lt;span style=&quot;color: #f89009;&quot;&gt;IoU가 중간값이면 학습에서 아예 제외&lt;/span&gt;를, &lt;span style=&quot;color: #f89009;&quot;&gt;IoU&amp;lt;high threshold면 정답&lt;/span&gt;(positive)으로 설정한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✲ Anchor는 어떻게 설계되는가?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;anchor box는 모델이 임의로 만드는 것이 아니라 사전에 정의된 규칙에 따라 배치되는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;규칙 1. 사람이 직접 anchor의 크기와 비율을 &lt;span style=&quot;color: #f89009;&quot;&gt;수동&lt;/span&gt;으로 지정 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점 : 데이터셋에 맞지 않으면 학습이 느리거나 성능이 낮다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;규칙 2. 데이터를 기반으로 &lt;span style=&quot;color: #f89009;&quot;&gt;자동&lt;/span&gt;으로 설정&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;학습 데이터에 존재하는 GT box들의 크기와 비율을 모다 K-Means 알고리즘 등으로 자주 등장하는 anchor box를 자동으로 추출한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #8a3db6;&quot;&gt;※ Anchor Free 모델&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FCOS, YOLOv8, CenterNet, DETR 등이 여기에 해당된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;사전 정의된 anchor box없이, 이미지 내 각 위치에서 직접 박스 좌표 또는 중심점을 예측&lt;/span&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Anchor 설정이 번거롭고 실험적으로 결정되고, anchor가 많을수록 계산량이 증가하지만, 작은 객체에서는 제대로 동작을 못한다는 문제가 있어 anchor free 모델이 도입되었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;anchor free 모델도 문제점이 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초기에는 수렴이 느릴 수 있다는 것과 다양한 크기와 비율 대응은 구조적으로 설정해야 한다는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;✲ 대표적인 Anchor Free 방식&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FCOS : Fully Convolutional One-stage Object Detection&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;anchor를 만들지 않고, &lt;span style=&quot;color: #f89009;&quot;&gt;이미지 위의 모든 위치의 점이 직접 객체인지 판단&lt;/span&gt;하고, 객체가 있다면 &lt;span style=&quot;color: #f89009;&quot;&gt;해당 점으로부터 박스 경계까지의 거리를 회귀&lt;/span&gt;함과 동시에 &lt;span style=&quot;color: #f89009;&quot;&gt;클래스 확률까지 예측&lt;/span&gt;하는 방식으로 동작한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특징맵 위의 모든 점이 예측 대상이며 &lt;span style=&quot;color: #f89009;&quot;&gt;(l, t, r , b)과 objectness, class probability&lt;/span&gt; 가 예측 항목에 포함된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;GT 내부의 모든 점에 l, t, r, b 거리를 계산해서 정답을 부여한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;✲ 학습 과정&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. GT 박스 내부의 모든 위치 i,j 에 대해 (GT에 포함되는 픽셀 점만) 해당 &lt;span style=&quot;color: #f89009;&quot;&gt;GT 박스와 관련된 거리 l,t,r,b를 계산하여 정밥으로 부여&lt;/span&gt;한다. (IoU Loss, GIoU, DIoU)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;objectness는 1로 (BCE Loss) class = GT의 클래스로 (Focal Loss or CE Loss) 설정한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;class Loss는 objectness가 1인 위치에만 적용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 박스의 외부 위치는 objectness = 0, class 및 bbox loss 는 무시 또는 손실 없음 처리한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;후처리&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5단계. 후처리 : 예측 결과를 다듬고 겹친 박스 정리 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이전 단계에서 얻은 결과 [cx, cy, w, h, class, confidence score]를 보고 후처리를 진행한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;cx, cy : 중심 좌표, 예측된 바운딩 박스의 중심점&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;w,h: 너비, 높이, 예측된 박스의 크기&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;class: 클래스 ID, 예측된 가장 높은 확률의 클래스 인덱스&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;confidence score : 확신 정도, 보통 objectness x class probability &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. Thresholding : confidence score가 미리 정한 임계값보다 작은 박스를 제거한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;배경이나 의미가 없는 예측은 대부분 제거되고, 0.25나 0.5를 자주 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. NMS : Non-Maximum Suppression&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;남은 박스 중 같은 클래스끼리 겹치는 박스들을 정리한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IoU가 일정 임계값보다 크면 겹친다고 판단하여 가장 확신이 높은 박스 1개만 남기고 나머지는 제거한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #8a3db6;&quot;&gt;✲ NMS (Non-Maximum Suppression)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;객체 탐지 알고리즘은 객체가 있을만한 위치에 많은 Detection을 수행하는 경향이 강하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;NMS는 Detect된 중복 바운딩 박스 중 비슷한 위치에 있는 박스는 제거하고 가장 적합한 박스를 선택하는 후처리 기법이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QecRQ/dJMcabCKRiK/dIRiyqFiehIroQURjmSkj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QecRQ/dJMcabCKRiK/dIRiyqFiehIroQURjmSkj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QecRQ/dJMcabCKRiK/dIRiyqFiehIroQURjmSkj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQecRQ%2FdJMcabCKRiK%2FdIRiyqFiehIroQURjmSkj1%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;562&quot; height=&quot;262&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;262&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;성능 평가&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;6단계. 성능 평가 : 얼마나 잘 맞췄는지 평가&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IoU를 사용하여 예측 박스와 실제 박스의 겹치는 정도를 측정하고, Precision/ Recall을 확인한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다양한 임계값에서 평균 정확도인 mAP도 함께 측정한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>2025 학부 인턴/CV</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/119</guid>
      <comments>https://dbwls-log.tistory.com/119#entry119comment</comments>
      <pubDate>Wed, 17 Dec 2025 00:06:01 +0900</pubDate>
    </item>
    <item>
      <title>인식이란 : Recognition</title>
      <link>https://dbwls-log.tistory.com/118</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;인식의 세부 문제&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사람과 달리 컴퓨터 비전은 인식을 세부 문제로 구분하고, 별도의 데이터셋과 성능 기준을 가지고 알고리즘을 개발한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1664&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4PStC/dJMcacBFlYU/O1PsQhSTeFOTWlRR3M2NJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4PStC/dJMcacBFlYU/O1PsQhSTeFOTWlRR3M2NJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4PStC/dJMcacBFlYU/O1PsQhSTeFOTWlRR3M2NJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4PStC%2FdJMcacBFlYU%2FO1PsQhSTeFOTWlRR3M2NJ0%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;1664&quot; height=&quot;636&quot; data-origin-width=&quot;1664&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분류 : Classification&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;영상에 있는 물체의 부류를 알아내는 문제로, 보통 부류 확률 벡터를 출력한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;내 차, 어린이 교통 표지판과 같은 특정 물체를 알아내는 것을 &lt;span style=&quot;color: #f89009;&quot;&gt;사례 분류(instance)&lt;/span&gt;, 고양이나 자전거처럼 물체의 부류를 알아내는 것을 &lt;span style=&quot;color: #f89009;&quot;&gt;범주 분류(categorical)&lt;/span&gt;라고 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;검출 : Detection&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;영상에서 물체를 찾아 직사각형의 &lt;span style=&quot;color: #f89009;&quot;&gt;바운딩 박스로 위치를 표현&lt;/span&gt;하는 것이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보통 &lt;span style=&quot;color: #f89009;&quot;&gt;부류 확률&lt;/span&gt;도 같이 출력하고, 부류는 미리 정해져 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분할 : Segmentation&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;물체가 점유하는 영역, 즉 화소의 집합을 지정하고 부류 확률도 함께 출력한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;의미 분할 semantic segmentation, 사례 분할 instance segmentation 으로 나뉜다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;추적 : Tracking&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비디오에 나타난 물체의 이동 궤족을 표시한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시각 물체 추적과 다중 물체 추적으로 나뉜다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;행동 분류&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;물체가 수행하는 행동의 종류를 알아내는 문제이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사람과 컴퓨터 비전의 인식 과정 비교&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사람과 컴퓨터 비전은 인식하는 방식이 크게 다르다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를 들어, 사람은 검출을 따로 수행하지 않고 분할만 수행하는 반면, 컴퓨터비전은 보다 쉬운 검출 문제를 중요하게 취급한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사람의 인식&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;세부 문제를 별도로 수행하지 않고 동시에 수행한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지식 표현과 추론 등 지능 요소를 통해 &lt;span style=&quot;color: #f89009;&quot;&gt;명확한 의도&lt;/span&gt;를 지니며, 의도에 따라 선택적 주의집중이 가능하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사람의 의도는 거친 수준과 세밀한 수준을 자연스럽게 조절하고, 전환에 틈새가 없고 노력이 들지 않는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자신의 내부 상태와 외부 환경과 밀접하게 상호작용하며 수시로 변하는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;문맥 사용&lt;/span&gt;에 능숙하고 동영상을 처리하여 상대의 행동을 인식하고 &lt;span style=&quot;color: #f89009;&quot;&gt;의도까지 추론&lt;/span&gt;할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;컴퓨터 비전의 인식 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;세부 문제별로 독립적으로 해결&lt;/span&gt;한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대상 물체 또는 응용 과업에 따라 더욱 세부적인 문제로 구분하여 해결한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;능동적인 의도가 없고&lt;/span&gt; 사람의 의도에 해당하는 것을 고안하고 학습과정에 반영하는 연구는 먼 미래의 일이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOHpBP/dJMcaiokECl/Mi6Y3rywKyMKY1Bgg6MTh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOHpBP/dJMcaiokECl/Mi6Y3rywKyMKY1Bgg6MTh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOHpBP/dJMcaiokECl/Mi6Y3rywKyMKY1Bgg6MTh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOHpBP%2FdJMcaiokECl%2FMi6Y3rywKyMKY1Bgg6MTh1%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;426&quot; height=&quot;121&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우리는 문맥을 통해 첫글자와 두번째 글자가 같아도 '거지 같은 행색' 이라고 해석할 수 있지만, 컴퓨터 비전은 1,2 번째 글자가 같아 혼란을 겪을 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2025 학부 인턴/CV</category>
      <author>dbwls-log</author>
      <guid isPermaLink="true">https://dbwls-log.tistory.com/118</guid>
      <comments>https://dbwls-log.tistory.com/118#entry118comment</comments>
      <pubDate>Tue, 16 Dec 2025 11:21:31 +0900</pubDate>
    </item>
  </channel>
</rss>