<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>튼튼한 나무</title>
    <link>https://hm3346.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 06:40:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>공유지식</managingEditor>
    <image>
      <title>튼튼한 나무</title>
      <url>https://tistory1.daumcdn.net/tistory/4613886/attach/b1fb7641c3ac4bf7848bfacf2b15d5f6</url>
      <link>https://hm3346.tistory.com</link>
    </image>
    <item>
      <title>human 3d reconstruction 연구 목록 (mesh 위주)</title>
      <link>https://hm3346.tistory.com/76</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. what is mesh ?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3D Data의 표현 방법에는 euclidean-structured data 와 non-euclidean data 가 있다. Euclidean data 는 2D 이미지 데이터와 같이 표현되는 grid-structured data 를 말하며, 그 예로 RGB-D, Voxel 등이 있다. 반면, non-euclidean data 는 non-euclidean 구조를 기반한다는 특징이 있으며, 대표적인 예로는 point cloud 와 mesh 등이 있다.&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;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LrXMY/btsr0roXIQ2/cPpZz08jKO985fGwiSDKBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LrXMY/btsr0roXIQ2/cPpZz08jKO985fGwiSDKBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LrXMY/btsr0roXIQ2/cPpZz08jKO985fGwiSDKBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLrXMY%2Fbtsr0roXIQ2%2FcPpZz08jKO985fGwiSDKBk%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;678&quot; height=&quot;193&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjlfzQ/btsrUri62x2/UzVNF26smxTZ0nkuOuoQi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjlfzQ/btsrUri62x2/UzVNF26smxTZ0nkuOuoQi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjlfzQ/btsrUri62x2/UzVNF26smxTZ0nkuOuoQi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjlfzQ%2FbtsrUri62x2%2FUzVNF26smxTZ0nkuOuoQi0%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;473&quot; height=&quot;508&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로, 3D 데이터는 voxel, mesh, point cloud 등으로 표현될 수 있다. Voxel 데이터 표현은 볼륨이 있는 2D 픽셀 표현의 확장으로 볼 수 있다. 딥러닝에서 voxel 데이터는 2D convolution 의 개념을 확장한 3D convolution 을 통하여 데이터 표현 변환 없이 voxel 데이터 그대로 사용될 수 있다는 점이 있지만, 세밀한 데이터 표현을 할수록 메모리 관점에서 비용이 비싸다는 단점을 가지고 있다. 반면, mesh 와 point cloud 데이터 표현은 메모리 관점에서 효율적인 데이터 표현이다. Mesh 데이터는 2D 삼각형이 서로 연결된 형태로 3D 공간을 만듦으로써 3D 공간을 표현하며, 3D 렌더링에서 mesh 데이터 표현이 활용되는 것을 쉽게 찾아볼 수 있다. Point cloud 는 3D 공간 상의 x, y, z 좌표값으로 3D 대상을 표현한다. Point cloud 데이터 표현은 3D 스캐너 혹은 3D 센서 등에서 사용되어진다.&lt;/p&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;&lt;b&gt;2. Public - 3D Mesh Dataset 종류별 연구&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;2.1. Expressive hands and faces dataset (EHF)&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;529&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H9DeO/btsrTP5r1C4/fCCJsUGA4j34ppt3V9TKC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H9DeO/btsrTP5r1C4/fCCJsUGA4j34ppt3V9TKC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H9DeO/btsrTP5r1C4/fCCJsUGA4j34ppt3V9TKC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH9DeO%2FbtsrTP5r1C4%2FfCCJsUGA4j34ppt3V9TKC1%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;529&quot; height=&quot;362&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;1) HybrIK-X : Hybrid Analytical-Neural Inverse Kinematics for Whole-body Mesh Recovery&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://github.com/Jeff-sjtu/HybrIK&quot;&gt;https://github.com/Jeff-sjtu/HybrIK&lt;/a&gt;&lt;br /&gt;Train from scratch , Evaluation 코드 존재함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;2) PIXIE : Coherent Reconstruction of Multiple Humans from a Single Image&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://github.com/JiangWenPL/multiperson&quot;&gt;https://github.com/JiangWenPL/multiperson&lt;/a&gt;&lt;br /&gt;Train from scratch , Evaluation 코드 존재함&lt;/p&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) ExPose : Monocular Expressive Body Regression through Body-Driven Attention&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://github.com/JiangWenPL/multiperson&quot;&gt;https://github.com/JiangWenPL/multiperson&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;only Evaluation 코드만 존재&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;4) SMPLify-X : Expressive Body Capture: 3D Hands, Face, and Body from a Single Image&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;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://github.com/JiangWenPL/multiperson&quot;&gt;https://github.com/JiangWenPL/multiperson&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;Train from scratch , Evaluation 코드 존재함&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;5) Hand4Whole : Accurate 3D Hand Pose Estimation for Whole-Body 3D Human Mesh Estimation&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;a href=&quot;https://github.com/JiangWenPL/multiperson&quot;&gt;https://github.com/JiangWenPL/multiperson&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;Train from scratch , Evaluation 코드 존재함&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;6) OSX : One-Stage 3D Whole-Body Mesh Recovery with Component Aware Transformer&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;a href=&quot;https://github.com/JiangWenPL/multiperson&quot;&gt;https://github.com/JiangWenPL/multiperson&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;Train from scratch , Evaluation 코드 존재함&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;2.2. CAPE(Clothed Auto Person Encoding)&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;780&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/evLIyQ/btsrZyPhj2r/Cc8cnkam64cW80VVykdYTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/evLIyQ/btsrZyPhj2r/Cc8cnkam64cW80VVykdYTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/evLIyQ/btsrZyPhj2r/Cc8cnkam64cW80VVykdYTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FevLIyQ%2FbtsrZyPhj2r%2FCc8cnkam64cW80VVykdYTk%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;665&quot; height=&quot;348&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;408&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;&lt;b&gt;1) ICON: Implicit Clothed humans Obtained from Normals&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/otaheri/GOAL&quot;&gt;https://github.com/otaheri/GOAL&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;Train from scratch , Evaluation 코드 존재함&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;b&gt;2) PaMIR: Parametric Model-Conditioned Implicit Representation for Image-based Human Reconstruction&lt;/b&gt;&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;a href=&quot;https://github.com/ZhengZerong/PaMIR&quot;&gt;https://github.com/ZhengZerong/PaMIR&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;Train from scratch , Evaluation 코드 존재함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;b&gt;3) PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization&lt;/b&gt;&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;a href=&quot;https://github.com/facebookresearch/pifuhd&quot;&gt;https://github.com/facebookresearch/pifuhd&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;only Evaluation 코드만 존재&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;b&gt;4) PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization&lt;/b&gt;&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;a href=&quot;https://github.com/shunsukesaito/PIFu&quot;&gt;https://github.com/shunsukesaito/PIFu&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;Train from scratch , Evaluation 코드 존재함&lt;/span&gt;&lt;/p&gt;</description>
      <category>딥러닝</category>
      <category>3d</category>
      <category>3D deep learning</category>
      <category>deep learning mesh</category>
      <category>Mesh</category>
      <category>reconstruction</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/76</guid>
      <comments>https://hm3346.tistory.com/76#entry76comment</comments>
      <pubDate>Tue, 22 Aug 2023 18:44:58 +0900</pubDate>
    </item>
    <item>
      <title>depth &amp;amp; point cloud data의 개념 정리. feat. Apple's ARKit</title>
      <link>https://hm3346.tistory.com/75</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 포인트 클라우드란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lidar 센서, RGB-D센서 등으로 수집되는 데이터를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인트 클라우드 데이터는 좌표계의 개별 점으로 구성된 3차원 공간을 표현한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인트 클라우드의 각 포인트는 공간의 특정 위치를 나타내며 데이터에 따라 색상, 강도 또는 기타 속성과 같은 추가 정보를 포함할 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인트 클라우드는 컴퓨터 그래픽, 컴퓨터 비전, 원격 감지 및 3D 모델링과 같은 분야에서 일반적으로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인트 클라우드 데이터는 다음과 같은 다양한 방법을 통해 수집할 수 있다 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Lidar(Light Detection and Ranging) : Lidar는 레이저 펄스를 방출하고 이러한 펄스가 물체에 반사된 후 돌아오는 데 걸리는 시간을 측정한다. 이 정보는 물체까지의 거리를 결정하는 데 사용되며, 스캐너의 위치 및 방향과 결합되어 point cloud representation of the environment를 생성한다.&lt;/li&gt;
&lt;li&gt;Structured Light Scanning : 이 방법에서는 빛의 패턴이 물체에 투사되고 카메라는 물체의 모양으로 인해 패턴이 왜곡되는 방식을 캡처한다. 이러한 왜곡은 깊이 정보를 제공하며, 이는 포인트 클라우드를 생성하는 데 사용된다.&lt;/li&gt;
&lt;li&gt;Photogrammetry : 다양한 각도에서 물체 또는 장면의 여러 2D 사진을 촬영함으로써 소프트웨어는 이러한 사진의 공통 지점 위치를 삼각측량하여 3D 포인트 클라우드를 재구성할 수 있다.&lt;/li&gt;
&lt;li&gt;Depth Cameras : Microsoft의 Kinect와 같은 깊이 감지 카메라는 적외선이나 기타 기술을 사용하여 카메라와 장면의 다양한 지점 사이의 거리를 측정하여 포인트 클라우드를 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 정리하자면 포인트 클라우드는 어떠한 공간에 있는 개별 데이터 포인트 set이며, points는 3D 모양 혹은 개체를 나타낼 수 있다. 포인트 클라우드는 가장 일반적으로 3D 레이저 스캐너와 LiDAR 기술을 사용하여 생성된다. LiDAR는 조사된 빛이 피사체에 반사되어 돌아오는 시간을 측정하여 거리를 측정하는 장비로서, 넓은 영역과 긴 거리에 걸쳐 실세계의 정밀한 3차원 정보를 포인트 클라우드 데이터로 제공해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Depth Data란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Depth map은 특정 시점에서 객체까지의 거리에 대한 정보를 포함하는 2차원 표현이다. 장면의 공간적 깊이 정보를 컴퓨터에서 쉽게 처리하고 해석할 수 있는 형식으로 인코딩하는 방법을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Depth map은 일반적으로 이미지의 각 픽셀이나 지점에 깊이 값을 할당하여 해당 픽셀이 카메라나 관찰자로부터 얼마나 멀리 떨어져 있는지 나타낸다. 깊이 값이 높을수록 물체는 더 멀리 떨어져 있다. Depth map은 대개 회색조 이미지로, 어두운 값은 더 가까운 객체를 나타내고 밝은 값은 더 멀리 있는 객체를 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 방법을 사용하여 Depth map을 생성할 수 있다 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Stereo Vision : 이 기술에는 서로 약간 offset된 두 대의 카메라를 사용하여 장면을 캡처하여 눈이 깊이를 인식하는 방식을 시뮬레이션한다. 두 영상의 픽셀 위치 차이를 비교함으로써 깊이 정보를 계산할 수 있다.&lt;/li&gt;
&lt;li&gt;Structured Light : 포인트 클라우드 생성과 유사하게 구조화된 조명에는 빛 패턴을 장면에 투영하고 패턴이 객체에서 어떻게 변형되는지 분석하는 작업으로 진행된다. deformation은 깊이 정보를 제공한다.&lt;/li&gt;
&lt;li&gt;ToF(Time of Flight) 카메라: 이 카메라는 빛 신호를 방출하고 신호가 되돌아오는 데 걸리는 시간을 측정한다. 시간 측정은 거리에 비례하므로 깊이 맵을 생성할 수 있다.&lt;/li&gt;
&lt;li&gt;Depth 센서 : Depth센서가 장착된 Microsoft의 Kinect 또는 최신 스마트폰 카메라와 같은 장치는 빛이 현장으로 이동하고 돌아오는 데 걸리는 시간을 측정하여 깊이 맵을 생성할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2.1. Depth map data vs Depth data는 다른 것인가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;Depth map data&quot;와 &quot;Depth ata&quot;는 서로 관련된 개념이지만 약간 다른 것을 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Depth Map Data : Depth Map Data는 깊이 정보를 시각적 형식으로 구체적으로 표현한 것을 말한다. 이는 일반적으로 각 픽셀이 특정 깊이 값에 해당하는 2차원 이미지로, 카메라나 관찰자로부터 장면의 해당 지점까지의 거리를 나타낸다. Depth map에서 가까운 객체는 더 어두운 값으로 표시되고, 멀리 있는 객체는 더 밝은 값으로 표시된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Depth Data : Depth Data는 3차원 공간에서 객체나 지점 사이의 거리에 대한 모든 유형의 정보를 포괄하는 더 넓은 용어이다. 여기에는 Depth map Image 뿐만 아니라 각각 고유한 위치 및 깊이 정보가 있는 개별 3D 포인트 집합인 포인트 클라우드 데이터도 포함될 수 있다. 깊이 데이터는 거리를 나타내는 수치, points의 3차원 좌표, depth map과 같은 시각적 표현 등 다양한 방식으로 표현될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면, depth map data와 depth data는 모두 객체나 points 사이의 거리에 대한 정보를 포함하는 반면, &amp;ldquo;depth map data&amp;rdquo;는 구체적으로 깊이 정보를 2차원 이미지로 시각적으로 표현한 것을 의미하고, &amp;ldquo;depth data&quot;는 다양한 형태의 깊이 정보 표현과 같은 더 넓은 범위를 의미할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 포인트 클라우드는 일반적으로 depth data로부터 변형된 결과인가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 방법으로 depth map 기반이 아닌 다른 방식으로 포인트 클라우드 데이터를 구축할 수 도 있지만, 일반적으로, 포인트 클라우드 데이터는 depth 데이터의 변형 또는 확장으로 간주할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깊이 데이터는 포인트 클라우드에 저장된 정보에 기여하는 단일 속성으로 생각할 수 있다. 포인트 클라우드는 각 포인트에 대한 여러 속성을 포함하여 3D 환경을 더욱 풍부하게 표현할 수 있다. 따라서 깊이 데이터가 포인트 클라우드 생성의 핵심 요소이며, 포인트 클라우드는 깊이 이상의 다양한 속성을 포함할 수 있는 공간 데이터를 보다 포괄적으로 표현한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 말해, 포인트 클라우드 데이터를 깊이 측정에 의존하지 않는 다른 방법을 사용하여 생성될 수도 있지만, 포인트 클라우드 데이터는 센서에 의해 수집된 깊이 데이터를 기반으로 생성되는 경우가 대부분이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Lidar 센서가 부착된 아이폰에 대한 APPLE의 ARKit에서, 포인트 클라우드 데이터는 Depth map으로 부터 생성된 것인가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Yes.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iPhone 12 Pro 이상 모델부터 LiDAR 센서가 장착된 iPhone은 LiDAR 센서를 사용하여 포인트 클라우드 데이터를 생성한다. LiDAR (Light Detection and Ranging) 센서는 레이저 펄스를 방출하고 레이저가 주변의 물체에 부딪힌 후 다시 반사되는 데 걸리는 시간을 측정한다. 이 정보는 본질적으로 깊이 정보인 해당 객체까지의 거리를 계산하는 데 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LiDAR 센서에서 얻은 깊이 데이터는 ARKit에서 처리되어 장면의 포인트 클라우드 표현을 생성한다. 이 포인트 클라우드는 3D 포인트 모음으로 구성되며, 각 포인트는 현실 세계의 표면이나 객체를 나타낸다. LiDAR는 각 지점에 대한 직접적인 깊이 측정을 제공하므로 이 포인트 클라우드 데이터는 기존 카메라에서 생성된 깊이 맵보다 더 자세하고 정확하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. Lidar 센서가 부착된 아이폰에 대한 APPLE의 ARKit에서, 포인트 클라우드 데이터는 카메라 좌표계의 포인트 클라우드 데이터 값인가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Yes.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LiDAR 센서가 탑재된 iPhone용 Apple ARKit에서 제공하는 포인트 클라우드 데이터는 일반적으로 카메라 좌표계로 표시된다. 카메라 좌표계는 카메라나 장치의 위치와 방향을 중심으로 한 3D 좌표계이다. 카메라의 시점을 기준으로 가상 객체를 배치하고 조작할 수 있으므로 증강 현실 애플리케이션을 위한 편리한 reference frame이 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 iPhone의 LiDAR 센서는 깊이 정보를 캡처하고 카메라 좌표계에 포인트 클라우드를 생성한다. 포인트 클라우드의 각 포인트는 카메라의 위치 및 방향을 기준으로 3D 위치(X, Y, Z)와 연결된다. 이 포인트 클라우드 데이터는 ARKit에서 물리적 환경을 매핑하고 해당 환경 내에서 가상 개체의 보다 정확한 배치와 상호 작용을 가능하게 하는 데 사용될 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5.1. 좌표계라고 하는 것이, 어떤 것들이 있나?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좌표계는 공간에서 객체의 위치와 방향을 정의하는 데 사용된다. 컴퓨터 그래픽, 컴퓨터 비전 및 증강 현실과 같은 관련 분야에서는 장면이나 객체의 다양한 측면을 나타내는 데 일반적으로 여러 유형의 좌표계가 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 좌표계의 종류는 아래와 같다 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WCS(World Coordinate System)&lt;/li&gt;
&lt;li&gt;카메라 좌표계(CCS)&lt;/li&gt;
&lt;li&gt;객체 좌표계(OCS)&lt;/li&gt;
&lt;li&gt;화면 좌표계(SCS)&lt;/li&gt;
&lt;li&gt;정규화된 장치 좌표계(NDCS)&lt;/li&gt;
&lt;li&gt;텍스처 좌표계&lt;/li&gt;
&lt;li&gt;모델 좌표계(MCS)&lt;/li&gt;
&lt;li&gt;로컬 좌표계(Local Coordinate System)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LiDAR 센서와 Apple ARKit가 탑재된 iPhone의 경우 카메라 좌표계(CCS)가 LiDAR 센서에서 생성된 포인트 클라우드 데이터를 나타내는 데 자주 사용된다. 즉, 해당 포인트 클라우드는 카메라 좌표계에서 표현된다는 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5.2. World Coordinate System에서 표현되는 포인트 클라우드에서, 2개의 포인트에 대해 유클리디안 거리를 계산하면 실측 거리와 동일한 값이 되는가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Yes.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세계 좌표계(WCS)로 표현된 포인트 클라우드에서 두 점 사이의 유클리드 거리는 실제로 현실 세계의 해당 점 사이의 실제 거리와 동일하다. 세계 좌표계는 장면 내 점 간의 공간 관계를 정확하게 나타내는 global reference frame을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유클리드 거리는 피타고라스의 정리를 사용하여 계산된 3차원 공간에서 두 점 사이의 직선 거리다. WCS가 장면에 맞게 적절하게 정렬되고 크기가 조정된다는 가정 하에 점이 세계 좌표계에 표시될 때 점 사이의 유클리드 거리는 실제 세계의 물리적 분리를 정확하게 반영한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5.3. 그렇다면, 카메라 좌표계의 포인트 클라우드 데이터를 World Coordinate System의 포인트 클라우드 데이터로 변형할 수 있나?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Yes.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카메라 좌표계(CCS)의 포인트 클라우드 데이터는 좌표 변환 또는 공간 변환이라는 프로세스를 통해 세계 좌표계(WCS)로 변환될 수 있다. 이 변환에는 포인트 클라우드의 각 포인트에 변환, 회전 및 크기 조정 작업을 적용하여 세계 좌표계의 전역 참조 프레임에 정렬하는 작업이 수행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스는 다음과 같다 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Transformation Parameters 얻기 : 포인트 클라우드 데이터를 CCS에서 WCS로 변환하려면 변환 매개변수를 알아야 한다. 이러한 매개변수에는 일반적으로 WCS를 기준으로 한 카메라의 위치와 방향이 포함된다. ARKit 또는 유사한 프레임워크의 경우 이러한 매개변수는 장치의 자세(회전) 및 위치와 같은 센서 데이터를 사용하여 계산될 수 있다.&lt;/li&gt;
&lt;li&gt;Translation 적용 : 첫 번째 단계는 CCS 포인트 클라우드의 각 포인트에 변환을 적용하는 것이다. 이 변환은 CCS의 원점을 WCS의 참조점과 정렬한다. 변환에는 각 지점의 좌표에서 카메라 위치(CCS 원점)를 빼는 작업이 포함된다.&lt;/li&gt;
&lt;li&gt;Rotation 적용 : 변환 후 WCS의 카메라 방향과 일치하도록 변환된 각 점에 회전 변환을 적용한다. 이 회전 작업에는 WCS의 카메라 방향(roll, pitch, and yaw)을 기반으로 점의 좌표를 변환하는 작업이 수행된다.&lt;/li&gt;
&lt;li&gt;Scaling 적용: 경우에 따라 CCS와 WCS 간의 측정 단위가 일치하도록 크기 조정을 적용해야 할 수도 있다. 이 단계는 선택 사항이며 애플리케이션의 세부 사항에 따라 다르다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 변환 단계를 수행하면 각 점의 좌표를 카메라 좌표계에서 세계 좌표계로 변환할 수 있다. 이를 통해 장면의 전역 컨텍스트의 포인트 클라우드 데이터를 정확하게 표현할 수 있다.&lt;/p&gt;</description>
      <category>computing</category>
      <category>3d</category>
      <category>Depth</category>
      <category>depth data</category>
      <category>depth map</category>
      <category>point cloud</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/75</guid>
      <comments>https://hm3346.tistory.com/75#entry75comment</comments>
      <pubDate>Tue, 22 Aug 2023 18:40:11 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes(k8s) 개념 설명 feat. ML 모델 서빙</title>
      <link>https://hm3346.tistory.com/74</link>
      <description>&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Kubernetes&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;용어 정리 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너 : 앱이 구동되는 환경까지 포함하여, 실행할 수 있도록 하는 격리(독립) 기술&lt;/li&gt;
&lt;li&gt;컨테이너 런타임 : 컨테이너를 다루는 도구&lt;/li&gt;
&lt;li&gt;도커 : 컨테이너를 다루는 도구 중 가장 유명 한 것&lt;/li&gt;
&lt;li&gt;쿠버네티스 : 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구&lt;/li&gt;
&lt;li&gt;오케스트레이션 : 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위&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;PC 환경에서 예를 들어보자면, 만약 어떤 PC에서 특정 프로그램을 설치하고 실행하고자 한다.&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;p data-ke-size=&quot;size16&quot;&gt;그렇다면, 이 컨테이너를 사용을 위해 필요한 도구가 있을 것인데, 그 것이 컨테이너 런타임이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너를 쉽게 내려받고, 공유하고, 구동할 수 있도록 해주는 도구이다. 종류도 여러가지가 있으나, 가장 유명한 것이 바로 도커이다. 도커가 사용하는 컨테이너 규격은 표준화가 있어서 도커가 아닌 다른 컨테이너 런타임들도 도커로 만든 컨테이너를 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 여기서, 이 컨테이너 런타임을 통해 컨테이너를 다루는 도구가 쿠버네티스(k8s)이다.&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;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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;App 배포 환경의 변천사&lt;/b&gt;&lt;/h2&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;785&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rYhfq/btsro7dw4Df/8fqdQC0oa4lZNIDtZzjsI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rYhfq/btsro7dw4Df/8fqdQC0oa4lZNIDtZzjsI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rYhfq/btsro7dw4Df/8fqdQC0oa4lZNIDtZzjsI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrYhfq%2Fbtsro7dw4Df%2F8fqdQC0oa4lZNIDtZzjsI1%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;785&quot; height=&quot;293&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Traditional Deployment :&lt;/b&gt; 오래전부터 쓰이던 방식으로, 물리적인 pc 한 대에 하나의 OS를 설치 하고, 여러 프로그램을 설치하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 이해하자면, PC에 OS를 하나 설치하고 여러 software를 설치하여 사용하는 방식이다. 그런데, 하나의 OS에서 작동하다 보니, 금융 보안 프로그램을 설치했더니 다른 프로그램의 성능이 떨어지거나 오류가 발생 하는 것처럼 다른 프로그램의 동작을 간섭하거나 성능을 떨어뜨리는 등의 단점이 있다 (이러한 이유로 인해 개발에서 Mac OS가 주목 받는 이유 중 하나라고 생각된다). 그렇다면, 다른 pc를 구입하여 금융 전용으로 사용하면 되지 않을까? 당연하게 너무나 비효율적이며 비용이 많이 든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Virtualized Deployment :&lt;/b&gt; 위 문제를 해결하기 위해 가상화 배포 방식을 사용할 수 있다. VM(가상화 머신)을 사용해 배포하는 것이다. 이를 위해, 하나의 시스템 상에서 가상화 머신을 여러 개 구동할 수 있도록 해주는 hyper-visor가 존재하고 각 App를 실행하는데 필요한 환경과 관련된 파일인 Bin 파일 및 Library가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 pc 안에 여러 가상화 머신으로 동작하기 때문에 서로 간섭을 일으키지 않게 되며, 가상 머신의 물리적인 스펙을 조절할 수 있다. 또한, 다중화와 분산 처리가 중요한 시스템이라면 필요에 따라 가상머신 개수를 늘리고 줄이는 등 다양하게 처리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, 가상머신은 그 자체로 완전한 pc이므로 일일이 os를 설치해야 해서 컨테이너 중심의 배포보다는 무겁다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Container Deployment :&lt;/b&gt; 컨테이너 중심의 배포는 가상화 기반의 배포와 비교하면 hyper-visor는 container runtime으로 대체되었고 가상머신은 VM으로 대체되었다. 또한, 구동을 위해 OS가 필요한 것이 큰 특징이다. 즉, 하나의 OS만 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 설명하자면, Container Deployment는 게임과 금융 보안 프로그램이 하나의 os 상에서 구동된다. 여기서, 각 프로그램은 서로의 간섭을 일으킬 수 없도록 하는 하나의 벽을 만든다. 그래서, CPU, 메모리 등의 물리적인 자원을 독립적으로 사용할 수 있도록 할당하고 관리한다. 이를 OS 커널을 공유하는 가상화라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 말해, 리눅스에서 내가 실행한 프로그램이 독립된 환경에서 실행되는 것처럼 격리 시켜주고, 물리적인 자원도 실행한 프로그램이 독립적으로 사용할 수 있도록 해주는 namespace 및 cgroup과 같은 기술이 있다.&lt;/p&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;MLOps and Model serving&lt;/b&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;MLops는 Machine Learning + DevOps의 합성어이다. 프로세스와 기술을 통합하여 프로덕션 환경에서 ML 시스템을 배포하고 관리하는데 큰 도움을 준다. 이러한 ML workflow를 자동화 해주는 A.I 플랫폼의 종류가 수없이 많이 들어봤을 Amazon의 SageMaker, Google의 Kubeflow, MLflow 등이 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nz01B/btsrcuVIDIB/sCb1YDEembzs0h5ijuTSk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nz01B/btsrcuVIDIB/sCb1YDEembzs0h5ijuTSk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nz01B/btsrcuVIDIB/sCb1YDEembzs0h5ijuTSk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNz01B%2FbtsrcuVIDIB%2FsCb1YDEembzs0h5ijuTSk1%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;737&quot; height=&quot;295&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 먼저, 쿠버플로우는 기본적으로 쿠버네티스를 기반으로 동작하는 컨테이너 오케스트레이터인데, 이는 그 어렵다는 쿠버네티스를 잘 이해해야 한다. 다시 말해, 데이터 사이언티스트가 쿠버네티스 API를 직접 사용하기에 쿠버네티스는 너무 high low-level 시스템으로 개발되어 있고 굉장히 복잡한API 구조를 가지고 있다. 또한, 위 그림처럼 Kubernetes Cluster 내에서 작동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, MLflow는 모델에 대한 실험 혹은 버전을 트래킹함으로써 구동되는 파이썬 프로그램으로, 실제 실행은 내가 지정한 환경(로컬 혹은 특정 서버)에서 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubeflow는 기본적으로 쿠버네티스에 대한 깊은 이해가 필요하여, mlflow를 더욱 선호하는 경향이 많으나 kubeflow는 어려운 만큼 높은 생산성과 확장성을 가져 최근 여러 테크 기업에서 많이 사용되고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 포스팅에서는 Kubeflow에 대해 간단히 알아보고자 한다.&lt;/p&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-token-index=&quot;0&quot;&gt;Kubeflow란?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버플로우는 End-to-End AI 플랫폼이며, 머신러닝 워크플로우의 모델 학습부터 배포 단계까지 모든 작업에 필요한 도구와 환경을 쿠버네티스 위에서 쿠버플로우 컴포넌트로 제공한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCyvWd/btsq5YpxFcO/YBBuHXp63AESMlH2QzFfDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCyvWd/btsq5YpxFcO/YBBuHXp63AESMlH2QzFfDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCyvWd/btsq5YpxFcO/YBBuHXp63AESMlH2QzFfDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCyvWd%2Fbtsq5YpxFcO%2FYBBuHXp63AESMlH2QzFfDK%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;657&quot; height=&quot;296&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버플로우는 jupyter, tensorflow, pytorch, MXNet 등의 ML tools로 부터 출발하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후의 Kubernetes 위에서 작동하는 Central Dashboard, Training Operators, Katib, Pipelines와 KServe가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 소개하자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 위에서 동작하도록 하는 Notebooks를 생성할 수 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tensorflow, pytorch, MXNet 등 다양한 딥러닝 프레임워크에 대해 쿠버네티스 상에서 모델 분산 학습을 지원하는 Training Operations를 사용할 수 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Katib를 사용하여 AutoML 기능인 Hyper-params tuning, Neural Architectures Search (NAS) 등을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KServer는 쿠버네티스에 ML 모델을 배포하고 추론 기능을 제공한다.&lt;/p&gt;</description>
      <category>computing</category>
      <category>k8s</category>
      <category>kubeflow</category>
      <category>MLFlow</category>
      <category>MLOps</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>모델 배포</category>
      <category>쿠버네티스</category>
      <category>쿠버플로우</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/74</guid>
      <comments>https://hm3346.tistory.com/74#entry74comment</comments>
      <pubDate>Wed, 16 Aug 2023 11:57:08 +0900</pubDate>
    </item>
    <item>
      <title>모바일 배포를 위해 pytorch 및 tensorflow 모델 변환이 필요한 이유 완전 정복하기 (feat. onnx or tflite)</title>
      <link>https://hm3346.tistory.com/73</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;1. Pytorch pth model 파일을 변환 없이 모바일에서 사용할 수 있나?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니요, 일반적으로 PyTorch .pth 모델 파일은 변환 없이 모바일 장치에서 직접 사용할 수 없습니다. PyTorch 모델은 Python 런타임 환경에 의존하는 PyTorch 프레임워크를 사용하여 실행되도록 설계되었습니다. 반면 모바일 장치는 일반적으로 하드웨어 아키텍처와 운영 체제가 다르기 때문에 PyTorch 모델을 대상 모바일 플랫폼과 호환되는 형식으로 변환해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모바일 장치에 PyTorch 모델을 배포하려면 일반적으로 모델을 모바일 친화적인 형식으로 변환하고 리소스가 제한된 환경에 맞게 최적화한 다음 TensorFlowLite, CoreML 또는 ONNX Runtime과 같은 적합한 모바일 프레임워크를 사용하여 모바일 앱에 통합하는 변환 프로세스를 따라야 합니다.&lt;/p&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;결과적으로 모바일 장치에 PyTorch 모델을 성공적으로 배포하려면 대상으로 하는 모바일 프레임워크에 특정한 변환 및 통합 단계를 거치는 것이 중요합니다. 변환 프로세스에는 일반적으로 PyTorch 모델을 ONNX와 같은 대상 모바일 프레임워크와 호환되는 형식으로 내보낸 다음 모바일 프레임워크의 도구 또는 API를 사용하여 모바일 플랫폼에서 모델을 가져와 배포하는 작업이 필요합니다.&lt;/p&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;b&gt;2. &lt;span data-token-index=&quot;0&quot;&gt;그래서 pytorch pth model 파일을 모바일에서 사용할 수 없는 구체적이고 상세한 이유가 무엇인데?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 아키텍쳐: PyTorch 모델은 데스크톱 또는 서버 환경에서 흔히 볼 수 있는 CPU 또는 GPU에서 실행하도록 최적화되어 있습니다. 반면에 모바일 장치에는 ARM 기반 프로세서와 같은 다양한 하드웨어 아키텍처가 있으며 신경망 처리 장치(NPU)와 같은 특수 하드웨어 가속기가 있을 수 있습니다. 이러한 하드웨어 차이로 인해 모바일 장치의 특정 최적화 및 기능을 활용하려면 모델 변환이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;운영 체제: PyTorch는 Linux, Windows 또는 macOS와 같은 운영 체제에서 실행되도록 구축되었습니다. 그러나 모바일 장치는 자체 런타임 환경과 소프트웨어 개발 프레임워크가 있는 Android 또는 iOS와 같은 운영 체제를 사용합니다. 결과적으로 모바일 플랫폼의 런타임 환경에 맞게 모델을 조정하려면 변환이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;추론 엔진 호환성: PyTorch는 모바일 프레임워크에서 사용하는 추론 엔진과 호환되지 않는 자체 계산 그래프 및 텐서 작업에 의존합니다. TensorFlow Lite, Core ML 또는 ONNX Runtime과 같은 모바일 프레임워크에는 자체적으로 최적화된 추론 엔진과 런타임 환경이 있습니다. 변환에는 PyTorch 모델을 선택한 모바일 프레임워크와 호환되는 형식으로 변환하여 대상 플랫폼에서 효율적으로 실행할 수 있습니다.&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;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;3. 그렇다면, Tensorflow model 파일은 모바일에서 변환 없이 직접적으로 바로 사용이 가능한가?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니요, TensorFlow 모델은 변환 없이 모바일 장치에서 직접 사용할 수 없습니다. TensorFlow 모델은 일반적으로 TensorFlow 프레임워크에 최적화된 프로토콜 버퍼 형식(.pb)이라는 형식으로 저장됩니다. 모바일 장치에서 TensorFlow 모델을 사용하려면 TensorFlow Lite를 사용하여 모바일 친화적인 형식으로 변환해야 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TensorFlow Lite는 모바일 및 임베디드 장치에 배포하도록 특별히 설계된 프레임워크입니다. 여기에는 TensorFlow 모델(.pb 형식)을 FlatBuffer 형식(.tflite 확장자)이라는 모바일 친화적 형식으로 변환할 수 있는 TensorFlow Lite 변환기라는 변환 도구가 포함되어 있습니다. 변환 프로세스는 모델 크기 축소 및 추론 속도 향상과 같은 모바일 장치에 특정한 하드웨어 제약 및 최적화를 고려합니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TensorFlow 모델이 TensorFlow Lite 형식으로 변환된 후 TensorFlow Lite Interpreter API를 사용하여 모바일 앱 내에서 변환된 모델을 로드하고 실행할 수 있습니다. TensorFlow Lite Interpreter는 사용 가능한 경우 하드웨어 가속(예: GPU 또는 NPU)을 활용하고 모바일 배포를 위한 최적화된 런타임 환경을 제공하여 모바일 장치에서 효율적으로 실행되도록 특별히 설계되었습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하면 모바일 장치에서 TensorFlow 모델을 사용하려면 TensorFlow Lite 형식으로의 변환이 호환성을 보장하고 모바일 배포를 위해 모델을 최적화하고 TensorFlow Lite에서 제공하는 기능 및 최적화를 활용하는 데 필요합니다.&lt;/p&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;b&gt;4. &lt;span data-token-index=&quot;0&quot;&gt;그렇다면 궁극적으로, pytorch model 혹은 tensorflow model을 변환 없이 모바일에서 바로 직접적으로 사용할 수 없는 상세한 이유는?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TensorFlow 모델 및 PyTorch 모델은 다음과 같은 몇 가지 주요 이유로 인해 변환 없이 모바일 장치에서 직접 사용할 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 및 아키텍처 차이점: 스마트폰 및 태블릿과 같은 모바일 장치는 기존 데스크톱 또는 서버 환경과 비교하여 하드웨어 아키텍처가 다릅니다. 모바일 장치는 일반적으로 데스크톱 및 서버에서 발견되는 x86 프로세서와 다른 명령어 세트 및 기능을 가진 ARM 기반 프로세서를 사용하는 경우가 많습니다. 또한 모바일 장치에는 기계 학습 모델의 성능을 향상시킬 수 있는 NPU(신경망 처리 장치)와 같은 특수 하드웨어 가속기가 있을 수 있습니다. 모바일 장치의 특정 하드웨어 및 아키텍처에 대한 모델을 최적화하려면 변환이 필요합니다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;x86과 ARM이 뭔데?&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;먼저, Intel 혹은 AMD를 중심으로 설계된 기기(x86)와 ARM 프로세서를 중심으로 설계된 기기는 상호 호환되지 않으며, x86 및 ARM은 컴퓨터 프로세서에서 일반적으로 사용되는 두 가지 명령어 세트 아키텍처입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x86은 데스크탑 및 서버 환경에서 널리 사용되는 Intel 및 AMD 프로세서에서 주로 사용되는 명령 세트 아키텍처 제품군입니다. &quot;x86&quot;이라는 용어는 원래의 16비트 명령어 세트 아키텍처를 의미하지만 수년에 걸쳐 32비트(x86-32) 및 64비트(x86-64) 버전을 포함하도록 발전했습니다. x86 프로세서는 개인용 컴퓨터, 워크스테이션 및 데이터 센터에서 흔히 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARM(Advanced RISC Machines)은 RISC(Reduced Instruction Set Computing) 아키텍처 제품군입니다. ARM 프로세서는 스마트폰, 태블릿, 임베디드 시스템을 비롯한 모바일 장치에 널리 사용됩니다. ARM 프로세서는 전력 효율성이 뛰어난 것으로 알려져 있으며 낮은 전력 소비와 성능의 균형을 맞추도록 설계되었습니다. ARM 기반 프로세서는 Qualcomm, MediaTek, Apple 및 Samsung과 같은 회사에서 제조합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x86 및 ARM 아키텍처 모두 고유한 소프트웨어 및 개발 도구 에코시스템이 있으며 이들 간의 호환성이 다를 수 있습니다. 하나의 아키텍처용으로 컴파일되거나 최적화된 소프트웨어는 추가 고려 사항이나 변환 없이는 다른 아키텍처에서 직접 실행되지 않을 수 있습니다. 따라서 다른 아키텍처에 모델을 배포할 때 호환성을 보장하고 변환 및 배포 프로세스 중에 필요한 조정을 수행하는 것이 중요합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그래서, 변환하지 않은 pytorch 모델 혹은 tensorflow model이, x86에서 작동하도록 설계되어서 모바일의 ARM에서는 작동하지 않는다는 말인가?&lt;br /&gt;&lt;/span&gt;&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;변환되지 않은 PyTorch 모델과 TensorFlow 모델은 실제로 x86 아키텍처에서 작동하도록 설계되었습니다. PyTorch 및 TensorFlow 프레임워크는 데스크톱 및 서버 환경에서 흔히 볼 수 있는 x86 프로세서와 호환됩니다. x86 시스템에서 PyTorch 또는 TensorFlow를 사용하여 모델을 훈련하거나 개발할 때 결과 모델은 플랫폼에 구애받지 않으며 추가 변환이나 변환 없이 다른 x86 기반 시스템에서 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, x86 아키텍처에서 작동하도록 설계된 변환되지 않은 PyTorch 모델 및 TensorFlow 모델은 일반적으로 변환 없이 모바일 장치에 있는 ARM 기반 프로세서에서 직접 사용할 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더불어, 모바일 장치에서 일반적으로 사용되는 ARM 프로세서는 x86 프로세서와 비교하여 명령어 세트 아키텍처가 다릅니다. 결과적으로 ARM 프로세서의 바이너리 형식 및 실행 요구 사항은 x86 프로세서의 것과 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, TensorFlow Lite 또는 PyTorch Mobile과 같은 모바일 프레임워크는 ARM 기반 프로세서용으로 모델을 변환하고 최적화하는 데 필요한 도구와 런타임 환경을 제공합니다. 이러한 프레임워크는 모바일 장치에서 기계 학습 모델의 효율적인 배포 및 실행을 가능하게 하는 변환 도구, 양자화 기술 및 런타임 최적화를 제공합니다. 따라서 모바일 장치의 ARM 기반 프로세서에 PyTorch 또는 TensorFlow 모델을 배포하려면 대상 ARM 아키텍처에서 호환성, 성능 및 효율적인 리소스 활용을 보장하기 위해 적절한 모바일 프레임워크를 사용하여 모델을 변환하거나 적응해야 합니다.&lt;/p&gt;
&lt;/div&gt;
&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;운영 체제 호환성: 모바일 장치는 자체 런타임 환경과 소프트웨어 개발 프레임워크가 있는 Android 또는 iOS와 같은 다양한 운영 체제에서 실행됩니다. TensorFlow 모델과 PyTorch 모델은 각각의 TensorFlow 및 PyTorch 프레임워크 내에서 작동하도록 설계되었으며 일반적으로 Python을 기반으로 하고 데스크톱 또는 서버 운영 체제용으로 구축되었습니다. 모바일 장치에서 이러한 모델을 사용하려면 Android용 TensorFlow Lite 또는 iOS용 Core ML과 같은 모바일 플랫폼의 런타임 환경과 호환되는 형식으로 변환해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 크기 및 효율성: TensorFlow 모델 및 PyTorch 모델은 파일 크기 및 메모리 소비 측면에서 상대적으로 클 수 있습니다. 모바일 장치는 데스크톱 또는 서버 환경에 비해 스토리지 및 메모리 리소스가 제한되어 있습니다. 모델 변환에는 종종 모델 크기를 줄이고 효율성을 향상시키기 위한 양자화, 가지치기 또는 압축과 같은 최적화가 포함됩니다. 이러한 최적화를 통해 모델이 모바일 장치의 제약 조건에 맞고 제한된 리소스로 효율적으로 실행될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추론 엔진 호환성: TensorFlow 모델과 PyTorch 모델은 해당 프레임워크에 따라 다른 계산 그래프와 텐서 작업을 사용합니다. TensorFlow Lite 또는 Core ML과 같은 모바일 프레임워크에는 모바일 장치용으로 설계된 고유한 최적화된 추론 엔진과 런타임 환경이 있습니다. 모델을 이러한 추론 엔진과 호환되는 형식으로 변환하여 모바일 플랫폼에서 효율적으로 실행하고 가능한 경우 하드웨어 가속을 활용하려면 변환이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변환 프로세스를 거쳐 TensorFlow 모델은 TensorFlow Lite 형식으로 변환할 수 있으며 PyTorch 모델은 모바일 프레임워크와 호환되는 ONNX(Open Neural Network Exchange)와 같은 형식으로 변환할 수 있습니다. 이러한 변환을 통해 모바일 장치에서 모델의 호환성, 효율성 및 최적의 성능을 얻을 수 있습니다.&lt;/p&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;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;5. Pytorch pth model 파일을 모바일에서 사용하기 위한 torchscript 라는 것이 있던데, 이건 뭐지?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, TorchScript는&amp;nbsp;PyTorch 코드에서 직렬화 가능하고 최적화 가능한 모델을 만드는 방법&amp;nbsp;입니다.&amp;nbsp;모든 TorchScript 프로그램은 Python 프로세스에서 저장하고 Python 종속성이 없는 프로세스에서 로드할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TorchScript는 다른 프레임워크에 이식 가능하고 효율적인 방식으로, PyTorch 모델을 직렬화, 최적화 및 배포할 수 있게 해주는 PyTorch 프레임워크의 구성 요소입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일된 프로그램과 유사하게 PyTorch 모델을 정적으로 유형이 지정된 그래프 기반 중간 표현(IR)으로 나타내는 방법을 제공합니다. TorchScript는 몇 가지 주요 기능을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직렬화: TorchScript를 사용하면 모델 아키텍처와 관련 가중치 및 매개변수를 모두 포함하여 PyTorch 모델을 직렬화할 수 있습니다. 이 직렬화된 표현은 독립 실행형 파일로 저장하고 나중에 추론 또는 배포 목적으로 로드할 수 있습니다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  직렬화(Serialization)가 뭔데?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직렬화는 개체를 나중에 저장, 전송 또는 재구성할 수 있는 형식으로 변환하는 프로세스를 나타냅니다. TorchScript의 맥락에서 직렬화는 아키텍처, 가중치 및 매개변수를 포함한 PyTorch 모델을 디스크에 저장하거나 네트워크를 통해 전송할 수 있는 직렬화된 표현으로 변환하는 프로세스를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직렬화는 개체를 나중에 저장, 전송 또는 재구성할 수 있는 형식으로 변환하는 프로세스를 나타냅니다. TorchScript의 맥락에서 직렬화는 아키텍처, 가중치 및 매개변수를 포함한 PyTorch 모델을 디스크에 저장하거나 네트워크를 통해 전송할 수 있는 직렬화된 표현으로 변환하는 프로세스를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 직렬화를 사용하면 학습된 모델과 관련 가중치, 매개 변수 및 아키텍처를 이식 가능한 형식으로 유지할 수 있으므로 다양한 환경에서 PyTorch 모델을 보다 쉽게 배포, 공유 및 배포할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&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;최적화: TorchScript는 PyTorch 모델에서 다양한 최적화 기술을 지원합니다. 상수 폴딩, 데드 코드 제거, 연산자 융합 등 다양한 변환을 수행하여 모델의 계산 그래프를 최적화합니다. 이러한 최적화는 모델의 효율성을 개선하고 추론 대기 시간을 줄이는 것을 목표로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어 독립성: TorchScript는 Python에서 모델 코드를 작성한 다음 TorchScript 표현으로 변환할 수 있도록 하여 언어 독립성을 제공합니다. 이를 통해 Python을 직접 지원하지 않는 환경에서 PyTorch 모델을 배포하고 실행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플랫폼 간 배포: TorchScript 표현은 다양한 플랫폼과 환경에서 이식 가능하도록 설계되었습니다. 프로덕션 시스템, 임베디드 장치, 모바일 애플리케이션 등에 PyTorch 모델을 배포하는 데 사용할 수 있습니다. PyTorch 모델을 TorchScript로 변환하면 성능 향상, 모델 크기 감소, 직접 Python 실행이 가능하지 않거나 효율적이지 않은 환경에서 모델을 배포하는 기능의 이점을 누릴 수 있습니다.&lt;/p&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;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;6. 그럼 ONNX와 torchscript의 차이가 뭐지?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크 통합: ONNX는 PyTorch, TensorFlow, Keras 등을 비롯한 다양한 딥 러닝 프레임워크 간의 상호 운용성을 지원하도록 설계된 크로스 프레임워크 형식입니다. ONNX는 모델에 대한 중립적인 중간 표현 역할을 하여 서로 다른 프레임워크 간에 모델을 교환하고 사용할 수 있습니다. 반면에 TorchScript는 PyTorch 에코시스템 내에서 PyTorch 모델을 표현, 최적화 및 배포하기 위해 특별히 설계된 PyTorch의 구성 요소입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 표현: ONNX는 모델을 중간 계산 그래프로 나타냅니다. 특정 프레임워크와 독립적으로 모델의 구조와 작업을 캡처하여 서로 다른 프레임워크 간의 상호 운용성 및 변환을 허용합니다. TorchScript는 PyTorch 모델을 PyTorch 프레임워크 내에서 정적 형식의 그래프 기반 중간 표현으로 나타냅니다. PyTorch의 표현력을 유지하면서 PyTorch 모델을 배포 및 실행에 최적화된 형식으로 변환하는 방법을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상호 운용성 및 이식성: ONNX는 상호 운용성에 중점을 두어 서로 다른 프레임워크에서 모델을 공유하고 사용할 수 있습니다. 다양한 딥 러닝 프레임워크 및 런타임 환경에서 모델 교환, 배포 및 추론에 사용할 수 있는 공통 형식을 제공합니다. 반면에 TorchScript는 PyTorch와 긴밀하게 통합되어 있으며 특히 PyTorch 에코시스템 내에서 최적화 및 배포 기능을 제공합니다. TorchScript는 다양한 플랫폼에 PyTorch 모델을 배포하는 데 사용할 수 있지만 PyTorch 프레임워크에 더 밀접하게 연결되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에코시스템 및 도구: ONNX에는 ONNX 모델을 지원하는 다양한 도구, 라이브러리 및 런타임 환경을 갖춘 성장하는 에코시스템이 있습니다. 여기에는 다양한 하드웨어 플랫폼에서 ONNX 모델의 최적화된 실행을 제공하는 ONNX Runtime이 포함됩니다. PyTorch의 구성 요소인 TorchScript는 PyTorch 프레임워크 내에서 교육, 추론 및 배포를 위한 다양한 유틸리티를 포함하는 기존 PyTorch 에코시스템 및 도구의 이점을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하면 ONNX는 서로 다른 프레임워크 간의 모델 상호 운용성에 중점을 두는 반면 TorchScript는 PyTorch에 고유하며 PyTorch 에코시스템 내에서 효율적인 배포 및 최적화 기능을 제공하는 pytorch의 구성 요소입니다. ONNX를 사용하면 프레임워크 간에 모델을 교환하고 사용할 수 있으며 TorchScript는 PyTorch 프레임워크 내에서 PyTorch 모델을 효율적으로 배포하고 실행하도록 최적화되어 있습니다. 두 형식 모두 고유한 강점이 있지만 ONNX와 TorchScript 중에서 선택하는 것은 특정 사용 사례, 배포 환경 및 각 프레임워크와의 통합 요구 사항에 따라 다릅니다.&lt;/p&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;size18&quot;&gt;&lt;b&gt;결론 :&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pytorch는 동적 연산 그래프를 사용하는데 반해 Tensorflow는 정적 연산 그래프를 사용한다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명된 이유로 인해, Pytorch 및 Tensorflow 모델은 변환 없이 바로 모바일에서 사용할 수 없으며, pytorch는 torchscript 혹은 onnx format으로 모델을 변환하여 모바일에서 사용 가능하고 tensorflow는 onnx 혹은 TFLite로 변환하여 모바일에서 사용 가능함. 또한, pytorch &amp;rarr; onnx &amp;rarr; Tensorflow &amp;rarr; TFLite로도 변환이 가능함.&lt;/p&gt;</description>
      <category>computing</category>
      <category>A.I</category>
      <category>Deep Learning</category>
      <category>deep learning on mobile</category>
      <category>mobile</category>
      <category>mobile deep learning</category>
      <category>onnx</category>
      <category>pytorch</category>
      <category>tensorflow</category>
      <category>tflite</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/73</guid>
      <comments>https://hm3346.tistory.com/73#entry73comment</comments>
      <pubDate>Tue, 11 Jul 2023 09:05:22 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 코드로 GPU memory print 하기</title>
      <link>https://hm3346.tistory.com/72</link>
      <description>&lt;pre id=&quot;code_1677608125235&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pynvml
import torch
def get_memory_free_MiB(gpu_index):
    pynvml.nvmlInit()
    handle = pynvml.nvmlDeviceGetHandleByIndex(int(gpu_index))
    mem_info = pynvml.nvmlDeviceGetMemoryInfo(handle)
    total= mem_info.total // 1024 ** 2
    free = mem_info.free // 1024 ** 2
    return free, total

print('GPU Memory : ',{f'GPU-{i}':f'{get_memory_free_MiB(i)[0]:,d}/{get_memory_free_MiB(i)[1]:,d} MiB' for i in range(torch.cuda.device_count())})&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rdfM1/btr1dclsBnA/bdCMEk5AfwjQ0skLkfgRd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rdfM1/btr1dclsBnA/bdCMEk5AfwjQ0skLkfgRd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rdfM1/btr1dclsBnA/bdCMEk5AfwjQ0skLkfgRd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrdfM1%2Fbtr1dclsBnA%2FbdCMEk5AfwjQ0skLkfgRd0%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;1018&quot; height=&quot;251&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;272&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;print('GPU&amp;nbsp;Memory&amp;nbsp;:&amp;nbsp;',{f'GPU-{i}':f'{get_memory_free_MiB(i)[0]:,d}/{get_memory_free_MiB(i)[1]:,d}&amp;nbsp;MiB'&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(torch.cuda.device_count())})&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;or&lt;/p&gt;
&lt;div&gt;print('GPU&amp;nbsp;Memory&amp;nbsp;:&amp;nbsp;',{f'GPU{i}':f'{get_memory_free_MiB(i)[0]:,d}/{get_memory_free_MiB(i)[1]:,d}&amp;nbsp;MiB'&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;os.environ['CUDA_VISIBLE_DEVICES'].split(',')})&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>computing</category>
      <category>GPU</category>
      <category>Memory</category>
      <category>Python</category>
      <category>딥러닝</category>
      <category>메모리</category>
      <category>파이썬</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/72</guid>
      <comments>https://hm3346.tistory.com/72#entry72comment</comments>
      <pubDate>Wed, 1 Mar 2023 03:16:25 +0900</pubDate>
    </item>
    <item>
      <title>U2PL : Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels 논문 상세 리뷰</title>
      <link>https://hm3346.tistory.com/71</link>
      <description>&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;796&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb8lCZ/btrYBzbH4CO/0eXoyV1UyhxVL5pk35FKL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb8lCZ/btrYBzbH4CO/0eXoyV1UyhxVL5pk35FKL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb8lCZ/btrYBzbH4CO/0eXoyV1UyhxVL5pk35FKL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb8lCZ%2FbtrYBzbH4CO%2F0eXoyV1UyhxVL5pk35FKL0%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;796&quot; height=&quot;172&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;172&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biLhiq/btrYzMpnZrN/VkTsnZMNnRnstvLBHn4rYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biLhiq/btrYzMpnZrN/VkTsnZMNnRnstvLBHn4rYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biLhiq/btrYzMpnZrN/VkTsnZMNnRnstvLBHn4rYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiLhiq%2FbtrYzMpnZrN%2FVkTsnZMNnRnstvLBHn4rYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;795&quot; height=&quot;492&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;492&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daoQ7m/btrYBzCLMbA/3hNdK1YR85qofnN7hJMol0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daoQ7m/btrYBzCLMbA/3hNdK1YR85qofnN7hJMol0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daoQ7m/btrYBzCLMbA/3hNdK1YR85qofnN7hJMol0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaoQ7m%2FbtrYBzCLMbA%2F3hNdK1YR85qofnN7hJMol0%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;779&quot; height=&quot;428&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/okQnP/btrYz0132Zn/sVIAjgDrjruA8CXpkl3UBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/okQnP/btrYz0132Zn/sVIAjgDrjruA8CXpkl3UBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/okQnP/btrYz0132Zn/sVIAjgDrjruA8CXpkl3UBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FokQnP%2FbtrYz0132Zn%2FsVIAjgDrjruA8CXpkl3UBk%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;783&quot; height=&quot;671&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3qzFJ/btrYwnqtort/ZoONtZklla8nPCfYqRhdKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3qzFJ/btrYwnqtort/ZoONtZklla8nPCfYqRhdKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3qzFJ/btrYwnqtort/ZoONtZklla8nPCfYqRhdKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3qzFJ%2FbtrYwnqtort%2FZoONtZklla8nPCfYqRhdKk%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;788&quot; height=&quot;780&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbKU7R/btrYzpuqLvP/Xpc2mzce3UIopdmBogYON0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbKU7R/btrYzpuqLvP/Xpc2mzce3UIopdmBogYON0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbKU7R/btrYzpuqLvP/Xpc2mzce3UIopdmBogYON0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbKU7R%2FbtrYzpuqLvP%2FXpc2mzce3UIopdmBogYON0%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;784&quot; height=&quot;671&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k2TSU/btrYzpnGIrd/EXNNaPKqQB4LorN8boHMq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k2TSU/btrYzpnGIrd/EXNNaPKqQB4LorN8boHMq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k2TSU/btrYzpnGIrd/EXNNaPKqQB4LorN8boHMq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk2TSU%2FbtrYzpnGIrd%2FEXNNaPKqQB4LorN8boHMq1%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;804&quot; height=&quot;756&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8GsGK/btrYwmSA7ej/HofgJKwKeawbFyNKzyGVU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8GsGK/btrYwmSA7ej/HofgJKwKeawbFyNKzyGVU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8GsGK/btrYwmSA7ej/HofgJKwKeawbFyNKzyGVU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8GsGK%2FbtrYwmSA7ej%2FHofgJKwKeawbFyNKzyGVU0%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;817&quot; height=&quot;814&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m3ibH/btrYzaRPGp9/DjI23cLDrZ8uvwyGH43Qtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m3ibH/btrYzaRPGp9/DjI23cLDrZ8uvwyGH43Qtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m3ibH/btrYzaRPGp9/DjI23cLDrZ8uvwyGH43Qtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm3ibH%2FbtrYzaRPGp9%2FDjI23cLDrZ8uvwyGH43Qtk%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;799&quot; height=&quot;371&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg534o/btrYzoPNaMm/fhgAqj0Bgk2UA9QMKNJim1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg534o/btrYzoPNaMm/fhgAqj0Bgk2UA9QMKNJim1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg534o/btrYzoPNaMm/fhgAqj0Bgk2UA9QMKNJim1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg534o%2FbtrYzoPNaMm%2FfhgAqj0Bgk2UA9QMKNJim1%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;973&quot; height=&quot;516&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Alrg9/btrYARcBpep/flpin3WdF8aKkhdyPujj71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Alrg9/btrYARcBpep/flpin3WdF8aKkhdyPujj71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Alrg9/btrYARcBpep/flpin3WdF8aKkhdyPujj71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAlrg9%2FbtrYARcBpep%2Fflpin3WdF8aKkhdyPujj71%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;806&quot; height=&quot;585&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsr1gL/btrYBXDwhyn/VjzIHR1k7RKplV42rHnDRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsr1gL/btrYBXDwhyn/VjzIHR1k7RKplV42rHnDRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsr1gL/btrYBXDwhyn/VjzIHR1k7RKplV42rHnDRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsr1gL%2FbtrYBXDwhyn%2FVjzIHR1k7RKplV42rHnDRK%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;798&quot; height=&quot;531&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHCpLz/btrYzkfHtKN/LZrWLXjkm55cGkmALh3SKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHCpLz/btrYzkfHtKN/LZrWLXjkm55cGkmALh3SKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHCpLz/btrYzkfHtKN/LZrWLXjkm55cGkmALh3SKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHCpLz%2FbtrYzkfHtKN%2FLZrWLXjkm55cGkmALh3SKk%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;796&quot; height=&quot;800&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmOB2u/btrYvmecud7/Gnp4qnCLJ2DMGqW63ROJO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmOB2u/btrYvmecud7/Gnp4qnCLJ2DMGqW63ROJO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmOB2u/btrYvmecud7/Gnp4qnCLJ2DMGqW63ROJO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmOB2u%2FbtrYvmecud7%2FGnp4qnCLJ2DMGqW63ROJO1%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;805&quot; height=&quot;516&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWOTIE/btrYAapW6Fc/vXuWWL8xbRKoWlvZ7QmRd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWOTIE/btrYAapW6Fc/vXuWWL8xbRKoWlvZ7QmRd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWOTIE/btrYAapW6Fc/vXuWWL8xbRKoWlvZ7QmRd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWOTIE%2FbtrYAapW6Fc%2FvXuWWL8xbRKoWlvZ7QmRd1%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;799&quot; height=&quot;650&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5k0cD/btrYBxEZanX/6YKYJZKAll3tWS0I2jK8wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5k0cD/btrYBxEZanX/6YKYJZKAll3tWS0I2jK8wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5k0cD/btrYBxEZanX/6YKYJZKAll3tWS0I2jK8wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5k0cD%2FbtrYBxEZanX%2F6YKYJZKAll3tWS0I2jK8wk%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;787&quot; height=&quot;649&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;649&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XHERD/btrYzESsrsN/47sYa2Uwgd7npksY4b89Qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XHERD/btrYzESsrsN/47sYa2Uwgd7npksY4b89Qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XHERD/btrYzESsrsN/47sYa2Uwgd7npksY4b89Qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXHERD%2FbtrYzESsrsN%2F47sYa2Uwgd7npksY4b89Qk%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;824&quot; height=&quot;694&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;694&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0D0OS/btrYChBSsjr/zqB2BxmxOKpKIg30oeguEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0D0OS/btrYChBSsjr/zqB2BxmxOKpKIg30oeguEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0D0OS/btrYChBSsjr/zqB2BxmxOKpKIg30oeguEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0D0OS%2FbtrYChBSsjr%2FzqB2BxmxOKpKIg30oeguEk%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;778&quot; height=&quot;668&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjKaJS/btrYBct8sNA/UL1Hk3ZKevLaJ8PQd6INy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjKaJS/btrYBct8sNA/UL1Hk3ZKevLaJ8PQd6INy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjKaJS/btrYBct8sNA/UL1Hk3ZKevLaJ8PQd6INy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjKaJS%2FbtrYBct8sNA%2FUL1Hk3ZKevLaJ8PQd6INy0%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;768&quot; height=&quot;762&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;762&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHMFs/btrYz0gMrOG/JoOfKhTYJFCHePuTYv2Pr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHMFs/btrYz0gMrOG/JoOfKhTYJFCHePuTYv2Pr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHMFs/btrYz0gMrOG/JoOfKhTYJFCHePuTYv2Pr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHMFs%2FbtrYz0gMrOG%2FJoOfKhTYJFCHePuTYv2Pr1%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;741&quot; height=&quot;597&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K6nDE/btrYtSxuAzs/ZZ5ZelSB0LJEwawmHINPu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K6nDE/btrYtSxuAzs/ZZ5ZelSB0LJEwawmHINPu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K6nDE/btrYtSxuAzs/ZZ5ZelSB0LJEwawmHINPu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK6nDE%2FbtrYtSxuAzs%2FZZ5ZelSB0LJEwawmHINPu0%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;742&quot; height=&quot;561&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wrpAr/btrYzZ9UAjY/eTvbzS7NXKYU0NyjRGJ5Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wrpAr/btrYzZ9UAjY/eTvbzS7NXKYU0NyjRGJ5Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wrpAr/btrYzZ9UAjY/eTvbzS7NXKYU0NyjRGJ5Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwrpAr%2FbtrYzZ9UAjY%2FeTvbzS7NXKYU0NyjRGJ5Uk%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;779&quot; height=&quot;746&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;746&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDA7Qf/btrYzkmpbhb/kLMNaJvpGY6BiEGVbQnaok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDA7Qf/btrYzkmpbhb/kLMNaJvpGY6BiEGVbQnaok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDA7Qf/btrYzkmpbhb/kLMNaJvpGY6BiEGVbQnaok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDA7Qf%2FbtrYzkmpbhb%2FkLMNaJvpGY6BiEGVbQnaok%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;737&quot; height=&quot;557&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;557&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JYMyD/btrYzleCnKZ/Y6B93VhDrdRv5W83riTMwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JYMyD/btrYzleCnKZ/Y6B93VhDrdRv5W83riTMwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JYMyD/btrYzleCnKZ/Y6B93VhDrdRv5W83riTMwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJYMyD%2FbtrYzleCnKZ%2FY6B93VhDrdRv5W83riTMwk%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;790&quot; height=&quot;357&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;783&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZujYP/btrYByRpJaF/pelGDnHthfocEksXNZPKH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZujYP/btrYByRpJaF/pelGDnHthfocEksXNZPKH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZujYP/btrYByRpJaF/pelGDnHthfocEksXNZPKH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZujYP%2FbtrYByRpJaF%2FpelGDnHthfocEksXNZPKH1%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;589&quot; height=&quot;783&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;783&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca1pXl/btrYtSqJYHH/nJ3Ln8jw833O4BGC4yLa01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca1pXl/btrYtSqJYHH/nJ3Ln8jw833O4BGC4yLa01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca1pXl/btrYtSqJYHH/nJ3Ln8jw833O4BGC4yLa01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca1pXl%2FbtrYtSqJYHH%2FnJ3Ln8jw833O4BGC4yLa01%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;740&quot; height=&quot;565&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;565&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPPNtq/btrYBWECqg3/lkysDed7nvGkXqVkkk7PL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPPNtq/btrYBWECqg3/lkysDed7nvGkXqVkkk7PL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPPNtq/btrYBWECqg3/lkysDed7nvGkXqVkkk7PL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPPNtq%2FbtrYBWECqg3%2FlkysDed7nvGkXqVkkk7PL0%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;558&quot; height=&quot;530&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;625&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R9qRp/btrYBWYUTNx/5YwDknu9s6fKAryx6rMKvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R9qRp/btrYBWYUTNx/5YwDknu9s6fKAryx6rMKvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R9qRp/btrYBWYUTNx/5YwDknu9s6fKAryx6rMKvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR9qRp%2FbtrYBWYUTNx%2F5YwDknu9s6fKAryx6rMKvk%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;801&quot; height=&quot;625&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;625&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L92h7/btrYBzCNN0X/ozyxRJCTMBQOdCNk80ZoI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L92h7/btrYBzCNN0X/ozyxRJCTMBQOdCNk80ZoI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L92h7/btrYBzCNN0X/ozyxRJCTMBQOdCNk80ZoI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL92h7%2FbtrYBzCNN0X%2FozyxRJCTMBQOdCNk80ZoI0%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;797&quot; height=&quot;826&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dadgab/btrYBXKkgFd/M3Kd9D9AM6kPUmit46GCIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dadgab/btrYBXKkgFd/M3Kd9D9AM6kPUmit46GCIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dadgab/btrYBXKkgFd/M3Kd9D9AM6kPUmit46GCIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdadgab%2FbtrYBXKkgFd%2FM3Kd9D9AM6kPUmit46GCIK%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;783&quot; height=&quot;792&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>논문</category>
      <category>Deep Learning</category>
      <category>psuedo label</category>
      <category>segmentation</category>
      <category>Semantic Segmentation</category>
      <category>semi supervised learning</category>
      <category>semi supervised semantic segmentation</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/71</guid>
      <comments>https://hm3346.tistory.com/71#entry71comment</comments>
      <pubDate>Wed, 8 Feb 2023 20:05:31 +0900</pubDate>
    </item>
    <item>
      <title>GPT-2 논문 리뷰 : Language Models are Unsupervised Multitask Learners</title>
      <link>https://hm3346.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;paper :&lt;/b&gt; &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lsquo;&lt;/span&gt;Language Models are Unsupervised Multitask Learners&amp;rsquo;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;authors : &lt;/b&gt;&lt;/span&gt;&lt;i&gt;Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, Ilya Sutskever&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Abstract&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;question answering, machine translation, reading comprehension, summarization과 같은 NLP tasks는 일반적으로 task별 dataset에 대한 supervised learning으로 접근해왔다. 본 논문은 language model(LM)이 WebText라고 부르는 수 백만 개의 web pages로 구성된 새로운 dataset에서 학습 할 때 명시적인 supervision 없이 이러한 tasks를 학습하기 시작한다는 것을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;document와 questions를 LM에 주고 LM이 생성한 답변은 CoQA datset에서 55 F1에 도달한다. 이는 127,000+ training examples를 사용하지 않고도 4개의 baseline systems에서 3개의 성능과 일치하거나 초과하는 것을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LM의 capacity는 필수적이며, 이를 증가 시키면 task 전반에 걸쳐 로그 선형적으로 성능이 향상된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서 가장 큰 모델인 GPT-2는 zero-shot에서 테스트 된 8개의 LM dataset 중 7개에서 SOTA를 달성하는 1.5B parameter Transformer이다. 그러나, 그럼에도 불구하고 WebText에서는 여전히 underfits 한 상황이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델에서 나온 examples는 이러한 개선점을 반영하고 일관된 텍스트 단락을 포함한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 결과는 자연스럽게 발생되는 Demo(demonstrations)를 통해 task를 수행하는 Language processing system을 구축하는데 유망한 path를 시사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;Machine learning systems는 현재 large datasets 및 high-capacity models(대용량 모델)에서 supervised learning으로 훈련된 task에서 탁월하다. 그러나 이러한 시스템은 불안정하고 특히 data distribution과 task specification의 약간의 변화에 민감하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해, 현재의 시스템은 유능한 일반인보다는 좁은(narrow) 전문가라는 것이다. 본 논문은 보다 일반적인 시스템으로 가고자 하므로, 각 task에 대한 training data을 수동으로 생성하고 labeling할 필요가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multitask learning은 일반적인 성능을 향상 시키기 위한 유망한 framework이다. 그러나, NLP에서 Multitask learning 학습은 여전히 초기 단계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멀티태스킹 학습(Caruana, 1997)은 일반적인 성능을 향상시키기 위한 유망한 프레임워크이다. 그러나 NLP의 멀티태스킹 훈련은 여전히 초기 단계이다. 최근 연구는 경미한 성능 향상(Yogatama et al., 2019)과 현재까지 가장 야심찬 두 가지 노력이 각각 총 10개와 17개(데이터 세트, 목표) 쌍에 대해 훈련되었다고 보고한다(McCann et al., 2018). 2018). 메타 학습 관점에서 각 (데이터 세트, 목표) 쌍은 데이터 세트 및 목표 분포에서 샘플링된 단일 훈련 예제이다. 현재 ML 시스템은 수백에서 수천 개의 예를 필요로 합니다 일반화된 기능을 유도하다. 이는 멀티태스킹 훈련이 현재 접근 방식과의 약속을 실현하기 위해 많은 수의 효과적인 훈련 쌍이 필요하다는 것을 시사한다. 데이터 세트 생성과 목표 설계를 현재 기술로 강제하는 데 필요한 수준으로 계속 확장하는 것은 매우 어려울 것이다. 이는 멀티태스킹 학습을 수행하기 위한 추가 설정을 탐색하도록 동기를 부여한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;language tasks에서 현재 최고의 성능을 발휘하는 시스템은 pre-training과 supervised fine-tuning의 조합을 활용한다. 이 접근법은 긴 역사를 가지고 있으며, 이는 더욱 유연한 forms of transfer로 가는 경향이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 먼저, word vectors를 task별 아키텍처에 대한 inputs로 사용한 다음 recurrent networks의 contextual representation로 transfer 했었다. 최근 연구는 task별 specific 아키텍처가 더 이상 필요하지 않으며 많은 self-attention blocks만으로 충분하다는 것을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, 이러한 방법은 여전히 task를 수행하기 위해 supervised learning을 필요로 한다. 최소한의 데이터만 사용할 수 있거나 supervised data가 없는 경우, 다른 연구들은 언어 모델이 특정 task를 수행할 수 있다는 가능성을 보여주었다. 예를 들어, commonsense reasoning이나 sentiment analysis가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 이 두 작업 라인을 연결하고 보다 일반적인 transfer 방법의 추세를 이어가고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어 모델이 parameter나 아키텍처의 수정 없이 zero-shot setting에서 down-stream task를 수행할 수 있음을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;zero-shot setting에서 광범위한 작업을 수행할 수 있는 언어 모델의 능력을 강조하여 이 접근 방식에 대한 잠재력을 보여준다. 그리고 이 접근법은 task에 따라 유망하고 경쟁적이며 SOTA를 얻게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Approach&lt;/b&gt;&lt;/span&gt;&lt;/h1&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;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MHCJ2/btrYaouL1ER/fj4vtGSjm7GJFAl4TVfXnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MHCJ2/btrYaouL1ER/fj4vtGSjm7GJFAl4TVfXnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MHCJ2/btrYaouL1ER/fj4vtGSjm7GJFAl4TVfXnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMHCJ2%2FbtrYaouL1ER%2Ffj4vtGSjm7GJFAl4TVfXnK%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;305&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;305&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnUS5n/btrX8hQcxOz/UKrpokKmZC93LKbUI15pkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnUS5n/btrX8hQcxOz/UKrpokKmZC93LKbUI15pkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnUS5n/btrX8hQcxOz/UKrpokKmZC93LKbUI15pkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnUS5n%2FbtrX8hQcxOz%2FUKrpokKmZC93LKbUI15pkK%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;536&quot; height=&quot;637&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;637&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;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Training Dataset&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 선행 연구에서 사용된 dataset은 뉴스와 같이 한 영역에서만 가져온 데이터를 사용하였다. 본 논문은 가능한 다양한 출처의 데이터를 가져오려고 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양하고 거의 무제한에 가까운 텍스트의 유망한 source는 Common Crawl과 같은 web scraping 인데, 많은 양이 품질이 떨어지거나 이해할 수 없는 등의 데이터여서, 단순 크롤링이 아닌 고품질의 데이터를 얻는 다른 rule을 하나 정하였다 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사람이 curated/filtered 웹 페이지만 scraping 하였다.&lt;/li&gt;
&lt;li&gt;&amp;rarr; social media platform Reddit에서 최소 3 karma 이상을 outbound links를 scraping 하였다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로, resulting dataset인 WebText는 4,500만 링크를 포함한다.&lt;/p&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;&lt;u&gt;&lt;b&gt;Input Representation&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;general language model은 문자열의 확률을 계산하고 생성할 수 있어야 한다. 현재 대규모 LM은 가능 문자열의 공간을 제한하는 소문자, 토큰화 및 out-of-vocabulary과 같은 사전 처리 단계를 포함한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Byte Pair Encoding (BPE)는 빈번한 symbol sequence에 대한 단어 수준 입력과 드문 symbole sequence에 대한 문자 수준 입력을 효과적으로 적절히 보간한다.&lt;/p&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;&lt;u&gt;&lt;b&gt;Model&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LM에 Transformer 기반 아키텍처를 사용한다. 모델은 OpenAI GPT model의 세부 사항과 약간의 차이는 있지만 비슷하게 구성하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Layer normalization&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; activation residual network (He et al., 2016)과 유사하게 각 sub-block의 입력으로 이동 시켰고, 최종 self-attention block 이후에 추가 self-attention black을 추가하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;model depth따른 residual path의 누적과 관련된 수정된 초기화가 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; residual layers의 가중치를 &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&amp;radic;N(sqrt(N))&lt;/span&gt;&amp;nbsp;만큼 조정한다. ( N : number of residual layers)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vocabulary는 50,257개로 늘렸고 context size를 512에서 1024로 늘렸으며, 더욱 큰 512 batch size가 사용된다.&lt;/p&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;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Experiments&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;모델 크기를 4개로 만들어서 실험했다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 작은 모델 size = Open-AI GPT-1 size&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 모델 size = BERT&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 모델은 size는 가장 작은 모델보다 10배 이상 차이가 난다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btbCLt/btrX8iawmZF/pZDqkTrgymFNwNTzW2k0s0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btbCLt/btrX8iawmZF/pZDqkTrgymFNwNTzW2k0s0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btbCLt/btrX8iawmZF/pZDqkTrgymFNwNTzW2k0s0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtbCLt%2FbtrX8iawmZF%2FpZDqkTrgymFNwNTzW2k0s0%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;503&quot; height=&quot;180&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;180&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;zero-shot&lt;/b&gt; &lt;/span&gt;환경에서 8개 중 7개에서 SOTA를 달성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nGYzF/btrX7ZvlZPM/v180IOC3tQyncrGwStZFkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nGYzF/btrX7ZvlZPM/v180IOC3tQyncrGwStZFkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nGYzF/btrX7ZvlZPM/v180IOC3tQyncrGwStZFkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnGYzF%2FbtrX7ZvlZPM%2Fv180IOC3tQyncrGwStZFkK%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;779&quot; height=&quot;241&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;241&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;The Children&amp;rsquo;s Book Test (CBT)는 named entities, nouns, verbs, prepositions와 같은 다양한 범주의 단어에 대한 LM의 성능을 조사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT-2는 새로운 SOTA를 달성한다 &amp;rarr; on common nouns-93.3% , named entities : 89.1&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zUM6y/btrX32zSyC0/MHELioHfzxtmv94oAiQk3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zUM6y/btrX32zSyC0/MHELioHfzxtmv94oAiQk3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zUM6y/btrX32zSyC0/MHELioHfzxtmv94oAiQk3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzUM6y%2FbtrX32zSyC0%2FMHELioHfzxtmv94oAiQk3K%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;585&quot; height=&quot;392&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;392&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Winograd Schema challenge&lt;/b&gt;&lt;/span&gt;는 텍스트의 모호성을 해결하는 시스템의 능력을 측정하여 상식적인 추론을 수행하는 시스템 능력을 측정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT-2는 SOTA를 7% 향상시켜 70.70%를 달성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q2QJN/btrX9GvvVWL/kWD04kKEVs9beuktlTOLl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q2QJN/btrX9GvvVWL/kWD04kKEVs9beuktlTOLl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q2QJN/btrX9GvvVWL/kWD04kKEVs9beuktlTOLl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq2QJN%2FbtrX9GvvVWL%2FkWD04kKEVs9beuktlTOLl0%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;452&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;452&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Reading Comprehension :&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Conversation Question Answering dataset (CoQA)는 질문자와 문서에 대한 질문 응답자 간의 자연어 대화 쌍을 이룬 7개의 서로 다른 도메인 문서로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT-2는 55 F1 score를 달성하여 4개 중 3개의 다른 모델을 능가하였는데, 이는 심지어 127k 이상의 수동으로 수집된 질문-답 쌍을 사용하지 않은 결과이다. supervised SOTA Bert는 89 F1 score을 보였는데, 반면에 GPT-2는 어떤 supervised training 없다는 점에서 매우 흥미로운 결과이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Summarization :&lt;/b&gt;&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;547&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0gcrZ/btrX4leQrFN/sdauBHWF8zj20VSlmjekp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0gcrZ/btrX4leQrFN/sdauBHWF8zj20VSlmjekp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0gcrZ/btrX4leQrFN/sdauBHWF8zj20VSlmjekp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0gcrZ%2FbtrX4leQrFN%2FsdauBHWF8zj20VSlmjekp0%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;295&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;295&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;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Note : my&amp;nbsp;Key-point&lt;/b&gt;&lt;/span&gt;&lt;/h1&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;775&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnNPHp/btrX6puc0hg/A6e6P1stL72gOXyKkEBSL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnNPHp/btrX6puc0hg/A6e6P1stL72gOXyKkEBSL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnNPHp/btrX6puc0hg/A6e6P1stL72gOXyKkEBSL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnNPHp%2FbtrX6puc0hg%2FA6e6P1stL72gOXyKkEBSL1%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;499&quot; height=&quot;329&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;511&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjfbP2/btrYcgQRxGG/brZ3Cw7fOxB63M8azdyDZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjfbP2/btrYcgQRxGG/brZ3Cw7fOxB63M8azdyDZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjfbP2/btrYcgQRxGG/brZ3Cw7fOxB63M8azdyDZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjfbP2%2FbtrYcgQRxGG%2FbrZ3Cw7fOxB63M8azdyDZk%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;481&quot; height=&quot;778&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;778&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>논문</category>
      <category>chagpt</category>
      <category>GPT</category>
      <category>GPT 논문</category>
      <category>GPT1</category>
      <category>gpt2</category>
      <category>language model</category>
      <category>zero shot</category>
      <category>논문</category>
      <category>언어 모델</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/70</guid>
      <comments>https://hm3346.tistory.com/70#entry70comment</comments>
      <pubDate>Sun, 5 Feb 2023 13:00:18 +0900</pubDate>
    </item>
    <item>
      <title>GPT-1 논문 리뷰 : Improving Language Understanding by Generative Pre-Training</title>
      <link>https://hm3346.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;paper :&lt;/b&gt; &lt;/span&gt;&lt;i&gt;&amp;lsquo;Improving Language Understanding by Generative Pre-Training&amp;rsquo;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;authors :&lt;/b&gt; &lt;/span&gt;&lt;i&gt;Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever&lt;/i&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;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Abstract&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Natural language understanding은 두 문장 간의 유사성 판단, 두 문장 간의 의미가 동일한지 판단, Question Answer, 문서 분류 등 다방면으로 구성된다. 그러나&amp;nbsp;unlabeled text data는 엄청나게 많은 반면, labeled text data는 적기 때문에 모델 훈련에 어려움이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 본 논문에서는&amp;nbsp;unlabeled 텍스트를 사용한 generative pre-training language model을 제안한다. 이는&amp;nbsp;discriminative fine-tuning을 사용하여 각 specific task에 사용될 수 있다. 이를 통해 완성한 모델은 기존의 specific task 만을 위해 만들어진 모델들보다 뛰어난 성능을 보였으며, 12개의 작업 중 9개의 작업에서 그 성능이 우수했다는 결과가 이를 증명한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;적은 labeled 텍스트와&amp;nbsp;많은 unlabeled 텍스트로 인한 어려움을 해결하기 위해 등장&lt;/li&gt;
&lt;li&gt;다양한 unlabeled 텍스트로 language model을 generative하게 pre-training하고, 각 작업에 맞게 fine-tuning시킨다.&lt;/li&gt;
&lt;li&gt;실제로 많은 작업에서 기존 작업에 특화된 모델보다 더 좋은 성능을 보였다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unlabeled data의 정보를 효과적으로 학습하는 것은 NLP에서 중요한 문제인데, 왜냐하면 지금까지 supervised learning에 의존해오던 방식을 완화해줄 수 있기 때문이다. 많은 딥러닝 연구에서 labeled된 데이터를 사용하여 학습하는데, 실제 도메인에서는 labeled 된 데이터가 적기 때문에 실용성이 떨어진다. 이런 상황에서, unlabeled data에서 언어적 정보를 이용할 수 있는 모델은 많은 시간과 비용을 들이는 annotation 작업을 대체할 수 있고, 만약 supervised learning이 가능한 환경일지라도 unlabeled data에서 좋은 representation을 학습할 수 있다면, 상당한 성능의 이점을 가져 올 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나&amp;nbsp;unlabeled text에서 단어 수준 이상의 정보를 이용하는 것은 두 가지 이유에서 어렵다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째, transfer에 유용한 text representation을 배우는 것에 있어, 어떤 최적화 방식(Optimization Objective)이 가장 좋은지 불분명하다. 최근 language modeling, machine translation, discourse coherence와 같은 다양한 objectives가 연구되었는데, 각 method는 항상 어느 것이 우위에 있지 않고 작업마다 우위를 가지는 objective가 모두 달랐다.&lt;/li&gt;
&lt;li&gt;두 번째는 이렇게&amp;nbsp;학습된 representation을 target task로 transfer시키는 가장 효과적인 방법에 대한 합의가 없다. 현재까지는 intricate learning schemes와 auxiliary learning objectives를 추가하여, 모델 아키텍처에 대한 task별 변경을 하는 정도가 있다. 이러한 불분명성은 NLP에서 semi-supervised learning을 힘들게 만든다.&lt;/li&gt;
&lt;li&gt;( 본 논문은 NLP가 huge unlabeled data를 pre-training 하고, small labeled data를 fine-tuning 하는 방식으로 나아가야 한다고 말하기 때문에, semi-supervised learning 이라고 하는 것 같음 )&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는&amp;nbsp;unsupervised pre-training &amp;rarr; supervised fine-tuning을 조합한 NLP semi-supervised learning을 제안한다. 최종 목표는&amp;nbsp;다양한 작업에 사용될 수 있으면서도 약간의 변화(adaptation)만으로도 충분히 잘 transfer할 수 있는 보편적인 표현들을 학습하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해서는 대량의 unlabeled text corpus와 목표 작업을 위한 labeled data가 필요하다. 중요한 것은 unlabeled data와 labeled data가 꼭 같은 도메인에 속할 필요가 없다는 것이다. 이를 위해 두 가지 과정을 만들었는데, 첫 번째는&amp;nbsp;unlabeled data에 language modeling objective를 사용하여 초기 파라미터들을 학습 하는 것. 두 번째는&amp;nbsp;labeled 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;모델 구조로는&amp;nbsp;Transformer를 사용했는데, 이는 최근 기계 번역, 문서 생성, 구분 분석에 큰 효과를 보여주었다. 또한 이는 NLP 데이터의 고질적인 문제인&amp;nbsp;long-term dependency에 대해서도 기존 RNN or LSTM과 같은 모델들보다 훨씬 robust하게 작동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;transfer 할 때는 structured text input을 single contiguous sequence of tokens로 처리하는 traversal-style approaches에서 파생된 task-specific input adaptations을 사용한다. ( 아래 &lt;b&gt;Frame work&lt;/b&gt; section의 &lt;b&gt;Task-specific input transformations&lt;/b&gt;에서 설명됨 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 adaptations는 pre-trained model 아키텍처에 대한 최소한의 변경으로 효과적으로 fine-tuning할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서 제시한 모델은 4가지 task에서 검증한다. - 자연어 추론, QA, 두 문장 간의 의미적 동일성, 텍스트 분류. 그리고 총 12개의 task 중 9개 작업에서 task에 특화된 기존 모델들보다 높은 성능을 보였다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;unlabeled data에서 학습하는 것은 실용적인 측면과 성능 측면에서 모두 중요하다.&lt;/li&gt;
&lt;li&gt;그러나 이는 유용한 text 표현을 배우기 위한 최고의 Optimization Objective와 목표 작업으로 transfer시키는 최고의 효과적인 방법이 불분명하기 때문에 어렵다.&lt;/li&gt;
&lt;li&gt;본 논문에서는 Unsupervised pre-training과 Supervised fine-tuning을 사용하는데, 이는 unlabeled data로 language model을 만들고, 이를 각 task에 맞는 labeled data를 사용하여 fine-tuning한다.&lt;/li&gt;
&lt;li&gt;모델 구조로는 Transformer를 사용하며, language model 에서 fine-tuning으로 넘어가는 시점에서 language model의 출력을 원하는 작업에 맞는 input으로 변형하여 넘겨준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Related work&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;&lt;b&gt;Semi-supervised learning for NLP&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NLP에 대한 semi-supervised learning은 sequence labeling이나 텍스트 분류에 대한 적용으로 많은 관심을 받았는데, 초기 연구에서는 unlabeled data를 사용해서 단어 수준(word-level)이나 문맥 수준(phrase-level)을 계산하고 이를 feature로 사용하여 supervised learning에 적용 시켰다. 지난 몇 년 연구들에서는 unlabeled corpus로 훈련된 word-embedding을 사용하여 다양한 task에 성능 발전을 가져다 주었다. 그러나 이런 접근 방식들은 주로 단어 수준의 정보를 transfer한다는 점에서 한계가 있으며, 본 논문은 이보다&amp;nbsp;더 높은 수준의 정보를 transfer 하고자 한다. 최근 연구들에서는 unlabeled data에서 단어 수준의 의미를 넘어서 더 고차원적인 문맥 수준(phrase-level)이나 문장 수준 sentence-level)의 embedding을 시도하기 시작했다.&lt;/p&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;&lt;u&gt;&lt;b&gt;Unsupervised pre-training&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unsupervised pre-training은 supervised learning objective를 조절하는 것이 목표가 아닌, 좋은 initialization point를 찾는 것이 목표라는 점에서 semi-supervised learning의 특별한 유형이라 할 수 있다. 초기 연구는 이를 이미지 분류와 회귀 문제에 사용했다. 그 다음의 연구들에서는 pre-training이 우수한 regularization 효과로 작용한다는 것을 보여주었으며, 이는 딥러닝의 고질적인 문제인 일반화를 높여주었다. 최근 연구에서는 이 pre-training이 이미지 분류, 음성 인식, 다의어 판별, 기계 번역에서 사용되는 딥러닝의 학습을 도와주는 용도로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문과 비슷한 연구로는 언어 모델 objective를 사용하여 pre-training을 하고, 이를 target task를 위해 fine-tuning하는 연구가 있었다. 그러나 이 연구에서는 pre-training 할 때 언어적 정보를 얻기 위해 LSTM을 사용했는데, LSTM에 long-dependency problem을 다소 해결했다고 할지라도 완전히 잘 해결한 것 인지 불분명하다. 이 때문에 짧은 범위의 데이터에서만 모델이 유효했다. 그러나 본 논문에서는&amp;nbsp;transformer를 사용하여 long-dependency problem에 대한 강점을 가져갔다. 또한 더 큰 범위의 작업에서도 유용한데, 이는 자연어 추론, paraphrase 감지, 그리고 story completion를 포함한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 다른 연구들에서는 target task를 위한 supervised learning을 진행할 때 pre-trained language model이나 기계 번역 모델에서 가져온&amp;nbsp;hidden representation을 auxiliary feature로써 활용하는데,&amp;nbsp; 이는 각 작업을 위한 상당한 양의 새로운 파라미터를 요구한다. 이에 비해&amp;nbsp;본 논문의 모델은 transfer 시 모델 구조에 대해 최소한의 변화만 요구한다.&lt;/p&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;&lt;u&gt;&lt;b&gt;Auxiliary training objectives&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;auxiliary unsupervised training objectives를 추가하는 것은 semi-supervised learning의 대안에 가깝다. 초기 연구에서는 semantic role labeling을 개선하기 위해&amp;nbsp;POS tagging, chunking, named entity recognition, and language modeling과 같은 auxiliary NLP tasks를 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에는 target task objective에 auxiliary language modeling objective를 추가하고 sequence labeling tasks의 성능 향상을 입증했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문도 auxiliary objective를 사용하지만, unsupervised pre-training 자체가 이미 target task와 관련된 몇 가지 언어적 측면을 학습한다.&lt;/p&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;&lt;u&gt;&lt;b&gt;summary&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단어 수준보다 더 고차원적인 정보를 transfer하고자 한다. (문맥, 문장 등)&lt;/li&gt;
&lt;li&gt;unsupervised learning의 목표는 good initialized point를 찾는 것이라고 볼 수 있다.&lt;/li&gt;
&lt;li&gt;transformer 구조를 사용함으로써, long-dependency problem에서 장점을 가져간다.&lt;/li&gt;
&lt;li&gt;transfer시 복잡한 모델 변형이 필요 없고 아주 약간의 변화만 요구한다.&lt;/li&gt;
&lt;li&gt;auxiliary training objectives를 사용하지만, unsupervised pre-training 자체가 이미지 target task와 관련된 언어적 정보를 학습하는 것이다.&lt;/li&gt;
&lt;/ol&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;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Frame work&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 지속적으로 언급 한 것처럼, 본 논문의 학습은 two stage로 진행하는 것이 목표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;huge unlabeled corpus로 대용량 언어 모델을 학습 &amp;rarr; labeled data로 target task에 fine-tune.&lt;/p&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;&lt;u&gt;&lt;b&gt;Unsupervised pre-training&lt;/b&gt;&lt;/u&gt;&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;615&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H8gWL/btrYcgDjTc9/yPSefVsce7j9ksZwm6Elik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H8gWL/btrYcgDjTc9/yPSefVsce7j9ksZwm6Elik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H8gWL/btrYcgDjTc9/yPSefVsce7j9ksZwm6Elik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH8gWL%2FbtrYcgDjTc9%2FyPSefVsce7j9ksZwm6Elik%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;615&quot; height=&quot;245&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBQLIH/btrX9FwBMsn/7LQii8QKXGKXMLhKTI4BVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBQLIH/btrX9FwBMsn/7LQii8QKXGKXMLhKTI4BVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBQLIH/btrX9FwBMsn/7LQii8QKXGKXMLhKTI4BVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBQLIH%2FbtrX9FwBMsn%2F7LQii8QKXGKXMLhKTI4BVK%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;616&quot; height=&quot;570&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cc3KXv/btrX40IcaLF/6wkU6Rk9OukpDYnQ1gbFPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cc3KXv/btrX40IcaLF/6wkU6Rk9OukpDYnQ1gbFPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cc3KXv/btrX40IcaLF/6wkU6Rk9OukpDYnQ1gbFPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcc3KXv%2FbtrX40IcaLF%2F6wkU6Rk9OukpDYnQ1gbFPk%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;611&quot; height=&quot;206&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tpUys/btrX3qHqbNK/tojQV84gYCxA6mGg0UK2F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tpUys/btrX3qHqbNK/tojQV84gYCxA6mGg0UK2F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tpUys/btrX3qHqbNK/tojQV84gYCxA6mGg0UK2F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtpUys%2FbtrX3qHqbNK%2FtojQV84gYCxA6mGg0UK2F0%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;720&quot; height=&quot;195&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCLVUY/btrX6nJT8hy/nuoQPzG4IMANYGy1wnnufk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCLVUY/btrX6nJT8hy/nuoQPzG4IMANYGy1wnnufk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCLVUY/btrX6nJT8hy/nuoQPzG4IMANYGy1wnnufk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCLVUY%2FbtrX6nJT8hy%2FnuoQPzG4IMANYGy1wnnufk%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;342&quot; height=&quot;538&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt4rep/btrX40VJriZ/avVrqhc2DbPLoRiyrrMNS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt4rep/btrX40VJriZ/avVrqhc2DbPLoRiyrrMNS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt4rep/btrX40VJriZ/avVrqhc2DbPLoRiyrrMNS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt4rep%2FbtrX40VJriZ%2FavVrqhc2DbPLoRiyrrMNS1%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;371&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;371&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;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;&lt;b&gt;Supervised fine-tuning&lt;/b&gt;&lt;/u&gt;&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;731&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I30Kl/btrX16CUUvT/fWPHcX6ULPgsKDSp14mUz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I30Kl/btrX16CUUvT/fWPHcX6ULPgsKDSp14mUz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I30Kl/btrX16CUUvT/fWPHcX6ULPgsKDSp14mUz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI30Kl%2FbtrX16CUUvT%2FfWPHcX6ULPgsKDSp14mUz1%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;748&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;748&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;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;&lt;b&gt;Task-specific input transformations&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 분류와 같은 일부 task는 위 설명대로 모델을 직접 fine-tuning할 수 있다. 그러나 Q-A(Question and Answering) 혹은 textual entailment 같은 특정 다른 task에는 순서가 지정된 문장 쌍, 문서 혹은 질문과 답변처럼 구조화된 inputs가 존재한다. pre-trained model은 연속된 text sequence에 대해 학습되었기 때문에, 이를 특정 task에 적용하기 위해 몇 가지 수정이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 연구는 transferred representations 위에 task별 아키텍처를 제안했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 접근 방식은 상당한 양의 task별 customization 도입이 필요하며, 이 추가된 아키텍처 구성 요소에 대해 transfer learning 하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신, 본 연구는 구조화된 입력을 사전 훈련된 모델이 처리할 수 있는 순서로 변환하는 traversal-style approach를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 input transformations는 작업 전반에 걸친 아키텍처를 광범위하게 변경하는 것을 피할 수 있다. 모든 transformation에는 시작 및 종료 토큰(&amp;lt;s&amp;gt;&amp;amp; &amp;lt;e&amp;gt;)를 추가하는 작업이 포함 된다 (아래 그림 참조).&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W8cmL/btrX3Zv1qkO/fuyndxGpRCRbTkRnewcZF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W8cmL/btrX3Zv1qkO/fuyndxGpRCRbTkRnewcZF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W8cmL/btrX3Zv1qkO/fuyndxGpRCRbTkRnewcZF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW8cmL%2FbtrX3Zv1qkO%2FfuyndxGpRCRbTkRnewcZF1%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;729&quot; height=&quot;429&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;429&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: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;Textual entailment&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;entailment tasks은 Premise &lt;b&gt;P&lt;/b&gt;와 Hypothesis &lt;b&gt;&lt;span&gt;H&lt;/span&gt;&lt;/b&gt; token sequence를 Delim 토큰($)을 사이에 두고 연결한다.&lt;/p&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;&lt;i&gt;&lt;b&gt;Similarity&lt;/b&gt;&lt;/i&gt;&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;726&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhDEmg/btrX40Vu2OP/ikK15YFwIKT0SFCdkyTdTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhDEmg/btrX40Vu2OP/ikK15YFwIKT0SFCdkyTdTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhDEmg/btrX40Vu2OP/ikK15YFwIKT0SFCdkyTdTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhDEmg%2FbtrX40Vu2OP%2FikK15YFwIKT0SFCdkyTdTK%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;719&quot; height=&quot;109&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;110&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;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;Question Answering and Commonsense Reasoning&lt;/b&gt;&lt;/i&gt;&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;714&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlxb08/btrX7ZV9RVI/TAaTJ408zgI2sNcMJyrdHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlxb08/btrX7ZV9RVI/TAaTJ408zgI2sNcMJyrdHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlxb08/btrX7ZV9RVI/TAaTJ408zgI2sNcMJyrdHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdlxb08%2FbtrX7ZV9RVI%2FTAaTJ408zgI2sNcMJyrdHK%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;714&quot; height=&quot;91&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;91&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;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Experments&lt;/b&gt;&lt;/span&gt;&lt;/h1&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;u&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;Natural&amp;nbsp;Language inference&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 쌍의 문장을 읽고 두 문장이 수반인지, 모순인지, 중립인지 판단하는 task.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZmXqx/btrX2nqRRcp/VmZ3J336xJUa1rIUKyJCok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZmXqx/btrX2nqRRcp/VmZ3J336xJUa1rIUKyJCok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZmXqx/btrX2nqRRcp/VmZ3J336xJUa1rIUKyJCok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZmXqx%2FbtrX2nqRRcp%2FVmZ3J336xJUa1rIUKyJCok%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;820&quot; height=&quot;333&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;333&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;u&gt;Question answering and commonsense reasoning\&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Question-Answering QA task.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccuYRp/btrX7YpowS5/euKxIxErB8hpAmxBC8S3O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccuYRp/btrX7YpowS5/euKxIxErB8hpAmxBC8S3O1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccuYRp/btrX7YpowS5/euKxIxErB8hpAmxBC8S3O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccuYRp%2FbtrX7YpowS5%2FeuKxIxErB8hpAmxBC8S3O1%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;804&quot; height=&quot;293&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;293&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: #000000;&quot;&gt;&lt;u&gt;&lt;b&gt;Classification&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 분류 task.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JKLnt/btrX6ou3gop/ZHQ62Ez0dKdTaH33MKU4Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JKLnt/btrX6ou3gop/ZHQ62Ez0dKdTaH33MKU4Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JKLnt/btrX6ou3gop/ZHQ62Ez0dKdTaH33MKU4Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJKLnt%2FbtrX6ou3gop%2FZHQ62Ez0dKdTaH33MKU4Tk%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;804&quot; height=&quot;364&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;364&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;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Ablation studies&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EBhJX/btrX1630NT5/N66CEb4KUjqn44NtcT5ihK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EBhJX/btrX1630NT5/N66CEb4KUjqn44NtcT5ihK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EBhJX/btrX1630NT5/N66CEb4KUjqn44NtcT5ihK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEBhJX%2FbtrX1630NT5%2FN66CEb4KUjqn44NtcT5ihK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;795&quot; height=&quot;230&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;h1&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Note : my Key-point&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ze1O7/btrYcgXCuFo/7cWb6b7CdzBpaV3UP35Zw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ze1O7/btrYcgXCuFo/7cWb6b7CdzBpaV3UP35Zw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ze1O7/btrYcgXCuFo/7cWb6b7CdzBpaV3UP35Zw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fze1O7%2FbtrYcgXCuFo%2F7cWb6b7CdzBpaV3UP35Zw0%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;499&quot; height=&quot;329&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;511&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lkkJm/btrYcha962y/KN0cKIDekRJelVvHud8tNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lkkJm/btrYcha962y/KN0cKIDekRJelVvHud8tNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lkkJm/btrYcha962y/KN0cKIDekRJelVvHud8tNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlkkJm%2FbtrYcha962y%2FKN0cKIDekRJelVvHud8tNk%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;481&quot; height=&quot;778&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;778&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>논문</category>
      <category>ChatGPT</category>
      <category>Deep Learning</category>
      <category>GPT</category>
      <category>GPT 1</category>
      <category>text analysis</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/69</guid>
      <comments>https://hm3346.tistory.com/69#entry69comment</comments>
      <pubDate>Sat, 4 Feb 2023 20:00:17 +0900</pubDate>
    </item>
    <item>
      <title>PS-MT 논문 리뷰 : Perturbed and Strict Mean Teachers for Semi-supervised Semantic Segmentation (semi-supervised semantic segmentation)</title>
      <link>https://hm3346.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PS-MT 논문 리뷰&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;paper : &amp;lsquo;Perturbed and Strict Mean Teachers for Semi-supervised Semantic Segmentation&amp;rsquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CVPR 2022, Yuyuan Liu, Yu Tian, Yuanhong Chen, Fengbei Liu, Vasileios Belagiannis, Gustavo Carneiro&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Abstract&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input image, feature, or network perturbation을 사용한 consistency learning은 semi-supervised semantic segmentation에서 주목할 만한 결과를 보여주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, 이 접근 방식은 unlabeled training images의 부정확한 예측으로 인해 심각한 영향을 받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 예측에는 두 가지 결과가 있다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;ldquo;strict&amp;rdquo; cross-entropy (CE) loss에 기반한 훈련은 쉽게 예측 실수를 과적합시켜 confirmation bias 확증 편향을 초래할 수 있다.&lt;/li&gt;
&lt;li&gt;이러한 부정확한 예측에 적용된 perturbation은 잠재적으로 잘못된 예측을 훈련 신호로 사용하여 성능 저하를 가져올 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 본 논문에서는 mean-teacher (MT) model의 새로운 확장과 MSE보다 더 엄격한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;confidence weighted cross-entropy (Conf-CE) loss로 대체하여 consistency learning 방법의 예측 정확도 문제를 다룬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모델에 의한 정확한 예측은 input image, feature, or network perturbation의 도전적인 조합을 사용하여 features perturbation이 새로운 adversarial perturbation으로 구성되는 consistency learning 일반화를 개선할 수 있도록 한다.&lt;/p&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;h1&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 mean teacher (MT) model을 새로운 auxiliary teacher로 확장하여, consistency learning 방법의 예측 정확도 문제를 해결하고, MT의 평균 제곱 오차(MSE) 손실을 훈련 수렴이 더 나은 더 엄격한 confidence weighted cross-entropy CE loss(Conf-CE)로 대체한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 정확한 예측은 input image, feature, network perturbation을 결합하여 consistency learning의 일반화를 개선하여 더 도전적인 perturbation을 사용할 수 있게 한다. 또한, image features에 다른 유형의 noise를 주입하는 대신 Teacher(T-VAT)의 virtual adversarial training을 사용하여 Student model에 적용할 perturbation을 학습하는 새로운 유형의 적대적 adversarial feature perturbation을 제안한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하면, 기여하는 점은 다음과 같다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 auxiliary teacher와 MT의 MSE 손실을 더 엄격한 Conf-CE loss로 대체하여, unlabeled training images의 segmentation accuracy를 향상 시키기 위해 디자인 된 새로운 consistency learning에 기반한 semi-supervised semantic segmentation MT model은 더욱 강력한 수렴과 전반적으로 더 나은 훈련 정확도를 가능하게 한다.&lt;/li&gt;
&lt;li&gt;모델 일반화를 개선하기 위한 input image, feature, network perturbation의 새롭고 도전적인 조합.&lt;/li&gt;
&lt;li&gt;T-VAT라는 새로운 유형의 features perturbation은 학생 모델에 적용할 adversarial noise이며, 이는 our MT model의 두 teachers로부터 학습하게 된다. 그 결과 학생의 효과적인 training을 촉진하기 위해 도전적인 noise를 생성한다.&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;h1&gt;&lt;b&gt;Related Work&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재의 대부분 모델은 다음을 탐색하는 것을 기반으로 한다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지의 다중 스케일 측면&lt;/li&gt;
&lt;li&gt;pyramidal feature maps&lt;/li&gt;
&lt;li&gt;dilated convolutions&lt;/li&gt;
&lt;li&gt;attention mechanisms&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 SOTA semi-supervised semantic segmentation models는 DeeplabV3+ 및 PSPNet 구조를 기반으로 한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;Semi-supervised learning&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Semi-supervised learning (SSL) 솔루션은 아래 3가지 가정을 기반으로 구성되어 있다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;smoothness 가정 : 유사한 이미지는 유사한 레이블을 갖는다.&lt;/li&gt;
&lt;li&gt;low-density 가정 : decision boundary는 feature space의 high-density areas를 통과하지 않는다.&lt;/li&gt;
&lt;li&gt;manifold 가정 : feature space에 임베딩된 동일한 low-dimensional manifold의 samples는 동일한 labels를 갖는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, SSL 방법은 pseudo-labels 기반 SSL과 consistency 기반 SSL로 분류될 수 있으며, 전자는 일반적으로 후자보다 더 나쁜 정확도를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 pseudo-labeling 방법이 훈련 중 unlabeled training set의 일부를 무시하여 일반화 능력을 감소시킬 수 있기 때문이라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, public benchmarks에서 우수한 정확도를 고려하여 consistency 기반 SSL에 중점을 둔다.&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;u&gt;Consistency-based SSL methods&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Consistency 기반 SSL 방법은 input images, feature representation, network에 적용 가능한 perturbation이 perturbation된 unlabeled images의 예측 간에 일치를 적용하는 것을 목표로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Consistency 기반 SSL의 효과는 unlabeled images에 대한 예측 정확도와 모델 훈련에 도전하기 위한 perturbation에 따라 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로, 더 도전적인 perturbation은 개선된 일반화를 목표로 하지만, 이 perturbation이 부정확한 예측에 적용되면 일관성 기반 방법이 잘못된 레이블에서 학습 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측 정확도는 여러 면에서 개선될 수 있지만, 단순한 방법은 모델 앙상블 전략이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;perturbation은 input images, feature representation, network에 적용될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용 방법과 무관하게, perturbation은 virtual adversarial training (VAT)과 같이 perturbed feature를 실제 classification boundaries (그러나 숨겨진)에 더 가깝게 이동함으로써 분류 프로세스에 도전할 때 더 효과적인 경향이 있다.&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;u&gt;Consistency-based semi-supervised semantic segmentation methods&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Consistency-based semi-supervised semantic segmentation은 pseudo-labeling 접근 방법보다 더 경쟁력 있는 결과를 보여주었다. SOTA consistency-based semi-supervised semantic segmentation 방법 중에서 PseudoSeg는 새로운 pseudo labeling 전략과 data augmentation consistency training에 의존하여 pseudo-label을 보정하지만, 일반적으로 부정확한 클래스 class activation maps에 의존하면 훈련 성능이 저하될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cross-consistency training (CCT)는 다양한 유형의 feature perturbations를 적용한 semantic segmentation 결과와 non-perturbed feature의 segmentation 결과 사이의 합의를 강요한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CCT에 사용되는 feature perturbations이 효과적이긴 하지만, 더 표적화(targeted)되고 정확한 adversarial noise는 일관성 정규화에 더 도움이 될 수 있다. (VAT 관련 이야기 하는 듯)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 서로 다른 가중치로 초기화된 모델의 결과 사이에 일관성이 적용되는 Network perturbation 연구도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;perturbation models는 정확한 segmentation 결과를 생성하는 모델의 능력에 의존하며, 위에서 언급한 바와 같이 모델 앙상블을 사용하여 그러한 능력을 개선할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(French et al.)연구는 Network perturbation 및 input images perturbation과 함께 모델 앙상블을 탐구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 our proposals와 가장 가까운 방법 중 하나이지만, 우리는 multiple mean teachers로부터 앙상블하는 더 효과적인 모델, VAT를 사용한 새로운 adversarial feature perturbation과 CutMix, Zoom In/Out의 data augmentation을 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리의 연구에서 multiple mean teachers가 생성한 더 정확한 segmentation 결과는 다른 연구에서 사용된 MSE 대신 CE loss로 unlabeled images에 대해 훈련 시킬 수 있으므로, 더 나은 훈련 수렴과 정확도를 제공한다.&lt;/p&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;h1&gt;&lt;b&gt;Method&lt;/b&gt;&lt;/h1&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;722&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbtkTY/btrX2oWsrTs/bYsuE3tH5BOkmlq8KjAYkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbtkTY/btrX2oWsrTs/bYsuE3tH5BOkmlq8KjAYkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbtkTY/btrX2oWsrTs/bYsuE3tH5BOkmlq8KjAYkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbtkTY%2FbtrX2oWsrTs%2FbYsuE3tH5BOkmlq8KjAYkK%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;722&quot; height=&quot;326&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;326&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;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;&lt;u&gt;introduce dataset for semi-supervised semantic segmentation&lt;/u&gt; :&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;819&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wwsLz/btrX3upyBbH/cnx7A8YpiRVjWDaFPwjBVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wwsLz/btrX3upyBbH/cnx7A8YpiRVjWDaFPwjBVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wwsLz/btrX3upyBbH/cnx7A8YpiRVjWDaFPwjBVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwwsLz%2FbtrX3upyBbH%2Fcnx7A8YpiRVjWDaFPwjBVK%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;819&quot; height=&quot;270&quot; data-origin-width=&quot;819&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;이 datasets는 &lt;span data-token-index=&quot;1&quot;&gt;&amp;lsquo;Multiple Mean Teachers and Student Models&amp;rsquo;&lt;/span&gt;&lt;span data-token-index=&quot;2&quot;&gt; &lt;/span&gt;section에 설명되는 our proposed MT model with an auxiliary teacher 훈련하는 데 사용된다.&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;u&gt;Multiple Mean Teachers and Student Models&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 unlabeled images에 대한 segmentation의 정확도를 향상 시키는 것을 목표로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 달성하기 위해, 우리는 auxiliary teacher의 포함을 제안합니다. 또한, segmentation 정확도를 향상 시키기 위해 각 student model의 temporal ensemble을 나타내는 teacher model의 이중 앙상블 프로세스 아이디어를 탐구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Teacher와 Student model은 같은 네트워크 구조를 가진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkXrw2/btrX181TzRB/Mf3U6HeG7qM11lagrsh0eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkXrw2/btrX181TzRB/Mf3U6HeG7qM11lagrsh0eK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkXrw2/btrX181TzRB/Mf3U6HeG7qM11lagrsh0eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkXrw2%2FbtrX181TzRB%2FMf3U6HeG7qM11lagrsh0eK%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;780&quot; height=&quot;445&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;445&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;Training with Multiple Perturbations and a Strict Confidence-weighted CE Loss&lt;/span&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 section은 network, feature representation 및 input images에 대한 perturbation으로 optimized 되는 새로운 confidence-weighted CE loss을 사용한 our new MT model의 training process를 소개한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pAcjP/btrX40Ba25X/MSI65cvW4fhh396vbmAmik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pAcjP/btrX40Ba25X/MSI65cvW4fhh396vbmAmik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pAcjP/btrX40Ba25X/MSI65cvW4fhh396vbmAmik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpAcjP%2FbtrX40Ba25X%2FMSI65cvW4fhh396vbmAmik%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;786&quot; height=&quot;358&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A31Ej/btrX2pWAauu/PNVCmr3gLzNiJNSKqocBt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A31Ej/btrX2pWAauu/PNVCmr3gLzNiJNSKqocBt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A31Ej/btrX2pWAauu/PNVCmr3gLzNiJNSKqocBt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA31Ej%2FbtrX2pWAauu%2FPNVCmr3gLzNiJNSKqocBt0%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;791&quot; height=&quot;395&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;network perturbation&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EbNtb/btrX2XrWGAi/OvZofmkeuqmeLoZI2MDe4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EbNtb/btrX2XrWGAi/OvZofmkeuqmeLoZI2MDe4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EbNtb/btrX2XrWGAi/OvZofmkeuqmeLoZI2MDe4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEbNtb%2FbtrX2XrWGAi%2FOvZofmkeuqmeLoZI2MDe4k%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;791&quot; height=&quot;671&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;feature perturbation&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;feature perturbation은 모델 encoder로부터 계산된 image features를 feature space의 classification boundaries로 밀어냄으로써 cluster 가정 혹은 low-density 가정을 위반하도록 설계되는 도전적인 adversarial feature perturbation으로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 adversarial feature noise를 생성하는 한 가지 효과적인 방법은 정확한 분류와 적대적 분류 사이의 차이를 maximize 하기 위해 perturbation vector를 optimize 하는 virtual adversarial training (VAT)를 사용하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 methods들은 consistency loss가 적용될 same single network를 사용하여 adversarial noise를 추정한다. 그러나, semi-supervised semantic segmentation에서 MT의 훈련을 교란하기 위해 VAT를 사용하는 것이 본 논문의 새로운 점이다. MT 모델에서, feature perturbation은 student model에 적용될 수 있지만, teacher model보다 예측의 정확성이 낮다는 점을 고려할 때, 이 접근법은 효과적인 훈련에 도움이 되지 않을 수 있다. 따라서, 더욱 정확한 teachers를 사용하여 adversarial noise를 추정하고 추정된 noise를 student model의 features에 적용할 것을 제안한다. 본 논문은 이 것을 T-VAT라 칭한다.&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;788&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zuWoU/btrX6nCUpk8/I197YtCbOvkBaU8U5pQdy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zuWoU/btrX6nCUpk8/I197YtCbOvkBaU8U5pQdy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zuWoU/btrX6nCUpk8/I197YtCbOvkBaU8U5pQdy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzuWoU%2FbtrX6nCUpk8%2FI197YtCbOvkBaU8U5pQdy1%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;788&quot; height=&quot;289&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;input image perturbation&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input image perturbation은 약-강(weak-strong) augmentation pair를 기반으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Teacher models에서 처리할 이미지에 weak-augmentation (flip, crop, scaling)이 적용되고, 이 weak augmentation에 추가적으로 strong augmentation (color jitter, randomize gray scale, blur)이 전체 일반화 능력을 향상 시키기 위해 student model에 적용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 strong augmentation 마지막에, Cut-Mix 와 Zoom In/Out augmentation을 student model의 이미지에 적용한다. 즉, 2개의 이미지를 Cut-Mix로 조합하고, 위 수식 $\hat{y}$의 예측으로 $l_{con}$ 를 minimize하거나, (이 방법 : Cut-Mix before prediction = Teacher(Cut-Mix image) vs Student(Cut-Mix image) )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는, 이미지의 Cut-Mix 조합과 그들의 예측을 사용하여 consistency loss($l_{con}$)를 최소화 할 수 있다 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이 방법 : Cut-Mix after prediction = Teacher(prediction Cut-Mix) vs Student(Cut-Mix image) )&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWQGZp/btrX2Wfulkz/kTjZEZMmKOlK9mkFwLgpWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWQGZp/btrX2Wfulkz/kTjZEZMmKOlK9mkFwLgpWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWQGZp/btrX2Wfulkz/kTjZEZMmKOlK9mkFwLgpWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWQGZp%2FbtrX2Wfulkz%2FkTjZEZMmKOlK9mkFwLgpWk%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;797&quot; height=&quot;444&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHYcCW/btrX9Fwls3M/KDNC5QED9ebxyVoYlnbKbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHYcCW/btrX9Fwls3M/KDNC5QED9ebxyVoYlnbKbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHYcCW/btrX9Fwls3M/KDNC5QED9ebxyVoYlnbKbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHYcCW%2FbtrX9Fwls3M%2FKDNC5QED9ebxyVoYlnbKbk%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;804&quot; height=&quot;291&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Results&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;609&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqidUx/btrXZQGXCPm/5KNH5XIWAwkAfb747HXzok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqidUx/btrXZQGXCPm/5KNH5XIWAwkAfb747HXzok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqidUx/btrXZQGXCPm/5KNH5XIWAwkAfb747HXzok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqidUx%2FbtrXZQGXCPm%2F5KNH5XIWAwkAfb747HXzok%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;790&quot; height=&quot;609&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;609&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>논문</category>
      <category>Deep Learning</category>
      <category>segmentation</category>
      <category>semi supervised learning</category>
      <category>semi supervised semantic segmentation</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/68</guid>
      <comments>https://hm3346.tistory.com/68#entry68comment</comments>
      <pubDate>Fri, 3 Feb 2023 17:21:22 +0900</pubDate>
    </item>
    <item>
      <title>jupyter notebook에서 tensorboard 실시간으로 확인하기</title>
      <link>https://hm3346.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;필자는 서버 굉장히 많이(&lt;u&gt;아니 대부분)&lt;span&gt; &lt;/span&gt;&lt;/u&gt;사용하는데,&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tensorboard로 scalar, image, audio, weight 등 다양한 값을 저장하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버에 연결하여 코딩도 하지만 juyter notebook으로 다양한 작업을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우에 tensorboard를 원격으로 접속가능하게끔 띄워도 되지만 뭔가 굉장히 귀찮다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 또 안하려니 매번 tensorboard file을 로컬에 다운받아서 tensorboard를 로컬에 띄워야 한다. (매우 귀찮다..)&lt;/p&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;u&gt;그래서 jupyter notebook에서 tensorboard를 실시간으로 띄워보고자 한다.&lt;/u&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: #006dd7;&quot;&gt;&lt;b&gt;먼저 port를 뚫어준다. (아래 예시는 6006~6020 port open)&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;b&gt;1) ubuntu server&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo ufw allow 6006:6020/tcp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) Docker로 Jupyter Notebook 서버를 사용 한다면, Docker 에서 외부 -&amp;gt; 내부 컨테이너 포워딩 설정.&lt;/p&gt;
&lt;pre id=&quot;code_1672677644475&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run --runtime=nvidia --rm -itd -p 8888:8888 -p 6006-6020:6006-6020 -v (local volumne):(도커컨테이너에 연결할 volumne) jupyter notebook&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 style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Jupyter example&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-origin-width=&quot;929&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/twubh/btrVeWodh1t/AbLuAlQZULybkDooOvxPmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/twubh/btrVeWodh1t/AbLuAlQZULybkDooOvxPmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/twubh/btrVeWodh1t/AbLuAlQZULybkDooOvxPmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftwubh%2FbtrVeWodh1t%2FAbLuAlQZULybkDooOvxPmk%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;929&quot; height=&quot;380&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/egvZXt/btrU43PU9ov/RSFa0XziLDTVKoXoaNA4g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/egvZXt/btrU43PU9ov/RSFa0XziLDTVKoXoaNA4g0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/egvZXt/btrU43PU9ov/RSFa0XziLDTVKoXoaNA4g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FegvZXt%2FbtrU43PU9ov%2FRSFa0XziLDTVKoXoaNA4g0%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;920&quot; height=&quot;718&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>computing</category>
      <category>jupyter notebook</category>
      <category>Python</category>
      <category>tensorboard</category>
      <author>공유지식</author>
      <guid isPermaLink="true">https://hm3346.tistory.com/67</guid>
      <comments>https://hm3346.tistory.com/67#entry67comment</comments>
      <pubDate>Tue, 3 Jan 2023 01:45:40 +0900</pubDate>
    </item>
  </channel>
</rss>