<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jinahhub 님의 연습장</title>
    <link>https://jinahhub.tistory.com/</link>
    <description>I have 6 years of hands-on experience as an engineer in the Advanced Battery Core Tech &amp;amp; Validation Team. &amp;quot;Now, I am fully immersed in a new challenge: Deep Learning and Computer Vision.&amp;quot;</description>
    <language>ko</language>
    <pubDate>Thu, 11 Jun 2026 16:00:20 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jinahhub</managingEditor>
    <image>
      <title>jinahhub 님의 연습장</title>
      <url>https://tistory1.daumcdn.net/tistory/8663205/attach/f7a10e9da15d4c0ba480974a09924ffd</url>
      <link>https://jinahhub.tistory.com</link>
    </image>
    <item>
      <title>[CV] Semantic Segmentation : DeepLab V3+</title>
      <link>https://jinahhub.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Contents]&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;1. Segmentation 기본&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1.1 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Semantic&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Segmentation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;1.2&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt;Instance segmentation&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;p data-ke-size=&quot;size16&quot;&gt;2. Segmentation : DeepLab 알고리즘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2.1 DeepLab V3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;2.1.1. Atrous Convolution&amp;nbsp; (V1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;2.1.2. Atrous Spatial Pyramid Pooling (ASPP) (V2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2.2 Encoder-Decoder 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2.3 Depthwise Separable Convolution&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2.4. DeepLab V3+&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. 포스팅을 마치며&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;1. Segmentation 기본&lt;/b&gt;&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;&amp;lt;정의&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이미지에서 픽셀 단위로 관심심 객체를 추출하는 방법을 &lt;span style=&quot;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt;이미지 세그멘테이션(image segmentation)이라고 합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt;이미지 세그멘테이션은 모든 픽셀에 라벨(Label)을 할당하고, 라벨이 같은 객체들은 &quot;공통적인 특징&quot;을 가진다고 가정하며 이때 공통적인 특징은 픽셀이 비슷하게 생겼다는 사실은 인식하지만, 우리가 아는 것처럼 실제 물체단위로 인식하지 않을 수도 있습니다&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;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt;세그멘테이션에는 여러가지 태스크들이 있으며 크게 Semantic / Instance Segmentation 2가지부터 공부하겠습니다.&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: #474c53;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;1.1 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Semantic&lt;span&gt; Segmentation&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt;세그멘테이션 중에서도 특히, 우리가 인식하는 세계처럼 물리적 의미 단위로 인식하는 세그멘테이션을 &lt;/span&gt;&lt;b&gt;시맨틱 세그멘테이션&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt; 이라고 합니다. 쉽게 설명하면 이미지에서 픽셀을 사람, 자동차, 비행기 등의 물리적 단위로 분류(classification)하는 방법&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;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt;시맨틱 세그멘테이션은 '사람'이라는 추상적인 정보를 이미지에서 추출해 내는 방법입니다. 그래서 사람이 누구인지 관계없이 같은 라벨로 표현이 됩니다&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: #474c53;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;1.2 &lt;span style=&quot;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt;Instance segmentation&lt;/span&gt;&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #474c53; text-align: start;&quot;&gt;인스턴스 세그멘테이션은 사람 개개인별로 다른 라벨을 가지게 합니다. 여러 사람이 한 이미지에 등장할 때 각 객체를 분할해서 인식하자는 것이 목표입니다. 아래 사진처럼요!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 4.47.03.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wNITc/dJMcaipZD6x/dJ4CuDh1fB2jtrnPzTGPHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wNITc/dJMcaipZD6x/dJ4CuDh1fB2jtrnPzTGPHk/img.png&quot; data-alt=&quot;MS COCO datasets의 인스턴스 세그멘테이션 라벨 (출처: http://cocodataset.org/#explore )&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wNITc/dJMcaipZD6x/dJ4CuDh1fB2jtrnPzTGPHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwNITc%2FdJMcaipZD6x%2FdJ4CuDh1fB2jtrnPzTGPHk%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;573&quot; height=&quot;383&quot; data-filename=&quot;스크린샷 2026-06-01 오후 4.47.03.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MS COCO datasets의 인스턴스 세그멘테이션 라벨 (출처: http://cocodataset.org/#explore )&lt;/figcaption&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;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;2.&amp;nbsp;&lt;/span&gt;Segmentation : DeepLab 알고리즘&lt;/b&gt;&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: #333333;&quot;&gt;&amp;nbsp;2.1 DeepLab V3&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: #333333;&quot;&gt;&amp;nbsp; &amp;lt;정의&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;세그멘테이션 문제에는 FCN, SegNet, U-Net 등 많은 모델이 사용되고 있습니다. 이번 포스팅에서는 그중에서 DeepLab이라는 세그멘테이션 모델을 불러와서 저와 고양이를 세그멘테이션 해보려합니다. 참고로 DeepLab 알고리즘(DeepLab v3+)은 세그멘테이션 모델 중에서도 성능이 매우 좋아 최근까지도 많이 사용되고 있습니다.(속닥)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그 전에, DeepLab이라고 불리는 시멘틱 세그멘테이션 방법은 ver1부터 지금까지 4번의 개정을 거쳐 현재 3+까지 출시되었다고 합니다.(2018)&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: #333333;&quot;&gt;DeepLab은 atrous convolution을 적극적으로 활용하는데, V1에서는 atrous convolution을 적용해보았고, &lt;span style=&quot;text-align: start;&quot;&gt;V2에서는 multi-scale conte&lt;span style=&quot;color: #333333;&quot;&gt;xt를 적용하기 위한 Atrous Spatial Pyramid Pooling (ASPP) 기법을 제안하고, V3에서는 기존&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #333333; text-align: start;&quot; href=&quot;https://arxiv.org/abs/1512.03385&quot;&gt;ResNet&lt;/a&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;구조에 atrous convolution을 활용해 좀 더 dense한 feature map을 얻는 방법을 제안했습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 &lt;span style=&quot;text-align: start;&quot;&gt;V3+에서는 separable convolution과 atrous convolution을 결합한 atrous separable convolution의 활용을 제안하며 이번 포스팅인 이 부분을 중점적으로 다뤄보려합니당&lt;/span&gt;&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: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;2.1.1. Atrous Convolution&amp;nbsp; (V1)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 4.59.35.png&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/piGK5/dJMcabEoD3p/wUzu424ZBGko7bjevD57o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/piGK5/dJMcabEoD3p/wUzu424ZBGko7bjevD57o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/piGK5/dJMcabEoD3p/wUzu424ZBGko7bjevD57o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpiGK5%2FdJMcabEoD3p%2FwUzu424ZBGko7bjevD57o0%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;268&quot; data-filename=&quot;스크린샷 2026-06-01 오후 4.59.35.png&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Atrous convolution은 기존 convolution과 다르게, 필터 내부에 빈 공간을 둔 채로 작동하게 됩니다. 위 예시에서, 얼마나 빈 공간을 둘 지 결정하는 파라미터인 rate&amp;nbsp;&lt;/span&gt;r&lt;span style=&quot;text-align: start;&quot;&gt;=1일 경우, 기존 convolution과 동일하고,&amp;nbsp;&lt;/span&gt;r&lt;span style=&quot;text-align: start;&quot;&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Atrous convolution을 활용함으로써 얻을 수 있는 이점은, 기존 convolution과 동일한 양의 파라미터와 계산량을 유지하면서도, field of view 즉, 한 픽셀이 볼 수 있는 영역을 크게 가져갈 수 있게 됩니다. 보통 semantic segmentation에서 높은 성능을 내기 위해서는 convolutional neural network의 마지막에 존재하는 한 픽셀이 입력값에서 얼마만큼의 영역을 커버할 수 있는지를 결정하는 receptive field 크기가 중요하게 작용하는데 Atrous convolution을 활용하면 파라미터 수를 늘리지 않으면서도 receptive field를 크게 키울 수 있기 때문에 여기에 장점이 있습니다.&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;2.1.2. Atrous Spatial Pyramid Pooling (ASPP) (V2)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.14.02.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6VhHK/dJMcafNC5r4/ObKqV3s4iX0NEZ0HBVlXqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6VhHK/dJMcafNC5r4/ObKqV3s4iX0NEZ0HBVlXqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6VhHK/dJMcafNC5r4/ObKqV3s4iX0NEZ0HBVlXqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6VhHK%2FdJMcafNC5r4%2FObKqV3s4iX0NEZ0HBVlXqk%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;496&quot; height=&quot;284&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.14.02.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;V2에서는 앞서 설명한 Atrous Convolution의 기법을 활용하여 feature map으로부터 여러개의 rate가 다른 atruous convolution을 병렬적으로 적용한 뒤, 이를 다시 합쳐주는 기법으로 ASPP을 적용했습니다. 코넬대학교에서 발표한 PSPNet(Pyramid Scene Parsing Network, @&lt;a style=&quot;color: #83b6cc; text-align: start;&quot; href=&quot;https://arxiv.org/abs/1612.01105&quot;&gt;PSPNet&lt;/a&gt;) 에서도 유사하게 pramid pooling 기법을 활용했었습니다. 이 방법은 multi-scale context 모델 구조로서 보다 정확한 시멘틱 세그멘테이션이 가능해지도록 만들어주었으며 DeepLap에서 ASPP를 기본 모듈로 사용하고 있습니다.&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.2 Encoder-Decoder 구조&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.24.49.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;690&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s8acg/dJMcahYUmyr/z6zoiGEavEdiGa6oGZFBik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s8acg/dJMcahYUmyr/z6zoiGEavEdiGa6oGZFBik/img.png&quot; data-alt=&quot;U-Net 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s8acg/dJMcahYUmyr/z6zoiGEavEdiGa6oGZFBik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs8acg%2FdJMcahYUmyr%2Fz6zoiGEavEdiGa6oGZFBik%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;362&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.24.49.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;690&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;U-Net 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Encoder-Decoder 구조 또한 시멘틱 세그멘테이션을 위한 CNN 구조로 자주 활용되고 있습니다. 특히 많이 들어본 U-Net 엔코더디코더 구조는 정교한 픽셀 단위의 세그멘테이션이 요구되는 도메인에서 자주 사용합니다. 아래 그림에서 보면 왼쪽의 엔코더 부분에서 점진적으로 spatial dimension을 줄여가면서 고차원의 시멘틱 정보를 convolution filter가 추출해낼 수 있도록 합니다. 이후 오른쪽 디코터 부분에서는 spatial dimension 축소로 인해 손실된 spatial 정보를 점진적으로 복원하여 보다 정교한 boundary 세그멘테이션을 가능하도록 만들어줍니다.&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;또한 U-Net 의 특징적인 부분은&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; Spatial 정보를 복원하는 과정입니다. 이전 encoder feature map 중 동일한 크기를 지닌 feature map을 가져 와 prior로 활용함으로써 더 정확한 boundary segmentation이 가능하게 만듭니다.&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: #333333; text-align: start;&quot;&gt;2.3 Depthwise Separable Convolution&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw1Q0N/dJMcabqToXe/rRc3g4jRpqGhBuDg3KgIHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw1Q0N/dJMcabqToXe/rRc3g4jRpqGhBuDg3KgIHk/img.png&quot; data-alt=&quot;Convolution 기본&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw1Q0N/dJMcabqToXe/rRc3g4jRpqGhBuDg3KgIHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw1Q0N%2FdJMcabqToXe%2FrRc3g4jRpqGhBuDg3KgIHk%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;239&quot; height=&quot;425&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Convolution 기본&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;입력 이미지가 8&amp;times;8&amp;times;3 (&lt;/span&gt;H&lt;span style=&quot;text-align: start;&quot;&gt;&amp;times;&lt;/span&gt;W&lt;span style=&quot;text-align: start;&quot;&gt;&amp;times;&lt;/span&gt;C&lt;span style=&quot;text-align: start;&quot;&gt;) 이고, convolution filter 크기가 3&amp;times;3 (&lt;/span&gt;F&lt;span style=&quot;text-align: start;&quot;&gt;&amp;times;&lt;/span&gt;F&lt;span style=&quot;text-align: start;&quot;&gt;) 이라고 했을 때, filter 한 개가 가지는 파라미터 수는 3&amp;times;3&amp;times;3 (&lt;/span&gt;F&lt;span style=&quot;text-align: start;&quot;&gt;&amp;times;&lt;/span&gt;F&lt;span style=&quot;text-align: start;&quot;&gt;&amp;times;&lt;/span&gt;C&lt;span style=&quot;text-align: start;&quot;&gt;) = 27 이 됩니다. 만약 filter가 4개 존재한다면, 해당 convolution의 총 파라미터 수는 3&amp;times;3&amp;times;3&amp;times;4 (&lt;/span&gt;F&lt;span style=&quot;text-align: start;&quot;&gt;&amp;times;&lt;/span&gt;F&lt;span style=&quot;text-align: start;&quot;&gt;&amp;times;&lt;/span&gt;C&amp;times;N)&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;만큼 지니게 됩니다. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #726b60; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #726b60; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bovnLZ/dJMcahknbXz/vt5NOZb8IywASj4iyM0lq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bovnLZ/dJMcahknbXz/vt5NOZb8IywASj4iyM0lq0/img.png&quot; data-alt=&quot;Depthwise Convolution&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bovnLZ/dJMcahknbXz/vt5NOZb8IywASj4iyM0lq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbovnLZ%2FdJMcahknbXz%2Fvt5NOZb8IywASj4iyM0lq0%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;258&quot; height=&quot;260&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Depthwise Convolution&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Convolution 연산에서 channel 축을 filter가 한 번에 연산하는 대신에, 위 그림과 같이 입력 영상의 channel 축을 모두 분리시킨 뒤, channel 축 길이를 항상 1로 가지는 여러 개의 convolution 필터로 대체시킨 연산을 depthwise convolution이라고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtI9sm/dJMcacXBSye/NcPGOGyFn2PJyDtM5RbRk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtI9sm/dJMcacXBSye/NcPGOGyFn2PJyDtM5RbRk1/img.png&quot; data-alt=&quot;Depthwise Separable Convolution&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtI9sm/dJMcacXBSye/NcPGOGyFn2PJyDtM5RbRk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtI9sm%2FdJMcacXBSye%2FNcPGOGyFn2PJyDtM5RbRk1%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;363&quot; height=&quot;254&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Depthwise Separable Convolution&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;이제, 위의 depthwise convolution으로 나온 결과에 대해, 1&amp;times;1&amp;times;&lt;/span&gt;C&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;크기의 convolution filter를 적용한 것을 depthwise separable convolution 이라 합니다. 이처럼 복잡한 연산을 수행하는 이유는 기존 convolution과 유사한 성능을 보이면서도 사용되는 파라미터 수와 연산량을 획기적으로 줄일 수 있기 때문입니다.&lt;/span&gt;&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: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;ex. 입력값 8x8x3, 16개의 3x3 convolution 필터 적용 시 파라미터 갯수&lt;br /&gt;&amp;nbsp; &amp;nbsp; - Convolution : 3x3x3x16 = 432개&lt;br /&gt;&amp;nbsp; &amp;nbsp; - Depthwise separable convolution : 3x3x3 + 3x16 = 75&lt;/span&gt;&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: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;즉, Depthwise separable convolution은 기존 convolution filter가 spatial dimension(H*W)과 channel dimension(3채널)을 동시에 처리하던 것을 따로 분리시켜 각각 처리하는 것이라고 볼 수 있습니다. 두 축을 분리시켜 연산을 수행하더라도 최종 결과값은 결국 두 가지 축 모두를 처리한 결과값을 얻을 수 있으므로, 기존 convolution filter가 수행하던 역할을 충분히 대체할 수 있습니다.&lt;br /&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;픽셀 각각에 대한 Lable을 예측해야하는 시멘틱 세그멘테이션 입장에서는 난이도가 높고 CNN 구조가 깊어지며 receptive field를 넓히기 위해 더 많은 파라미터가 필요한 상황에서 이 모델은 파라미터수를 대폭 줄일 수 있기 때문에 성능향상과 메모리사용량 감소 두마리 토끼를 잡을 수 있는 구조입니다.&lt;/span&gt;&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: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;2.3. DeepLab V3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.44.25.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkzc8V/dJMcahq7BGJ/esFVDNfAG9Q8bcGUitwS00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkzc8V/dJMcahq7BGJ/esFVDNfAG9Q8bcGUitwS00/img.png&quot; data-alt=&quot;DeepLab V3 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkzc8V/dJMcahq7BGJ/esFVDNfAG9Q8bcGUitwS00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkzc8V%2FdJMcahq7BGJ%2FesFVDNfAG9Q8bcGUitwS00%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;321&quot; height=&quot;339&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.44.25.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DeepLab V3 구조&lt;/figcaption&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;DeepLap V3을 이해해 보자면, 이 모델은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;- Encoder(ResNet with atrous convolution)&lt;br /&gt;- ASPP&lt;br /&gt;- Decoder(Bilinear upsampling)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 이루어져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2&lt;span style=&quot;color: #333333;&quot;&gt;.4. DeepLab V3+&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;더 나아가 V3+에는 약간의 변화만 추가되었습니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.48.48.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNonhR/dJMcacpN2If/0VtGfpHeNNHBU3InwKXmy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNonhR/dJMcacpN2If/0VtGfpHeNNHBU3InwKXmy1/img.png&quot; data-alt=&quot;DeepLab V3+ 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNonhR/dJMcacpN2If/0VtGfpHeNNHBU3InwKXmy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNonhR%2FdJMcacpN2If%2F0VtGfpHeNNHBU3InwKXmy1%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;686&quot; height=&quot;364&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.48.48.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DeepLab V3+ 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- Encoder(ResNet with atrous convolution) &amp;rarr; &lt;b&gt;&lt;a style=&quot;color: #333333; text-align: start;&quot; href=&quot;https://arxiv.org/abs/1610.02357&quot;&gt;Xception&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;b&gt;&amp;nbsp;(Inception with separable convolution)&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp;: 앞에서 설명한 separable convolution을 더 잘 활용할 수 있는 Xception으로 대체 !&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- ASPP &amp;rarr; &lt;span style=&quot;text-align: start;&quot;&gt;&lt;b&gt;ASSPP (Atrous Separable Spatial Pyramid Pooling)&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp;: &lt;span style=&quot;text-align: start;&quot;&gt;separable convolution과 atrous convolution을 결합한 atrous separable convolution이 적용된 ASSPP로 대체!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- Decoder(Bilinear upsampling) &amp;rarr; &lt;span style=&quot;text-align: start;&quot;&gt;&lt;b&gt;Simplified U-Net style decoder&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;: &lt;span style=&quot;text-align: start;&quot;&gt;U-Net과 유사한 형태의 decoder로 대체!&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.51.52.png&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;922&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8HbfR/dJMcaa6Bo8n/icI671IZNHK4KMCxiF1tY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8HbfR/dJMcaa6Bo8n/icI671IZNHK4KMCxiF1tY0/img.png&quot; data-alt=&quot;pascal VOC 2012 validation set 에서의 visualization 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8HbfR/dJMcaa6Bo8n/icI671IZNHK4KMCxiF1tY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8HbfR%2FdJMcaa6Bo8n%2FicI671IZNHK4KMCxiF1tY0%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;626&quot; height=&quot;471&quot; data-filename=&quot;스크린샷 2026-06-01 오후 5.51.52.png&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;922&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;pascal VOC 2012 validation set 에서의 visualization 결과&lt;/figcaption&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;위 Visualization 결과를 보면 상당히 안정적이고 정확하게 각각의 픽셀에 대해 클래스를 예측하고 있음을 확인할 수 있습니다. Xception 기반의 encoder로 양질의 high level semantic 정보를 가지는 feature를 추출할 수 있고, ASPP 모듈을 통해 각 픽셀이 여러 스케일의 context 정보를 취해 보다 정확한 추론이 가능하며, U-Net 구조의 decoder를 통해 각 물체에 해당하는 정교한 boundary를 그려낼 수 있기에 위와 같은 visualization 결과를 얻어낼 수 있다고 해석해 볼 수 있습니다.&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;background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;3. 포스팅을 마치며&lt;/span&gt;&lt;/b&gt;&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: #333333; text-align: start;&quot;&gt;DeepLab V3+모델의 경우 V1부터시작해 4번의 개정에서 얼마나 많은 고민끝에 파라미터를 단축(용량 줄이기)과 성능향상 (정교한 누끼따기)을 해냈는지 알 수 있어서 좀 재미있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;요즘 핫한 세그멘테이션은 SAM이지만, DeepLabV3의 히스토리를 알아가는 과정 또한 재밌던 것 같습니다. DeepLab V3+모델을 소개한 논문도 다음 포스터에서 자세히 포스팅하고 싶습니다. (논멘)&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: #333333; text-align: start;&quot;&gt;아래 사진은 DeepLab V3+ 모델을 불러와서 저희집 고양이 후추를 Segmentation 해본 결과물 입니다 ㅋ_ㅋ&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Class 0, 8 (0:background, 8:cat) 으로 분류 잘 했는데, 꼬리 부분이 좀 아쉬운데요 ?_?&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;1054&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDXVOT/dJMcad3eSf7/kBNplaTO1YGfa705KQ1kw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDXVOT/dJMcad3eSf7/kBNplaTO1YGfa705KQ1kw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDXVOT/dJMcad3eSf7/kBNplaTO1YGfa705KQ1kw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDXVOT%2FdJMcad3eSf7%2FkBNplaTO1YGfa705KQ1kw0%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;623&quot; height=&quot;532&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Model Study</category>
      <author>jinahhub</author>
      <guid isPermaLink="true">https://jinahhub.tistory.com/16</guid>
      <comments>https://jinahhub.tistory.com/16#entry16comment</comments>
      <pubDate>Mon, 1 Jun 2026 17:57:15 +0900</pubDate>
    </item>
    <item>
      <title>[Question] Gradient는 어떻게 기울기가 가장 큰 방향을 가리킬까?</title>
      <link>https://jinahhub.tistory.com/7</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;Gradient Descent를 공부하다 보니, Gradient가 어떻게 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;사실 그러기위해서는, 잊었던 수학적 기본 지식들을 깨워가면서 다시 공부해봐야 했었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어디 적어두지 않으면 또 잊을 것 같기에 적어보려한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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. Gradient 의 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그라디언트는&amp;nbsp;스칼라&amp;nbsp;함수의&amp;nbsp;기울기가&amp;nbsp;가장&amp;nbsp;크게&amp;nbsp;증가하는&amp;nbsp;방향을&amp;nbsp;가리키는&amp;nbsp;벡터&amp;nbsp;함수이며,&amp;nbsp;그&amp;nbsp;크기는&amp;nbsp;해당&amp;nbsp;방향으로의&amp;nbsp;기울기&amp;nbsp;크기를&amp;nbsp;나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 생각하면 내 방을 x, y, z 좌표로 표현하고, 방안의 온도를 함수 f로 표현할 수 있다면, Gradient f는 그 점에서 주변으로 움직였을 때 온도가 가장 급격하게 증가하는 방향을 가르킨다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;rarr; 온도와 같이 크기만을 갖는 스칼라 함수 f에 델연산자를 붙이면 크기와 방향을 갖는 벡터 함수가 되며, 함수 f가 가장 커지는 방향을 가르킨다는 것!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BPthp/dJMcafUfthV/G2KEKVhtGC1EVmoZ2CKlGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BPthp/dJMcafUfthV/G2KEKVhtGC1EVmoZ2CKlGk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2084&quot; data-origin-height=&quot;1164&quot; data-filename=&quot;스크린샷 2026-05-22 오전 1.53.28.png&quot; width=&quot;505&quot; style=&quot;width: 43.502%; margin-right: 10px;&quot; data-widthpercent=&quot;44.01&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BPthp/dJMcafUfthV/G2KEKVhtGC1EVmoZ2CKlGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBPthp%2FdJMcafUfthV%2FG2KEKVhtGC1EVmoZ2CKlGk%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;2084&quot; height=&quot;1164&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnplNK/dJMcajvxZE4/z8OwruGzDpt3SfkuZ7KyT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnplNK/dJMcajvxZE4/z8OwruGzDpt3SfkuZ7KyT1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2578&quot; data-origin-height=&quot;1132&quot; data-filename=&quot;스크린샷 2026-05-22 오전 1.55.44.png&quot; width=&quot;323&quot; height=&quot;142&quot; style=&quot;width: 55.3352%;&quot; data-widthpercent=&quot;55.99&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnplNK/dJMcajvxZE4/z8OwruGzDpt3SfkuZ7KyT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnplNK%2FdJMcajvxZE4%2Fz8OwruGzDpt3SfkuZ7KyT1%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;2578&quot; height=&quot;1132&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;3차원공간에서의 델연산자 정의 / Gradient f의 정의 (출처 : https://www.youtube.com/watch?v=nma8R7sMuv0)&lt;/figcaption&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;</description>
      <category>Math Study</category>
      <author>jinahhub</author>
      <guid isPermaLink="true">https://jinahhub.tistory.com/7</guid>
      <comments>https://jinahhub.tistory.com/7#entry7comment</comments>
      <pubDate>Fri, 22 May 2026 02:08:34 +0900</pubDate>
    </item>
    <item>
      <title>[basic] Gradient Descent와 Optimizer</title>
      <link>https://jinahhub.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Contents]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Gradient Descent (경사하강법)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 1.1. Gradient 와 Gradient Descent&lt;br /&gt;&amp;nbsp; 1.2. Learning Rate&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Optimizer 소개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2.1. SGD&lt;br /&gt;&amp;nbsp; 2.2. Mini-Batch SGD&lt;br /&gt;&amp;nbsp; 2.3. Adam&lt;br /&gt;&amp;nbsp; 2.4. Momemtum&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;background-color: #dddddd;&quot;&gt;&lt;b&gt;1. Gradient Descent (경사하강법)&lt;/b&gt;&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;이전 포스팅에서 공부했던 입력과 출력간의 관계를 선형으로 놓고 알아내는 Linear Regrssion에서 Loss를 최소화한다는 것은 y=ax+b 라는 관계 안에서 우리는 a(Weight),b(Bias)를 알아내서 예측 모델을 만드는 일이다&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;경사 하강법은 손실함수(Loss Function) 그래프에서 손실을 최소화 하는 최적의 Weight(W) 가중치를 자동으로 찾아내는 알고리즘이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;손실(Loss = 예측값-실제값)을 최소화 한다는 것은, 임의의 값인 W를 변경해가면서 예측값과 실제값을 가깝게 만든다는 의미다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 임의의 값 W에서 해당 지점의 기울기(미분)를 계산하고, 기울기가 0에 가까워지는 방향(Gradient의 반대)으로 W값을 점진적으로 업데이트하여 Loss 최저점을 찾아가는 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어떻게 찾아갈까? (＃・&amp;forall;・)?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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.1. Gradient와 Gradient Descent&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-21 오후 3.36.59.png&quot; data-origin-width=&quot;1578&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP4lRA/dJMcah5BAX5/cBqAPvTNUt2VSsTtErPwF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP4lRA/dJMcah5BAX5/cBqAPvTNUt2VSsTtErPwF0/img.png&quot; data-alt=&quot;fig1. Gradient Descent (이해를 위해 bias 없는셈 쳤음) (출처 : Sungkim Youtube)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP4lRA/dJMcah5BAX5/cBqAPvTNUt2VSsTtErPwF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP4lRA%2FdJMcah5BAX5%2FcBqAPvTNUt2VSsTtErPwF0%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;495&quot; height=&quot;287&quot; data-filename=&quot;스크린샷 2026-05-21 오후 3.36.59.png&quot; data-origin-width=&quot;1578&quot; data-origin-height=&quot;916&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;fig1. Gradient Descent (이해를 위해 bias 없는셈 쳤음) (출처 : Sungkim Youtube)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형적인 1개의 data라면 몇번 손으로 노가다해서 하겠지만, 우리의 모델학습은 그보다 훨씬 많은 양의 데이터를 다루므로 효과적인 방법이 필요했다. 그 방식에 대해서 공부해보자.&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;최적의 W(Weight : a,b)을 찾아간다는 것은 간단히 말해 위 그래프에서 보면 임의 W에서&lt;br /&gt;기울기가 + 라면, W가 작아지는 방향(왼쪽)으로 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;기울기가 - 라면, W가 커지는 방향(오른쪽)으로 간다는 것을 직관적으로 알 수 있다.&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;다시 말해, 초기 W의 기울기(W에 따른 Loss의 변화)가 작아지는 방향으로 학습해야 하는데, 이 방향을 어떻게 연산할까? 에서 출발한게 Gradient의 개념이다.&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;우리에게 필요한 건, 초기 W에서 다음 W까지 &lt;u&gt;급격하게 변하는 방향&lt;/u&gt;으로 가야하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Gradient가 바로 그 가장 가파른 방향을 뜻한다. 그리고 Gradient는 x,y를 각 x와 y로 각 편미분을 하고 벡터로 묶은 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이것을 수학적으로 한 번 증명해 볼 수 있는데, 머리 긁적이면서 해 본거라서 따로 정리해야겠다)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 Gradient의 반대인, Gradient 'Descent'를 활용하는 것이고 이를 알기 위해선 Gradient 의 개념부터 알아야 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OpOUa/dJMcabxuTL7/2U2EDhYdcJxXMXk8FNpM50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OpOUa/dJMcabxuTL7/2U2EDhYdcJxXMXk8FNpM50/img.png&quot; width=&quot;492&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;1000&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.49%; margin-right: 10px;&quot; data-widthpercent=&quot;48.05&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OpOUa/dJMcabxuTL7/2U2EDhYdcJxXMXk8FNpM50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOpOUa%2FdJMcabxuTL7%2F2U2EDhYdcJxXMXk8FNpM50%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;1196&quot; height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G9XTj/dJMcadvgosv/Qx2OKR4UDKP13oLSIFlAsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G9XTj/dJMcadvgosv/Qx2OKR4UDKP13oLSIFlAsk/img.png&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;962&quot; data-is-animation=&quot;false&quot; width=&quot;268&quot; style=&quot;width: 51.3472%;&quot; data-widthpercent=&quot;51.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G9XTj/dJMcadvgosv/Qx2OKR4UDKP13oLSIFlAsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG9XTj%2FdJMcadvgosv%2FQx2OKR4UDKP13oLSIFlAsk%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;1244&quot; height=&quot;962&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;fig.2 혁펜하임과 함께 공부해본 gradient&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 또 중요하게 봐야 하는 점은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼마나 성큼 갈건데? &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(＃・&amp;forall;・)?&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;1.2. Learning rate (a)&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;현재 위치와 옮길 위치가 gradient descent에 의해서 옮기면 서로 같은 자리를 왔다갔다 하게 된다는걸 알 수 있다.&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;그래서 Learning Rate (lr) 가 필요하다. 똑같은 f(x,y) = x2+y2 에 lr=0.1을 적용 시켜보면 이렇게 바뀐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(OpenCV 이미지처리에서는 lr=0.001이 국룰이라 했다)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2176&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ws2TD/dJMcaaFp7wQ/729KK5dtf8OviZJG0aEBgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ws2TD/dJMcaaFp7wQ/729KK5dtf8OviZJG0aEBgK/img.png&quot; data-alt=&quot;Fig3. 혁펜하임과 함께 공부해본 lr&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ws2TD/dJMcaaFp7wQ/729KK5dtf8OviZJG0aEBgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fws2TD%2FdJMcaaFp7wQ%2F729KK5dtf8OviZJG0aEBgK%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;594&quot; height=&quot;273&quot; data-origin-width=&quot;2176&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig3. 혁펜하임과 함께 공부해본 lr&lt;/figcaption&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;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;2. Optimizer 소개&lt;/b&gt;&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-filename=&quot;스크린샷 2026-05-21 오후 6.26.27.png&quot; data-origin-width=&quot;1338&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CKTXk/dJMcacXupl6/Zmv662ZtLtB03efz58PtjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CKTXk/dJMcacXupl6/Zmv662ZtLtB03efz58PtjK/img.png&quot; data-alt=&quot;fig.3 Optimizer 종류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CKTXk/dJMcacXupl6/Zmv662ZtLtB03efz58PtjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCKTXk%2FdJMcacXupl6%2FZmv662ZtLtB03efz58PtjK%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;710&quot; height=&quot;166&quot; data-filename=&quot;스크린샷 2026-05-21 오후 6.26.27.png&quot; data-origin-width=&quot;1338&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;fig.3 Optimizer 종류&lt;/figcaption&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;Gradient Descent는 모든 data를 고려해서 최적의 방향을 선택하는 방식이므로, 너무 신중하다! 느려터졌다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 출발 지점과 가장 가까운 Local Minimum에서 멈출 수 밖에 없기에 Global Minimum에서 Best.pth를 추론한다는게 문제점이다. 그렇기에 등장한 Optimizer가 SGD이다.&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;하지만 SGD가 무조건 정답은 아니므로 지금부터 다양한 Optimizer들에 대해서 공부해보자.&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.1. SGD (Stochastic Gradient Descent)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SGD는 GD의 2가지 단점을 해결한다. 느렸다는것과, Local Minimum에 빠진걸 구출할 수도 있다는 것.&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;기존에는 모든 Loss를 고려했다면, SGD는 말그대로 '랜덤하게' 하나를 뽑아서 Gradient를 계산하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 편미분 식을 보면, 모든 L(loss)에 x와 y로 편미분 하였는데 SGD는 모든 L이 아닌 랜덤으로 고른 하나의 L인것이다.&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⌒)／~~&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;그렇다. 비복원추출이기에 모든 데이터를 한 번에 고려하진 않아서 덜 신중하지만 훨씬 빨라진다. 즉, 5개였다면 1/5 -&amp;gt; 1/4 -&amp;gt; 1/3 ... 의 확률로 뽑는 것 그렇다고 이걸 한번만 하진 않겠다. 뽑고 Gradient 구하고 minimum 찾아가고, 다시 처음 주머니에서 또 뽑는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이 반복을 1에포 (epoch) 이라고 한다.)&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;그리고 랜덤추출된 Loss로부터 랜덤적인 Gradient desenct하므로 요리조리 산만하게 Minimum을 찾아가기에 Local Minimum으로부터 탈출할 수 있다.&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;2186&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eKNKlr/dJMcabRMf03/KSMOPoChDJqcX5vkNqI2YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eKNKlr/dJMcabRMf03/KSMOPoChDJqcX5vkNqI2YK/img.png&quot; data-alt=&quot;fig4. Local Minimum과 Global Minimum 그리고 GD/SGD&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eKNKlr/dJMcabRMf03/KSMOPoChDJqcX5vkNqI2YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeKNKlr%2FdJMcabRMf03%2FKSMOPoChDJqcX5vkNqI2YK%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;641&quot; height=&quot;293&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;fig4. Local Minimum과 Global Minimum 그리고 GD/SGD&lt;/figcaption&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;2.2. Mini-Batch SGD&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 data가 10만개인데 1개씩만 본다? 이것 또한 불합리하다. 빠르지만 불안정하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 등장한 것은 Mini-Batch SGD 이다.&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.3. Momentum&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;&lt;b&gt;2.4. Adam&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;&lt;span style=&quot;color: #dddddd;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;*참고url :&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #dddddd;&quot; href=&quot;https://www.youtube.com/watch?v=nma8R7sMuv0&quot;&gt;https://www.youtube.com/watch?v=nma8R7sMuv0&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #dddddd;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;*참고url :&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #dddddd;&quot; href=&quot;https://youtu.be/b4Vyma9wPHo?si=TIHXFKcL_Qui19c5,&quot;&gt;https://youtu.be/b4Vyma9wPHo?si=TIHXFKcL_Qui19c5,&lt;/a&gt;&lt;a style=&quot;color: #dddddd;&quot; href=&quot;https://www.youtube.com/watch?v=YjPV_sYKAbg&amp;amp;list=PL_iJu012NOxdw1jc3KEo8Mq5oD5SXKhLu&amp;amp;index=8&quot;&gt;https://www.youtube.com/watch?v=YjPV_sYKAbg&amp;amp;list=PL_iJu012NOxdw1jc3KEo8Mq5oD5SXKhLu&amp;amp;index=8&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Math Study</category>
      <author>jinahhub</author>
      <guid isPermaLink="true">https://jinahhub.tistory.com/4</guid>
      <comments>https://jinahhub.tistory.com/4#entry4comment</comments>
      <pubDate>Thu, 21 May 2026 14:42:10 +0900</pubDate>
    </item>
    <item>
      <title>Intro</title>
      <link>https://jinahhub.tistory.com/1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Hello, JinahHub 에 오신 걸 환영합니다.&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;10년동안 재료공학의 길에서 열심히 살던 제가 31살 늦은 나이에 새로운 도전을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27년 봄학기 제조 AI를 연구하는 대학원 진학을 목표로 공부하면서 몇글자 적어보려고 만들게 된 공간입니다.&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;스스로 관련 서적, Youtube, 논문 등 다양한 자료를 참조하여 자유롭게 공부하는 공간이므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상한 부분이 있다면 적극적으로 쿠사리해주시고, 질문도 환영합니다. &amp;lt;3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 제가 꾸린 새로운 목표는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;제가 가진 제조 현장 도메인의 강점을 살려,&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;AI를 구현하고 제조 가치를 창출하는 사람이 되고자 합니다.&lt;/span&gt;&lt;/b&gt;&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;/p&gt;</description>
      <category>Clutter</category>
      <author>jinahhub</author>
      <guid isPermaLink="true">https://jinahhub.tistory.com/1</guid>
      <comments>https://jinahhub.tistory.com/1#entry1comment</comments>
      <pubDate>Mon, 27 Apr 2026 14:23:08 +0900</pubDate>
    </item>
  </channel>
</rss>