<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>DOT-Learning</title>
    <link>https://dot-learning.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 29 Jun 2026 07:47:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DOT-ICD</managingEditor>
    <image>
      <title>DOT-Learning</title>
      <url>https://tistory1.daumcdn.net/tistory/4904134/attach/b017bbf1f8db46948b68c247751f8159</url>
      <link>https://dot-learning.tistory.com</link>
    </image>
    <item>
      <title>Thompson  RN  et  al.  2020 Key  questions  for  modelling  COVID-19exit  strategies.  Proc.  R.  Soc</title>
      <link>https://dot-learning.tistory.com/43</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. Heterogeneities in transmission&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(a) human heterogeneities를 모델링 하기 위한 resolution 결정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 복잡성과 단순성 사이에서 많은 결정을 해야 함. 이 둘 사이의 균형을 맞추는 일은 데이터의 양이 많아진다고 자연스럽게 해결되는 일은 아님. 복잡성의 수준을 다르게 한 모델을 여럿 사용하여 상호보완적인 결과를 만들어내는 것으로 해결. 탈출 전략을 위한 모델링을 구성할 때, 두가지에 대해 초점을 맞추어야 함. &lt;b&gt;공간적인 접촉 구조(spatial contact structure)와 취약 계층의 감염(health vulnerabilities)&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;Spatial contact structure :가정과 직장 같은 local한 장소에서의 혼합 구조에 대한 공간적 이질성 모델링은 꽤 성공적으로 이루어졌음. 소수의 접촉이 있는 Spatia contact structure에서는 감염의 수가 천천히 증가. R(t){재생산 지수}는 1을 넘지 않음. 밀접접촉이 활발하게 이루어지는 그룹에서는 R(t)값에 multiplier effect(승수효과 ?)가 발생함을 확인할 수 있음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spatio-temporal structure : 인구의 시공간적 구조 또한 문제. 개인의 공간적인 분포 역시 중요하지만, 긴거리의 접촉에는 단순한 percolation-type spatial모델보다 더 강한 접촉을 만들어냄.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클러스터와 페어 추정모델은 감염 건수의 지수적 증가라는 spatial heterogeneities를 몇몇 부분에서 포착함.&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;모델은 대부분의 종류의 공간적 계층화를 사용할 수 있지만, 탈출 전략을 위한 의미있는 결과를 만들어내기 위해서는 데이터를 사용한 calibration이 필요함.&lt;/b&gt; 첫&lt;b&gt;번째 문제는, 이를 위해 stratification이 다른 여러 유형의 데이터를 병합하는 것이 쉬운 일은 아니라는 것. 두번째 문제는 introduce or lift intervention의 적절한 scale을 결정하는 것&lt;/b&gt;. 데이터 수집은 보통 행정 지구 안의 모든 인구(country-wide or smaller)에 대해서 이루어지는데, 더 효과적인 개입이나, 탈출 전략은 인구의 특정 부분만을 타겟으로 하는 경우가 있음. 이런 경우에, 모델링은 epidemiological gain을 상쇄할 비용과 imperfect implementation을 결정하는 것에 도움이 됨.&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;질병에 대한 host vulnerability의 구조는 일반적으로 risk factor(위험요소 : 나이.성별.민족 등)에 의해 보고됨. 모델링 관점에서 이에 대해서 많은 미해결 질문이 존재. 1. 개인 수준의 heterogeneous한 취약점은 출구 전략의 결과에 어느정도의 영향을 주는지? 2.&amp;nbsp; 취약성이 문제인 경우, 현재까지 보고된 위험 요소 외의 고려사항이 존재하는지? 또 존재한다면 얼마나 고려해야 하는지?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델링의 결과가 대중에게 알려지면, 그 결과는 출구전략의 작동을 돕거나 방해하는 행동 피드백을 생성함. spatial hete-와 비슷하게, host volunerity에 대한 고려를 통해 만들어진 모델링은 출구전략을 개선시키는 것에 도움이 됨.&amp;nbsp;&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;&amp;nbsp;(b) SARS - CoV-2 transmission에서 네트워크와 가정의 역할&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPIs(?)는 접촉 네트워크를 끊고(직장 / 학교 등 대규모 모임 금지), 끊어지지 않은 네트워크 안에서도 감염 확률을 낮춤(마스크 착용 등). 네트워크 모델은 pathogen transmission을 감염 기회와 확률로 분리하는 것을 목표로 함. 문제는 1. 데이터 수집 과정에서 누락되는 감염 기회 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;&amp;nbsp;가정에 속한 개인은 학교와 직장등을 통해 사회적 맥락에서 혼합됨. 이를 반영하기 위한 다층 네트워크, 가정 모델, 이분 네트워크, 지리적 및 사회적인 요소를 포함한 네트워크 등 다양한 모델이 개발되었음. 이러한 모델은 락다운 상태에서 전파 상황을 이해하고 모니터링하고 시나리오를 탐색하는데 중요함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감염된 접촉자의 격리 및 치료에 뒤따르는 접촉 추적은 잘 확립된 질병 통제 방법. 접촉 네트워크는 추적의 성공 여부를 결정하는데 중요하게 사용되는 factor. 네트워크를 통해 감염의 상관 관계 구조에 대한 이해, 감염의 과정, 취약한 노드를 찾아내어 예방하는 것, 집단 면역의 형성을 예상하는 것을 할 수 있음.&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;현실에서, heterogeneous population에서는 잘 연결되어 있는 사람들(사회적 교류가 많은 사람들)이 전파의 허브가 될 가능성이 높음(SSE를 의미) 호흡기 질환에서는 특정 개인을 잠재적 슈퍼전파자로 분류할 수 있는지, 감염된 개인이 슈퍼 전파 사건을 일으킬 가능성이 있는지에 대한 논쟁이 존재.&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;통제 정책이 점진적으로 해제됨에 따라, 접촉 네트워크는 다시 형성될 것. 소셜 네트워크의 proxies(이동 데이터)들을 통해 전파와의 관련성을 파악하려면 신중한 접근이 필요. 관찰되는 접촉 관계를 통해 확산을 예측하고 방지하는 것에서 이동데이터들과 감염 사이의 큰 상관관계가 존재하면 성공적인 접근이겠지만, NPI이 목표는 사회가 다시 열린 상태로 돌아가더라도, 전파가 통제된 상태로 유지되도록 이 둘을 부분적으로 분리하는 것.&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;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;(c) SARS-CoV-2 transmission에서 아이들의 역할&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인플루엔자 대유행의 예에서 사용된 intervention은 휴교. 놀이터 폐쇄를 비롯한 사회적 거리두기를 통해 아이들이 분리되었었음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, SARS-CoV-2에서 아이들에 의한 전염은 인플루엔자의 경우와 달리 불분명함. 우한의 경우 초기 데이터에서 20대 미만의 사례는 다른 사례에 비해 훨씬 적었음. 전염에 있어서 아이들의 역할은 세가지 측면으로 분류 가능 1. susceptibility 2. infectiousness once infected 3. propensity to develop disease if infected&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;이를 위해서 알아야 하는 것은 등교 개학이 인구 수준의 전염에 영향을 미치는 정도. 휴교의 경우, 펜데믹 초기에 다른 intervention과 그 시기가 겹쳤기 때문에, 초기 데이터 만으로는 intervention 중 휴교만의 효과를 분석하는 것은 어려운 것으로 판명됨. 등교 재개에 따라 모델의 부족한 점을 메울 수 있는 데이터를 얻을 수 있을 것으로 기대함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개학으로 인한 영향 또한 지역 사회의 여러 변수에 따라 달라질 수 있음. 아이들과 선생은 모두 가정에 소속되어 있고, 가정에 영향을 미칠 수 있음. 등교 재개에 따른 모델링을 수행하기 위해서는 가족 구성원 간의 접촉에 대한 모든 변수들을 설명해야 함. 물론 R(t)값은 동일한 시기에 진행된 다른 interventions에도 의존한다는 것을 기억해야 함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학년의 차이에 따른 상대적 위험은 인구에 영향을 미치지 않음. 학년이 높은 아이들은 나이가 상대적으로 많은 성인과 사는 경향이 있고, 나이가 많은 개인이 있는 가정은 감염 상황에서 심각한 결과를 겪을 가능성이 높음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 등교 재개를 위해 학년을 그룹화하는 방법에 대한 결정은 어린이 간 전파, 교사 간 전파, 어린이와 교사 가정 내의 전파의 위험 사이에서 균형을 이루어서 결정되어야 함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등교 재개는 교사들과 지원 스태프 사이의 접촉 수에 영향을 줌. 물론, 물리적인 사회적 거리두기가 진행되기 때문에, 이전과는 달리 소규모 학급, 배치 변경, 위생 조치 강화등이 이루어져, 폐쇄 이전과 같은 환경에 있지는 않을ㄴ 것. 따라서, 모델은 폐쇄 전후 학교의 전파에 대한 다양한 변수를 고려해야 함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;락다운 이후, 더 넓은 범위의 사회적 거리두기가 시행되면, 등교 재개가 하위 사회 구조를 연결시킬 수 있으며, 따라서 모델은 학교 내 뿐만이 아니라, 인구 전파에 대한 광범위한 영향을 추정할 수 있어야 함. 이러한 모델을 통해 얻은 추정치는 어떻게 언제 등교 재개를 시행할지에 대해 결정하는 것에 핵심적인 역할을 할 것.&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;(d) 전염병은 사회적인 것. 어떻게 사회적인 구조를 모델링할 것인가?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;standard compartmental epidemiological models에서도 인구 구조와 heterogeneities들은 근사화될 수 있지만, 이러한 모델들은 더 많은 heterogeneities가 포함됨에 따라 대단히 복잡하고 cumbersome해진다. 대안 방법으로는 agent based modelling이 있다. ABM은 사회와 같은 복잡계를&amp;nbsp; 행동 및 개인특성 등과 상호작용 등이 프로그래밍된 virtual agent를 사용하여 나타낼 수 있다. 정교한 ABM은 시나리오를 예측하고, 대응할 수 있으며, 시행과 모방을 통해 학습할 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ABM이 다른 tradition에서 시작되었지만, compartmental 모델들의 insights를 통합시킬 수 있다. (예를 들어 agents의 평균 감염 속도가 compartmental 모델들의 속도와 일치하도록 감염시키는 등) 하지만, 대규모의 ABM을 구축하는 것은 매우 어려운 일이며 SARS-CoV-2에 대응하기에 사용할 수 있는 시간 내에 유의미한 ABM을 구축하는 것은 불가능한 일.&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;1. 사람들의 일상적인 행동에 대한 더욱 많은 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 인구의 heterogeneities들을 잘 나타내고, 가상 정책 실험을 수행할 수 있는 / 우리 사회를 디지털적으로 복제한 대규모 모듈식 ABM을 구성하는 것.&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>Transmission dynamics/Paper Review</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/43</guid>
      <comments>https://dot-learning.tistory.com/43#entry43comment</comments>
      <pubDate>Tue, 4 Oct 2022 13:16:59 +0900</pubDate>
    </item>
    <item>
      <title>Pandas-2. Pandas Data Structure : Series / DataFrame</title>
      <link>https://dot-learning.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Pandas는 기본 데이터 구조로 Series와 DataFrame이 존재한다.&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;Series&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Series는 Pandas의 기본 데이터 구조로, Numpy 라이브러리의 배열이나, 기존 C/CPP에서의 배열과 비슷한 구조이지만, 다양한 형태의 인덱스를 갖는 다는 점에서 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0에서 부터 시작하여 순차적으로 1씩 인덱스가 증가하는 제로베이스(zero-based) 인덱스 뿐만 아니라, 날짜, 이름 등 여러가지 형태의 인덱스를 만들어낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬의 딕셔너리와 리스트가 합쳐진 형태라고 생각해볼 수 있다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DataFrame&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Series의 경우, 각 인덱스 레이블 당 하나의 값만이 매칭되는 형태이므로, 다양한 자료를 동시에 한 인덱스로 지정할 수 없다. 이를 보완하는 자료 구조가 DataFrame이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DataFrame은 한 인덱스 레이블에 복수의 데이터를 가질 수 있도록 하며, 각 종류의 데이터가 담긴 Series가 인덱스 레이블을 기준으로 나열되어있는 형태라고 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DataFrame의 각 열은 Series이며, 각각의 열은 이름을 가질 수 있다. (데이터 항목의 이름)&amp;nbsp;&lt;/p&gt;</description>
      <category>Development language/Pandas</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/42</guid>
      <comments>https://dot-learning.tistory.com/42#entry42comment</comments>
      <pubDate>Wed, 28 Sep 2022 14:01:48 +0900</pubDate>
    </item>
    <item>
      <title>Pandas-1. Pandas와 데이터 처리 프로세스</title>
      <link>https://dot-learning.tistory.com/41</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Pandas&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 처리에는 R package를 전통적으로 사용되어오고 있다. Pandas는 이 R package를 단일 라이브러리로 구성하여 파이썬을 통해 데이터 처리를 할 수 있도록 해주는 오픈소스 데이터 분석 라이브러리이다.&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;데이터 처리 프로세스&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 크게 5가지의 단계를 통해 데이터를 처리한다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&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;획득은 데이터를 획득하는 것을 의미한다. 데이터를 센서 등을 통해 직접 수집할 수도 있고, 외부에서 만들어진 데이터를 수집해올 수도 있다. 문제는, 이러한 데이터들이 우리가 원하는 용도로 바로 사용할 수 있을 정도로, 잘 다듬어진 경우가 거의 없다는 것이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;데이터를 획득하는 대표적인 방법으로는 API를 통해 데이터를 받아오는 방법, 정부나 기업에서 제공하고 있는 데이터를 CSV파일, 엑셀 파일의 형태로 받아오는 방법 등이 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;앞서 살펴보았듯, 우리가 획득한 데이터는 우리가 바로 사용하기에 적합하지 않은 경우가 대부분이다. 다음과 같은 경우에 그렇다고 할 수 있다. 수집단계에서 부터 잘못 수집된 데이터이거나, 데이터의 일부가 유실됐거나, 데이터 포맷이 우리가 사용하기에 적합하지 않거나, 단위가 적절하지 않거나, 상세하지 않거나, 여러 출처의 데이터를 종합해야 하는 경우이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;이러한 경우에, 우리는 적합한 형태로 데이터를 잘 다듬어야 한다. 이를 데이터 정돈(Tidying up)이라 한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Pandas는 결측치 처리, 데이터 포맷 변환, 데이터셋 병합, 데이터 그룹화 등 여러가지 툴을 제공한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;잘 처리된 데이터를 우리가 주장하는 바를 뒷받침하도록 근거로 가공할 준비를 하는 단계이다. 변수들 사이의 관계를 찾아내고, 분포를 분석하고, 적절한 시각화 등을 통해, 데이터가 근거로 사용할 수 있는지를 분석한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;주피터 노트북과 Pandas를 함께 사용한다면, 이 단계를 굉장히 효율적으로 처리할 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;탐색단계를 통해 발굴한 데이터의 특성들을 통해, 데이터가 의미하는 바를 알아내는 과정이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;데이터의 특성을 통해 데이터가 가진 의미를 나타내는 구조를 모델(model)이라 한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Pandas는 그 자체로 강력한 데이터 모델링 기능을 제공하고, 필요하다면, python 생태계의 또다른 라이브러리를 융합하여 보다 더 전문적인 분석을 할 수도 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;모델링을 통해 밝혀낸 데이터의 의미를 다른 사람에게 잘 전달하는 과정이다.&lt;/li&gt;
&lt;li&gt;이를 위해서 적당한 그래프와 주석을 통해, 상대방에게 이 데이터가 어떤 의미를 갖고있는지 객관적, 논리적으로 전달하게 된다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Development language/Pandas</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/41</guid>
      <comments>https://dot-learning.tistory.com/41#entry41comment</comments>
      <pubDate>Wed, 28 Sep 2022 13:22:49 +0900</pubDate>
    </item>
    <item>
      <title>Python-15. File-1 / 파일 입출력 / Open함수 / read메소드 / close메소드 / with구문</title>
      <link>https://dot-learning.tistory.com/39</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Q. 파일 입출력?&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;말 그대로, 파일을 읽고 쓰는 과정에 관련된 것을 의미한다. 프로그램의 작동과정에서 어떤 데이터를 불러와야 하는 경우도 있고, 만들어낸 데이터를 특정한 파일에 저장해야하는 경우도 있다. 이러한 기능을 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;&lt;i&gt;※파일 입출력의 경우, 언어에 따라 그 방식이 꽤 상이한 경우가 많다. 이 포스트에서는 Python을 통한 입출력만을 다룬다.&lt;/i&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;우리가 파일이라고 일컫는 데이터들은 그 형태가 매우 다양하다.&amp;nbsp;예를 들어, 가장 간단한 형태라고 할 수 있는 텍스트 파일부터, 음악, 비디오, 엑셀 등등 여러가지 응용프로그램에서 작성하는 파일의 형태가 매우 다양하게 존재한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;가장 간단한 형태인 텍스트 파일의 경우, 그 파일을 이루는 데이터는 오로지 문자들로 이루어진 내용물만 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, 다른 형태의 파일인 경우, 그 파일의 형태(포맷)에 대한 정보를 표현하고자 하는 데이터와 함께 저장한다.&amp;nbsp;(이는 엑셀과 같은 파일에 아무것도 작성하지 않은채로 저장했을 때, 그 파일의 용량을 확인해보면 알 수 있다. 텍스트 파일을 제외한 그 어떤 파일도 어떤 데이터를 포함하지 않았을 때 그 용량이 0byte인 경우는 없다!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;따라서, 특정 포맷은 특정 응용프로그램에서만 온전하게 열어 그 안의 내용물을 확인할 수 있는 것이다.&amp;nbsp;(ppt파일을 메모장에서 열 수는 없다!)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;텍스트 파일이 가장 기초적인 파일이고, 읽고 쓰는 것에 있어서 상대적으로 자유로우므로, 텍스트 파일을 통해 파일 입출력에 대해 알아보자.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Text File&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;우선, 텍스트 파일은 위에 언급된 특징으로 인해 가장 적은 디스크 공간을 차지하고, 처리하기 쉬우며, 오로지 문자만을 저장할 수 있다. 파일의 확장자로 .txt를 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;.py&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;파이썬 파일의 기본 저장 파일인 .py파일 역시 텍스트 파일의 일종이다. (.py파일을 메모장으로 열 수 있다!)&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;파이썬 인터프리터는 .py확장자를 가진 텍스트 파일을 읽을 수 있는 기능을 가진 프로그램이고, 그 파일을 읽어 프로그램으로 실행하는 일종의 프로그램이다. (상자 안의 상자 안의 상자 같은 느낌...!)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Python을 통해 파일 열기&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음 해본다면 꽤 헷갈릴 수 있기 때문에, 예시와 함께 알아보자.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 경로(directory) 만들기&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;1045&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xaRqB/btrwaES8QVD/Fft4wj8msEdKFvGuiueda1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xaRqB/btrwaES8QVD/Fft4wj8msEdKFvGuiueda1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xaRqB/btrwaES8QVD/Fft4wj8msEdKFvGuiueda1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxaRqB%2FbtrwaES8QVD%2FFft4wj8msEdKFvGuiueda1%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;1045&quot; height=&quot;191&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;191&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;이제 이 위치에 텍스트 파일을 작성하여 저장하고, .py파일을 코딩하여 저장한 뒤 실행시키면 된다!&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;/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;818&quot; data-origin-height=&quot;153&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZHGPU/btrwagSvpkY/aX2yYXGWQM4hApiXVY8tfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZHGPU/btrwagSvpkY/aX2yYXGWQM4hApiXVY8tfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZHGPU/btrwagSvpkY/aX2yYXGWQM4hApiXVY8tfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZHGPU%2FbtrwagSvpkY%2FaX2yYXGWQM4hApiXVY8tfk%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;818&quot; height=&quot;153&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;153&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이와 같이 윈도우 메모장(note pad)(다른 운영체제의 경우 해당 운영체제에 존재하는 텍스트 편집기를 사용하자)에 위와 같이 텍스트를 작성하자.&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;3. 작성한 텍스트 파일을 만들어둔 경로에 저장&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;1176&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6iP3e/btrv6euREh6/lsK6nzpfqnYlRD35brF9tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6iP3e/btrv6euREh6/lsK6nzpfqnYlRD35brF9tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6iP3e/btrv6euREh6/lsK6nzpfqnYlRD35brF9tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6iP3e%2Fbtrv6euREh6%2FlsK6nzpfqnYlRD35brF9tK%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;1176&quot; height=&quot;707&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;707&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이와 같이, 1의 단계에서 생성한 경로에 텍스트 파일을 저장해주자! 이때, 텍스트 파일의 이름을 통해 파이썬 프로그램에서 파일을 불러와야 하므로, 이름을 잘 기억해두자!&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. 파일을 여는 프로그램을 파이썬을 통해 .py형식으로 작성 후, 3의 단계에서 텍스트 파일을 저장한 경로에 저장.&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;&amp;nbsp;미리 빌트인된 함수 중 open 함수를 사용해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1647437958721&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;file = open('Sample text.txt','r')
contents = file.read()
print(contents)
file.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 위와 같은 코드를 작성해서, .py파일로 3의 경로와 같은 경로에 저장해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ENCSQ/btrwbqmPtBe/7RqUxYkCaBdJQwPE6KU1j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ENCSQ/btrwbqmPtBe/7RqUxYkCaBdJQwPE6KU1j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ENCSQ/btrwbqmPtBe/7RqUxYkCaBdJQwPE6KU1j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FENCSQ%2FbtrwbqmPtBe%2F7RqUxYkCaBdJQwPE6KU1j1%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;1172&quot; height=&quot;704&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;704&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이후, 작성된 .py파일을 실행시켜보자. 실행시키는 것은 간단하다. 에디터 창을 끄지 말고 그대로 실행시키면 된다.&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;575&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v1h7Q/btrv8bYJjWq/3oMi4D9T8EPwr2Y8vkHpB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v1h7Q/btrv8bYJjWq/3oMi4D9T8EPwr2Y8vkHpB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v1h7Q/btrv8bYJjWq/3oMi4D9T8EPwr2Y8vkHpB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv1h7Q%2Fbtrv8bYJjWq%2F3oMi4D9T8EPwr2Y8vkHpB1%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;575&quot; height=&quot;174&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;174&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이제 어떻게 위와 같은 과정을 통해 파일을 불러오는지 한줄한줄 코드를 뜯어보며 알아보자.&lt;/p&gt;
&lt;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;첫번째 코드는 간단하다. open 함수를 사용하여 파일을 불러와 file객체에 저장하게 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1647593445113&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;file = open('Sample text.txt','r')&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Open()&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;open 함수의 매개변수를 보면, 첫번째 매개변수로 파일의 이름을 입력받고, 두번째 매개변수로 파일을 어떤 목적으로 여는지에 대한 변수를 입력받는다. 이때, 두번째 매개변수로 입력된 'r' 즉 문자 r은 읽기모드로 파일을 불러옴을 의미한다.&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;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;두번째 줄&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1647438560179&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;contents = file.read()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;첫번째 줄에서 우리는 Sample text 파일에 대한 객체를 open 함수를 통해 생성하였다. 우리가 이 객체 안에 담긴 내용을 사용하기 위해서는 위 과정을 통해 생성된 객체의 read()메소드를 사용해야 한다.&lt;/p&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;*여기서 &quot;굳이 한번으로 끝날 일을 왜 두번에 나누어서 하는거지?&quot;라는 혼란이 생길 수 있다. 이는 open함수를 통해 생성된 객체에 대한 이해를 통해 해결할 수 있다. open함수를 통해 생성된 객체는 파일 커서의 위치에 대한 정보만을 담고 있다고 생각해볼 수 있다. 워드 프로세서를 사용할 때, 우리는 깜빡이는 커서를 통해 내가 어디쯤에 글을 쓰고 있는지, 또는 어디쯤에 글을 읽고 있는지 알 수 있다. 이를 그대로 적용해보면, open함수를 통해 파일을 열게 될 때, 그 반환값인 객체는 해당 파일에서의 파일 커서라고 생각할 수 있다. 우리가 파일을 읽을 때, 파일커서를 한칸씩 움직이며 내용을 읽어내려가듯, open함수를 통해 생성된 객체 역시 그러한 파일 커서의 움직임을 재현하는 객체라고 생각할 수 있다.&amp;nbsp;아래의 read메소드에 대해 알아보며 더 자세히 알아보도록 하자.&lt;/p&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;style2&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;read()&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 메소드는 open함수로 생성된 객체가 가지는 파일 속의 내용을 텍스트의 형태로 가져와 반환하는 함수이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 두번째 줄의 코드에서 file.read()라는 형태로 객체의 메소드를 사용하였고, 그 결과로 반환된 텍스트 즉 파일 속의 내용을 contents라는 객체에 문자열의 형태로 다시 담아주게 되는 것이다.&lt;/p&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;이를 통해 알 수 있는 점은, 우리는 open함수를 통해 얻게 된 객체를 통해 불러온 파일의 내용을 바로 알아볼 수는 없음을 의미한다. (open을 통해 얻게 된 객체는 파일의 내용이 아니라, 파일을 읽고 쓸 수 있는 커서를 가져온 것과 같은 것이기 때문에..!) 우리는 이 커서의 행동 즉 메소드를 통해 파일이 가지고 있는 내용을 읽거나 쓸 수 있다. read메소드는 이러한 관점에서, 커서가 파일을 읽는 행동을 수행하는 메소드라고 이해할 수 있다.&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;주의할 점은, 이 파일을 읽어내는 커서는 왼쪽에서 오른쪽으로, 위에서 아래로의 방향으로만 움직인다는 것이다! 즉, 파일을 읽다가 내가 원하는 지점으로 으로 돌아가서 다시 읽는 등의 동작을 수행할 수 없다! 또, 커서가 몇칸의 내용물을 읽을지에 대해서 매개변수로 넘겨줄 수 있다. 이때, 이 커서의 위치는 read메소드를 수행한 뒤 초기화되지 않는다. 아래의 예제를 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1647593504981&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;file = open('Sample text.txt','r')

contents1 = file.read(12)
contents2 = file.read()

print(contents1)
print(contents2)

file.close()&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;591&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y5Den/btrwk4kjexL/3Z2lATPkOJ5bnksMKK4RhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y5Den/btrwk4kjexL/3Z2lATPkOJ5bnksMKK4RhK/img.png&quot; data-alt=&quot;실행결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y5Den/btrwk4kjexL/3Z2lATPkOJ5bnksMKK4RhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY5Den%2Fbtrwk4kjexL%2F3Z2lATPkOJ5bnksMKK4RhK%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;591&quot; height=&quot;188&quot; data-origin-width=&quot;591&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실행결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위의 예시에서 알 수 있듯, read메소드에 매개변수로 숫자를 입력하게 되면, 해당 숫자만큼의 개수만큼 파일커서를 이동시키며 내용물을 읽어내고, 매개변수가 존재하지 않는다면, 파일의 끝까지 내용물을 읽어내게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;물론, 의도적으로 파일을 끝까지 읽지 않고 4번째 줄의 close메소드를 사용할 수 있다. 이에 대해서는 해당 문단에서 다시한번 알아보자.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;세번째 줄&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1647438830187&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(contents)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;contents에 저장된 문자열을 출력. 이때, contents에 저장된 문자열은 두번째 줄에서 알아보았듯 불러온 파일의 내용물이다.&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;style5&quot; /&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_1647439017276&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;file.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;open함수로 생성된 객체를 오류없이 닫아주는 close() 메소드를 사용한다.&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;style2&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;close()&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 메소드의 경우, 위의 설명 그대로, open함수로 생성된 객체를 제거하는 역할을 한다. 이후 다시 파일을 open함으로써, 위에서 언급했던 read()메소드를 사용한 후의 커서 위치를 초기화시켜줄 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;또한, 파일을 open했다면 반드시 close해주어야 한다. 이후에 파일이 다시 사용될 때 의도치 않은 커서위치로 인해 오류가 발생하는 것을 막는 등의 이유로 인해 습관을 들여야 한다.&lt;/p&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;그러나 매번 이러한 방식으로 파일을 읽고 쓰는 것은 어찌보면 상당히 귀찮은 일일 수 있다. 따라서, 이를 해결하기 위해 파이썬에서는 with구문을 사용할 수 있다.&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;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;with Statement&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;with 구문은 명시하지 않아도, open을 통해 생성된 객체의 close메소드를 사용하게 해주는 구문이라고 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용방법은 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1647593980131&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;with open('Sample text.txt','r') as file:
    contents = file.read()

print(contents)&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;574&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pg2on/btrwmrlvuu5/IkiD9lnPgMEpifYDrtJNVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pg2on/btrwmrlvuu5/IkiD9lnPgMEpifYDrtJNVK/img.png&quot; data-alt=&quot;실행결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pg2on/btrwmrlvuu5/IkiD9lnPgMEpifYDrtJNVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPg2on%2Fbtrwmrlvuu5%2FIkiD9lnPgMEpifYDrtJNVK%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;574&quot; height=&quot;67&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실행결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;close메소드를 명시해 사용한 이전의 예시와 실행결과가 일치함을 알 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 의미를 다시 생각해보면, open()함수로 파일을 불러와 객체를 생성한다는 것은 우리가 우리가 윈도우 상에서 더블클릭을 통해 어떤 파일을 여는 것과 같은 행동이라고 할 수 있다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Development language/Python</category>
      <category>close메소드</category>
      <category>File</category>
      <category>open함수</category>
      <category>Python</category>
      <category>Python file io</category>
      <category>read메소드</category>
      <category>with 구문</category>
      <category>파이썬</category>
      <category>파이썬 파일</category>
      <category>파일 입출력</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/39</guid>
      <comments>https://dot-learning.tistory.com/39#entry39comment</comments>
      <pubDate>Fri, 18 Mar 2022 18:05:45 +0900</pubDate>
    </item>
    <item>
      <title>Machine Vision-8. 딥러닝 모델을 효과적으로 학습시키기 위한 여러가지 창의적인 방법들 / 전이학습 / 캡슐 네트워크 / 앞으로의 방향</title>
      <link>https://dot-learning.tistory.com/38</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;전이 학습&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;앞서 설명한 모델들은 전부 모델을 충분히 학습시키기 위해 다양한 이미지로 구성된 대규모 데이터세트를 요구한다&lt;span&gt;. &lt;/span&gt;그러나&lt;span&gt;, &lt;/span&gt;데이터세트 자체가 구하기 어렵고&lt;span&gt;, &lt;/span&gt;비싸며 훈련 과정에서도 굉장한 계산 비용을 요구한다&lt;span&gt;. CNN&lt;/span&gt;에 대한 설명을 할 때에&lt;span&gt;, CNN&lt;/span&gt;은 이미지에서 일반적인 특성을 학습한다는 것을 말했다&lt;span&gt;. &lt;/span&gt;다시 말하자면 &lt;span&gt;CNN&lt;/span&gt;의 얕은 층에서는 직선&lt;span&gt;, &lt;/span&gt;모서리&lt;span&gt;, &lt;/span&gt;색&lt;span&gt;, &lt;/span&gt;간단한 모양 등을 학습하고&lt;span&gt;, &lt;/span&gt;깊은 층에서는 이 간단한 요소들의 조합을 통해 질감&lt;span&gt;, &lt;/span&gt;형태의 조합&lt;span&gt;, &lt;/span&gt;물체의 일부분과 같은 부분을 학습할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;전이 학습은 사전 훈련된 &lt;span&gt;CNN&lt;/span&gt;의 특성 맵에 포함된 시각 요소를 재사용하여 새로운 종류의 물체를 인식하도록 하는 것이다&lt;span&gt;. &lt;/span&gt;간단히 말해 보조개 패턴과 같이 움푹 파인 패턴을 학습한 특성 맵을 원 패턴을 학습한 특성 맵과 연결하면 골프공을 인식할 수 있는 것이다&lt;span&gt;. &lt;/span&gt;이를 통해 모델 개발자는 많은 양의 데이터를 비싸게 구할 필요도 상대적으로 적고&lt;span&gt;, &lt;/span&gt;계산 비용이 획기적으로 줄어든다는 장점이 존재한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이를 위해 파이썬의 케라스와 같은 딥러닝 프레임워크는 상대적으로 간단한 코드를 통해 전이 학습을 진행할 수 있도록 하고 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;캡슐 네트워크&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;지금까지 언급된&lt;span&gt; CNN&lt;/span&gt;의 경우 물체들의 위치 정보를 고려한 분류는 불가능하다&lt;span&gt;. (&lt;/span&gt;사람의 얼굴을 담은 이미지에서 눈과 코의 위치가 바뀌어도&lt;span&gt;, &lt;/span&gt;그 형태가 온전하다면 &lt;span&gt;CNN&lt;/span&gt;은 그 이미지를 사람의 얼굴로 판단할 것이다&lt;span&gt;.) &lt;/span&gt;그러나 토론토 구글 브레인 팀의 사라 사보어가 제시한 캡슐 네트워크는 이미지 특성의 상대적 위치까지 고려하여 이미지를 분류해낼 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;그러나&lt;span&gt;, &lt;/span&gt;이 모델의 경우&lt;span&gt;, &lt;/span&gt;초기 단계의 모델이기에 계산 복잡도가 높아 널리 사용되기에는 무리가 있다&lt;span&gt;. &lt;/span&gt;따라서&lt;span&gt;, &lt;/span&gt;현재 학계에서는 캡슐 네트워크 개선을 포함해서 특성 맵의 상대적 위치까지 고려하는 모델을 개발하는 것에 초점을 맞추고 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;8개의 포스트를 통해서 머신 비젼을 구현하는 여러가지 방법들을 알아보았다. 앞으로 이 모델들을 가능하다면 구현해보고, 조금 더 자세히 알아보도록 할 것이다.&lt;/p&gt;</description>
      <category>Machine Learning</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/38</guid>
      <comments>https://dot-learning.tistory.com/38#entry38comment</comments>
      <pubDate>Wed, 26 Jan 2022 13:39:56 +0900</pubDate>
    </item>
    <item>
      <title>Machine Vision-7. 이미지 분할 딥러닝 모델 알고리즘 / Mask R-CNN / U-Net</title>
      <link>https://dot-learning.tistory.com/37</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 분할&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;사람의 시야는 일부분 겹쳐서 보이는 사물과 배경을 매우 쉽게 구분한다&lt;span&gt;. &lt;/span&gt;이러한 부분에서 불과 몇 면전까지 머신 러닝을 통한 영상 처리의 방법은 사람의 그것을 쉽게 뛰어넘을 수 없었다&lt;span&gt;. &lt;/span&gt;이를 해결하기 위해 이미지 분할 이라는 딥러닝 애플리케이션이 발전하였다&lt;span&gt;. &lt;/span&gt;객체 탐지를 목표로 하는 여러 모델들과는 여러 부분에서 다른데&lt;span&gt;, &lt;/span&gt;간단히 말하자면&lt;span&gt;, &lt;/span&gt;&lt;u&gt;&lt;b&gt;객체 탐지의 경우 대략적인 바운딩 박스로 물체의 위치를 정의하지만&lt;span&gt;, &lt;/span&gt;이미지 분할의 경우 픽셀 수준에서 객체의 위치를 예측한다는 점이 큰 차이이다&lt;span&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;유명한 모델로는 &lt;span&gt;Mask R-CNN&lt;/span&gt;과 &lt;span&gt;U-Net&lt;/span&gt;이 존재한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 분할 &lt;span&gt;&amp;ndash; Mask R-CNN&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;Mask R-CNN&lt;/span&gt;&lt;span&gt;의 경우 페이스북 &lt;span&gt;AI &lt;/span&gt;리서치&lt;span&gt;(FAIR)&lt;/span&gt;에서 발표한 이미지 분할 모델이다&lt;span&gt;.&lt;a href=&quot;#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;이 모델은 다음과 같은 파이프라인을 갖는다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VPNSk/btrrIfj9Tsy/D2cyTh8CJLkMetPwvqr9K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VPNSk/btrrIfj9Tsy/D2cyTh8CJLkMetPwvqr9K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VPNSk/btrrIfj9Tsy/D2cyTh8CJLkMetPwvqr9K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVPNSk%2FbtrrIfj9Tsy%2FD2cyTh8CJLkMetPwvqr9K0%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;668&quot; height=&quot;422&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Faster R-CNN&lt;/span&gt;&lt;span&gt;구조를 통해 이미지에서 객체가 존재할 것으로 예측되는 &lt;span&gt;ROI &lt;/span&gt;추출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ROI&lt;/span&gt;&lt;span&gt;분류기가 바운딩 박스에 어떤 종류의 물체가 있는지 예측하고&lt;span&gt;, &lt;/span&gt;위치와 크기 조정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;바운딩 박스를 통해 해당 이미지 부분의&lt;span&gt; CNN &lt;/span&gt;특성 맵 추출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;4.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;각 &lt;span&gt;ROI&lt;/span&gt;에 대한 특성 맵을 완전 합성곱 신경망&lt;span&gt;(&lt;/span&gt;마지막에 밀집층을 두지 않고 온전히 합성곱 층들 만으로 이루어진 신경망&lt;span&gt;)&lt;/span&gt;에 주입하여 물체에 해당하는 픽셀을 나타내는 마스크를 출력&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이 과정을 보면 알 수 있겠지만&lt;span&gt;, &lt;/span&gt;결국 &lt;span&gt;Mask R-CNN &lt;/span&gt;모델의 경우 객체 탐지 모델에서 한발짝 더 나아가 여러가지 처리를 거쳐 픽셀 단위로 물체의 위치를 나타낸다&lt;span&gt;. &lt;/span&gt;이때&lt;span&gt;, &lt;/span&gt;완전 합성곱 신경망을 학습시키기 위해 물체의 위치정보를 갖는 이진 마스크 데이터가 필요하다&lt;span&gt;. (&lt;/span&gt;이진 마스크는 주입되는 이미지와 크기가 같고&lt;span&gt;, &lt;/span&gt;오로지 물체가 존재하는 부분을 &lt;span&gt;1 &lt;/span&gt;존재하지 않는 부분을 &lt;span&gt;0&lt;/span&gt;으로 나타낸&lt;span&gt; 2&lt;/span&gt;차원 배열을 의미한다&lt;span&gt;.) &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이미지가 &lt;span&gt;n&lt;/span&gt;개의 다른 물체를 포함한다면&lt;span&gt;, n&lt;/span&gt;개의 이진 마스크가 존재해야 학습시킬 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;이미지 분할 &lt;span&gt;&amp;ndash; U-Net&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이 모델은 프라이베르크 대학교에서 개발한 이미지 분할 모델이다&lt;span&gt;. &lt;/span&gt;이 모델의 경우 생의학 이미지를 분할할 목적으로 만들어졌다&lt;span&gt;. &lt;/span&gt;이 모델은 완전 합성곱 구조로 구성되어 있는데&lt;span&gt;, &lt;/span&gt;그 구조는 다음과 같다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dllGIf/btrrKybPthH/WpMRrRwpID6GmHbo2cRkk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dllGIf/btrrKybPthH/WpMRrRwpID6GmHbo2cRkk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dllGIf/btrrKybPthH/WpMRrRwpID6GmHbo2cRkk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdllGIf%2FbtrrKybPthH%2FWpMRrRwpID6GmHbo2cRkk1%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;734&quot; height=&quot;488&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;압축 경로&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;여러 개의 합성 곱과 최대 풀링 단계를 통해 활성화 맵을 계속 작고 깊게 만든다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;팽창 경로&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;여러 개의 업샘플링과 합성 곱 단계를 통해 깊은 활성화 맵을 원래 해상도로 복원한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;위의 압축 팽창 경로는 서로 대칭적인데&lt;span&gt;, &lt;/span&gt;이러한 대칭성을 바탕으로 압축 경로의 활성화 맵을 팽창 경로의 활성화 맵에 연결하는 것이 가능하다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;모델은 압축 경로를 통해 이미지에서 고해상도 특성을 학습하고&lt;span&gt;, &lt;/span&gt;이 활성화 맵을 바로 팽창 경로의 활성화 맵에 연결해 고해상도 특성을 팽창 경로로 직접 전달한다&lt;span&gt;. &lt;/span&gt;팽창 경로의 끝에서는 모델이 최종 이미지 차원 안에 존재하는 압축 경로의 결과 특성을 손쉽게 찾아낼 수 있다&lt;span&gt;. &lt;/span&gt;결과적으로&lt;span&gt;, &lt;/span&gt;압축 경로의 특성 맵을 팽창 경로로 연결한 후 이어지는 합성곱 층으로 이런 특성을 조합하여 정확한 위치를 찾아낸다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; size=&quot;1&quot; width=&quot;33%&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div id=&quot;ftn1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;#_ftnref1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; HE, K. et al. (2017). Mask R-CNN. arXiv:1703.06870&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Machine Learning</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/37</guid>
      <comments>https://dot-learning.tistory.com/37#entry37comment</comments>
      <pubDate>Wed, 26 Jan 2022 13:36:12 +0900</pubDate>
    </item>
    <item>
      <title>Machine Vision-6. 객체 탐지 딥러닝 모델 / R-CNN / Fast R-CNN / Faster R- CNN / YOLO</title>
      <link>https://dot-learning.tistory.com/36</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;객체 탐지&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;앞선 신경망 구조들은 이미지 분류에 초점을 맞춘 모델들이었다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;그렇다면, 고전적인 방법에서 많이 연구된 영상 처리를 통한 객체 탐지의 경우 딥러닝 모델에선 어떤 방식으로 구현할 수 있을까?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;우선&lt;span&gt;, &lt;/span&gt;객체 탐지가 어떤 과정으로 이루어지는지 생각해보아야 한다&lt;span&gt;. &lt;/span&gt;객체 탐지의 경우 세 단계의 파이프라인으로 그 과정을 구성해볼 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;관심있는 영역 찾기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;특성 추출&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;특성에 따른 분류&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;이와 같은 파이프라인을 수행하는 모델은 대표적으로&lt;u&gt;&lt;b&gt; &lt;span&gt;R-CNN, Fast R-CNN, Faster R-CNN, YOLO&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;가 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;객체 탐지 &lt;span&gt;&amp;ndash; R-CNN&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;R-CNN&lt;/span&gt;&lt;span&gt;의 경우 &lt;span&gt;UC &lt;/span&gt;버클리의 로스 거쉭이 &lt;span&gt;2013&lt;/span&gt;년 소개한 방법이다&lt;span&gt;. &lt;/span&gt;이 알고리즘은 사람의 어텐션 메커니즘을 본떠 만들어졌는데&lt;span&gt;, &lt;/span&gt;전체 장면을 스캔하고 관심있는 특정 영역에 초점을 맞추는 방식으로 작동한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;그 과정은 다음과 같다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duSWz7/btrrJT1HYZS/nhW3pSOoEj3nbjeB8oJslk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duSWz7/btrrJT1HYZS/nhW3pSOoEj3nbjeB8oJslk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duSWz7/btrrJT1HYZS/nhW3pSOoEj3nbjeB8oJslk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduSWz7%2FbtrrJT1HYZS%2FnhW3pSOoEj3nbjeB8oJslk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;686&quot; height=&quot;424&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;424&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이미지에 존재하는 &lt;span&gt;ROI(Region of interest)&lt;/span&gt;를 찾기 위해 선택적 탐색&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CNN&lt;/span&gt;&lt;span&gt;을 통해 &lt;span&gt;ROI&lt;/span&gt;에서 특성 추출&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;전통적인 머신러닝 방법인 선형회귀와 서포트 벡터 머신을 연결하여 바운딩 박스의 위치를 정제하고 박스 안의 물체를&lt;span&gt; 2&lt;/span&gt;의 과정에서 추출된 특성을 통해 분류&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;그러나&lt;span&gt;, &lt;/span&gt;이 알고리즘의 경우 몇가지의 문제점이 존재했는데&lt;span&gt;, &lt;/span&gt;입력 크기가 특정 이미지 크기로 고정되어 유연하지 않았다&lt;span&gt;. &lt;/span&gt;또&lt;span&gt;, &lt;/span&gt;훈련과 추론 과정에서 &lt;span&gt;CNN, &lt;/span&gt;선형회귀&lt;span&gt;, &lt;/span&gt;서포트 벡터 머신을 포함한 여러 단계의 계산을 거쳐야 하기때문에 느리고 계산비용이 많이 소모되었다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;객체 탐지 &lt;span&gt;- Fast R-CNN&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이 알고리즘 역시&lt;span&gt; UC &lt;/span&gt;버클리의 로스 거쉭이 개발한 방식이다&lt;span&gt;.&lt;a href=&quot;#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;주된 개선점은 &lt;span&gt;ROI&lt;/span&gt;마다 한번씩 여러 번 심층신경망&lt;span&gt;(CNN)&lt;/span&gt;이 작동되는 것을 발견하고&lt;span&gt;, ROI&lt;/span&gt;탐색은 &lt;span&gt;R-CNN&lt;/span&gt;과 같은 방식으로 진행되지만&lt;span&gt;, 2&lt;/span&gt;번째 단계에서 &lt;span&gt;CNN&lt;/span&gt;이 이미지를 한번만 파악하고 모든 &lt;span&gt;ROI&lt;/span&gt;에 대한 특성을 동시에 추출한다는 점이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfsAKw/btrrJUM88kI/FquyIkLVKFh5WCxq3J3V9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfsAKw/btrrJUM88kI/FquyIkLVKFh5WCxq3J3V9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfsAKw/btrrJUM88kI/FquyIkLVKFh5WCxq3J3V9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfsAKw%2FbtrrJUM88kI%2FFquyIkLVKFh5WCxq3J3V9K%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;781&quot; height=&quot;319&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이때&lt;span&gt;, CNN&lt;/span&gt;의 마지막 층에서 특성 벡터를 추출하여 &lt;span&gt;ROI&lt;/span&gt;와 함께 밀집 신경망에 주입하는데&lt;span&gt;, &lt;/span&gt;이 밀집 신경망은 &lt;span&gt;ROI&lt;/span&gt;에 적용할 수 있는 특성에만 초점을 맞추어 학습을 한다&lt;span&gt;. &lt;/span&gt;이 밀집 신경망은 &lt;span&gt;2&lt;/span&gt;개의 출력을 만드는데&lt;span&gt;, &lt;/span&gt;분류 카테고리에 대한 소프트 맥스 확률을 출력하고&lt;span&gt;, ROI&lt;/span&gt;위치 조정을 위한 바운딩 박스 회귀를 출력한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이와 같은 방식으로 인해&lt;span&gt;, &lt;/span&gt;이전 &lt;span&gt;R-CNN&lt;/span&gt;이 여러 개의 모델을 합쳐 만드는 알고리즘이었던 반면&lt;span&gt;, Fast R-CNN&lt;/span&gt;의 경우 단일 모델로 구성되고&lt;span&gt;, &lt;/span&gt;여러가지의 개선을 통해 계산 복잡도를 줄여 수행속도가 빨라졌다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;그러나&lt;span&gt;, ROI&lt;/span&gt;탐색 부분에서 여전히 높은 계산 복잡도를 갖는다는 점을 단점으로 갖는다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;4.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;객체 탐지 &lt;span&gt;- Faster R-CNN&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;Faster R-CNN&lt;/span&gt;&lt;span&gt;의 경우 이름에서부터 알 수 있듯&lt;span&gt;, &lt;/span&gt;기존의 &lt;span&gt;R-CNN &lt;/span&gt;알고리즘들보다 더 빠른 알고리즘이다&lt;span&gt;. &lt;/span&gt;이 알고리즘의 경우 &lt;span&gt;2015&lt;/span&gt;년 마이크로소프트 리서치의 샤오칭 렌이 제시하였다&lt;span&gt;.&lt;a href=&quot;#_ftn2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bewvjL/btrrKHGIM0V/Gkpl8KOw8n2j394dPeaj81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bewvjL/btrrKHGIM0V/Gkpl8KOw8n2j394dPeaj81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bewvjL/btrrKHGIM0V/Gkpl8KOw8n2j394dPeaj81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbewvjL%2FbtrrKHGIM0V%2FGkpl8KOw8n2j394dPeaj81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;328&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이 모델의 경우&lt;span&gt;, &lt;/span&gt;기존 &lt;span&gt;R-CNN&lt;/span&gt;계열 모델의 문제점 이었던 &lt;span&gt;ROI &lt;/span&gt;탐색 과정의 병목을 해결하기 위해 이 모델에 포함된 &lt;span&gt;CNN&lt;/span&gt;의 특성 활성화 맵을 사용한다&lt;span&gt;. &lt;/span&gt;활성화 맵의 경우&lt;span&gt;, &lt;/span&gt;입력 이미지의 구조 정보를 굉장히 많이 담고 있는데&lt;span&gt;, &lt;/span&gt;각 맵은 위치를 나타내는 &lt;span&gt;2&lt;/span&gt;개의 차원을 가지므로&lt;span&gt;(x,y&lt;/span&gt;축&lt;span&gt;) &lt;/span&gt;특성의 위치를 표현한 지도라고 표현할 수 있다&lt;span&gt;. &lt;/span&gt;이를 통해 &lt;span&gt;ROI&lt;/span&gt;위치를 제안하는 과정을 거치므로&lt;span&gt;, &lt;/span&gt;결국 &lt;span&gt;CNN&lt;/span&gt;이 객체 탐지 처리에 필요한 세가지의 단계를 한번에 처리하는 굉장히 빠른 통합 모델을 구축할 수 있게 됐다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;5.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;객체 탐지 &lt;span&gt;&amp;ndash; YOLO&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;앞서 알아본 객체 탐지 알고리즘의 경우 &lt;span&gt;CNN&lt;/span&gt;은 전체 이미지 중 개별 &lt;span&gt;ROI &lt;/span&gt;즉 부분 이미지만을 판별한다&lt;span&gt;. &lt;/span&gt;조셉 레드몬은 &lt;span&gt;2015&lt;/span&gt;년에 이와는 다른 메커니즘을 갖는 &lt;span&gt;YOLO(You Only Look Once)&lt;/span&gt;모델을 발표했다&lt;span&gt;.&lt;a href=&quot;#_ftn3&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EFFOb/btrrI9Rwemb/7ypMuYRFUQOrk4RJetXfek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EFFOb/btrrI9Rwemb/7ypMuYRFUQOrk4RJetXfek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EFFOb/btrrI9Rwemb/7ypMuYRFUQOrk4RJetXfek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEFFOb%2FbtrrI9Rwemb%2F7ypMuYRFUQOrk4RJetXfek%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;759&quot; height=&quot;323&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;YOLO&lt;/span&gt;의 경우 특성추출을 위해 사전 훈련된 &lt;span&gt;CNN&lt;/span&gt;을 먼저 사용한 후&lt;span&gt;, &lt;/span&gt;이미지를 셀 집합으로 나누고 각 셀에 대해 여러 개의 바운딩 박스와 분류 확률을 예측한다&lt;span&gt;. &lt;/span&gt;이 예측 값을 사용해 임계값 보다 큰 클래스 확률과 바운딩 박스를 선택하고&lt;span&gt;, &lt;/span&gt;이를 바탕으로 이미지 안의 객체 위치를 찾아낸다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Faster R-CNN&lt;/span&gt;&lt;span&gt;보다 월등히 빠른 속도를 갖지만&lt;span&gt;, &lt;/span&gt;이미지에 존재하는 작은 물체를 감지하는 것에서는 한계를 보인다&lt;span&gt;. &lt;/span&gt;이를 해결하기 위해 &lt;span&gt;YOLO9000&lt;/span&gt;모델과 &lt;span&gt;YOLOv3&lt;/span&gt;모델 등을 발표하였는데&lt;span&gt;, &lt;/span&gt;모델의 구조를 조금 더 복잡하게 하여 기존의 한계점을 해결한 대신 약간의 속도를 희생하였다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; size=&quot;1&quot; width=&quot;33%&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div id=&quot;ftn1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;#_ftnref1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; Girshick, R. (2015). Fast R-CNN. arXiv:1504.08083&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;#_ftnref2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; Ren, S. et al. (2015). Faster R-CNN: Towards real-time object detection with region proposal networks. arXiv:1506.01497&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;#_ftnref3&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; Redmon, J., et al. (2015). You Only Look Once: Unified, real-time object detection. arXiv:1506.02640&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Machine Learning</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/36</guid>
      <comments>https://dot-learning.tistory.com/36#entry36comment</comments>
      <pubDate>Wed, 26 Jan 2022 13:31:34 +0900</pubDate>
    </item>
    <item>
      <title>Machine Vision-5. 영상 인식을 위한 기초적인 딥러닝 알고리즘 / 신인식기 / LeNet-5 / AlexNet / VGGNet / 잔차 네트워크(Residual Network) ResNet</title>
      <link>https://dot-learning.tistory.com/35</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;앞서 알아보았듯 인공지능의 발전은 영상 처리의 발전과 큰 연관성을 갖는다. 이제 영상 처리를 위해 신경망을 이용한 인공지능 알고리즘의 여러 종류를 알아보자.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;신인식기 &lt;span&gt;/ LeNet-5&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;1970&lt;/span&gt;&lt;span&gt;년 후반&lt;span&gt;, &lt;/span&gt;허블과 비셀의 연구 결과로부터 감명을 받은 일본인 전자공학자 후쿠시마 구니히코&lt;span&gt;(Fukushima Kunihiko)&lt;/span&gt;는 &lt;span&gt;&amp;lsquo;&lt;/span&gt;신인식기&lt;span&gt;&amp;rsquo;&lt;/span&gt;라 불리는 머신러닝 알고리즘에 대한 논문을 발표한다&lt;span&gt;.&lt;a href=&quot;#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;이 알고리즘은 허블과 비셀의 연구를 인용하여&lt;span&gt;, &lt;/span&gt;생물학적 뉴런의 배열처럼 인공 뉴런을 계층적으로 정렬함으로 복잡하고 추상적 객체를 구분할 수 있음을 보였다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/viOQE/btrrDxd3lBk/cvKzFK9ovQFWOjYZE7q1p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/viOQE/btrrDxd3lBk/cvKzFK9ovQFWOjYZE7q1p1/img.png&quot; data-alt=&quot;LeNet-5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/viOQE/btrrDxd3lBk/cvKzFK9ovQFWOjYZE7q1p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FviOQE%2FbtrrDxd3lBk%2FcvKzFK9ovQFWOjYZE7q1p1%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;1051&quot; height=&quot;285&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LeNet-5&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이후&lt;span&gt;, &lt;/span&gt;얀 르쿤과 벤지오는 &lt;span&gt;LeNet-5&lt;/span&gt;라는 신인식기보다 정확도와 효율성 면에서 큰 발전을 이룬 모델을 발표했다&lt;span&gt;. &lt;/span&gt;이 모델은 허블과 비셀의 연구와 후쿠시마 구니히코의 연구를 기반으로 하여&lt;span&gt;, &lt;/span&gt;모델을 구성하였다&lt;span&gt;. &lt;/span&gt;이때&lt;span&gt;, &lt;/span&gt;역전파 알고리즘의 개발과 모델의 훈련에 적합한 많은 데이터&lt;span&gt;, &lt;/span&gt;발전된 컴퓨팅 성능 등에 힘입어 많은 개선을 이루어 낼 수 있었다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;LeNet-5&lt;/span&gt;&lt;span&gt;모델은 &lt;span&gt;2&lt;/span&gt;개의&lt;span&gt; CNN Layer&lt;/span&gt;를 가지며&lt;span&gt;, &lt;/span&gt;각각의 레이어는 &lt;span&gt;6&lt;/span&gt;개의 필터와 &lt;span&gt;16&lt;/span&gt;개의 필터를 사용한다&lt;span&gt;. &lt;/span&gt;또한&lt;span&gt;, &lt;/span&gt;그 사이에 풀링 층을 첨가하여&lt;span&gt;, &lt;/span&gt;총 두번의 풀링을 진행하여 계산의 복잡도를 줄인다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;AlexNet / VGGNet&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;앞선 &lt;span&gt;LeNet&lt;/span&gt;모델은 &lt;span&gt;2&lt;/span&gt;개의 &lt;span&gt;CNN Layer&lt;/span&gt;와 &lt;span&gt;2&lt;/span&gt;개의 풀링층을 가졌는데&lt;span&gt;, &lt;/span&gt;일반적으로 합성곱 신경망에서는 &lt;span&gt;1~3&lt;/span&gt;개의 &lt;span&gt;CNN Layer&lt;/span&gt;와 &lt;span&gt;1&lt;/span&gt;개의 풀링층을 하나의 그룹으로 묶는다&lt;span&gt;. (&lt;/span&gt;이 그룹을 &lt;span&gt;conv-pool &lt;/span&gt;블록이라 표현하기도 한다&lt;span&gt;.) &lt;/span&gt;이 그룹을 여러 번 반복하는 형태로 모델을 구성하고&lt;span&gt;, &lt;/span&gt;마지막에 하나 이상의&lt;span&gt; Dense Layer&lt;/span&gt;와 출력층을 구성하여 모델을 완성한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1277&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UgEtO/btrrEEXS07C/04em4upNqbOp78yUuIFmw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UgEtO/btrrEEXS07C/04em4upNqbOp78yUuIFmw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UgEtO/btrrEEXS07C/04em4upNqbOp78yUuIFmw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUgEtO%2FbtrrEEXS07C%2F04em4upNqbOp78yUuIFmw1%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;1277&quot; height=&quot;488&quot; data-origin-width=&quot;1277&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;2012&lt;/span&gt;&lt;span&gt;년 딥러닝 혁신의 시발점이 된 컴퓨터 비전 대회의 우승 알고리즘인 &lt;span&gt;AlexNet&lt;/span&gt;모델은 이와 같은 합성곱 층 블록 방식을 적용한 모델이다&lt;span&gt;. &lt;/span&gt;이 모델의 경우 앞쪽 &lt;span&gt;CNN Layer(&lt;/span&gt;얕은 부분의 &lt;span&gt;Layer)&lt;/span&gt;에 큰 크기의 필터를 사용하고&lt;span&gt;, &lt;/span&gt;모델의 과대적합을 막기 위해 모델 출력에 가까운 &lt;span&gt;Dense Layer&lt;/span&gt;에만 드롭아웃을 사용한다&lt;span&gt;. &lt;/span&gt;큰 크기의 필터를 사용하므로 앞쪽&lt;span&gt; CNN Layer&lt;/span&gt;에서 훈련 데이터 이외에도 잘 일반화되는 공간 특성을 학습할 수 있게 한다&lt;span&gt;. &lt;/span&gt;이후&lt;span&gt;, &lt;/span&gt;밀집층에서 일어나는 특성의 재조합의 경우&lt;span&gt;, &lt;/span&gt;훈련 데이터 세트에 고유한 형태를 가지므로 잘 일반화가 일어나지 않을 수 있다&lt;span&gt;. &lt;/span&gt;이를 해결하기 위해&lt;span&gt;, &lt;/span&gt;모델 출력에 가까운 &lt;span&gt;Dense Layer&lt;/span&gt;에서 드롭아웃을 적용하는 것이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이후 &lt;span&gt;2014&lt;/span&gt;년 &lt;span&gt;ILSVRC &lt;/span&gt;대회 &lt;span&gt;2&lt;/span&gt;위 입상 알고리즘인 &lt;span&gt;VGGNet&lt;/span&gt;의 경우&lt;span&gt; AlexNet&lt;/span&gt;과 유사하게 여러 번 반복되는 &lt;span&gt;conv-pool&lt;/span&gt;블록을 사용한다&lt;span&gt;. &lt;/span&gt;이때&lt;span&gt;, &lt;/span&gt;단순히 더 작은 커널 크기로 더 많은 연산을 수행하게 하므로&lt;span&gt;, AlexNet&lt;/span&gt;에 비해 성능 향상을 이루어냈다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;VGGNet&lt;/span&gt;&lt;span&gt;을 포함하여 &lt;span&gt;AlexNet&lt;/span&gt;이후의 딥러닝 모델들은 신경망이 점점 더 깊어지고&lt;span&gt;, &lt;/span&gt;한 층의 커널 크기가 작아지는 경향을 갖게 됐다&lt;span&gt;. &lt;/span&gt;그러나 이는 심층 &lt;span&gt;CNN&lt;/span&gt;의 최대 난제 중 하나인 그레이디언트 소멸 문제를 가져왔다&lt;span&gt;. &lt;/span&gt;이를 해결하기 위해&lt;span&gt;, &lt;/span&gt;잔차 네트워크가 도입되게 되었다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;잔차 네트워크&lt;span&gt; - Residual Network (ResNet)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;그레이디언트 소실 문제는 신경망 앞쪽 파라미터가 오차함수에서 멀리 떨어져 있기 때문에 발생한다&lt;span&gt;. &lt;/span&gt;역전파되는 오차의 크기가 너무 작아 파라미터가 유의미하게 갱신되지 못하기 때문이다&lt;span&gt;. &lt;/span&gt;이로 인해&lt;span&gt;, &lt;/span&gt;심층망의 깊이가 깊어질수록&lt;span&gt;, &lt;/span&gt;앞쪽 측의 훈련은 어려워진다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&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;672&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNtF8t/btrrIWjnMRX/pnOd17QtSxuM5DJApOe7q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNtF8t/btrrIWjnMRX/pnOd17QtSxuM5DJApOe7q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNtF8t/btrrIWjnMRX/pnOd17QtSxuM5DJApOe7q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNtF8t%2FbtrrIWjnMRX%2FpnOd17QtSxuM5DJApOe7q1%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;672&quot; height=&quot;253&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;이러한 형태의 잔차 모듈을 동일성 함수라고 한다&lt;span&gt;. &lt;/span&gt;이 형태의 모듈은 신경망의 오류를 줄이거나&lt;span&gt;, &lt;/span&gt;동일성 매핑을 수행하여 아무것도 하지 않는다&lt;span&gt;. &lt;/span&gt;즉&lt;span&gt;, &lt;/span&gt;이 경우의 잔차 연결은 모듈 안의 모든 함수를 건너 뛰는데&lt;span&gt;, &lt;/span&gt;이와 같은 잔차 연결을 스킵 연결&lt;span&gt;(Skip connection)&lt;/span&gt;이라 표현하기도 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7DOIm/btrrCYW4BtA/Au9cJE7OkVdGMNNJP8T05K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7DOIm/btrrCYW4BtA/Au9cJE7OkVdGMNNJP8T05K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7DOIm/btrrCYW4BtA/Au9cJE7OkVdGMNNJP8T05K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7DOIm%2FbtrrCYW4BtA%2FAu9cJE7OkVdGMNNJP8T05K%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;529&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;결론적으로&lt;span&gt;, &lt;/span&gt;잔차 모듈과 스킵 연결을 적절히 배치하여 쌓는 것은 다양한 깊이를 가진 많은 얕은 신경망의 복잡한 조합을 만들어내는 것으로 생각할 수 있다&lt;span&gt;. &lt;/span&gt;이를 통해 역전파 알고리즘이 충분히 효율적으로 신경망들을 갱신 시키도록 할 수 있어 더 좋은 성능을 가지는 모델을 만들어낼 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;2015&lt;/span&gt;&lt;span&gt;년 마이크로소프트 리서치에서 &lt;span&gt;ILSVRC&lt;/span&gt;대회에 출품한 심층 잔차 네트워크 &lt;span&gt;ResNet&lt;/span&gt;은 사람의 성능을 뛰어넘는 모습을 보여주며 그 대회에서 우승하였다&lt;span&gt;. &lt;/span&gt;이를 통해&lt;span&gt;, &lt;/span&gt;잔차 네트워크를 적절히 활용하면&lt;span&gt;, &lt;/span&gt;문제에 유용한 정보를 학습하지 못해도 추가된 층을 통해 성능이 감소하지 않으면서 더 깊은 구조를 구현할 수 있어 신경망의 성능을 한계치 까지 끌어올릴 수 있음이 증명되었다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 딥러닝을 공부하며 각각의 모델들을 한번씩 구현해볼 것이다.&lt;/p&gt;
&lt;hr align=&quot;left&quot; size=&quot;1&quot; width=&quot;33%&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div id=&quot;ftn1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;#_ftnref1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; Fukushima, K. (1980). &amp;lsquo;Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position.&amp;rsquo;, Biological Cynbernetics, 36, 193-202&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Machine Learning</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/35</guid>
      <comments>https://dot-learning.tistory.com/35#entry35comment</comments>
      <pubDate>Tue, 25 Jan 2022 16:34:10 +0900</pubDate>
    </item>
    <item>
      <title>Machine Vision-4. 인공지능의 발전사 / 신경망 / 합성곱 신경망 / 허블과 토르스텐의 고양이 1차 시각피질 상호작용 실험</title>
      <link>https://dot-learning.tistory.com/34</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;인공지능의 발전사&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;인공지능의 발전사에 대해 조금 더 알아본다면&lt;span&gt;, &lt;/span&gt;딥러닝 알고리즘의 발전을 이해하기 더욱 쉽다&lt;span&gt;. 1943&lt;/span&gt;년 워런 매컬러와 윌터 피츠는 뇌의 뉴런 개념을 발표했고&lt;span&gt;, 1950&lt;/span&gt;년에 앨런 튜링은 인공지능과 사람의 수준을 비교하는 튜링 테스트를 제안한다&lt;span&gt;. &lt;/span&gt;이후 &lt;span&gt;1956&lt;/span&gt;년 다트머스 &lt;span&gt;AI&lt;/span&gt;컨퍼런스에서는 인공지능에 대한 전망을 낙관적으로 파악하는 등 이 시기를 기점으로 인공지능에 대한 학문적 발전이 태동하기 시작했다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이후&lt;span&gt;, 1957&lt;/span&gt;년 프랑크 로젠블라트가 사람의 시각뉴런을 수학적으로 모델링한 퍼셉트론을 발표하여 로지스틱 회귀의 기초를 놓았고&lt;span&gt;, 1959&lt;/span&gt;년에는 앞서말한 데이비드 허블과 토르스텐 비셀이 고양이의 두뇌를 이용하여 시각 피질의 뉴런들의 상호작용 과정을 연구하여 노벨상을 수상하였다&lt;span&gt;. &lt;/span&gt;이후 이와 같은 이론들을 기반으로 인공지능을 구현하고자 하는 시도가 계속되었다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;그러나&lt;span&gt;, &lt;/span&gt;컴퓨터 성능의 한계로 인해&lt;span&gt;, &lt;/span&gt;간단한 문제를 해결하는 수준의 알고리즘을 구현하는 것 이상의 목표를 달성할 수는 없었고&lt;span&gt;, &lt;/span&gt;이로 인해 첫번째 &lt;span&gt;AI &lt;/span&gt;겨울이 도래했다&lt;span&gt;. &lt;a href=&quot;#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1] &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이후 기호주의와 지식 기반 및 규칙 기반의 전문가 시스템&lt;span&gt;(expert system)&lt;/span&gt;이 등장하여 두번째 &lt;span&gt;AI&lt;/span&gt;붐이 시작됐지만&lt;span&gt;, &lt;/span&gt;곧 한계가 드러나 두번째 &lt;span&gt;AI &lt;/span&gt;겨울이 도래했다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;마지막으로&lt;span&gt;, &lt;/span&gt;딥러닝 모델 최적화와 관련된 여러 문제&lt;span&gt;(&lt;/span&gt;나쁜 가중치 초기화&lt;span&gt;, &lt;/span&gt;공변량변화&lt;span&gt;,&lt;/span&gt;상대적으로 비효율적인 시그모이드 함수의 과도한 사용 등&lt;span&gt;.&lt;a href=&quot;#_ftn2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;)&lt;/span&gt;를 해결할 알고리즘의 개발&lt;span&gt;, Nvidia&lt;/span&gt;사의 &lt;span&gt;CUDA&lt;/span&gt;기반 &lt;span&gt;CNN&lt;/span&gt;연산&lt;a href=&quot;#_ftn3&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;을 통한 비용대비 컴퓨팅 성능의 비약적 발전과 여러 센서의 발달로 인해 데이터가 쏟아지면서 딥러닝을 기반으로 한 &lt;span&gt;AI&lt;/span&gt;붐이 도래했고&lt;span&gt;, &lt;/span&gt;이는 &lt;span&gt;4&lt;/span&gt;차 산업혁명으로 이어져 현재까지 많은 발전이 이루어지고 있다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;이러한 흐름에 맞추어&lt;span&gt;, &lt;/span&gt;영상 처리 분야 역시 전통적인 머신러닝 방법을 기반으로 하는 영상인식 기술보다 딥러닝을 기반으로 하는 영상인식 기술이 가장 인기있는 방식이 되었다&lt;span&gt;. &lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;신경망&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;우선&lt;span&gt;, &lt;/span&gt;딥러닝이란 여러 층의 인공 뉴런으로 구성된 네트워크를 의미한다&lt;span&gt;. &lt;/span&gt;이때&lt;span&gt;, &lt;/span&gt;각각의 층을 구성하는 방법이 계속해서 제시되고 있다&lt;span&gt;. &lt;/span&gt;딥러닝은 다음의 층을 필수적으로 가지는데&lt;span&gt;, &lt;/span&gt;다음과 같다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;i.&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;&lt;span&gt;입력층&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;신경망에 데이터를 주입하는 층&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;ii.&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;&lt;span&gt;은닉층&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;입력층에서 주입된 데이터의 특성을 학습하는 층을 의미한다&lt;span&gt;. 3&lt;/span&gt;개 이상의 층으로 구성되는 것이 일반적이다&lt;span&gt;. &lt;/span&gt;이때&lt;span&gt;, &lt;/span&gt;다목적으로 흔히 사용되는 층은 밀집층&lt;span&gt;(Dense Layer)&lt;/span&gt;이다&lt;span&gt;. &lt;/span&gt;밀집층을 이루는 모든 뉴런은 이전 층의 모든 뉴런에서 정보를 전달받아 연산을 수행한다&lt;span&gt;. &lt;/span&gt;이 외에도&lt;span&gt;, &lt;/span&gt;데이터의 특성 또는 학습의 목표에 따라 전문화된 층을 사용하기도 하는데&lt;span&gt;, &lt;/span&gt;대표적으로 순환신경망층이 존재한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;iii.&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;&lt;span&gt;출력층&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;신경망이 출력할 값을 위한 층을 의미한다&lt;span&gt;. &lt;/span&gt;입력된 데이터를 은닉층을 거친 직후 바로 출력을 하게 된다면&lt;span&gt;, &lt;/span&gt;사람이 직관적으로 이해할 수 없는 출력이 생성된다&lt;span&gt;. &lt;/span&gt;따라서&lt;span&gt;, &lt;/span&gt;이 데이터를 종합하여&lt;span&gt;, &lt;/span&gt;우리가 목표하는 결과를 얻을 수 있도록 출력층을 설계하고&lt;span&gt;, &lt;/span&gt;결과값을 얻어낸다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;합성곱 신경망&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &amp;ndash;&lt;b&gt; CNN (Convolutional neural network)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;딥러닝 입문 또는 영상 처리 입문 과정에서 접해보는&lt;span&gt; MNIST&lt;/span&gt;예제를 생각해보자&lt;span&gt;. &lt;/span&gt;이 예제에서는 &lt;span&gt;28*28 &lt;/span&gt;픽셀의 흑백 이미지를 다루기에&lt;span&gt;, &lt;/span&gt;학습을 진행하는 밀집층에 존재하는 뉴런 하나는 &lt;span&gt;785&lt;/span&gt;개의 파라미터에 대응된다&lt;span&gt;. &lt;/span&gt;그러나&lt;span&gt;, &lt;/span&gt;우리가 실제로 영상 처리에서 다루는 프레임 한 개의 크기는 적어도 &lt;span&gt;200*200 &lt;/span&gt;이상의 풀컬러 &lt;span&gt;RGB &lt;/span&gt;이미지의 크기를 가질 것이다&lt;span&gt;. &lt;/span&gt;이 경우&lt;span&gt;, &lt;/span&gt;밀집층의 뉴런 하나는 &lt;span&gt;12,001&lt;/span&gt;개의 파라미터가 필요하다&lt;span&gt;. &lt;/span&gt;만약&lt;span&gt;, &lt;/span&gt;이 밀집층이 수십개의 뉴런으로 이루어져 있다면&lt;span&gt;, &lt;/span&gt;우리는 우리가 구성한 단 한 개의 층을 학습시키기 위해 수백만개의 파라미터를 여러 수학적 방법을 통해 조정해야 한다&lt;span&gt;. &lt;/span&gt;이는 하나의 신경망 층을 학습시키기 위해 천문학적 컴퓨팅 자원이 필요하다는 것을 의미한다&lt;span&gt;. &lt;/span&gt;따라서&lt;span&gt;, &lt;/span&gt;&lt;u&gt;&lt;b&gt;연산의 양을 줄이기 위해 합성곱 신경망이 제시되었다&lt;span&gt;. &lt;/span&gt;&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;276&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbGTd0/btrrxm5aXum/pdzWQDZCLCuvFKNiOUtaO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbGTd0/btrrxm5aXum/pdzWQDZCLCuvFKNiOUtaO0/img.png&quot; data-alt=&quot;허블과 토르스텐이 밝혀낸 우리 뇌의 시각 인지 메커니즘&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbGTd0/btrrxm5aXum/pdzWQDZCLCuvFKNiOUtaO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbGTd0%2Fbtrrxm5aXum%2FpdzWQDZCLCuvFKNiOUtaO0%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;337&quot; height=&quot;222&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;허블과 토르스텐이 밝혀낸 우리 뇌의 시각 인지 메커니즘&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;허블과 토르스텐 비셀은 고양이의 일차 시각 피질에 존재하는 단순 뉴런들&lt;span&gt;(simple neuron)&lt;/span&gt;이 직선의 방향에 큰 영향을 받아 활성화된다는 점을 발견했다&lt;span&gt;. &lt;/span&gt;이 활성화 정보는 복잡한 뉴런&lt;span&gt;(complex neuron)&lt;/span&gt;에 전달되어&lt;span&gt;, &lt;/span&gt;여러 직선 방향을 종합하여 더욱 복잡한 형태를 인식하고&lt;span&gt;, &lt;/span&gt;이 정보는 또다시 다음의 복잡한 뉴런에 전달된다&lt;span&gt;. &lt;/span&gt;궁극적으로는 우리의 신경계를 이루는&lt;u&gt;&lt;b&gt; 뉴런의 층이 깊어질수록&lt;span&gt;(&lt;/span&gt;뉴런의 연결이 많아질수록&lt;span&gt;) &lt;/span&gt;더욱 다양한 사물을 구별할 수 있게 된다는 점을 알 수 있다&lt;/b&gt;&lt;/u&gt;&lt;span&gt;. &lt;/span&gt;이와 같은 점은 이제 알아볼 합성곱 신경망의 구조와 매우 유사하다&lt;span&gt;. (사실, 합성곱 신경망의 출발 자체가 이 연구 결과를 바탕으로 시작된 것이다. 즉, 합성곱층은 우리 뇌의 시각 피질의 작동과정을 모방한 것이다!)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dm6uvn/btrrAqTMgpT/OEpAYuGWFAMPVXoelklfO1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dm6uvn/btrrAqTMgpT/OEpAYuGWFAMPVXoelklfO1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dm6uvn/btrrAqTMgpT/OEpAYuGWFAMPVXoelklfO1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/dm6uvn/btrrAqTMgpT/OEpAYuGWFAMPVXoelklfO1/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;512&quot; height=&quot;424&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;u&gt;&lt;b&gt;합성곱 층은 일련의 커널 또는 필터로 구성된다&lt;span&gt;. &lt;/span&gt;&lt;/b&gt;&lt;/u&gt;이때&lt;span&gt;, &lt;/span&gt;커널은 입력으로 주어진 이미지에서 이미지의 일부분만을 연산하는 행렬을 의미한다&lt;span&gt;. &lt;/span&gt;입력으로 주어진 하나의 이미지에서 커널은 왼쪽 위 모서리부터 오른쪽 아래 모서리까지 이동하며 이미지를 스캔&lt;span&gt;(&lt;/span&gt;합성곱 연산을 수행함을 의미&lt;span&gt;)&lt;/span&gt;한다&lt;span&gt;. &lt;/span&gt;이때&lt;span&gt;, &lt;/span&gt;커널의 크기와&lt;span&gt;, &lt;/span&gt;커널이 한번에 이동하는 스트라이드 크기&lt;span&gt;(&lt;/span&gt;스텝 크기&lt;span&gt;), &lt;/span&gt;활성화 맵의 크기를 맞추어 주는 패딩 등을 적절히 조합하여 커널이 훑고 지나가는 형태를 결정한다&lt;span&gt;. &lt;/span&gt;이 커널은 밀집층을 이루는 인공뉴런과 마찬가지로 오차역전파를 통해 학습되는 가중치로 구성된다&lt;span&gt;. &lt;/span&gt;합성곱 신경망을&lt;span&gt; MNIST&lt;/span&gt;예제에 적용해보자&lt;span&gt;. &lt;/span&gt;하나의 커널을 &lt;span&gt;3*3&lt;/span&gt;의 크기로 구성한다면&lt;span&gt;, &lt;/span&gt;이 커널은 가중치 &lt;span&gt;9&lt;/span&gt;개와 절편&lt;span&gt;1&lt;/span&gt;개를 더해 총 &lt;span&gt;10&lt;/span&gt;개의 파라미터를 갖는다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;일반적으로&lt;span&gt;, &lt;/span&gt;&lt;u&gt;&lt;b&gt;합성곱 층 하나에는 여러 개의 커널&lt;span&gt;-&lt;/span&gt;필터를 사용한다&lt;span&gt;. &lt;/span&gt;&lt;/b&gt;&lt;/u&gt;하나의 층에 존재하는 커널 중 한 커널은 스캔하는 범위의 픽셀에서 수직선 구조가 있는지 파악하는 필터 역할을 할 수 있고&lt;span&gt;, &lt;/span&gt;또다른 커널은 색 변화와 같은 특성을 파악하는 필터 역할을 할 수도 있다&lt;span&gt;. &lt;/span&gt;즉&lt;span&gt;, &lt;/span&gt;한 개의 층에 존재하는 여러 개의 커널은 각각 특정한 형태의 부분 이미지에서 큰 활성화 값을 출력한다&lt;span&gt;. &lt;/span&gt;이 출력 값들은 커널이 전체 이미지를 왼쪽 위에서 오른쪽 아래로 훑으면서 계속해서 생성되고&lt;span&gt;, &lt;/span&gt;이는 &lt;span&gt;2&lt;/span&gt;차원 활성화 배열의 형태로 새로운 데이터 형식으로 저장된다&lt;span&gt;. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이때&lt;span&gt;, &lt;u&gt;&lt;b&gt;2&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;차원 활성화 배열 형태의 데이터를 활성화 맵&lt;span&gt;(activation map)&lt;/span&gt;이라 부른다&lt;/b&gt;&lt;/u&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;허블과 토르스텐 비셀의 실험에서 알 수 있었던 생물학적 시각 시스템의 계층적 구조와 유사하게&lt;span&gt;, &lt;/span&gt;합성곱 층을 여러 층을 쌓아 계층 구조를 만들어 낼 수 있다&lt;span&gt;. &lt;/span&gt;이때&lt;span&gt;, &lt;/span&gt;각 층은 직전 층의 활성화 맵을 입력으로 받아들인다&lt;span&gt;. &lt;/span&gt;생체 시스템과 유사하게&lt;span&gt;, &lt;/span&gt;층이 깊어질수록 각 층에 존재하는 필터들은 단순한 특성에서 그러한 특성들이 복잡하게 조합된 패턴에 반응하도록 학습된다&lt;span&gt;. &lt;/span&gt;결과적으로&lt;span&gt;, &lt;/span&gt;복잡하고 추상적인 공간패턴을 학습하고 분류할 수 있게 된다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이와 같은 특성을 정리해보면 다음과 같다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;u&gt;&lt;b&gt;많은 개수의 커널을 사용하면 더욱 복잡한 특성을 구분할 수 있다&lt;/b&gt;&lt;/u&gt;&lt;span&gt;&lt;u&gt;&lt;b&gt;.&lt;/b&gt;&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;단&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;연산에 소용되는 비용 역시 그에 비례하여 증가한다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;따라서&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;해결하고자 하는 문제의 복잡성에 따라 적절한 커널의 개수와 크기를 고려해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;u&gt;&lt;b&gt;CNN의 여러 레이어로 구성된 신경망 모델에서 얕은 부분에서는 간단한 특성을,&amp;nbsp;깊은 부분에서는 간단한 특성이 조합된 복잡한 특성을 감지한다는 점을 유의해야 한다.&lt;/b&gt;&lt;/u&gt;&amp;nbsp;즉,&amp;nbsp;얕은 층에는 많은 수의 커널을 사용할 필요가 없고,&amp;nbsp;깊은 층에서는 적은 양의 커널을 사용한다면 충분한 성능을 얻을 수 없다.&amp;nbsp;따라서,&amp;nbsp;얕은 층보다 깊은 층의&amp;nbsp;CNN에 더 많은 수의 커널을 배치해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;u&gt;&lt;b&gt;결국 좋은 모델을 개발하는 것은 계산 복잡도를 줄이는 것이다.&lt;/b&gt;&lt;/u&gt;&amp;nbsp;이는 각각의 층에서 몇 개의 커널이 존재하는지에 연관되어 있다.&amp;nbsp;따라서,&amp;nbsp;시행착오를 통해 모델의 검증 점수가 증가하지 않는 선에서 최소한의 커널 만을 사용해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;풀링 층&lt;span&gt; (Pooling Layer)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;지속적으로 설명했듯&lt;span&gt;, &lt;/span&gt;딥러닝 모델을 구성할 때&lt;span&gt;, &lt;/span&gt;가장 중요한 것은 정확성과 계산 복잡도이다&lt;span&gt;. &lt;/span&gt;아무리 정확성이 좋더라도&lt;span&gt;, &lt;/span&gt;계산 복잡도가 너무나도 높아 연산에 너무 많은 비용이 소요된다면&lt;span&gt;, &lt;/span&gt;그 모델은 실제로 사용할 수 없다&lt;span&gt;. &lt;/span&gt;따라서&lt;span&gt;, &lt;/span&gt;우리는 &lt;u&gt;&lt;b&gt;정확성을 유지하면서 계산 복잡도를 줄일 필요가 있다&lt;/b&gt;&lt;/u&gt;&lt;span&gt;. &lt;/span&gt;이를 위해&lt;span&gt;, &lt;/span&gt;풀링 층을 사용할 수 있다&lt;span&gt;. &lt;/span&gt;&lt;u&gt;&lt;b&gt;풀링 층의 경우&lt;span&gt;, &lt;/span&gt;학습되는 가중치가 존재하지 않는다&lt;span&gt;. &lt;/span&gt;즉&lt;span&gt;, &lt;/span&gt;인공 뉴런의 개념을 포함하지는 않는다&lt;span&gt;. (&lt;/span&gt;따라서 풀링 함수라고 불리기도 한다&lt;span&gt;.) &lt;/span&gt;&lt;/b&gt;&lt;/u&gt;대신&lt;span&gt;, &lt;/span&gt;파라미터의 개수와 계산복잡도를 줄이기 위한 별도의 연산 과정을 수행한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;앞에서 설명하였듯&lt;span&gt;, &lt;/span&gt;하나의&lt;span&gt; CNN Layer&lt;/span&gt;는 여러 개의 커널을 가질 수 있고&lt;span&gt;, &lt;/span&gt;각각의 커널은 연산 수행의 결과물을 &lt;span&gt;2&lt;/span&gt;차원 배열 형태의 활성화 맵으로 출력한다&lt;span&gt;. &lt;/span&gt;최종적으로&lt;span&gt;, &lt;/span&gt;&lt;u&gt;&lt;b&gt;하나의&lt;span&gt; CNN Layer&lt;/span&gt;는 여러개의 커널의 활성화 맵을 하나로 묶어 &lt;span&gt;3&lt;/span&gt;차원 배열 즉&lt;span&gt;, 3&lt;/span&gt;차 텐서의 형태로 해당 층에서의 연산 결과값을 출력한다&lt;span&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;u&gt;&lt;b&gt;풀링 층은 활성화 맵의 공간 차원을 축소시키고&lt;span&gt;, &lt;/span&gt;깊이 차원은 그대로 두는 연산을 수행한다&lt;span&gt;. &lt;/span&gt;&lt;/b&gt;&lt;/u&gt;이를 위해 풀링 층은 &lt;span&gt;CNN Layer&lt;/span&gt;와 유사하게 두개의 요소를 갖는데&lt;span&gt;, &lt;/span&gt;필터 크기와 스트라이드 크기를 갖는다&lt;span&gt;. &lt;/span&gt;필터 크기의 경우 수용장&lt;span&gt;(receptive field)&lt;/span&gt;이라는 용어로 표현되기도 하는데&lt;span&gt;, &lt;/span&gt;결국 커널의 크기를 의미한다&lt;span&gt;. &lt;/span&gt;합성곱 층에서 커널이 입력된 데이터 위를 왼쪽 위부터 오른쪽 아래까지 슬라이딩하며 학습하는 것처럼&lt;span&gt;, &lt;/span&gt;풀링 층의 필터 입력된 수용장과 스트라이드에 따라 입력된 활성화 맵 위를 슬라이딩하며 데이터 축소 연산을 진행한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UKUSV/btrrDnvrhjh/3k6CL28kofnDxwAsWK11j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UKUSV/btrrDnvrhjh/3k6CL28kofnDxwAsWK11j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UKUSV/btrrDnvrhjh/3k6CL28kofnDxwAsWK11j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUKUSV%2FbtrrDnvrhjh%2F3k6CL28kofnDxwAsWK11j1%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;534&quot; height=&quot;385&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;이때 사용되는 데이터 축소 연산의 경우 여러 종류의 연산이 존재하는데&lt;span&gt;, &lt;/span&gt;대표적으로 &lt;span&gt;max&lt;/span&gt;연산이 있다&lt;span&gt;. &lt;/span&gt;이 연산은 수용장에서 가장 큰 활성화 값만을 취하고 나머지 값을 무시한다&lt;span&gt;. &lt;/span&gt;이 과정을 통해&lt;span&gt;, &lt;/span&gt;공간 차원을 축소시키며 파라미터의 개수를 감소시킨다&lt;span&gt;. &lt;/span&gt;일반적으로 필터의 크기를 &lt;span&gt;2*2, &lt;/span&gt;스트라이드의 크기를 &lt;span&gt;2&lt;/span&gt;로 설정하는데&lt;span&gt;, &lt;/span&gt;이 경우 풀링 층의 필터가 각 위치에서 &lt;span&gt;4&lt;/span&gt;개의 활성화 값을 비교해 가장 큰 &lt;span&gt;1&lt;/span&gt;개의 값을 남긴다&lt;span&gt;. &lt;/span&gt;따라서&lt;span&gt;, &lt;/span&gt;활성화 맵이 &lt;span&gt;4&lt;/span&gt;배만큼 작아지게 된다&lt;span&gt;. &lt;/span&gt;당연히&lt;span&gt;, &lt;/span&gt;이 연산은 깊이와는 독립적으로 수행되므로&lt;span&gt;, &lt;/span&gt;입력된 활성화 맵의 깊이에는 영향을 주지 않는다&lt;span&gt;. &lt;/span&gt;이와 같은 특성으로 인해&lt;span&gt;, &lt;/span&gt;&lt;u&gt;&lt;b&gt;풀링 과정은 서브샘플링 과정이라 불리기도 한다&lt;/b&gt;&lt;span&gt;&lt;b&gt;.&lt;/b&gt; &lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr align=&quot;left&quot; size=&quot;1&quot; width=&quot;33%&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div id=&quot;ftn1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;#_ftnref1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;박해선&lt;span&gt;, &amp;lsquo;&lt;/span&gt;혼자 공부하는 머신러닝&lt;span&gt;+&lt;/span&gt;딥러닝&lt;span&gt;&amp;rsquo;, 2020, &lt;/span&gt;한빛미디어&lt;span&gt;, p27&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;#_ftnref2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;존 크론&lt;span&gt;, &lt;/span&gt;그랜트 베일레벨드&lt;span&gt;, &lt;/span&gt;아그레이 바슨스&lt;span&gt;, &amp;lsquo;&lt;/span&gt;딥러닝 일러스트레이드&lt;span&gt;&amp;rsquo;, 2021, &lt;/span&gt;시그마프레스&lt;span&gt;, p13.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;#_ftnref3&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기철민&lt;span&gt;, &amp;lsquo;CUDA&lt;/span&gt;를 이용한 &lt;span&gt;Convolution Neural Network&lt;/span&gt;의 효율적인 구현&lt;span&gt;&amp;rsquo;, 2017, &lt;/span&gt;한국정보통신학회논문지 &lt;span&gt;Vol.21, No.6 : 1143~1148&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Machine Learning</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/34</guid>
      <comments>https://dot-learning.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 25 Jan 2022 15:37:40 +0900</pubDate>
    </item>
    <item>
      <title>Machine Vision-3. 해리스 코너 검출기 / SIFT 알고리즘</title>
      <link>https://dot-learning.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;영상의 분할에 초점을 맞춘 여러가지 알고리즘을 이전의 포스트에서 알아보았다. 이러한 알고리즘이 개발된 후에도 여러가지 알고리즘에 계속해서 발전해왔는데, 그 중 대표적인 것이 해리스 코너 검출기 알고리즘과 SIFT 알고리즘이다.&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;b&gt;&lt;u&gt;이러한 알고리즘들은 대표적인 특성공학의 산물들이다.&lt;/u&gt; &lt;/b&gt;첫번째 포스트에서 언급했듯 딥러닝 이전의 머신러닝은 특성공학을 통한 데이터의 특성 추출에 초점을 맞추었다. 이러한 방식은 실제로 사용될 정도로 어느정도 성공을 거두었지만, 실제 사람의 인식 수준에 비하면 걸음마 수준이었다. 특정한 상황에서 추출된 특성만을 인식할 수 있었고, 이 과정에서도 당시 하드웨어 수준에 비해 상대적으로 높은 계산복잡도를 갖고 있었다. 이로인해, 인식 정확도와 알고리즘의 범용성에서 한계가 존재했다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;해리스 코너 검출기 알고리즘의 경우 영상에서 코너를 검출하여 대상물을 인식하는 방법이고, SIFT 알고리즘의 경우 특징점을 검출하여 대상물을 인식하는 방법이다. 두 방법 모두, 딥러닝을 사용한 영상 인식이 대중화되기 이전까지 굉장히 많은 영역에서 사용되었다. 대표적인 예로 미국에서 실제로 사용한 시스템 중 하나인 우표 인식에 이러한 알고리즘이 사용됐다.&lt;/p&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;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해리스 코너 검출기 알고리즘&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;698&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR53D6/btrrDw67uwW/hkZyVLt4OfxHLkYxTjskJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR53D6/btrrDw67uwW/hkZyVLt4OfxHLkYxTjskJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR53D6/btrrDw67uwW/hkZyVLt4OfxHLkYxTjskJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR53D6%2FbtrrDw67uwW%2FhkZyVLt4OfxHLkYxTjskJk%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;698&quot; height=&quot;672&quot; data-origin-width=&quot;698&quot; data-origin-height=&quot;672&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;SIFT 알고리즘&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yIb8T/btrrDeeEr9V/Pk7qya6ikT8kXUcOP1kbz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yIb8T/btrrDeeEr9V/Pk7qya6ikT8kXUcOP1kbz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yIb8T/btrrDeeEr9V/Pk7qya6ikT8kXUcOP1kbz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyIb8T%2FbtrrDeeEr9V%2FPk7qya6ikT8kXUcOP1kbz1%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;560&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;591&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;702&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nPRoX/btrrIXJfZPV/IhKXzLWI69SF2e2Tx96EF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nPRoX/btrrIXJfZPV/IhKXzLWI69SF2e2Tx96EF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nPRoX/btrrIXJfZPV/IhKXzLWI69SF2e2Tx96EF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnPRoX%2FbtrrIXJfZPV%2FIhKXzLWI69SF2e2Tx96EF1%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;671&quot; height=&quot;611&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;639&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SIFT알고리즘의 경우 이 다음의 포스트에서 알아볼 컨볼루션 레이어를 사용한 신경망 연산과 비슷한 부분이 존재한다. 그러나, 컨볼루션 연산 이후 이를 사용해서 히스토그램을 생성하고 이 히스토그램을 통해 영상에서 객체를 매칭한다는 점에서 컨볼루션 연산과 그 결이 다르다고 할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Machine Learning</category>
      <category>Machine Vision</category>
      <category>SIFT 알고리즘</category>
      <category>고전전 머신러닝</category>
      <category>머신러닝</category>
      <category>머신비젼</category>
      <category>해리스 코너 검출기</category>
      <author>DOT-ICD</author>
      <guid isPermaLink="true">https://dot-learning.tistory.com/33</guid>
      <comments>https://dot-learning.tistory.com/33#entry33comment</comments>
      <pubDate>Tue, 25 Jan 2022 15:16:25 +0900</pubDate>
    </item>
  </channel>
</rss>