<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>말랑코딩</title>
    <link>https://mallang-coding.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 05:43:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>코랑이</managingEditor>
    <image>
      <title>말랑코딩</title>
      <url>https://tistory1.daumcdn.net/tistory/3180812/attach/598e549fe7004056a02ba8b8494c9c11</url>
      <link>https://mallang-coding.tistory.com</link>
    </image>
    <item>
      <title>[논문 리뷰] Stitch it in Time: GAN-Based Facial Editing of Real Videos</title>
      <link>https://mallang-coding.tistory.com/49</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래 비디오는 유튜브에서 남주혁 인터뷰 동영상을 5초정도로 잘라서 테스트 용도로 써본 것임.&lt;br /&gt;-&amp;gt; &lt;a href=&quot;https://youtu.be/MFlEVS4diEQ&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;동영상 출처&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jh_old.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqDWey/btrzInUT9U6/8fPZ6QfFQl97FMVOHW6aOk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqDWey/btrzInUT9U6/8fPZ6QfFQl97FMVOHW6aOk/img.gif&quot; data-alt=&quot;남주혁 Old&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqDWey/btrzInUT9U6/8fPZ6QfFQl97FMVOHW6aOk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bqDWey/btrzInUT9U6/8fPZ6QfFQl97FMVOHW6aOk/img.gif&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;600&quot; height=&quot;307&quot; data-filename=&quot;jh_old.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;남주혁 Old&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jh_female.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWzHL4/btrzyt3ebdm/M9HST1WTqwU0GnsoEVZ6v1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWzHL4/btrzyt3ebdm/M9HST1WTqwU0GnsoEVZ6v1/img.gif&quot; data-alt=&quot;남주혁 female&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWzHL4/btrzyt3ebdm/M9HST1WTqwU0GnsoEVZ6v1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bWzHL4/btrzyt3ebdm/M9HST1WTqwU0GnsoEVZ6v1/img.gif&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;600&quot; height=&quot;307&quot; data-filename=&quot;jh_female.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;남주혁 female&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ezgif.com-gif-maker.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tbZuU/btrzJ2Xb0Ss/fP9osZzKEwqrKeqnTLsod0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tbZuU/btrzJ2Xb0Ss/fP9osZzKEwqrKeqnTLsod0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tbZuU/btrzJ2Xb0Ss/fP9osZzKEwqrKeqnTLsod0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/tbZuU/btrzJ2Xb0Ss/fP9osZzKEwqrKeqnTLsod0/img.gif&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;600&quot; height=&quot;200&quot; data-filename=&quot;ezgif.com-gif-maker.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가기 전에&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지난 1년동안 GAN 기반의 이미지 editing 분야는 엄청난 발전을 이뤘고, 특히 styleGAN2를 이용한 고도로 분리된 스타일과, 의미있는 잠재공간을 활용한 이미지 editing 이 이루어졌다.&lt;/li&gt;
&lt;li&gt;그러나 비디오 editing 분야에서는 시간적 일관성(temporally consistency, 여기서는 시간적 일관성이라고 번역하겠음) 을 유지해야하는 제약으로 인해 쉽지 않았다.&lt;/li&gt;
&lt;li&gt;최근에 제안된 styleGAN-V 는 높은 프레임 속도로 일관된 비디오 생성 가능하지만, 고해상도 합성에는 어려움이 있었다.&lt;/li&gt;
&lt;li&gt;본 논문에서 저자는 원본비디오가 항상 존재하기 때문에 생성할 필요 없이 &quot;시간적 일관성&quot;만 유지하면 된다고 말했고, 다음 두가지 인사이트를 제시했다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;생성자는 일반적으로 low frequency function 을 학습하는 경향이 있는데, 약간 다른 latent code로 edited frame 의 일관성을 유지하기 위한 이점으로 사용된다.&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;-&amp;gt; low frequency function 을 학습하는게 일반적으로 단점으로 여겨진다고 하는데 왜인지 공부 필요&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미세 조정된 생성기는 잠재공간을 손상시키지 않고 미세조정 가능하므로, 부드럽게 변경되는 latent code set 을 생성 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메인 아이디어&lt;/span&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Alignment(정렬)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부적으로 landmark detection을 통해 얼굴을 찾고 가우시안 필터를 적용&lt;/li&gt;
&lt;li&gt;얼굴 landmark detection 에 대한 민감도를 줄이고, 시간적 일관성을 높이기 위함.&lt;/li&gt;
&lt;li&gt;필터 적용 후에는 비디오 프레임으로부터 얼굴을 crop 및 align 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Inversion
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;crop, align 된 얼굴은 PTI 로 반전되는데, 예외적으로 최적화 기반의 반전은 PTI가 아니라 e4e 인코더로 대체된다.&lt;/li&gt;
&lt;li&gt;-&amp;gt; &lt;a href=&quot;https://www.casualganpapers.com/stylegan-encoder-latent-projection-gan-inversion-image-editing/e4e-explained.html?query=e4e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;e4e&lt;/a&gt;, &lt;a href=&quot;https://www.casualganpapers.com/sota-fine-tuning-stylegan-inversion/PTI.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PTI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;e4e 인코더는 서로다른 프레임 간에 많이 변경되지 않고 더 부드럽게 전환되도록 low frequency function 에 더 집중하기 때문이다.&lt;/li&gt;
&lt;li&gt;inversion 하기 위해 첫번째로 &quot;피벗&quot;을 찾음.&lt;/li&gt;
&lt;li&gt;&quot;피벗&quot; 은 입력이미지의 근사치를 찾기 위해 생성기를 통홰 초기 latent code(잠재코드)를 생성한다.&lt;/li&gt;
&lt;li&gt;그런 다음 특정 &quot;피벗&quot; 코드가 대상을 더 잘 재현할 수 있도록 생성기 가중치를 미세조정함.&lt;/li&gt;
&lt;li&gt;PTI 는 각 프레임의 모든 latent code에 동시 적용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Editing
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다행히, 기존의 linear editing 기술은 드롭인방식(조금만 수정해서 사용가능)으로 작동&lt;/li&gt;
&lt;li&gt;style code 를 부드럽게 변경하기 위한 시간적 일관성 edit 이 필요 없음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Stitching Tuning
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;edited face 를 원래프레임에 그냥 붙여넣으면 테두리 주위에 아티팩트가 발생 -&amp;gt; 두번째 튜닝 필요&lt;/li&gt;
&lt;li&gt;사전훈련된 segmentation network를 사용해&amp;nbsp; edited face 에 대한 segmentation mask 를 얻음&lt;/li&gt;
&lt;li&gt;경계 영역을 생성하기 위해 마스크를 경계를 팽창시킴(dilation)&lt;/li&gt;
&lt;li&gt;edited face 를 원본 프레임에 붙여넣음&lt;/li&gt;
&lt;li&gt;원본 이미지와 더욱 유사한 경계 영역을 더 만들기 위해 각 프레임에 대한 생성기를 미세 조정(finetune)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심 요점&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Stitch in time 은 도메인이 달라도, 그리고 어려운 비디오에서도 작동함(애니메이션에서도 가능)&lt;/li&gt;
&lt;li&gt;editing 은 interFaceGAN, StyleCLIP 으로 수행되었음&lt;/li&gt;
&lt;li&gt;PTI 는 local score와 비교해서 global score 에서 꽤 성능이 안좋음.&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;-&amp;gt;여기서 말하는 local score, global score 뭔지 공부 필요&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;encoder 가 없으면 얼굴이 크게 움직이거나 표정 변화 시 편집된 프레임이 일치하지 않게 됨&lt;/li&gt;
&lt;li&gt;PTI 가 없으면 스티칭 성능이 저하됨&lt;/li&gt;
&lt;li&gt;스티칭 하지 않으면 segmentation mask 의 머리카락, 테두리 주위에 아티팩트 발생함.&lt;/li&gt;
&lt;/ul&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;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;속도. 이 방법은 실시간작동이 안됨. 5초 비디오 편집 시 1시간 30분 정도가 걸림(위 남주혁 비디오 편집 시 실제로 그랬음)&lt;/li&gt;
&lt;li&gt;Hyperstyle + Stitch in time 이 다음 단계라고 생각함&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드 구현 결과&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 데이터 다운로드(필요 시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. pretrained model download&lt;br /&gt;-&amp;gt; &lt;a href=&quot;https://github.com/yerang823/STIT&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;1,2 다운 링크 포함된 git&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Training&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Train 결과로 개별 비디오에 맞춘 model 파일과 inversion, 및 pivot 된 비디오가 자동 생성됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNVjwz/btrzOGzjbxV/ROT1JskPuzwj4ke3LNtgt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNVjwz/btrzOGzjbxV/ROT1JskPuzwj4ke3LNtgt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNVjwz/btrzOGzjbxV/ROT1JskPuzwj4ke3LNtgt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNVjwz%2FbtrzOGzjbxV%2FROT1JskPuzwj4ke3LNtgt1%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;609&quot; height=&quot;30&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pivot 의 결과로는 전혀 다른 얼굴이 생성이 되는데, 이는 생성자가 초기 latent code가 input image 의 근사치를 찾기 위해 생성되는 이미지임. 여기서 생성자의 가중치를 미세조정하여 타겟을 생성하기 위한 inversion 이 더욱 잘 생성됨.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;tmp2.gif&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnDDJw/btrzL9vsmSQ/DaIuwIM8RbcoC2mNLVd150/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnDDJw/btrzL9vsmSQ/DaIuwIM8RbcoC2mNLVd150/img.gif&quot; data-alt=&quot;pivot 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnDDJw/btrzL9vsmSQ/DaIuwIM8RbcoC2mNLVd150/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/dnDDJw/btrzL9vsmSQ/DaIuwIM8RbcoC2mNLVd150/img.gif&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;307&quot; height=&quot;554&quot; data-filename=&quot;tmp2.gif&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;pivot 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- inversion 결과를 보면 원본 비디오 같은데 원본이 아님. pivot 이미지를 생성해내고 나서, 여기서 생성자 가중치를 미세조정해서 원본과 거의 유사하게 만들어낸 것임. 남주혁 이미지에서는 배경이 안보이는데, 오바마 예시를 보면 얼굴 주변이 블러돼있는 것을 볼수 있음. 이건 얼굴 주변까지 생성자가 생성해냈기 때문임.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;tmp.gif&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJCD05/btrzLxDjRfR/vPbfiezW9TpPrIFqKrrKR0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJCD05/btrzLxDjRfR/vPbfiezW9TpPrIFqKrrKR0/img.gif&quot; data-alt=&quot;inversion 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJCD05/btrzLxDjRfR/vPbfiezW9TpPrIFqKrrKR0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cJCD05/btrzLxDjRfR/vPbfiezW9TpPrIFqKrrKR0/img.gif&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;294&quot; height=&quot;554&quot; data-filename=&quot;tmp.gif&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;inversion 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;tmp.gif&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/szEUn/btrzLxcgcds/DpbhAeBU1X6o4BznGlXvI1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/szEUn/btrzLxcgcds/DpbhAeBU1X6o4BznGlXvI1/img.gif&quot; data-alt=&quot;inversion 결과 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/szEUn/btrzLxcgcds/DpbhAeBU1X6o4BznGlXvI1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/szEUn/btrzLxcgcds/DpbhAeBU1X6o4BznGlXvI1/img.gif&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;296&quot; height=&quot;296&quot; data-filename=&quot;tmp.gif&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;inversion 결과 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 교정기를 낀 이미지를 확인하니 확실히 알 수 있었음. 원본에선 교정기를 착용했는데, inversion 에서는 교정기까지 똑같이 생성자가 만들어내지 못해서 교정기가 없음.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clKisP/btrzMaHWz8X/Y18a3LNKFYpIagTodJ6y1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clKisP/btrzMaHWz8X/Y18a3LNKFYpIagTodJ6y1k/img.png&quot; data-alt=&quot;원본비디오&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clKisP/btrzMaHWz8X/Y18a3LNKFYpIagTodJ6y1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclKisP%2FbtrzMaHWz8X%2FY18a3LNKFYpIagTodJ6y1k%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;241&quot; height=&quot;118&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;원본비디오&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;235&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RKNgm/btrzKctaNTQ/BK4kruYlrezH8sTF3GK5JK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RKNgm/btrzKctaNTQ/BK4kruYlrezH8sTF3GK5JK/img.png&quot; data-alt=&quot;inversion 비디오&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RKNgm/btrzKctaNTQ/BK4kruYlrezH8sTF3GK5JK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRKNgm%2FbtrzKctaNTQ%2FBK4kruYlrezH8sTF3GK5JK%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;235&quot; height=&quot;102&quot; data-origin-width=&quot;235&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;inversion 비디오&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Edit and Stitch&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학습된 모델을 가지고 age, smile, gender 등을 변경할 수 있음.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ezgif.com-gif-maker (1).gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNjVeS/btrzMa2dP1b/MWhY02SDcU8rtKGUpXBdX0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNjVeS/btrzMa2dP1b/MWhY02SDcU8rtKGUpXBdX0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNjVeS/btrzMa2dP1b/MWhY02SDcU8rtKGUpXBdX0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bNjVeS/btrzMa2dP1b/MWhY02SDcU8rtKGUpXBdX0/img.gif&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;600&quot; height=&quot;120&quot; data-filename=&quot;ezgif.com-gif-maker (1).gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;링크&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2201.08361.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;논문&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://https://www.casualganpapers.com/hiqh_quality_video_editing_stylegan_inversion/Stitch-It-In-Time-explained.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;참고사이트&lt;/a&gt;&lt;/p&gt;</description>
      <category>논문</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/49</guid>
      <comments>https://mallang-coding.tistory.com/49#entry49comment</comments>
      <pubDate>Mon, 18 Apr 2022 17:20:25 +0900</pubDate>
    </item>
    <item>
      <title>[취준] 파란만장 LG 온라인 인적성 후기</title>
      <link>https://mallang-coding.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;현장에 가서 인적성 본적은 몇 번 있었던것같은데, 온라인 인적성은 처음이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LG 인적성은 특히나 이전에 현장에서 본 적도 없었다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험은 오전 10시 - 12시 사이에 진행됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적성검사는 4가지 문항으로 돼있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 10분동안 15문제를 풀면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인성은 20분동안 181문항을 푸는 거였다.&lt;/p&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;필수였던 독립된 공간은 찾았으나 전원연결, 30Mbyte 속도 이상의 와이파이 연결 등이 어려웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노트북이 중간에 꺼지면 이번 인적성은 포기하자는 마음으로 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니나다를까,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와이파이도 계속 끊겨서 재접속을 10번 이상은 하고,&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;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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝나는 시간은 12시였는데, 12:30에 마쳤으나 주최측에서 양해해주셨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝나고나니 온몸에 땀이 흥건했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수고했다 나자신!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론: 온라인인적성은 집에서보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>취준</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/47</guid>
      <comments>https://mallang-coding.tistory.com/47#entry47comment</comments>
      <pubDate>Tue, 12 Apr 2022 12:48:59 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 소수 만들기</title>
      <link>https://mallang-coding.tistory.com/46</link>
      <description>&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;문제&lt;/b&gt;&lt;/h2&gt;
&lt;ul id=&quot;tab&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소수 만들기&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-challengeable-id=&quot;477&quot; data-challengeable-type=&quot;algorithm&quot; data-algorithm-type=&quot;standard&quot; data-language=&quot;python3&quot; data-user-id=&quot;410204&quot; data-interface-type=&quot;function&quot; data-challenge-web-evaluation-code=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;tour2&quot;&gt;
&lt;div&gt;문제 설명
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.&lt;/p&gt;
제한사항
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.&lt;/li&gt;
&lt;li&gt;nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;입출력 예numsresult
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[1,2,3,4]&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[1,2,7,6,4]&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
입출력 예 설명
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 예 #1&lt;br /&gt;[1,2,4]를 이용해서 7을 만들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 예 #2&lt;br /&gt;[1,2,4]를 이용해서 7을 만들 수 있습니다.&lt;br /&gt;[1,4,6]을 이용해서 11을 만들 수 있습니다.&lt;br /&gt;[2,4,7]을 이용해서 13을 만들 수 있습니다.&lt;br /&gt;[4,6,7]을 이용해서 17을 만들 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;내 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649666524119&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from itertools import combinations 

def is_prime_number(x):
    for i in range(2, x): # 2부터 x-1까지 모든 수를 확인
        if x % i == 0:    # 나누어 떨어지면
            return False # 소수가 아님
    return True          # 소수임

def solution(nums):
    cnt=0
    for i in list(combinations(nums, 3)):
        if is_prime_number(sum(i)):
            cnt+=1

    return cnt&lt;/code&gt;&lt;/pre&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;384&quot; data-origin-height=&quot;815&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh4gjg/btry7R2zyCZ/TLwtZNCklfhjyMMSeB0PVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh4gjg/btry7R2zyCZ/TLwtZNCklfhjyMMSeB0PVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh4gjg/btry7R2zyCZ/TLwtZNCklfhjyMMSeB0PVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh4gjg%2Fbtry7R2zyCZ%2FTLwtZNCklfhjyMMSeB0PVK%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;384&quot; height=&quot;815&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;815&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/46</guid>
      <comments>https://mallang-coding.tistory.com/46#entry46comment</comments>
      <pubDate>Mon, 11 Apr 2022 17:42:54 +0900</pubDate>
    </item>
    <item>
      <title>[취준] LG 인적성 해보지도 못하고 떨어진 후기(인줄 알았으나 아니었음)</title>
      <link>https://mallang-coding.tistory.com/45</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;LG CNS 서류합격 이후 코딩테스트, 인적성이 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;사전점검을 하라고 한걸 읽어보긴 했는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그게 오늘 5시까지인줄 모르고............&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5시 10분에 사전점검 프로그램에 들어갔다가 인적성 자체를 응시할수 없게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㅎ....................&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론 : 안내문을 잘읽자. 그래도 자책하지 말자!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;20분 후에 사전점검시간을 밤 12시까지로 연장해줘서 다행히 사전점검 완료 후 응시할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;휴우~~~~~&amp;nbsp;&lt;/p&gt;</description>
      <category>취준</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/45</guid>
      <comments>https://mallang-coding.tistory.com/45#entry45comment</comments>
      <pubDate>Mon, 11 Apr 2022 17:19:52 +0900</pubDate>
    </item>
    <item>
      <title>[취준] 쏘카 전화 면접(인터뷰) 후기</title>
      <link>https://mallang-coding.tistory.com/44</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5UU1o/btryb0TYrix/7Ky4BP8xdlYPlVXG6yWW10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5UU1o/btryb0TYrix/7Ky4BP8xdlYPlVXG6yWW10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5UU1o/btryb0TYrix/7Ky4BP8xdlYPlVXG6yWW10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5UU1o%2Fbtryb0TYrix%2F7Ky4BP8xdlYPlVXG6yWW10%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;608&quot; height=&quot;248&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서류합격 메일 받은 1주일 후에 전화로 면접일정 잡음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서류 합격 이후 2주 후 전화면접 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전화면접 질문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 간단한 자기소개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 쏘카 지원동기: 왜 모빌리티 산업인지? 그중에서도 왜 쏘카인지?&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;3. 쏘카에서 어떤 업무를 예상했고, 하고싶었는지?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모델 경량화, 리얼타임&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 했던 프로젝트 중 가장 인상깊었던 것 하나만 소개해달라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 했던 프로젝트 중 실패라고 생각되는 프로젝트 소개해달라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 앞으로 5-6년동안의 커리어 계획?&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;</description>
      <category>취준</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/44</guid>
      <comments>https://mallang-coding.tistory.com/44#entry44comment</comments>
      <pubDate>Fri, 1 Apr 2022 16:00:27 +0900</pubDate>
    </item>
    <item>
      <title>[python] 파이썬에서 SQL 접근하기</title>
      <link>https://mallang-coding.tistory.com/42</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;pyodbc 라이브러리를 이용한 파이썬에서 sql 데이터 불러오기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pymysql 또는 mysql 을 사용하는 버전도 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 pyodbc를 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버주소, 디비명, 아이디, 패스워드만 알면 간단한 코드로 데이터에 접근 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1648187407799&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pyodbc
import pandas as pd

driver = 'SQL SERVER'
server = '서버 IP 혹은 주소'
database = 'DB 이름'
username = 'ID'
password = 'PASSWORD'

cnxn = pyodbc.connect('DRIVER={' + driver + '};server=' + server + ';database=' + database + ';UID=' + username + ';PWD=' + password +';')
cursor = cnxn.cursor()

sql = &quot;&quot;&quot;
select idx_cvg , idx_img , json_roi 
from v_learning_set vls 
where idx_ai_model =48
&quot;&quot;&quot;

cursor.execute(sql)
rows = cursor.fetchall()

data =pd.DataFrame(rows)
print(data)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;기존에 db 에서 json 으로 파일을 저장하고 이 json 를 다시 파이썬에서 불러와서 작업해야 했던 수고로움을 덜 수 있게 되었다 ! 빵끗!&lt;/p&gt;</description>
      <category>파이썬</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/42</guid>
      <comments>https://mallang-coding.tistory.com/42#entry42comment</comments>
      <pubDate>Fri, 25 Mar 2022 14:51:54 +0900</pubDate>
    </item>
    <item>
      <title>StyleGAN은 얽힘(entanglement)을 어떻게 해결했을까?</title>
      <link>https://mallang-coding.tistory.com/41</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;잠재 변수(latent variable) z 란?&amp;nbsp;&lt;/h2&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rb6KL/btrvuQafeYx/pNFKmEC4sQ5j5DARBgNt5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rb6KL/btrvuQafeYx/pNFKmEC4sQ5j5DARBgNt5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rb6KL/btrvuQafeYx/pNFKmEC4sQ5j5DARBgNt5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRb6KL%2FbtrvuQafeYx%2FpNFKmEC4sQ5j5DARBgNt5k%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;724&quot; height=&quot;294&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;잠재 변수 z&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정규 분포 또는 균일 분포에서 샘플링되며 생성된 콘텐츠의 유형과 스타일을 결정하는 요인을 포함합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;Training 에 있어 z가 얽히지 않아야 하는 이유&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적으로 머신 러닝(ML)은 모델 교육을 더 쉽게 만드는 다른 요소와 독립적인 잠재 요소를 좋아합니다.&lt;/li&gt;
&lt;li&gt;예를 들어, 키와 체중은 크게 얽혀 있습니다(키가 큰 사람은 더 무겁습니다). 따라서 키와 몸무게로 계산한 체질량지수(BMI)가 비만과 관련하여 보다 일반적으로 사용됩니다.&lt;/li&gt;
&lt;li&gt;얽히지 않은 요인은 또한 모델을 올바르게 해석하기 쉽게 만들고, 모델을 덜 복잡하게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;z가 얽히지 않게 하기 위한 피쳐 분포 형태&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GAN에서&amp;nbsp;z&amp;nbsp;의 분포 는 실제 이미지의 잠재 인자 분포와 유사해야 합니다.&lt;/li&gt;
&lt;li&gt;대신 정규 분포 또는 균일 분포로&amp;nbsp;z&amp;nbsp;를 샘플링 하면 최적화된 모델 에서 유형 및 스타일을 넘어서는 정보를 포함하기 위해&amp;nbsp;z&amp;nbsp;가 필요할 수 있습니다.&lt;/li&gt;
&lt;li&gt;예를 들어 군인의 초상화를 생성하고 남성다움과 머리 길이라는 두 가지 잠재 요소를 사용하여 훈련 데이터 세트의 데이터 분포를 시각화해 보겠습니다.&lt;/li&gt;
&lt;li&gt;아래의 누락된 왼쪽 상단 모서리는 남성 병사가 긴 머리를 가질 수 없음을 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9LTYh/btrvt3T7Ye2/nFtKsPQ19BuAkFzXRge1c1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9LTYh/btrvt3T7Ye2/nFtKsPQ19BuAkFzXRge1c1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9LTYh/btrvt3T7Ye2/nFtKsPQ19BuAkFzXRge1c1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9LTYh%2Fbtrvt3T7Ye2%2FnFtKsPQ19BuAkFzXRge1c1%2Fimg.jpg&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;724&quot; height=&quot;217&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;StyleGAN에서는 매핑 네트워크라는 딥 네트워크를 적용하여 잠재 z 를 중간 잠재 공간 w 로 변환합니다 .&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKFTHU/btrvAUO8Gke/LVOUrpsDMQmTohESXQJGSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKFTHU/btrvAUO8Gke/LVOUrpsDMQmTohESXQJGSk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKFTHU/btrvAUO8Gke/LVOUrpsDMQmTohESXQJGSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKFTHU%2FbtrvAUO8Gke%2FLVOUrpsDMQmTohESXQJGSk%2Fimg.jpg&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;724&quot; height=&quot;427&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;개념적으로 StyleGAN은 균일하거나 정규 분포로 샘플링할 수 있는 공간(아래 중간)을 이미지를 쉽게 생성하는 데 필요한 잠재 특징 공간(왼쪽)으로 왜곡합니다. &lt;b&gt;--&amp;gt;어떤 방식으로 왜곡시키는지?&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;이 매핑 네트워크의 목표는 생성기에서 쉽게 렌더링할 수 있는 얽힌 기능을 만들고 훈련 데이터 세트에서 발생하지 않는 기능 조합을 피하는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAzgZ5/btrvyk84EqR/Pr47GdUCVPHdAFKajjRM0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAzgZ5/btrvyk84EqR/Pr47GdUCVPHdAFKajjRM0K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAzgZ5/btrvyk84EqR/Pr47GdUCVPHdAFKajjRM0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAzgZ5%2Fbtrvyk84EqR%2FPr47GdUCVPHdAFKajjRM0K%2Fimg.jpg&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;724&quot; height=&quot;200&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;StyleGAN은 8개의 완전히 연결된 레이어(FC)를 사용하여&amp;nbsp;z&amp;nbsp;를 이 중간 잠재 공간으로 변환하기 위해 매핑 네트워크&amp;nbsp;f&amp;nbsp;를 도입합니다 .&amp;nbsp;w&amp;nbsp;는 새로운&amp;nbsp;z&amp;nbsp;(&amp;nbsp;z&amp;nbsp;') 로 볼 수 있습니다 . 이 네트워크를 통해 512-D 잠재 공간&amp;nbsp;z&amp;nbsp;는 512-D 중간 잠재 공간&amp;nbsp;w&amp;nbsp;로 변환됩니다 .&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-&amp;gt;위 그림에서, (b) Z로부터 feature에 매핑하면 학습셋의 분포(a)를 따르지 못하는데, (c)W로부터 feature에 매핑하면 학습셋과 어느정도 비슷한 분포를 따르게 된다. 즉,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;Z를 W로 만드는 과정이 무엇인지 알 필요&lt;/span&gt;가 있음!&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blDDfw/btrvt3T7Yd8/u33iE4KsIZKuvEgQUCcTc1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blDDfw/btrvt3T7Yd8/u33iE4KsIZKuvEgQUCcTc1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blDDfw/btrvt3T7Yd8/u33iE4KsIZKuvEgQUCcTc1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblDDfw%2Fbtrvt3T7Yd8%2Fu33iE4KsIZKuvEgQUCcTc1%2Fimg.jpg&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;724&quot; height=&quot;427&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h1&gt;&lt;b&gt;스타일 기반 생성기&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠재변수 z 는 스타일 기반 생성기에서 개별적으로 학습된 아핀 연산&lt;span&gt;&amp;nbsp;&lt;/span&gt;A&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 적용하여 각 레이어에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;w&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 변환 합니다. 이렇게 변환된&lt;span&gt;&amp;nbsp;&lt;/span&gt;w&lt;span&gt;&amp;nbsp;&lt;/span&gt;는 &lt;b&gt;공간 데이터에 적용되는 스타일 정보(무슨말?)&lt;/b&gt;로 작용합니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMI4qj/btrvu2tWfzx/crXKBQd2nM7E3WpO1Lwx5k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMI4qj/btrvu2tWfzx/crXKBQd2nM7E3WpO1Lwx5k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMI4qj/btrvu2tWfzx/crXKBQd2nM7E3WpO1Lwx5k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMI4qj%2Fbtrvu2tWfzx%2FcrXKBQd2nM7E3WpO1Lwx5k%2Fimg.jpg&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;724&quot; height=&quot;458&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;ProGAN에 Method 하나씩 바꿔가며 성능 측정&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StyleGAN 논문에서는 Progress GAN 네트워크 설계(&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ichi.pro/ko/gan-stylegan-mich-stylegan2-78734789272217&quot;&gt;세부 사항&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;)로 시작하여 Adam 최적화 프로그램을 포함한 많은 하이퍼파라미터를 재사용합니다. 그런 다음 연구원은 모델 성능이 개선되었는지 확인하기 위해 설계 변경을 실험합니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btnoNa/btrvwKfaQfN/YRungeH9oXFxhLpYCs3Qm0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btnoNa/btrvwKfaQfN/YRungeH9oXFxhLpYCs3Qm0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btnoNa/btrvwKfaQfN/YRungeH9oXFxhLpYCs3Qm0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtnoNa%2FbtrvwKfaQfN%2FYRungeH9oXFxhLpYCs3Qm0%2Fimg.jpg&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;724&quot; height=&quot;168&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
출처(점수가 낮을수록 좋음)&lt;/div&gt;
&lt;div&gt;&lt;u&gt;B) ProGAN + Tuning&lt;/u&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 개선 사항(B)은 판별기 및 생성기 네트워크 모두에서 가장 가까운 이웃 업/다운샘플링을 쌍선형 샘플링으로 대체하는 것입니다. 하이퍼파라미터가 더 조정되고 모델도 더 오래 훈련됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;C) B+ Add mapping and styles&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 개선 사항(C)은 매핑 네트워크 및 스타일 추가입니다. 이는 AdaIN(적응형 인스턴스 정규화)이 공간 데이터에 스타일을 적용할 때 PixelNorm을 대체합니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdu3Zv/btrvxjoZG6x/FKRmnPBfIgWlZscu2T98Q0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdu3Zv/btrvxjoZG6x/FKRmnPBfIgWlZscu2T98Q0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdu3Zv/btrvxjoZG6x/FKRmnPBfIgWlZscu2T98Q0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdu3Zv%2FbtrvxjoZG6x%2FFKRmnPBfIgWlZscu2T98Q0%2Fimg.jpg&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;724&quot; height=&quot;423&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AdaIN(적응형 인스턴스 정규화)은 다음과 같이 정의됩니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c00DWY/btrvvalZLC6/rZkN3fWoVZzkmK3vvwIz8K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c00DWY/btrvvalZLC6/rZkN3fWoVZzkmK3vvwIz8K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c00DWY/btrvvalZLC6/rZkN3fWoVZzkmK3vvwIz8K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc00DWY%2FbtrvvalZLC6%2FrZkN3fWoVZzkmK3vvwIz8K%2Fimg.jpg&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;724&quot; height=&quot;149&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 입력 기능 맵은 먼저 인스턴스 정규화로 정규화됩니다. 그런 다음 StyleGAN은 각 정규화된 공간 기능 맵을 스타일 정보에 따라 크기 조정하고 바이어스합니다. (&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mu;&lt;span&gt;&amp;nbsp;&lt;/span&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;sigma;&lt;span&gt;&amp;nbsp;&lt;/span&gt;는 각각 입력 특징 맵&lt;span&gt;&amp;nbsp;&lt;/span&gt;xᵢ&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 평균과 표준편차입니다 .) 각 레이어에서 StyleGAN은 한 쌍의 스타일 값(&lt;span&gt;&amp;nbsp;&lt;/span&gt;y&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&lt;span&gt;&amp;nbsp;&lt;/span&gt;s, i&lt;span&gt;&amp;nbsp;&lt;/span&gt;)과&lt;span&gt;&amp;nbsp;&lt;/span&gt;y&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&lt;span&gt;&amp;nbsp;&lt;/span&gt;b, i&lt;span&gt;&amp;nbsp;&lt;/span&gt;))을 척도로 계산하고 공간 특징 맵&lt;span&gt;&amp;nbsp;&lt;/span&gt;i 에&lt;span&gt;&amp;nbsp;&lt;/span&gt;스타일을 적용하기 위한&lt;span&gt;&amp;nbsp;&lt;/span&gt;w&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 편향 . 정규화된 기능은 공간 위치에 적용되는 스타일의 양에 영향을 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바닐라 GAN에서 첫 번째 레이어에 대한 입력은 잠재 인자&lt;span&gt;&amp;nbsp;&lt;/span&gt;z&lt;span&gt;&amp;nbsp;&lt;/span&gt;입니다. 경험적 결과에 따르면 StyleGAN의 첫 번째 레이어에 변수 입력을 추가해도 아무런 이점이 없으므로 상수 입력으로 대체됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;D) C + Remove traditional input&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개선(D)을 위해 첫 번째 레이어에 대한 입력은 차원이 4x4x512인 학습된 상수 행렬로 대체됩니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m8IYp/btrvt3T7YfC/m8m7km4XWy9GwyvxnG3Q60/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m8IYp/btrvt3T7YfC/m8m7km4XWy9GwyvxnG3Q60/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m8IYp/btrvt3T7YfC/m8m7km4XWy9GwyvxnG3Q60/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm8IYp%2Fbtrvt3T7YfC%2Fm8m7km4XWy9GwyvxnG3Q60%2Fimg.jpg&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;724&quot; height=&quot;212&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StyleGAN 논문에서 &amp;ldquo;Style&amp;rdquo;은 포즈, 아이덴티티와 같은 데이터의 주요 속성을 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;E) D+ Add noise inputs&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개선 사항(E)에서 SytleGAN은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;확률적 변동&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 생성할 때 공간 데이터에 노이즈를 도입합니다 .&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ec3Vuw/btrvyhKB0A2/jXOjx5iEe87WiVgnwNNfJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ec3Vuw/btrvyhKB0A2/jXOjx5iEe87WiVgnwNNfJ0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ec3Vuw/btrvyhKB0A2/jXOjx5iEe87WiVgnwNNfJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fec3Vuw%2FbtrvyhKB0A2%2FjXOjx5iEe87WiVgnwNNfJ0%2Fimg.jpg&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;724&quot; height=&quot;458&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 추가된 노이즈는 실험에서 머리카락(아래), 수염, 주근깨 또는 피부 모공의 위치에 변형을 만드는 것으로 관찰됩니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4WCvK/btrvrz6OQD6/uOQCYKlXMgWsfuEoKC6NU1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4WCvK/btrvrz6OQD6/uOQCYKlXMgWsfuEoKC6NU1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4WCvK/btrvrz6OQD6/uOQCYKlXMgWsfuEoKC6NU1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4WCvK%2Fbtrvrz6OQD6%2FuOQCYKlXMgWsfuEoKC6NU1%2Fimg.jpg&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;724&quot; height=&quot;437&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 8&amp;times;8 공간 레이어의 경우 상관되지 않은 가우스 노이즈를 포함하는 요소로 8&amp;times;8 행렬이 생성됩니다. 이 매트릭스는 모든 기능 맵에서 공유됩니다. 그러나 StyleGAN은 각 기능 맵에 대해 별도의 스케일링 요소를 학습하고 이전 레이어의 출력에 추가하기 전에 노이즈 매트릭스와 곱합니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM7Xnm/btrvxjWNWQg/nj3loSQ5ZqJfDh3uWUIxaK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM7Xnm/btrvxjWNWQg/nj3loSQ5ZqJfDh3uWUIxaK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM7Xnm/btrvxjWNWQg/nj3loSQ5ZqJfDh3uWUIxaK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM7Xnm%2FbtrvxjWNWQg%2Fnj3loSQ5ZqJfDh3uWUIxaK%2Fimg.jpg&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;724&quot; height=&quot;82&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노이즈는 노이즈가 없거나 특정 해상도에만 적용된 경우와 비교할 때 아래에 설명된 이점을 가진 렌더링 변형을 만듭니다. StyleGAN 논문은 또한 다른 GAN 방법에서 자주 볼 수 있는 반복적인 패턴을 완화한다고 제안합니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mbJ4P/btrvAUhjDc9/2WYtZGikvgddnvhXNGwtBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mbJ4P/btrvAUhjDc9/2WYtZGikvgddnvhXNGwtBK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mbJ4P/btrvAUhjDc9/2WYtZGikvgddnvhXNGwtBK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmbJ4P%2FbtrvAUhjDc9%2F2WYtZGikvgddnvhXNGwtBK%2Fimg.jpg&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;724&quot; height=&quot;668&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;위 그림 설명 ) 생성기의 각 레이어에 noise input 추가 시 효과 확인&lt;/div&gt;
&lt;div&gt;(a) 모든 layer에 noise 추가&lt;/div&gt;
&lt;div&gt;(b) noise 없음&lt;/div&gt;
&lt;div&gt;(c) fine layer 에만 noise 추가&lt;/div&gt;
&lt;div&gt;(d) coarse layer 에만 noise 추가&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; b) noise 생략은 featureless 하게 만들고, 회화적으로 보이게 만들고, d) coarse noise 는 라지스케일의 헤어 컬링과 더 큰 배경 피쳐의 모습을 만들어내고, c) fine noise 는 더 정교한 헤어 컬과, 정교한 배경 디테일, 피부 모공까지 표현하다는 걸 알수 있습니다.&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;마지막 개선 사항(E)은 혼합 정규화에 있습니다.&lt;/p&gt;
&lt;h1&gt;스타일 믹싱 및 믹싱 정규화&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에는 잠재 요소&lt;span&gt;&amp;nbsp;&lt;/span&gt;z를&lt;span&gt;&amp;nbsp;&lt;/span&gt;생성 하고 스타일을 유도할 때 단일 소스로 사용했습니다. Mixing regularization 을 사용하면 특정 공간 해상도에 도달한 후 스타일을 유도 하기 위해 다른 잠재 인자&lt;span&gt;&amp;nbsp;&lt;/span&gt;z&lt;span&gt;&amp;nbsp;&lt;/span&gt;2로 전환합니다 .&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz2Skf/btrvyhKB0y7/x5PdPs4YBpK10lr4N7iEq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz2Skf/btrvyhKB0y7/x5PdPs4YBpK10lr4N7iEq0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz2Skf/btrvyhKB0y7/x5PdPs4YBpK10lr4N7iEq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz2Skf%2FbtrvyhKB0y7%2Fx5PdPs4YBpK10lr4N7iEq0%2Fimg.jpg&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;724&quot; height=&quot;461&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 이미지 &quot;소스 B&quot;를 생성하는 잠재 요소를 사용하여 거친 공간 해상도(4x4 ~ 8x8) 스타일을 유도하고 &quot;소스 A&quot;의 스타일을 사용하여 더 미세한 공간 해상도를 만듭니다. 따라서 생성된 이미지는 소스 B의 포즈, 일반적인 헤어스타일, 얼굴 모양 및 안경과 같은 높은 수준의 스타일을 가지면서 모든 색상(눈, 머리카락, 조명) 및 미세한 얼굴 특징은 A와 유사합니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9xyRL/btrvAVAv7d3/1GN2GdtfvKaM1ljMTxkiG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9xyRL/btrvAVAv7d3/1GN2GdtfvKaM1ljMTxkiG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9xyRL/btrvAVAv7d3/1GN2GdtfvKaM1ljMTxkiG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9xyRL%2FbtrvAVAv7d3%2F1GN2GdtfvKaM1ljMTxkiG0%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;724&quot; height=&quot;461&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스 B에서 중간 해상도(16&amp;times;16 ~ 32&amp;times;32)의 스타일을 사용하는 경우 B에서 작은 스케일의 얼굴 특징, 헤어 스타일, 눈 뜨고/감기, 이미지 A에서 포즈, 일반적인 얼굴 모양 및 안경을 상속합니다. 보존됩니다. 마지막 열에서는 색 구성표와 미세 구조에 주로 영향을 미치는 소스 B의 미세 스타일(64&amp;times;64 ~ 1024&amp;times;1024 해상도)을 복사합니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oTXKZ/btrvvDn0MOX/p6hk7WIoXkk5qxzkG7oIl1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oTXKZ/btrvvDn0MOX/p6hk7WIoXkk5qxzkG7oIl1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oTXKZ/btrvvDn0MOX/p6hk7WIoXkk5qxzkG7oIl1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoTXKZ%2FbtrvvDn0MOX%2Fp6hk7WIoXkk5qxzkG7oIl1%2Fimg.jpg&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;724&quot; height=&quot;480&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;훈련에서 이미지의 특정 비율은 하나가 아닌 두 개의 임의의 잠재 코드를 사용하여 생성됩니다.&lt;/p&gt;
&lt;h1&gt;훈련&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FFHQ(사람 얼굴 데이터 세트 &amp;mdash; Flickr-Faces-HQ)는 연령, 민족, 이미지 배경 및 안경, 모자 등과 같은 액세서리와 같은 더 나은 적용 범위를 가진 CelebA-HQ에 비해 더 높은 품질의 데이터 세트입니다. StyleGAN에서는 CelebA-HQ 데이터 세트는 손실 함수로 WGAN-GP를 사용하여 훈련되는 반면 FFHQ는 아래의 R₁ 정규화와 함께 포화되지 않은 GAN 손실을 사용합니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0JecC/btrvAakx22z/HJyfpizWKf9JSZHJG3sut0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0JecC/btrvAakx22z/HJyfpizWKf9JSZHJG3sut0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0JecC/btrvAakx22z/HJyfpizWKf9JSZHJG3sut0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0JecC%2FbtrvAakx22z%2FHJyfpizWKf9JSZHJG3sut0%2Fimg.jpg&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;724&quot; height=&quot;294&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
FFHQ용&lt;/div&gt;
&lt;h1&gt;W의 자르기(truncation) 트릭&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;z&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;w의&lt;span&gt;&amp;nbsp;&lt;/span&gt;낮은 확률 밀도 영역은 이를 정확하게 학습하기에 충분한 훈련 데이터가 없을 수 있습니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TYwGT/btrvAUInfjs/g1duYAOy0CSnxzXykf4mKK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TYwGT/btrvAUInfjs/g1duYAOy0CSnxzXykf4mKK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TYwGT/btrvAUInfjs/g1duYAOy0CSnxzXykf4mKK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTYwGT%2FbtrvAUInfjs%2Fg1duYAOy0CSnxzXykf4mKK%2Fimg.jpg&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;724&quot; height=&quot;427&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이미지를 생성할 때 이러한 영역을 피하여 변형을 희생시키면서 이미지 품질을 향상시킬 수 있습니다. 이것은&lt;span&gt;&amp;nbsp;&lt;/span&gt;z&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;w&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 잘라서 수행할 수 있습니다 . StyleGAN에서는 다음을 사용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;w&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 수행됩니다 .&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CFHcz/btrvy2761Wv/r2GNsKgrukAKKXf2tnVwfK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CFHcz/btrvy2761Wv/r2GNsKgrukAKKXf2tnVwfK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CFHcz/btrvy2761Wv/r2GNsKgrukAKKXf2tnVwfK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCFHcz%2Fbtrvy2761Wv%2Fr2GNsKgrukAKKXf2tnVwfK%2Fimg.jpg&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;724&quot; height=&quot;217&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &amp;psi;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;스타일 척도&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라고 합니다 .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 절단은 저해상도 레이어에서만 수행됩니다(예: &amp;psi; = 0.7인 4&amp;times;4 ~ 32&amp;times;32 공간 레이어). 이렇게 하면 고해상도 세부 정보가 영향을 받지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;psi;를 0으로 설정하면 아래와 같이 평균 면이 생성됩니다. &amp;psi; 값을 조정하면 관점, 안경, 나이, 색상, 머리 길이, 성별과 같은 속성이 어떻게 바뀌는지 알 수 있습니다.&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGwHvo/btrvwjQhrnk/evbiFSdGCdBmyxAKPmBgJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGwHvo/btrvwjQhrnk/evbiFSdGCdBmyxAKPmBgJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGwHvo/btrvwjQhrnk/evbiFSdGCdBmyxAKPmBgJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGwHvo%2FbtrvwjQhrnk%2FevbiFSdGCdBmyxAKPmBgJ0%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;724&quot; height=&quot;287&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;수정중... 공부 더 필요함.&lt;/div&gt;</description>
      <category>논문</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/41</guid>
      <comments>https://mallang-coding.tistory.com/41#entry41comment</comments>
      <pubDate>Thu, 10 Mar 2022 00:49:45 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 키패드 누르기</title>
      <link>https://mallang-coding.tistory.com/40</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S5A4h/btrvpaldh0C/0UVtPuFlLkd1ZkLkkeIrB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S5A4h/btrvpaldh0C/0UVtPuFlLkd1ZkLkkeIrB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S5A4h/btrvpaldh0C/0UVtPuFlLkd1ZkLkkeIrB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS5A4h%2Fbtrvpaldh0C%2F0UVtPuFlLkd1ZkLkkeIrB0%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;207&quot; height=&quot;207&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.&lt;br /&gt;맨 처음 왼손 엄지손가락은&lt;span&gt;&amp;nbsp;&lt;/span&gt;*&lt;span&gt;&amp;nbsp;&lt;/span&gt;키패드에 오른손 엄지손가락은&lt;span&gt;&amp;nbsp;&lt;/span&gt;#&lt;span&gt;&amp;nbsp;&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;엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.&lt;/li&gt;
&lt;li&gt;왼쪽 열의 3개의 숫자&lt;span&gt;&amp;nbsp;&lt;/span&gt;1,&lt;span&gt;&amp;nbsp;&lt;/span&gt;4,&lt;span&gt;&amp;nbsp;&lt;/span&gt;7을 입력할 때는 왼손 엄지손가락을 사용합니다.&lt;/li&gt;
&lt;li&gt;오른쪽 열의 3개의 숫자&lt;span&gt;&amp;nbsp;&lt;/span&gt;3,&lt;span&gt;&amp;nbsp;&lt;/span&gt;6,&lt;span&gt;&amp;nbsp;&lt;/span&gt;9를 입력할 때는 오른손 엄지손가락을 사용합니다.&lt;/li&gt;
&lt;li&gt;가운데 열의 4개의 숫자&lt;span&gt;&amp;nbsp;&lt;/span&gt;2,&lt;span&gt;&amp;nbsp;&lt;/span&gt;5,&lt;span&gt;&amp;nbsp;&lt;/span&gt;8,&lt;span&gt;&amp;nbsp;&lt;/span&gt;0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.&lt;br /&gt;4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.&lt;/p&gt;
&lt;b&gt;[제한사항]&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;numbers 배열의 크기는 1 이상 1,000 이하입니다.&lt;/li&gt;
&lt;li&gt;numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.&lt;/li&gt;
&lt;li&gt;hand는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;left&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;right&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;left&quot;는 왼손잡이,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;right&quot;는 오른손잡이를 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;왼손 엄지손가락을 사용한 경우는&lt;span&gt;&amp;nbsp;&lt;/span&gt;L, 오른손 엄지손가락을 사용한 경우는&lt;span&gt;&amp;nbsp;&lt;/span&gt;R을 순서대로 이어붙여 문자열 형태로 return 해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;b&gt;입출력 예&lt;/b&gt;numbershandresult
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]&lt;/td&gt;
&lt;td&gt;&quot;right&quot;&lt;/td&gt;
&lt;td&gt;&quot;LRLLLRLLRRL&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]&lt;/td&gt;
&lt;td&gt;&quot;left&quot;&lt;/td&gt;
&lt;td&gt;&quot;LRLLRRLLLRR&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]&lt;/td&gt;
&lt;td&gt;&quot;right&quot;&lt;/td&gt;
&lt;td&gt;&quot;LLRLLRLLRL&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;입출력 예에 대한 설명&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서대로 눌러야 할 번호가 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]이고, 오른손잡이입니다.&lt;/p&gt;
왼손 위치오른손 위치눌러야 할 숫자사용한 손설명
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;#&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;1은 왼손으로 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;#&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;3은 오른손으로 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;4는 왼손으로 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;왼손 거리는 1, 오른손 거리는 2이므로 왼손으로 5를 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;왼손 거리는 1, 오른손 거리는 3이므로 왼손으로 8을 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;왼손 거리는 2, 오른손 거리는 1이므로 오른손으로 2를 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;1은 왼손으로 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;4는 왼손으로 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;왼손 거리와 오른손 거리가 1로 같으므로, 오른손으로 5를 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;9는 오른손으로 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;왼손 거리는 1, 오른손 거리는 2이므로 왼손으로 5를 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;LRLLLRLLRRL&quot;를 return 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼손잡이가 [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]를 순서대로 누르면 사용한 손은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;LRLLRRLLLRR&quot;이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #3&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른손잡이가 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]를 순서대로 누르면 사용한 손은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;LLRLLRLLRL&quot;이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 코드&lt;/p&gt;
&lt;pre id=&quot;code_1646688410877&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(numbers, hand):
	# 처음 왼,오른손 위치
    loc_l=[3,0]
    loc_r=[3,2]
    
    # 빈 문자열
    result=''
    for num in numbers:

        if num==0:
            loc_num = [3,1]
        else:
            loc_num = [(num-1)//3, (num-1)%3]

        dist_l = abs(loc_l[0] - loc_num[0]) + abs(loc_l[1] - loc_num[1]) #왼손과의거리
        dist_r = abs(loc_r[0] - loc_num[0]) + abs(loc_r[1] - loc_num[1]) #오른손과의거리

		# 1,4,7 은 왼손, 3,6,9는 오른손
        if loc_num[1] == 2:
            result+='R'
            loc_r=loc_num
        elif loc_num[1] == 0:
            result+='L'
            loc_l=loc_num

		
        # (1,4,7),(3,6,9) 아니고 거리가 동일할때
        elif loc_num[1]==1 and dist_l == dist_r:
            if hand==&quot;right&quot;:
                result+='R'
                loc_r=loc_num
            else:
                result+='L'
                loc_l=loc_num
		
        # (1,4,7),(3,6,9) 아니고 거리가 다를때
        elif loc_num[1]==1 and dist_l != dist_r:
            if dist_l&amp;lt;dist_r: 
                result+='L'
                loc_l=loc_num
            else : 
                result+='R'
                loc_r=loc_num

    return result&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>프로그래머스</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/40</guid>
      <comments>https://mallang-coding.tistory.com/40#entry40comment</comments>
      <pubDate>Tue, 8 Mar 2022 06:29:06 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] apt- get update  VS apt-get upgrade</title>
      <link>https://mallang-coding.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;apt 명령어를 매일 쓰면서 이게 뭘까? 라는 생각을 오늘 처음해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;apt는 Advanced Packaging Tool 의 약자&lt;/b&gt;이며, 리눅스 운영시스템에서 사용되는&lt;b&gt; 패키지 관리 툴&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;apt- get&lt;span&gt;&amp;nbsp;&lt;/span&gt;update&lt;/b&gt;&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;apt- get&lt;span&gt;&amp;nbsp;&lt;/span&gt;upgrade&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt-get install 로 설치했던 패키지들을 최신버전으로 업그레이드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 가능한 리스트 업데이트가 아닌, 기존에 설치돼있는 패키지를 실제로 업그레이드 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux, Docker, Git</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/37</guid>
      <comments>https://mallang-coding.tistory.com/37#entry37comment</comments>
      <pubDate>Tue, 15 Feb 2022 11:02:59 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] Dockerfile로 딥러닝 git 코드 한번에 실행시키기</title>
      <link>https://mallang-coding.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Dockerfile을 알기 전, 내가 파이썬으로 딥러닝을 돌릴 때 하던 방식은 이랬다.&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;[before] 기존의 방식&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 도커 이미지 pull&lt;br /&gt;ex) docker pull [image name]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 나의 기존 디렉토리 마운트(run 할때 -v 옵션으로)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) docker run -it --ipc=host --gpus=all -p=8888:8888 -v=/ai-data/disk1/:/app --name=torch0127 continuumio/miniconda3&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;4. 파이썬 코드 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 dockerfile을 통해 이 모든 과정을 파일 하나로 코드 실행까지 수행할 수 있다는 것을 알았고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 이렇게 매번 필요한 라이브러리를 추가로 설치하고 실행코드를 입력하는 방식이 매우 비효율적&lt;/b&gt;이라는 것을 알게됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[after] Dockerfile로 git 코드 한번에 실행하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Dockerfile 생성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rM4kl/btrs21YReL0/KYvegjPQmeewLatP22xRok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rM4kl/btrs21YReL0/KYvegjPQmeewLatP22xRok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rM4kl/btrs21YReL0/KYvegjPQmeewLatP22xRok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrM4kl%2Fbtrs21YReL0%2FKYvegjPQmeewLatP22xRok%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;644&quot; height=&quot;276&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FROM : 가져올 도커 이미지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RUN : 이미지에 추가로 설치할 라이브러리 등을 명령어로 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;COPY A B : 현재 나의 A 디렉토리를 도커내부의 B 디렉토리로 마운트(docker run -v 옵션과 동일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WORKDIR : 이미지 실행 후 시작 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ENTRYPOINT : 이미지 실행 후 시작디렉토리에서 실행할 명령어를 단어로 나열&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CMD : ENTRYPOINT 와 함께 줄 명령어 옵션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dockerfile 옵션 등에 관한 내용은 추후 더 공부해서 추가할 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 도커파일 빌드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644566105615&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker build . -t [Dockerfile로 만들 이미지명]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dockerfile이 존재하는 디렉토리 위치와 동일한위치에서 위 명령어 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 지정한 이미지명으로 &lt;u&gt;이미지가 생성&lt;/u&gt;됨(docker 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;&lt;b&gt;3. git 코드 가져오기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;1) 오픈 소스 git 이용할 경우&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644566497531&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone https://github.com/Megvii-BaseDetection/YOLOX.git # 오픈소스 git 주소&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;u&gt;2) 나의 git repo 사용할 경우&lt;/u&gt;&lt;br /&gt;(이 경우에는 git init 등 초기화작업 필요함, 추가 포스팅 예정)&lt;/p&gt;
&lt;pre id=&quot;code_1644566857860&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git pull [내 git 주소]&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;실행할 코드의 git 주소를 가져온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 git 주소는 Dockerfile이 없는 git 오픈소스를 예시로 가져왔다. (yolox)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git 오픈소스에서 Dockerfile 이 있으면 가장 편하긴 하다.(나도 사용은 안해봄)&lt;/p&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. 도커이미지 실행&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644567105805&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -it --gpus=all --ipc=host -p=8888:8888 -v=/my/data/dir:/docker/data/dir [생성된도커이미지명]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 Dockerfile 에서 COPY 옵션으로 준 것은 git code 디렉토리를 마운트한 것이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어에서 -v 옵션으로 준 것은 코드를 실행하기 위한 &quot;데이터&quot; 디렉토리를 마운트한 것이다.&lt;/p&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;gt; 위의 docker run ~~ 명령어만 실행하면 python 명령어까지 자동 실행되고, 학습이 시작된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1557&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VKxmP/btrs2sbpRWX/fPwtf0z3JsYLGa79dLnCX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VKxmP/btrs2sbpRWX/fPwtf0z3JsYLGa79dLnCX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VKxmP/btrs2sbpRWX/fPwtf0z3JsYLGa79dLnCX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVKxmP%2Fbtrs2sbpRWX%2FfPwtf0z3JsYLGa79dLnCX0%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;1557&quot; height=&quot;352&quot; data-origin-width=&quot;1557&quot; data-origin-height=&quot;352&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;+ docker-comose.yml 라는 파일을 이용하면 docker run 할 때의 옵션마저 줄 필요가 없다고 배웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것도 나중에 공부해서 실행해보고 업로드할 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dockerfile 만으로 완벽하게 동일한 환경에서 한번에 파이썬 코드 실행&amp;amp;학습까지 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼른 익숙해져서 편하게 쓰고싶다.&lt;/p&gt;</description>
      <category>Linux, Docker, Git</category>
      <author>코랑이</author>
      <guid isPermaLink="true">https://mallang-coding.tistory.com/34</guid>
      <comments>https://mallang-coding.tistory.com/34#entry34comment</comments>
      <pubDate>Fri, 11 Feb 2022 17:23:20 +0900</pubDate>
    </item>
  </channel>
</rss>