<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Ok Subin</title>
    <link>https://subin-99.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 25 May 2026 09:18:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Subin_Ok</managingEditor>
    <item>
      <title>[2단계] object의 색상 추출</title>
      <link>https://subin-99.tistory.com/19</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;2)&amp;nbsp;색상&amp;nbsp;추출 &lt;br /&gt;&amp;nbsp;&amp;nbsp;1단계에서&amp;nbsp;따로&amp;nbsp;저장한&amp;nbsp;object의&amp;nbsp;bounding&amp;nbsp;box&amp;nbsp;이미지를&amp;nbsp;필요에&amp;nbsp;따라&amp;nbsp;전처리한&amp;nbsp;후,&amp;nbsp;Mean&amp;nbsp;Shift&amp;nbsp;Algorithm&amp;nbsp;(평균&amp;nbsp;이동&amp;nbsp;알고리즘)에&amp;nbsp;입력하여&amp;nbsp;색상을&amp;nbsp;추출한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;이&amp;nbsp;단계에서의&amp;nbsp;핵심&amp;nbsp;알고리즘은&amp;nbsp;BackGround&amp;nbsp;Subtraction과&amp;nbsp;Mean&amp;nbsp;Shift&amp;nbsp;(평균&amp;nbsp;이동)&amp;nbsp;Algorithm이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Image Description</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/19</guid>
      <comments>https://subin-99.tistory.com/19#entry19comment</comments>
      <pubDate>Mon, 16 Jan 2023 07:49:26 +0900</pubDate>
    </item>
    <item>
      <title>[1단계] YOLO V3 기반의 object 인식 - YOLO study(3/3)</title>
      <link>https://subin-99.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;YOLO v3는 YOLO v2에 새로운 기법들을 추가로 도입하여 성능을 향상시킨 모델입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #e0ecea;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;The Deal&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;1. Bounding Box Prediction&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;피 2.JPG&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uUUZg/btrWmm6Glgo/FhsNfItL16nKf30ovrry71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uUUZg/btrWmm6Glgo/FhsNfItL16nKf30ovrry71/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uUUZg/btrWmm6Glgo/FhsNfItL16nKf30ovrry71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuUUZg%2FbtrWmm6Glgo%2FFhsNfItL16nKf30ovrry71%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;376&quot; height=&quot;365&quot; data-filename=&quot;피 2.JPG&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; v2와 동일한 점은 dimension cluster를 anchor box로 이용하여 bounding box로 예측한다는 점입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;cluster centroid로부터의 offset을 이용하여 box의 width, height를 예측하고, sigmoid 함수를 이용하여 box의 중심 좌표를 예측합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;2. Class Prediction&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 영상 내에서 찾은 object의 위치에 대해서 multilabel classification을 수행하는 단계입니다. bounding box 별로 class probability를 계산하고, sigmoid로 정규화한 후 binary classification을 수행하는 과정을 거칩니다. 이때, binary cross-entropy loss를 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;i&gt;* binary cross-entropy loss 추가 설명&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; entropy가 크다는 것은 사건의 확률이 낮다는 것, 즉 불확실함을 의미합니다. binary cross-entropy loss는 multi-label classificatoin에서 주로 사용하는 loss로, (class=0)일 사건과 (class=1)일 사건에 대한 cross-entropy 값의 합의 평균으로 아래의 식으로 계산합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;$$ loss = -\mathrm{\frac{1}{N}} \sum_{i=1}^{N}(y_{i}*log(\hat{y}_{i}) + (1-y_{i})log(1-\hat{y}_{i})) $$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 여기서 $ y_{i} $ 는 ground truth, $ \hat{y}_{i} $는 각 class i에 대한 CNN 마지막 layer의 output인 score 벡터의 i번째 요소를 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 이때, 계산되는 cross-entropy loss는 아래 식과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;$$ CE = -\sum_{i}^{C}y_{i}*log(\hat{y}_{i}) $$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;3. Predictions Across Scales&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; YOLO v3 는 서로 다른 3개의 scale로 bounding box를 예측합니다. 이는 FPN (Feature Pyramid Network)와 유사한 개념을 이용한 것으로, 각 scale의 box로부터 feature를 추출하는 것입니다. 이후, 최종적으로 3D tensor encoding bounding box, objectness, class prediction을 예측합니다. 본 논문에서 COCO dataset에 대한 최종 tensor는 N x N x [3 x (4+1+80)]의 형태를 지닙니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;i&gt;* FPN 추가 설명&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림01.jpg&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OKu7H/btrWLwON7go/mVS3HdFcsdsbRHpyf6OFvk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OKu7H/btrWLwON7go/mVS3HdFcsdsbRHpyf6OFvk/img.jpg&quot; data-alt=&quot;(d) FPN과 다른 방법 (a-c)과의 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OKu7H/btrWLwON7go/mVS3HdFcsdsbRHpyf6OFvk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOKu7H%2FbtrWLwON7go%2FmVS3HdFcsdsbRHpyf6OFvk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;449&quot; height=&quot;265&quot; data-filename=&quot;그림01.jpg&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(d) FPN과 다른 방법 (a-c)과의 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(a) 입력 이미지를 다양한 크기로 resize한 후, CNN에 통과시켜서 다양한 크기의 feature map의 획득이 가능합니다. feature map 크기가 다양해서, 다양한 크기의 object를 검출할 수 있다는 장점이 있지만, resize된 각 이미지에 CNN을 적용해야 하므로 연산량 및 연산 시간이 크게 증가하기에 거의 사용되지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(b) YOLO v1에서 사용하는 방법으로, 하나의 이미지에 CNN을 한 번만 통과시키므로 빠릅니다. 그러나, 최종 크기의 feature map만 사용하기에 작은 object에 대한 정보가 손실되는 문제가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(c) SSD에서 사용하는 방법으로, 순전파로 계산된 여러 계층에서의 multi-scale feature map을 재사용합니다. 그러나, 고해상도의 feature map을 사용하지 않아서 작은 물체에 대한 정보가 손실되는 문제가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(d) FPN에서 사용하는 방법으로, 고해상도 저해상도 feature map의 결합을 통해서 feature pyramid는 모든 scale의 정보를 담고 있고, 하나의 이미지로부터 빠르게 계산됩니다. feature pyramid의 각 level에서 prediction이 독립적으로 수행됩니다. &lt;i&gt;FPN의 수행 과정은 아래에서 설명합니다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림02.jpg&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YdEWN/btrWI8om0Ih/MQkjkAQOkSk8HKdqFoENP1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YdEWN/btrWI8om0Ih/MQkjkAQOkSk8HKdqFoENP1/img.jpg&quot; data-alt=&quot;FPN 구조 설명&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YdEWN/btrWI8om0Ih/MQkjkAQOkSk8HKdqFoENP1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYdEWN%2FbtrWI8om0Ih%2FMQkjkAQOkSk8HKdqFoENP1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;342&quot; height=&quot;306&quot; data-filename=&quot;그림02.jpg&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;FPN 구조 설명&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9ddc29; font-family: 'Noto Serif KR';&quot;&gt;1) Bottom-Up Path way (상단 좌측 이미지)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;nbsp;동일한 크기의 feature map을 출력하는 layer들을 동일한 stage로 묶습니다. 한 stage를 거칠 때마다 feature map의 크기는 1/2이 됩니다. 각 stage의 마지막 layer의 출력값을 pyramid에 사용할 feature map으로 이용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ff8f90; font-family: 'Noto Serif KR';&quot;&gt;2) Top-Down Pathway (상단 우측 이미지)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;nbsp;상위 feature map을 'nearest neighbor upsampling' 기법을 적용하여 해상도를 2배씩 키웁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #d176a3; font-family: 'Noto Serif KR';&quot;&gt;3) Lateral Connetion (하단 이미지)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;nbsp;bottom-up과 top-down에서 각각 같은 크기의 feature map을 결합합니다. 이때는 bottom-up의 feature map에 1x1 convolution 적용하여 channel 감소시킨 뒤, 단순히 top-down의 feature map에 더하여 계산합니다. 이 결과에 3x3 convolution 적용하여 최종적인 feature map을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 이러한 FPN에도 단점이 존재합니다. feature map을 줄여나가면서 물체를 인식하기에 아래에 있는 것은 feature에 대한 성능이 떨어지고, feature map의 크기가 줄어들면서 위치 정보가 사라집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 이에 반해, YOLO v3는 feature 사이즈를 키워나가면서 highlevel extraction을 뽑고, 위치 정보를 가지고 와서 더해주어 좋은 성능을 내려고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;4. Feature Extractor&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; YOLO v3에서는 shorcut connection을 추가된 Darknet-53을 backbone으로 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btabWH/btrWI2ob9zp/RRJOnVKk2o7gER24MkVWKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btabWH/btrWI2ob9zp/RRJOnVKk2o7gER24MkVWKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btabWH/btrWI2ob9zp/RRJOnVKk2o7gER24MkVWKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtabWH%2FbtrWI2ob9zp%2FRRJOnVKk2o7gER24MkVWKK%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;224&quot; height=&quot;306&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #e0ecea;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Results&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림03.jpg&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBqB0k/btrWJIvXUux/brnuGaa7LmczsVlzYFEg8K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBqB0k/btrWJIvXUux/brnuGaa7LmczsVlzYFEg8K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBqB0k/btrWJIvXUux/brnuGaa7LmczsVlzYFEg8K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBqB0k%2FbtrWJIvXUux%2FbrnuGaa7LmczsVlzYFEg8K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;514&quot; height=&quot;362&quot; data-filename=&quot;그림03.jpg&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Redmon, J., &amp;amp; Farhadi, A. (2018). Yolov3: An incremental improvement. arXiv preprint arXiv:1804.02767.&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lin, T. Y., Doll&amp;aacute;r, P., Girshick, R., He, K., Hariharan, B., &amp;amp; Belongie, S. (2017). Feature pyramid networks for object detection. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 2117-2125).&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <category>Image Description</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/18</guid>
      <comments>https://subin-99.tistory.com/18#entry18comment</comments>
      <pubDate>Mon, 16 Jan 2023 07:34:45 +0900</pubDate>
    </item>
    <item>
      <title>[1단계] YOLO V3 기반의 object 인식 - YOLO study(2/3)</title>
      <link>https://subin-99.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이어서, YOLO v2 (YOLO 9000) model에 대해서 정리한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #c3e2dd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;YOLO v2 (YOLO 9000)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #e0ecea;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Abstract &amp;amp; Introduction&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;YOLO 9000 = 9000개 이상의 object category를 탐지할 수 있는 real-time object detection system&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;- object detection과 classification을 공동으로 training시키는 방법을 제안한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&amp;nbsp; 즉, COCO detection dataset과 ImageNet classification dataset에 동시에 훈련시킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&amp;nbsp; 이는 labelled detection data가 없는 object class에 대해서도 탐지할 수 있도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;- 정확도와 속도 사이의 trade-off의 균형을 잘 맞춰 좋은 성능을 보인다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;- 3개의 파트별로 다양한 아이디어를 도입한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&amp;nbsp; 1) Better : 정확도 올리기 위한 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&amp;nbsp; 2) Faster : 속도를 향상시키기 위한 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&amp;nbsp; 3) Stronger : 더 많은 범위의 class를 예측하기 위한 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #e0ecea; font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;Part 1 : Better&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 속도를 유지하면서 정확도를 향상시키는 것을 목표로, network를 깊고 복잡하게 만들기보다는 단순화시켜서 training을 용이하게 하고자 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;7개의 ideas&lt;/b&gt;를 제시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1) Batch Normalization&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 모든 convolution layer 뒤에 batch normalization을 추가한다. 이를 통해 mAP가 2% 정도 향상되었고, overfitting 없이 regularization 기법이나 drop out의 제거가 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2) High Resolution Classifier&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;- SOTA model : ImageNet에 pre-train된 classifier를 사용하는데, 대부분의 classifier는 256*256보다 작은 이미지에서 작동한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;- original YOLO (YOLO v1) : 224*224에 training시키고, detection할 때는 448*448로 resolution을 높인다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이는 network가 object detection task를 학습하면서, 동시에 새로운 입력 이미지의 resolution에 적응해야 함을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;rarr; YOLO v2에서는 처음부터 high resolution(448*448)에 training시킴으로써 상대적으로 높은 resolution의 이미지에 적응할 시간을 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3) Convolutional with Anchor Boxes&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; anchor box를 도입하여 다음과 같이 모델을 수정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 1. output이 높은 해상도를 가지도록 pooling layer를 제거한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 2. 입력 이미지를 416*416으로 수정함으로써, 최종 output feature map의 크기가 홀수가 되도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;rarr; 더 많은 수의 bounding box를 예측하면서 실제 object의 위치를 보다 잘 포착하게 된다.&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;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;* 추가 설명&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; (기존) 각각의 object의 center를 포함하는 grid에 object를 할당&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; (Anchor Box) 각각의 object의 center를 포함하는 grid 중 여러 형태의 anchor box와의 IoU가 가장 큰 grid에 object를 할당 &amp;rarr; 각 grid에서 여러 개의 object 검출 가능하도록 함.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;4) Dimension Clusters&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; anchor box를 YOLO와 함께 사용할 때 anchor box의 크기와 종횡비를 사전에 정의하는데, 더 나은 prior를 선택한다면 detection의 성능이 향상될 것이다. 이를 위해 trianing&amp;nbsp;set&amp;nbsp;bounding&amp;nbsp;box에&amp;nbsp;k-means&amp;nbsp;clustering을&amp;nbsp;적용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 추가로, Euclidean distance 기반의 standard k-means를 사용하면, 큰 box가 작은 box보다 더 많은 오류를 만들어낸다는 문제가 있다. box의 크기와 무관한 좋은 IoU로 이어지는 prior를 원하기에 새로운 distance metric을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;$$ d(box, centroid) = 1 - IOU(box, centroid) $$&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 식은 box와 centroid의 IoU 값이 클수록 겹치는 영역이 크기에 거리가 가까움을 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;피2.JPG&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfhWIZ/btrWdIcqmrC/q4qIOKegnXOSKF2Xgcbxok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfhWIZ/btrWdIcqmrC/q4qIOKegnXOSKF2Xgcbxok/img.jpg&quot; data-alt=&quot;k를 다양하게 해서 k-means clustering에 대한 실험을 진행했을 때, k=5가 적정함을 알 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfhWIZ/btrWdIcqmrC/q4qIOKegnXOSKF2Xgcbxok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfhWIZ%2FbtrWdIcqmrC%2Fq4qIOKegnXOSKF2Xgcbxok%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;341&quot; data-filename=&quot;피2.JPG&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;k를 다양하게 해서 k-means clustering에 대한 실험을 진행했을 때, k=5가 적정함을 알 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;5) Direct Location Prediction&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; YOLO와 anchor box를 함께 사용했을 때의 또 다른 문제점이 존재한다. 초기 iteration 시, bounding box의 위치를 조정하는 계수에는 제한된 범위가 없어서 최적화된 값을 찾는데 오래 걸린다는 문제(모델의 불안정성 문제)이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 이를 해결하기 위해, gird cell에 상대적인 위치 좌표 (0~1의 값)를 예측하도록 함으로써 예측하는 위치의 범위가 정해짐에 따라 network아 안정적으로 학습 가능하도록 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;피3.JPG&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czfdd2/btrWdIwG2dU/VGlkU8khvfy1GysRzKj85k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czfdd2/btrWdIwG2dU/VGlkU8khvfy1GysRzKj85k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czfdd2/btrWdIwG2dU/VGlkU8khvfy1GysRzKj85k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczfdd2%2FbtrWdIwG2dU%2FVGlkU8khvfy1GysRzKj85k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;326&quot; height=&quot;312&quot; data-filename=&quot;피3.JPG&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;657&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;rarr; (4)의 dimension clustering을 통해 최적의 prior를 선택하고, (5)의 anchor box의 center의 좌표 예측을 통해 성능을 향상시킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;6) Fine-Graiend Features&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; network의 최종 output은 13*13의 feature map이다. 그러나, feature map의 크기가 작은 경우에 큰 object를 예측하기에는 용이하지만, 작은 object를 예측하기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 이를 해결하기 위해, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 1. 마지막 pooling을 수행하기 전에 feature map을 추출하여 26*26의 feature map을 얻는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 2. feature map의 channel은 유지하면서 4개로 분할한 후 결합하여 13*13의 feature map을 얻는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;rarr; 이러한 feature map은 보다 작은 object에 대한 정보를 함축하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;fg.png&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SpxOH/btrWghrCJUP/mWWJ11iRoy1rH9C9jaKhGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SpxOH/btrWghrCJUP/mWWJ11iRoy1rH9C9jaKhGK/img.png&quot; data-alt=&quot;출처 &amp;quot; https://wikidocs.net/167664 &amp;quot;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SpxOH/btrWghrCJUP/mWWJ11iRoy1rH9C9jaKhGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSpxOH%2FbtrWghrCJUP%2FmWWJ11iRoy1rH9C9jaKhGK%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;470&quot; height=&quot;206&quot; data-filename=&quot;fg.png&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 &quot; https://wikidocs.net/167664 &quot;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;7) Multi-Sclae Training&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 다양한 input image의 크기를 사용하여 network를 학습시켜 본다. 아래 표에서 알 수 있듯이, 속도와 정확도 사이에는 trade-off가 존재하며, input image의 크기가 작은 경우 높은 fps를 가지고, 크기가 큰 경우 높은 mAP 값을 가지게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;표3.JPG&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caesCQ/btrWeZks6ZE/XhhfbZGK6zL7S8WjwTiXDK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caesCQ/btrWeZks6ZE/XhhfbZGK6zL7S8WjwTiXDK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caesCQ/btrWeZks6ZE/XhhfbZGK6zL7S8WjwTiXDK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaesCQ%2FbtrWeZks6ZE%2FXhhfbZGK6zL7S8WjwTiXDK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;378&quot; height=&quot;358&quot; data-filename=&quot;표3.JPG&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #e0ecea;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Part 2 : Faster&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;YOLO v2의 backbone은 아래 표와 같은 구조를 가지는 Darknet-19이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;표6.JPG&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;837&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRD7Kl/btrWhsNfE4i/xe2A0mBl3L1VMWCVPWuPzK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRD7Kl/btrWhsNfE4i/xe2A0mBl3L1VMWCVPWuPzK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRD7Kl/btrWhsNfE4i/xe2A0mBl3L1VMWCVPWuPzK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRD7Kl%2FbtrWhsNfE4i%2Fxe2A0mBl3L1VMWCVPWuPzK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;303&quot; height=&quot;436&quot; data-filename=&quot;표6.JPG&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;837&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;+ GAP (Global Average Pooling)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; YOLO v1은 network 마지막에 fully connected layer를 통해 predection을 수행하기에 parameter의 수는 증가하고, detection 속도는 감소한다는 단점을 가진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 이에 반해 YOLO v2의 Darknet-19는 마지막 layer에 GAP 사용하여 fully connected layer를 제거함으로써, paramter의 수는 감소시키고 detection 속도를 향상시킨다.&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;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;* GAP&amp;nbsp; 추가 설명&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; : 같은 channel의 feature를 평균내는 것으로, (h, w, channel)의 형태를 (channel,)의 형태로 바꾸어준다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;nbsp; 최종 output이 1차원 벡터이므로 fully connected layer 대신 사용 가능하다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #e0ecea;&quot;&gt;&lt;b&gt;Part 3 : Stronger&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 앞서 언급했듯이 model을 더 강건하게 만들기 위해서 classification dataset과 detection dataset을 함께 학습시켜 보다 많은 class를 예측하려고 합니다. 이를 위해 주목해야 할 점은 두 데이터셋을 섞는 방법입니다. classification dataset은 보다 세부적인 object에 대한 정보를 가지고 있습니다. 예를 들면, '요크셔테리어', '불독' 등. 그러나, detection dataset은 일반적으로 범용적인 object에 대한 정보를 가지고 있습니다 .예를 들자면, '개' 등이 있다. 이때, 발생할 수 있는 문제점은 '개'와 요크셔테리어'를 별개의 class로 분류할 수도 있다는 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 이를 해결하기 위해서 ImageNet label로부터 hierarchical tree인 WordTree를 구성하는 &lt;b&gt;'Hierarchical classification'&lt;/b&gt; 방법을 제안합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; ImageNet label은 concept과 concept 간의 관계를 구조화하는 language database인 WordNet으로부터 가져옵니다. WordNet은 언어가 복잡하기 때문에 tree가 아닌 directed graph로 구성됩니다. 예를 들자면, '개'는 'canine(개)' 유형과 'domestic animal (가축 동물)' 유형 둘 다에 포함됩니다. 본 논문에서는 전체 그래프 구조를 사용하는 대신 ImageNet의 concept에서 hierarchical tree를 구축하여 문제를 단순화합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;최종적으로 생성된 WordTree는 physical object를 루트 노드로 두고, 하위 범주는 자식 노드가 되도록 하여 점차 뻗어나갑니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; WordTree로 classification을 수행하려는 경우, 해당 synset이 각 하위 확률에 대해 모든 노드에서 조건부 확률을 예측합니다. 예를&amp;nbsp;들어,&amp;nbsp;&quot;terrier&quot;&amp;nbsp;노드에서는&amp;nbsp;다음의&amp;nbsp;확률값을&amp;nbsp;예측합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;$$ Pr(Norfolk terrier|terrier) $$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;$$ Pr(Yorkshire terrier|terrier) $$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;$$ Pr(Bedlington terrier|terrier) $$&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;만약&amp;nbsp;특정&amp;nbsp;노드에&amp;nbsp;대한&amp;nbsp;absolute&amp;nbsp;probability를&amp;nbsp;계산하려면,&amp;nbsp;tree를&amp;nbsp;통해&amp;nbsp;루트&amp;nbsp;노드까지의&amp;nbsp;path를&amp;nbsp;따라서&amp;nbsp;조건부&amp;nbsp;확률을&amp;nbsp;곱하면&amp;nbsp;됩니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;입력&amp;nbsp;이미지가&amp;nbsp;'Norfolk&amp;nbsp;terrier'인지&amp;nbsp;알고싶다면,&amp;nbsp;다음을&amp;nbsp;계산합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;식1.JPG&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciLPri/btrWdIKjefu/cAOlPEf6YB4HERavjbHzb0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciLPri/btrWdIKjefu/cAOlPEf6YB4HERavjbHzb0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciLPri/btrWdIKjefu/cAOlPEf6YB4HERavjbHzb0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciLPri%2FbtrWdIKjefu%2FcAOlPEf6YB4HERavjbHzb0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;372&quot; height=&quot;145&quot; data-filename=&quot;식1.JPG&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 이러한 방식을 통해 ImageNet dataset과 COCO dataset을 4:1의 비율로 합친 9418개의 class를 가지는 WordTree를 구성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;피6.jpg&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;867&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HlwkU/btrWdoZvLwO/4YldmRfUUdVcxvVa7Khkc1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HlwkU/btrWdoZvLwO/4YldmRfUUdVcxvVa7Khkc1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HlwkU/btrWdoZvLwO/4YldmRfUUdVcxvVa7Khkc1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHlwkU%2FbtrWdoZvLwO%2F4YldmRfUUdVcxvVa7Khkc1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;658&quot; height=&quot;867&quot; data-filename=&quot;피6.jpg&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;867&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #e0ecea;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Experiments&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;테5.jpg&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GQznR/btrWdfVTDez/2Y4R9Wg5pq6ff6lJgZ6ck0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GQznR/btrWdfVTDez/2Y4R9Wg5pq6ff6lJgZ6ck0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GQznR/btrWdfVTDez/2Y4R9Wg5pq6ff6lJgZ6ck0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGQznR%2FbtrWdfVTDez%2F2Y4R9Wg5pq6ff6lJgZ6ck0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;257&quot; data-filename=&quot;테5.jpg&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;blockquote data-ke-style=&quot;style2&quot;&gt;Redmon, J., &amp;amp; Farhadi, A. (2017). YOLO9000: better, faster, stronger. In&amp;nbsp;Proceedings of the IEEE conference on computer vision and pattern recognition&amp;nbsp;(pp. 7263-7271).&lt;/blockquote&gt;</description>
      <category>Image Description</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/17</guid>
      <comments>https://subin-99.tistory.com/17#entry17comment</comments>
      <pubDate>Mon, 16 Jan 2023 01:38:09 +0900</pubDate>
    </item>
    <item>
      <title>RNN model 스터디</title>
      <link>https://subin-99.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 참고한 논문에서는 크게 CNN과 RNN 모델이 사용된다. CNN 모델의 경우는 이전의 게시물 ( ~ )에서 설명했기에, RNN 모델에 대해 정리하려고 한다. 주로 사용한 모델은 LSTM과 GRU이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Video Summarization</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/16</guid>
      <comments>https://subin-99.tistory.com/16#entry16comment</comments>
      <pubDate>Tue, 8 Feb 2022 05:43:44 +0900</pubDate>
    </item>
    <item>
      <title>강화학습 스터디</title>
      <link>https://subin-99.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 참고한 논문에서 모델의 학습을 위해 사용되는 학습 방식이 강화학습 (Reinforcement Learning)이기에 이에 대해 자세히 스터디하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Video Summarization</category>
      <category>reinforcement learning</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/15</guid>
      <comments>https://subin-99.tistory.com/15#entry15comment</comments>
      <pubDate>Tue, 8 Feb 2022 05:41:50 +0900</pubDate>
    </item>
    <item>
      <title>[참고 논문 리뷰] Video Summarization with Long Short-term Memory</title>
      <link>https://subin-99.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 2021학년도의 '소프트웨어융합캡스톤디자인' 및 '졸업논문'의 주제로 'Video Summarization'을 선택하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;OverView&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;비디오 촬영 및 업로드가 간편해지고 특히 YouTube가 크게 성장하면서, 비디오 데이터의 생산량이 급격하게 증가하고 있다. 이러한 방대한 데이터 중에서 원하는 정보만을 효율적으로 다루기 위해서 비디오 영상의 요약 기술이 필요하다. 이번 캡스톤 디자인 수업에서는 LSTM 모델을 기반으로 하는 비디오의 요약 모델을 구현할 것이다. 구현 모델은 주어진 비디오 영상에서 중요한 부분만을 요약하여 보여줄 수 있도록 한다. 요약이 필요한 비디오를 입력함으로써 필요한 부분의 영상을 볼 수 있도록 하며, 요약 영상을 통해서 원본 영상의 전체적인 내용도 알 수 있도록 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;ldquo;Video Summarization with Long Short-term Memory[1]&amp;rdquo; 논문을 참고하였는데, 본 논문에서는 dppLSTM이라는 모델을 제안하는데 이는 2개의 LSTM 레이어로 구성된 vsLSTM (본 논문에서 제안하는 또 다른 모델)과 DPP (Determinantal Point Processes)를 결합한 모델이다. 여기서 제안하는 두 모델 (vsLSTM과 dppLSTM)의 성능을 평가하기 위해서는 SumMe, TVSum 데이터셋을 사용하였고, 다른 모델인 MLP와 vsLSTM의 성능을 비교한 후, vsLSTM과 dppLSTM의 성능을 비교하는 과정을 거친다. 그 결과로 MLP보다 vsLSTM이 대부분의 경우에 좋은 성능을 보였고, vsLSTM보다 dppLSTM이 더 좋은 성능을 보였다. 이 점을 참고하여 과제를 수행해보려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 게시물에서는 참고한 논문 [&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;Video Summarization with Long Short-term Memory]에 대해 정리한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Zhang, K., Chao, W. L., Sha, F., &amp;amp; Grauman, K. (2016, October). Video summarization with long short-term memory. In European conference on computer vision (pp. 766-782). Springer, Cham.&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>Video Summarization</category>
      <category>reinforcement learning</category>
      <category>Video Summarization</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/14</guid>
      <comments>https://subin-99.tistory.com/14#entry14comment</comments>
      <pubDate>Tue, 8 Feb 2022 05:40:46 +0900</pubDate>
    </item>
    <item>
      <title>[최종 결과물] 실험 결과 및 결론</title>
      <link>https://subin-99.tistory.com/13</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 인터넷의 여러 이미지와 글씨체를 참고하여 다양한 글자가 적힌 이미지를 직접 생성해내어 실험을 진행하였다. 이에 대한 결과는 아래 글과 github 사이트 (&lt;a href=&quot;https://github.com/Ok-subin/OCR-2020_Capstone_Design.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/Ok-subin/OCR-2020_Capstone_Design.git&lt;/a&gt;)에서 확인할 수 있다. (github는 현재 수정 중)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;실험 결과&lt;/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;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;결론 및 제언&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; MNIST에 이어서 많이 연구되고 있는 EMNIST dataset에 대해 학습된 모델을 구현하는 것이 이번 프로젝트의 목표였다. 비록 아직 미완성적인 부분이 있지만, 빠른 시일내에 마무리하여 모델을 완성할 계획이다. 선행 연구를 조사해보면서 CNN이 학습 효과에 좋은 구조라는 것을 알게되었기에, 이를 직접 구현해보며 확인하고 싶었지만 구조의 정확도가 대개 88~90% 정도에 머무르며 더 이상 향상되지 않아 아쉬웠다. 구조&amp;nbsp;및 매개변수에 변화를 주면서도 확신이 없었기에, CNN에 대한 추가적인 학습이 필요하다고 생각했고, 학습을&amp;nbsp;통해&amp;nbsp;해당&amp;nbsp;모델의&amp;nbsp;성능을&amp;nbsp;향상시켜보고&amp;nbsp;싶다.&amp;nbsp;또한,&amp;nbsp;이런&amp;nbsp;과정을&amp;nbsp;통해&amp;nbsp;정확도가&amp;nbsp;높은&amp;nbsp;모델이&amp;nbsp;구현되면,&amp;nbsp;여러&amp;nbsp;문자,&amp;nbsp;숫자&amp;nbsp;dataset을&amp;nbsp;추가하여&amp;nbsp;다양한&amp;nbsp;이미지에서&amp;nbsp;높은&amp;nbsp;정확도를&amp;nbsp;보이며&amp;nbsp;문자를&amp;nbsp;추출&amp;nbsp;및&amp;nbsp;인식하는&amp;nbsp;모델의&amp;nbsp;구현을&amp;nbsp;목표로&amp;nbsp;한다.&lt;/p&gt;</description>
      <category>OCR (Optical Character Recognition)</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/13</guid>
      <comments>https://subin-99.tistory.com/13#entry13comment</comments>
      <pubDate>Tue, 8 Feb 2022 05:33:35 +0900</pubDate>
    </item>
    <item>
      <title>[2단계] 문자 인식</title>
      <link>https://subin-99.tistory.com/12</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;이전 과정을 통해 추출한 문자 영역을 문자 인식 모델에 입력하여 어떤 문자/숫자인지 판별해내는 것이 최종 목표였기에, 문자 인식 모델을 구현해야 한다. 모델 학습을 위해 사용한 dataset은 EMNIST의 ByMerge dataset이며, CNN 구조를 활용한다. CNN의 여러 모델 중 1) ResNet, 2) VGGNet, 3) Inception 모델을 사용해보고, 성능을 비교해 모델을 완성시킨다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;이후, 인식된 문자 영역에는 주요 문자 뿐만 아니라 다른 문자의 일부가 포함될 수도 있기 때문에 이를 제거해주기 위한 과정이 필요하다. 이는 Connected Component Labelling 과정을 통해 수행된다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;CNN 모델 몇 가지를 구현한 후, EMNIST dataset에 입력했을 때 성능이 가장 좋은 모델을 사용하기로 결정했다. 각 모델을 구현한 후, 정확도를 높이기 위해 layer의 추가/삭제를 통한 구조의 변경 또는 learning rate, batch size 등의 parameter의 조정의 과정을 거쳤다.&amp;nbsp;&amp;nbsp;ResNet, VGGNet, Inception 등의 구현을 통해 EMNIST dataset을 학습시키며 validation accuracy&amp;nbsp;값을 비교해보는 과정을 거쳤다. 모델 간의 큰 차이가 나지는 않았지만, VGGNet이 accuracy가 가장&amp;nbsp;높은데다가 layer를 변경하기 쉽게 구현되어 있어서 VGGNet을 기본 모델로 선택하였다. 그러나, EMNIST 이미지는 28x28로 사이즈가 매우 작기 때문에 이렇게 복잡한 모델을 사용하면 오히려 성능이 떨어지거나 할 수 있다고 생각했고, 그러한 결과가 나왔기에 layer를 축소시키는 등 변형시켜 구현하였다. 최종 모델 역시 선택된 VGGNet 모델의 기본 뼈대 및 특성만을 반영한 후, 변형시킬 예정이다. 그렇기 때문에 최종적으로 구현된 모델은 ResNet, VGGNet 등 특정 모델을 사용했다고는 말할&amp;nbsp;수 없고, 변형된 (또는 축소된) VGGNet 모델을 사용했다고 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;최종적으로 구현된 모델에서 활용된 VGGNet의 특징은 1) Pooling을 하기 전에 동일한 convolution layer를 반복해서 사용한다는 점과, 2) convolution layer에서 filter의 크기는 항상 3x3이라는 점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 본 과정에서 사용된 CNN model 3가지에 대해서 자세히 살펴보려고 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;ResNet&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;VGGNet&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;Inception&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;결론적으로 사용된 model의 구조&lt;/span&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>OCR (Optical Character Recognition)</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/12</guid>
      <comments>https://subin-99.tistory.com/12#entry12comment</comments>
      <pubDate>Tue, 8 Feb 2022 05:30:46 +0900</pubDate>
    </item>
    <item>
      <title>[1단계] 이미지 속 문자 영역 추출</title>
      <link>https://subin-99.tistory.com/11</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;첫 번째 과정은 이미지 속에서 문자를 찾아내는 과정이다. 현재 프로젝트에서는 오픈소스인 CRAFT와 Tesseract 오픈소스를 사용해본 후, 성능을 평가했다. EMNIST가 손글씨 데이터이기 때문에 손글씨 이미지를 인식시켜본 결과, CRAFT가 더 성능이 우수하다고 판단되어 이를 사용하기로 했다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 총 3 단계로 구성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #dddddd;&quot;&gt;&lt;b&gt;1. C&lt;span style=&quot;color: #24292f;&quot;&gt;haracter level bounding box 정보 추출&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;&amp;nbsp; CRAFT에서는 word level bounding box 정보를 추출하는 코드만 제공하기 때문에, character level bounding box 정보를 추출하는 코드를 추가 구현해야한다. 아래의 함수를 추가로 생성하면서 임계값을 수정해주면 기존의 word level로 추출되던 문자 이미지를 character level로 추출할 수 있게 된다. 아래 함수는 CRAFT 프로그램 내의 'detection.py' 등 기존에 word level 결과를 생성하던 곳에 추가되어있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #24292f;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&quot; Naver CRAFT &quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #24292f;&quot;&gt;2. &lt;span style=&quot;color: #24292f;&quot;&gt;&amp;nbsp;character 간의 순서 정렬&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt; &amp;nbsp;&amp;nbsp;위 함수를 추가하여 character를 추출하면 기존 이미지 속 문자 순서대로 추출되지 않는다. 그렇기 때문에 아래의 함수를 추가하여 character들을 정렬해주는 과정이 필요하다. 이 함수는 'mainModel.py'에 구현되어 있다. 해당 과정은 1) word 영역 정보를 이용하여 각 word 영역 내의 character 분류해서 각각 다른 행의 배열에 저장, 2) 해당 행의 개수를 저장하는 배열(lineCharNum)을 생성하고 이는 word 내의 character 개수를 의미함, 3) (1)에서 저장한 character를 좌표 정보를 이용하여 순서대로 정렬하는 순서로 이루어진다. 여기서 (2)의 lineCharNum 배열은 이후에 문자 인식 결과를 출력할 때, 단어마다 구분하여 출력해주기 위해서 사용된다. 또한, 아래 함수에서 word 영역을 각각 10씩 늘려주는 이유는 간혹 character가 word 영역을 벗어나는 경우가 있기 때문이다. 어느 word 영역에 존재하는지만 파악하면 되기에 늘려주어도 상관없다.&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #24292f;&quot;&gt;&lt;span style=&quot;color: #24292f;&quot;&gt;3. &lt;span style=&quot;color: #24292f;&quot;&gt;connected component labelling을 통한 문자의 구분&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 문자 영역에서 주요 문자를 구분해내기 위해 다음의 connected component labelling 함수를 구현한다. 본 프로젝트에서는 해당 함수에서 영역을 10씩 늘려주는 부분과 EMNIST의 학습이 '검은 배경 + 흰색 글씨'로 이루어진 데이터셋에 대해서면 학습이 이루어져 있다는 점을 감안하여 동일하게 '흰 배경 + 검은색 글씨' 데이터에 대해서만 테스트 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;connected component labelling&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;함수의 기능&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;구현&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>OCR (Optical Character Recognition)</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/11</guid>
      <comments>https://subin-99.tistory.com/11#entry11comment</comments>
      <pubDate>Tue, 8 Feb 2022 05:26:22 +0900</pubDate>
    </item>
    <item>
      <title>EMNIST 학습을 통한 효율적인 이미지 속 문자 인식 모델 구성</title>
      <link>https://subin-99.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 2020-2 데이터분석 캡스톤디자인 수업의 프로젝트로 'EMNIST 학습을 통한 효율적인 이미지 속 문자 인식 모델'을 구성하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;과제 선정 배경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2020학년도 2학기 [데이터분석 캡스톤 디자인] 수업의 프로젝트 과제로 EMNIST 학습을 통한 효율적인 이미지 속 문자 인식 모델을 구성하기로 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;MNIST 데이터의 숫자를 분류하는 연구는 이미지를 분석하고 학습시켜 분류시키는 컴퓨터 비전 연구 분야에서 기초적인 연구로 많이 학습된다. 이에 대한 연구는 많이 진행되었고, 이를 효율적으로 학습시키는 모델들 역시 다양하게 구성되어 있다. 이번 캡스톤 디자인에서는 MNIST 데이터를 변형시킨 숫자와 문자로 구성된 EMNIST 데이터를 학습시키는 모델을 구현한 후, 이미지 속에서 문자 영역을 찾아내어 bounding box로 씌우고 그 문자를 인식하려고 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;즉, 이번 프로젝트의 큰 과제는 1) 이미지 속에서 문자 영역을 추출하는 것과 2) 추출한 문자를 인식하는 것이다. 두 알고리즘을 통합하여 하나의 모델로 완성시키는 것을 목표로 한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;모델의 기본 구조&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbpDnT/btrsL9I0RjD/q0lQjGw673XTytuHrIXx0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbpDnT/btrsL9I0RjD/q0lQjGw673XTytuHrIXx0K/img.jpg&quot; data-alt=&quot;모델의 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbpDnT/btrsL9I0RjD/q0lQjGw673XTytuHrIXx0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbpDnT%2FbtrsL9I0RjD%2Fq0lQjGw673XTytuHrIXx0K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;301&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;301&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;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;1.1 이미지 속 문자 영역 추출&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;첫 번째 과정은 이미지 속에서 문자를 찾아내는 과정이다. 현재 프로젝트에서는 오픈소스인 CRAFT와 Tesseract 오픈소스를 사용해본 후, 성능을 평가했다. EMNIST가 손글씨 데이터이기 때문에 손글씨 이미지를 인식시켜본 결과, CRAFT가 더 성능이 우수하다고 판단되어 이를 사용하기로 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;1.2 추출한 문자 인식&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;이전 과정을 통해 추출한 문자 영역을 문자 인식 모델에 입력하여 어떤 문자/숫자인지 판별해내는 것이 최종 목표였기에, 문자 인식 모델을 구현해야 한다. 모델 학습을 위해 사용한 dataset은 EMNIST의 ByMerge dataset이며, CNN 구조를 활용한다. CNN의 여러 모델 중 1) ResNet, 2) VGGNet, 3) Inception 모델을 사용해보고, 성능을 비교해 모델을 완성시킨다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;이후, 인식된 문자 영역에는 주요 문자 뿐만 아니라 다른 문자의 일부가 포함될 수도 있기 때문에 이를 제거해주기 위한 과정이 필요하다. 이는 Connected Component Labelling 과정을 통해 수행된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;DataSet : EMNIST&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; 본 모델에서 문자 인식 모델을 구현하기 위해 사용한 EMNIST dataset은 &amp;lsquo;NIST Special Database 19&amp;rsquo;로부터의 필기 숫자/문자 데이터를 28x28 픽셀 이미지 형식으 로 바꾼 dataset으로, 구조는 MNIST dataset과 동일하다. 해당 dataset은 ByClass, ByMerge, Balanced, Letters, Digits, MNIST인 6가지의 다른 형태의 dataset으로 나뉜다. &amp;nbsp;&amp;nbsp;6가지 dataset 중에서 데이터 개수가 814,255개로 가장 많은 ByClass와 ByMerge 중에서 유사한 대소문자 클래스를 합병한 ByMerge dataset을 사용한다. ByMerge dataset의 구성 예시는 [그림 2]와 같다. 각 이미지 아래의 label 값은 숫자, 알파벳 label에 대한 아스키코드 값이다.&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;504&quot; data-origin-height=&quot;501&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chifib/btrsJKXisQP/MRJr7qteTkHHCKzQqJlCf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chifib/btrsJKXisQP/MRJr7qteTkHHCKzQqJlCf0/img.png&quot; data-alt=&quot;&amp;amp;nbsp;EMNIST - ByMerge Dataset의 구성 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chifib/btrsJKXisQP/MRJr7qteTkHHCKzQqJlCf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fchifib%2FbtrsJKXisQP%2FMRJr7qteTkHHCKzQqJlCf0%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;504&quot; height=&quot;501&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;501&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;nbsp;EMNIST - ByMerge Dataset의 구성 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>OCR (Optical Character Recognition)</category>
      <category>EMNIST</category>
      <category>OCR</category>
      <category>문자인식</category>
      <author>Subin_Ok</author>
      <guid isPermaLink="true">https://subin-99.tistory.com/10</guid>
      <comments>https://subin-99.tistory.com/10#entry10comment</comments>
      <pubDate>Tue, 8 Feb 2022 05:18:03 +0900</pubDate>
    </item>
  </channel>
</rss>