<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>I'm Lim</title>
    <link>https://imlim0813.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 5 Jul 2026 14:19:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>imlim</managingEditor>
    <item>
      <title>[논문 구현] LeNet</title>
      <link>https://imlim0813.tistory.com/66</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. LeNet 구현&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;1280&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZIzdV/btr5TqeR2TV/h0QKNOkG00PcU4fAzJJsL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZIzdV/btr5TqeR2TV/h0QKNOkG00PcU4fAzJJsL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZIzdV/btr5TqeR2TV/h0QKNOkG00PcU4fAzJJsL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZIzdV%2Fbtr5TqeR2TV%2Fh0QKNOkG00PcU4fAzJJsL0%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;1280&quot; height=&quot;376&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;376&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;/p&gt;
&lt;pre id=&quot;code_1679828228155&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=0)
        self.conv2 = nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5, stride=1, padding=0)
        self.conv3 = nn.Conv2d(in_channels=16, out_channels=120, kernel_size=5, stride=1, padding=0)
       
        self.fc1 = nn.Linear(in_features=120, out_features=84)
        self.fc2 = nn.Linear(in_features=84, out_features=10)

        self.avg_pool = nn.AvgPool2d(kernel_size=2, stride=2, padding=0)

    def forward(self, x):
        x = self.avg_pool(F.tanh(self.conv1(x)))
        x = self.avg_pool(F.tanh(self.conv2(x)))
        x = F.tanh(self.conv3(x))

        x = x.view(x.size(0), -1)

        x = F.tanh(self.fc1(x))
        x = self.fc2(x)

        return x&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ Loss function으로 CrossEntropyLoss를 사용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;※&lt;span&gt;&amp;nbsp;Optimizer로 SGD를 사용하였습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. LeNet 학습 결과&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습을 위해 MNIST 데이터 셋을 사용하였고, Batch size : 128, epoch : 100, Learning Rate : 1e-3, Weight decay : 1e-5으로 설정하였습니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;5056&quot; data-origin-height=&quot;2656&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWxj1m/btr5Qobb3Ye/NtGXcIcOYtxItw22U7ma2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWxj1m/btr5Qobb3Ye/NtGXcIcOYtxItw22U7ma2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWxj1m/btr5Qobb3Ye/NtGXcIcOYtxItw22U7ma2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWxj1m%2Fbtr5Qobb3Ye%2FNtGXcIcOYtxItw22U7ma2k%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;476&quot; height=&quot;2656&quot; data-origin-width=&quot;5056&quot; data-origin-height=&quot;2656&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;5056&quot; data-origin-height=&quot;2656&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qYeiF/btr6eWqi4kx/0ZfCD0Yc9ozfPnMZ2UZlP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qYeiF/btr6eWqi4kx/0ZfCD0Yc9ozfPnMZ2UZlP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qYeiF/btr6eWqi4kx/0ZfCD0Yc9ozfPnMZ2UZlP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqYeiF%2Fbtr6eWqi4kx%2F0ZfCD0Yc9ozfPnMZ2UZlP1%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;459&quot; height=&quot;241&quot; data-origin-width=&quot;5056&quot; data-origin-height=&quot;2656&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다지 어렵지 않은 MNIST 데이터 셋이라 그런지 Overfitting은 발생하지 않았습니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Classification/Implementation</category>
      <category>deep learning</category>
      <category>LeNet 구현</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/66</guid>
      <comments>https://imlim0813.tistory.com/66#entry66comment</comments>
      <pubDate>Mon, 27 Mar 2023 08:41:12 +0900</pubDate>
    </item>
    <item>
      <title>[논문 정리] Fast R-CNN</title>
      <link>https://imlim0813.tistory.com/65</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Paper&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp; Girshick, R. (2015). Fast r-cnn. In&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;Proceedings of the IEEE international conference on computer vision&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(pp. 1440-1448).&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Abstract&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Fast R-CNN 모델은 기존의 R-CNN, SPP-Net, Overfeat과 달리 Classification과 Regression을 동시에 학습을 진행합니다. 또한, SPP-Net과 유사하게 학습시 입력으로 한장의 이미지만을 사용합니다. 그 결과, VGG-16을 기준으로 R-CNN에 비해 학습시간이 9배 빨랐고, SPP-Net에 비해 3배 빨랐다고합니다. 성능적인 측면에서도 mAP를 66%를 기록하면서 R-CNN보다 좋은 성능을 보였습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;R-CNN and SPP-Net&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 여러단계의 학습 과정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; R-CNN은 우선 ImageNet으로 학습된 모델을 fine-tuning시키고, SVM을 통해 classifier를 정의한 후 bounding box regressor를 학습시킵니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 학습 시간 및 메모리&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; SVM과 bounding box regressor의 학습을 위해 selective search를 통해 얻은 모든 proposal들을 메모리에 올려야합니다. 이는 대략 수백 기가바이트에 달한다고 합니다. 또한, VOC 07기준 2.6일이 소요됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. Object detection is slow&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 테스트 시, R-CNN은 한장을 처리하는 데 대략 47초가 걸린다고 합니다.&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;SPP-Net은 모든 proposal들을 입력으로 사용하는 것이 아니라, 한장의 이미지만을 입력으로 사용함으로써 R-CNN에 비해 테스트 시간을 10배에서 100배정도 단축시켰습니다. 하지만, SPP-Net은 R-CNN의 구조를 그대로 사용하였기 때문에 Classifier와 Regressor를 따로 학습시킵니다. 또한, SVM과 Regressor의 학습이 CNN 네트워크에 영향을 끼치지 못한다는 단점이 존재합니다.&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; Fast R-CNN은 다음과 같은 장점을 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;R-CNN과 SPP-Net보다 성능이 좋습니다.&lt;/li&gt;
&lt;li&gt;Classifier와 Regressor를 동시에 학습합니다.&lt;/li&gt;
&lt;li&gt;학습이 모든 네트워크에 영향을 미칩니다.&lt;/li&gt;
&lt;li&gt;디스크 용량이 요구되지 않습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Fast R-CNN architeture and training&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2248&quot; data-origin-height=&quot;865&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NZahV/btrZJ2L7vr5/r4NQehzAfX1CUsRb0YwIVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NZahV/btrZJ2L7vr5/r4NQehzAfX1CUsRb0YwIVK/img.png&quot; data-alt=&quot;Fast R-CNN architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NZahV/btrZJ2L7vr5/r4NQehzAfX1CUsRb0YwIVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNZahV%2FbtrZJ2L7vr5%2Fr4NQehzAfX1CUsRb0YwIVK%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;600&quot; height=&quot;865&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2248&quot; data-origin-height=&quot;865&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fast R-CNN architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Fast R-CNN의 학습과정은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&amp;nbsp;전체 이미지를 입력으로 이용하여 CNN 네트워크에 통과시킵니다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Region proposal을 통해 얻은 proposal들을 이용하여 고정된 길이의 feature vector를 추출합니다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;feature vector를 두개의 fc layer의 입력으로 사용하여 classifier를 위한 출력 값과 regressor를 위한 출력값을 추출합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;The ROI pooling layer&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ROI pooling layer는 CNN network와 fc layer 사이에 위치합니다. ROI pooling layer의 출력은 fc layer의 입력으로 사용되는데, 이 크기를 맞춰주기 위한 변환작업이라 생각할 수 있습니다.&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;ROI pooling layer의 처리과정은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&amp;nbsp;입력 이미지를 CNN network에 통과시켜 feature를 추출합니다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Region proposal을 통해 얻은 proposal들을 이용하여 feature의 경계를 제한합니다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;경계를 가지는 feature에 max-pooling을 적용하여 feature map 크기를 고정된 H x W로 변환시킵니다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;이 feature를 fc layer의 입력으로 사용합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ ROI pooling layer는 Spatial Pyramid Pooling의 특수한 경우로 볼 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Initializing from pre-trained networks&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Fast R-CNN은 Backbone 모델로 VGG 16을 사용하고, 학습을 위해서 모델을 변형시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&amp;nbsp;마지막 max pooling을 ROI pooling layer로 교체합니다. VGG 16 fc layer의 입력은 feature map 크기가 7 x 7이어야 하므로 이에 맞게 H와 W를 7 x 7로 고정시킵니다.&lt;/li&gt;
&lt;li&gt;fc layer의 마지막 단을 classifier (K+1차원 벡터)와 regressor ((K+1) x 4차원 벡터)로 교체합니다.&lt;/li&gt;
&lt;li&gt;VGG-16의 입력이 두가지 데이터를 입력으로 받도록 교체합니다 (전체 이미지, proposals).&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Fine-tuning for detection&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 앞서 SPP-Net은 CNN 네트워크가 학습시 업데이트 되지 못한다고 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. SPP-Net과 R-CNN이 학습하는 방식은 너무 비효율적입니다.&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;size16&quot;&gt;&amp;nbsp; 이 모델들은 학습 샘플들을 구성할때, 각기 다른 이미지들로부터 하나의 ROI 샘플들을 추출하여 입력으로 사용합니다. 이를 해결하기 위해, Fast R-CNN은 N개의 이미지를 정하고, ROI를 R / N개를 추출하여 학습에 사용한다고 합니다.&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;정리하자면, 기존 SPP-Net과 R-CNN은 N = 128, R = 128인 반면, Fast R-CNN은 N = 2, R = 128로 지정하여 학습 샘플을 추출하였습니다.&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-CNN은 128개의 이미지 모두 selective search를 진행하고, 하나의 ROI를 추출하는 것에 비해, Fast R-CNN은 2개의 이미지에 한해 selective search를 진행하고, 64개의 ROI를 추출하기 때문에 계산량이 줄어듭니다. 이 방식은 기존의 방식보다 Fast R-CNN이 64배 정도 빠르다고 합니다.&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;예를 들어, 128개의 이미지가 있고, ROI를 64번 학습시키는 데 드는 계산량을 구해보겠습니다. (Selective search 계산량 : a)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N = 2, R = 128인 Fast R-CNN의 경우, 128개의 이미지 전체를 학습하는 데 걸리는 계산량은 2 x a x 64 가 됩니다 (Selective search x 배치 이미지 개수 x (전체 이미지 개수 / 배치 이미지 개수)).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그에 반해, R-CNN은 128 x a x 64가 됩니다 (Selective search 개수 x 배치 이미지 개수 x (64 / ROI 개수)).&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;아마, 이러한 논리로 Rast R-CNN이 64배정도 더 빠르다고 하지 않았나 추측하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. Fast R-CNN은 한번에 학습합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 세 단계로 이루어진 (&lt;span&gt;Fine-tuning, SVM 학습, regressor 학습&lt;/span&gt;) R-CNN과 달리 Fast R-CNN은 이를 한번에 처리합니다. 따라서, CNN network들이 업데이트가 가능해집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Mutli task loss&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 한번에 학습하기 위해서, Fast R-CNN은 classifier와 regressor의 loss를 아래와 같이 하나로 합칩니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2934&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DNqaR/btrZNuAUSwb/jU7Y0LZChK66T4LhPE8zWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DNqaR/btrZNuAUSwb/jU7Y0LZChK66T4LhPE8zWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DNqaR/btrZNuAUSwb/jU7Y0LZChK66T4LhPE8zWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDNqaR%2FbtrZNuAUSwb%2FjU7Y0LZChK66T4LhPE8zWk%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;373&quot; height=&quot;201&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2934&quot; data-origin-height=&quot;201&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;$L_{cls} (p, u)$는 Classifier의 loss로써 cross entropy loss로 생각하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$L_{loc} (t^u, v)$는 Regressor의 loss로써 MSE loss를 생각하면 됩니다. ( 자세히 말하면, MSE와 MAE를 둘다 사용 )&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;$\lambda$는 Regressor를 얼만큼 반영할 것인가에 대한 파라미터인데 논문에서는 그냥 1을 사용했다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, $[u \ge 1]$는 해당 입력이 positive라면 1을, negative라면 0을 줌으로써 background class의 경우 regressor 학습을 진행하지 않도록 합니다.&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;※ Positive : ground truth와의 IOU가 0.5이상인 것. (미니 배치 중 25%) // Negative : ground truth와의 IOU가 [0.1, 0.5)인 것. (미니 배치 중 75%)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Fast R-CNN detection&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Training Fast R-CNN&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 종합해보자면, Fast R-CNN은 아래와 같은 과정으로 학습을 진행합니다.&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;b&gt;1 ) Hierarchical sampling&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 위에서 설명한대로 N : 2과 R : 128로 하이퍼 파라미터를 설정한 후, 2개의 이미지에 대해 selective search를 통해 이미지 당 64개의 proposal들을 추출합니다. 이후, positive sample과 negative sample로 나눈 후, 미니 배치를 구성합니다.&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;b&gt;2 ) Feature extractor&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;size16&quot;&gt;&amp;nbsp; 위의 미니 배치를 수정된 VGG 16의 입력으로 사용하여 ROI Pooling layer까지 통과시키고, feature를 추출합니다.&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;b&gt;3 ) The ROI pooling layer&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;size16&quot;&gt;&amp;nbsp; proposal들을 이용하여 추출한 feature의 경계를 정하고, ROI pooling layer를 통과시켜 7 x 7 feature map을 얻습니다. (VGG 기준)&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;b&gt;4 ) Fully connected layer&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;size16&quot;&gt;&amp;nbsp; 7 x 7 feature map을 flatten 시키고, fc layer에 통과시킵니다. 이를 통한 출력은 K+1 차원의 벡터 (classifier)와 (K+1) x 4차원의 벡터 (regressor)입니다.&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;b&gt;5 ) Multi task loss&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;size16&quot;&gt;&amp;nbsp; 이후, 이 값들을 가지고 위에서 설명한 multi task loss를 구하여 학습을 진행합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Discussion&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Fast R-CNN은 R-CNN과는 달리 원본 이미지를 학습에 사용합니다. 이는 SPP-Net과 유사합니다. 하지만, SPP-Net은 R-CNN의 구조를 그대로 사용하여 fine-tuning, SVM, Regressor가 모두 따로 학습되고, 이는 CNN 네트워크가 학습 시 업데이트가 되지 못하는 구조를 가집니다. 이를 해결하기 위해, Fast R-CNN은 fine-tuning, classifier, regressor를 한번에 업데이트 시킵니다.&lt;/p&gt;</description>
      <category>Object Detection</category>
      <category>deep learning</category>
      <category>fast r-cnn</category>
      <category>object detection</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/65</guid>
      <comments>https://imlim0813.tistory.com/65#entry65comment</comments>
      <pubDate>Sun, 19 Feb 2023 16:21:03 +0900</pubDate>
    </item>
    <item>
      <title>[논문 정리] SPP-Net</title>
      <link>https://imlim0813.tistory.com/64</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Paper&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;He, K., Zhang, X., Ren, S., &amp;amp; Sun, J. (2015). Spatial pyramid pooling in deep convolutional networks for visual recognition.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;IEEE transactions on pattern analysis and machine intelligence&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;37&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;(9), 1904-1916.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Abstract&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 기존의 CNN 모델 ( e.g, VGGNet, GoogLeNet, etc ) 등은 224 크기의 고정된 이미지 사이즈를 입력으로 사용합니다. 논문에서는 이것이 성능 저하를 야기할 수 있다고 주장합니다. 이를 해결하기 위해, Spatila Pyramid Pooling 개념을 도입하여 위와 같은 제한을 없앴습니다. 그 결과, Classification과 Object detection 분야에서 우수한 성능을 기록했다고 합니다.&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;span style=&quot;color: #ee2323;&quot;&gt;SPP-Net은 Object Detection 학습을 위해 단 한장의 이미지만 입력으로 사용합니다.&lt;/span&gt; 그 결과, R-CNN과 거의 유사한 성능을 보임과 동시에 inference time이 24에서 102배 더 빨랐다고 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Spatial Pyramid Pooling&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Overfeat에서도 말씀드렸다시피, Classification 모델이 고정된 이미지 크기를 입력으로 받는 이유는 Fully Connected Layer 때문입니다. SPP-Net은 마지막 Conv 레이어에 SPP Layer를 적용함으로써 이러한 제한을 제거하였다고 합니다.&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; SPP-Net은 고정된 이미지크기라는 제약이 없기 때문에 아래와 같이 Crop / Warp과정이 생략됩니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3999&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kOKT9/btrYG77a6at/LJKy2YmPUYvesWLZm9oVWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kOKT9/btrYG77a6at/LJKy2YmPUYvesWLZm9oVWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kOKT9/btrYG77a6at/LJKy2YmPUYvesWLZm9oVWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkOKT9%2FbtrYG77a6at%2FLJKy2YmPUYvesWLZm9oVWK%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;542&quot; height=&quot;730&quot; data-origin-width=&quot;3999&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Spatial Pyramid Pooling의 장점&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;입력 이미지의 크기와 무관하게 spatial pyramid pooling layer의 출력의 길이는 동일합니다.&lt;/li&gt;
&lt;li&gt;spatial pyramid pooling은 &amp;nbsp;여러 spatial bins를 가질 수 있습니다. ( 여러 max pooling을 동시에 적용가능 )&lt;/li&gt;
&lt;li&gt;입력 이미지의 크기와 무관하므로 다양한 scale로부터 feature를 추출할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1350&quot; data-origin-height=&quot;922&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xrJAe/btrYGvf2StU/fUyH6rKFpvyxBY7vDb96Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xrJAe/btrYGvf2StU/fUyH6rKFpvyxBY7vDb96Y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xrJAe/btrYGvf2StU/fUyH6rKFpvyxBY7vDb96Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxrJAe%2FbtrYGvf2StU%2FfUyH6rKFpvyxBY7vDb96Y0%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;508&quot; height=&quot;922&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1350&quot; data-origin-height=&quot;922&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. R-CNN과의 차이점&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; R-CNN은 Selective search로부터 추출한 proposal들을 전부 CNN의 입력으로 사용했습니다. 하지만, SPP-Net은 이러한 과정없이 원본 이미지를 입력으로 사용하여 단 한번의 CNN 연산을 거칩니다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Training the Network&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Single-size training&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 입력이미지를 224 x 224로 Crop하여 사용합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Multi-size training&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; SPP-Net은 어떠한 크기의 이미지도 입력으로 사용할 수 있습니다. 그렇기 때문에, 180 x 180 과 224 x 224의 이미지 크기를 입력으로 사용하여 에폭마다 입력의 크기를 번갈아가면서 학습을 진행합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SPP-Net for Image Classification&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ImageNet 학습을 위한 Baseline 모델로는 ZF-5, AlexNet-5, Overfeat-5/7을 선택했습니다. ( 각 모델 이름 뒤 숫자는 conv layer 개수 ) 또한, 4-level pyramid를 택했는데 {6 x 6, 3 x 3, 2 x 2, 1 x 1}입니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2855&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxblhZ/btrYDfrrjXX/QBRatlryOLaiU9LNZwS8J0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxblhZ/btrYDfrrjXX/QBRatlryOLaiU9LNZwS8J0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxblhZ/btrYDfrrjXX/QBRatlryOLaiU9LNZwS8J0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxblhZ%2FbtrYDfrrjXX%2FQBRatlryOLaiU9LNZwS8J0%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;582&quot; height=&quot;546&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2855&quot; data-origin-height=&quot;546&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;결과는 위와 같이 SPP를 적용하고, Multi-size로 학습시킨 모델이 성능이 가장 우수함을 알 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SPP-Net for Object Detection&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; R-CNN은 2000개의 proposal들을 selective search를 통해 추출하고, 227 크기로 resize한 이미지를 입력으로 사용합니다. 다시 말해, 이미지당 2000개의 이미지가 반복적으로 연산하여 많은 시간을 소요하게 됩니다.&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; SPP-Net은 전체 이미지를 단 한번만 사용해 feature를 추출합니다. 따라서, R-CNN보다 훨씬 더 짧은 시간을 소요합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Detection Algorithm&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Detection의 과정은 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;입력 이미지에 selective search를 적용해 2000개의 proposal들을 얻습니다.&lt;/li&gt;
&lt;li&gt;CNN모델의 입력으로 사용하여 feature map들을 추출합니다.&lt;/li&gt;
&lt;li&gt;2000개의 proposal 좌표를 이용하여 feature map의 경계를 제한합니다.&lt;/li&gt;
&lt;li&gt;경계가 제한된 feature map을 SPP Layer의 입력으로 사용합니다.&lt;/li&gt;
&lt;li&gt;SPM Layer의 출력을 FC Layer의 입력으로 사용합니다.&lt;/li&gt;
&lt;li&gt;R-CNN의 SVM과 동일한 방식으로 클래스를 분류합니다.&lt;/li&gt;
&lt;li&gt;(bb의 경우) R-CNN의 Box Regressor와 동일한 방식으로 bounding box를 예측합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E8E8R/btrYEjhcpeh/IYcdYqGR3fW9aAg7xtKb81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E8E8R/btrYEjhcpeh/IYcdYqGR3fW9aAg7xtKb81/img.png&quot; data-alt=&quot;[ 1 ]&amp;amp;amp;nbsp;https://www.youtube.com/watch?v=wGa6ddEXg7w&amp;amp;amp;list=PL1GQaVhO4f_jLxOokW7CS5kY_J1t1T17S&amp;amp;amp;index=73&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E8E8R/btrYEjhcpeh/IYcdYqGR3fW9aAg7xtKb81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE8E8R%2FbtrYEjhcpeh%2FIYcdYqGR3fW9aAg7xtKb81%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;539&quot; height=&quot;303&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;787&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 1 ]&amp;amp;nbsp;https://www.youtube.com/watch?v=wGa6ddEXg7w&amp;amp;list=PL1GQaVhO4f_jLxOokW7CS5kY_J1t1T17S&amp;amp;index=73&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Detection Results&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;902&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccNbcz/btrYChDVYgj/aeCKU9t3MpAOCtZ7SHFrtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccNbcz/btrYChDVYgj/aeCKU9t3MpAOCtZ7SHFrtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccNbcz/btrYChDVYgj/aeCKU9t3MpAOCtZ7SHFrtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccNbcz%2FbtrYChDVYgj%2FaeCKU9t3MpAOCtZ7SHFrtk%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;471&quot; height=&quot;902&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;902&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 표에서도 알 수 있듯이 SPP-Net을 이용한 model이 R-CNN과 유사한 성능을 보이지만, inference time은 훨씬 빨랐음을 보여줍니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Appendix &amp;amp; Question&lt;/b&gt;&lt;b&gt;&lt;b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. R-CNN과의 차이점&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;논문에서도 강조하다시피, R-CNN과의 가장 큰 차이점은 CNN 모델의 연산횟수다. R-CNN은 selective search로부터 얻은 proposal들을 전부 CNN 모델의 입력으로 사용하는 반면, SPP-Net은 원본 이미지 단 하나만을 CNN 모델의 입력으로 사용한다. 이후, 학습 방식 자체는 동일하다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Overfeat과의 차이점&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Overfeat은 region proposal을 통해 얻은 proposal들을 CNN 모델의 입력으로 사용하지 않는다는 점에서는 유사하지만 region proposal이 feature에 영향을 끼치진 않는다. 그에 반해, SPP-Net은 feature map의 경계를 region proposal을 통해 결정한 후, SPP Layer의 입력으로 사용된다.&lt;/p&gt;</description>
      <category>Object Detection</category>
      <category>deep learning</category>
      <category>object detection</category>
      <category>SPP-Net</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/64</guid>
      <comments>https://imlim0813.tistory.com/64#entry64comment</comments>
      <pubDate>Thu, 9 Feb 2023 21:57:35 +0900</pubDate>
    </item>
    <item>
      <title>[논문 정리] Overfeat</title>
      <link>https://imlim0813.tistory.com/63</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Paper&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp; Sermanet, P., Eigen, D., Zhang, X., Mathieu, M., Fergus, R., &amp;amp; LeCun, Y. (2013). Overfeat: Integrated recognition, localization and detection using convolutional networks.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;arXiv preprint arXiv:1312.6229&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Overfeat 논문은 classification 문제와 detection 문제를 하나의 공유된 네트워크를 통해 학습시킵니다. &lt;span style=&quot;color: #ee2323;&quot;&gt;개인적인 생각으로 이 논문의 가장 핵심은 feature map을 sliding window의 관점으로 해석했다는 점입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Classification&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Feature extractor&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp; Overfeat 모델도 R-CNN 모델처럼 feature extractor를 위해 ImageNet 데이터셋을 이용하여 사전 학습된 모델을 이용합니다. CNN&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;모델은 AlexNet에서 약간의 수정을 거친 모델을 사용합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&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;blob&quot; data-origin-width=&quot;2788&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPKcDg/btrX309IE4U/sLNqATUxex5vZrZN2D0Ew0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPKcDg/btrX309IE4U/sLNqATUxex5vZrZN2D0Ew0/img.png&quot; data-alt=&quot;[ 1 ] fast model&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPKcDg/btrX309IE4U/sLNqATUxex5vZrZN2D0Ew0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPKcDg%2FbtrX309IE4U%2FsLNqATUxex5vZrZN2D0Ew0%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;2788&quot; height=&quot;683&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2788&quot; data-origin-height=&quot;683&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 1 ] fast model&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2890&quot; data-origin-height=&quot;656&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSZkFZ/btrX9FQRRaS/HWtu4mmC8gG6qe56PYJLQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSZkFZ/btrX9FQRRaS/HWtu4mmC8gG6qe56PYJLQ0/img.png&quot; data-alt=&quot;[ 2 ] Accurate model&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSZkFZ/btrX9FQRRaS/HWtu4mmC8gG6qe56PYJLQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSZkFZ%2FbtrX9FQRRaS%2FHWtu4mmC8gG6qe56PYJLQ0%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;2890&quot; height=&quot;656&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2890&quot; data-origin-height=&quot;656&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 2 ] Accurate model&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 논문에서는 입력으로 221 pixels를 사용하였다는 것으로 미루어보아 Accurate model을 기준으로 설명하였음을 유추할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;2. Mutli-scale Classification&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp; AlexNet은 test 시에 [모서리 부분 4개, 중앙 부분 1개 + Horizontal Flip]을 사용하여 총 10개의 이미지를 테스트로 사용합니다. 하지만, 저자는 이것이 이미지의 많은 영역을 무시할 뿐 아니라, 한 가지 scale을 이용하기 때문에 CNN 모델의 성능을 최대화시키는 scale이 아닐 가능성이 있다고 주장합니다.&lt;/span&gt;&amp;nbsp;또한, Pooling이 많이 들어가게 되면 여러픽셀들이 하나의 값으로 압축됩니다 (Layer 5의 출력). 이는 성능저하를 일으킬 것이라 주장합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3159&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlW8vy/btrWWtkTfn0/xGSv625JZ6Ig7lOQFNAjZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlW8vy/btrWWtkTfn0/xGSv625JZ6Ig7lOQFNAjZ0/img.png&quot; data-alt=&quot;[ 3 ] 6-scale feature maps&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlW8vy/btrWWtkTfn0/xGSv625JZ6Ig7lOQFNAjZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlW8vy%2FbtrWWtkTfn0%2FxGSv625JZ6Ig7lOQFNAjZ0%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;3159&quot; height=&quot;1000&quot; data-origin-width=&quot;3159&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 3 ] 6-scale feature maps&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;위 문제들을 해결하기 위해서 6개의 scale을 입력으로 사용하고, Layer 5에 Pooling 적용 전 값을 추출합니다. (Layer 5 pre-pool)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;이후, 아래와 같은 과정을 거칩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&amp;nbsp;3 x 3 max pooling을 overlap되지 않게 픽셀을 1칸씩 이동하면서 3 x 3번 추출합니다. ( Layer 5 post-pool )&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;Layer 6의 입력 feature 크기는 5 x 5이고, sliding window방식으로 적용한다고 합니다. ( Classifier map pre-reshape)&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;2의 출력을 하나로 합칩니다. ( Classifier map size )&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;3. ConvNet and Sliding Window Efficiency&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yuiqT/btrWU64ALfp/l58mW5MhhPSFvCHbYJhVj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yuiqT/btrWU64ALfp/l58mW5MhhPSFvCHbYJhVj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yuiqT/btrWU64ALfp/l58mW5MhhPSFvCHbYJhVj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyuiqT%2FbtrWU64ALfp%2Fl58mW5MhhPSFvCHbYJhVj0%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;595&quot; height=&quot;1000&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp; 그림에서도 보이다시피, 이미지의 크기가 늘어나도 receptive field는 동일함을 알 수 있습니다. 이는 feature map의 한 픽셀이 window의 역할을 수행함을 암시합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Localization&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 해당 논문은 Localization을 위해 ILSVRC 2012 데이터셋을 사용했기 때문에 R-CNN에서 domain-specific finetuning 부분을 진행하지 않은 것으로 보입니다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Regressor Training&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; regressor를 학습시키기 위해, 위에서 설명한 Layer 5 post-pool의 출력을 사용합니다. 이후, 아래 그림과 같이 4096 채널과 1024 채널, 마지막으로 4개의 채널을 가지는 hidden layer를 사용하여 regression을 진행합니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;999&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lEm78/btrX6pAXqUo/sCTuRrdKYogfRtsLoaOil1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lEm78/btrX6pAXqUo/sCTuRrdKYogfRtsLoaOil1/img.png&quot; data-alt=&quot;[ 4 ] regressor example of 6 x 7 input shape&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lEm78/btrX6pAXqUo/sCTuRrdKYogfRtsLoaOil1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEm78%2FbtrX6pAXqUo%2FsCTuRrdKYogfRtsLoaOil1%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;411&quot; height=&quot;999&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;999&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 4 ] regressor example of 6 x 7 input shape&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습을 위해&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;feature extractor 부분을 freeze&lt;/span&gt; 시켰다고 합니다 ( Layer 1 - 5 ). 또한, 실제 바운딩 박스와 IOU가 0.5 미만인 것은 regressor의 학습에서 제외시켰다고 합니다 ( 이 정도면 regression window가 객체를 포함하지 않는다고 판단 ).&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Combining Predictions&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 위와 같이 학습을 진행하고, 결과를 추출하게 된다면 굉장히 많은 바운딩박스를 예측하게 됩니다. 기존의 방식은 NMS를 통해 bounding box를 merge 하였지만, 해당 논문은 다른 방식으로 bounding box merge를 진행합니다. 상세한 과정은 다른 블로그에 자세히 설명되어 있으므로 생략합니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Appendix &amp;amp; Question&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. R-CNN과의 차이점&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Overfeat 논문은 R-CNN과는 달리 selective search 등을 통한 region proposal을 진행하지 않는다. 대신, 6가지 scale을 입력으로 사용하여 얻은 spatial location을 window처럼 취급한다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Object Detection</category>
      <category>deep learning</category>
      <category>object detection</category>
      <category>overfeat</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/63</guid>
      <comments>https://imlim0813.tistory.com/63#entry63comment</comments>
      <pubDate>Sun, 5 Feb 2023 14:21:36 +0900</pubDate>
    </item>
    <item>
      <title>[개념 정리] Non Max Suppression</title>
      <link>https://imlim0813.tistory.com/62</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Non Max Suppression (NMS)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1 ) NMS 개념&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Selective Search를 통해 region proposal을 하면 과도하게 많은 영역을 제안하게 됩니다. 이는 학습시간을 오래 걸리게 하고, 실시간 적용을 힘들게 하는 주요 원인 중 하나라고 볼 수 있습니다. 따라서, 제안된 영역의 개수를 줄이는 방안이 필요했고, 그중 하나가 Non Max Supperession입니다.&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;Non Max Suppression은 재밌는 2개의 아이디어를 가지고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;올바르게 제안된 영역은 Confidence Score가 높을 것이다.&lt;/li&gt;
&lt;li&gt;한 객체를 기준으로 영역 간 IOU가 높다면 이것은 같은 객체를 가르킬 가능성이 높다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2 ) NMS 알고리즘&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;제안된 영역의 Confidence Score를 모두 구하고, confidence threshold보다 작은 영역들은 모두 제거한다.&lt;/li&gt;
&lt;li&gt;Confidence Score를 기준으로 내림차순 정렬을 진행한다.&lt;/li&gt;
&lt;li&gt;정렬된 Confidence Score의 순서대로 모든 box와의 IOU를 구한 후, IOU threshold보다 크다면 제거한다.&lt;/li&gt;
&lt;li&gt;3의 과정을 반복한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 진행하게 되면, 객체가 존재할 확률이 크고, 객체 간 IOU가 작은 영역들만 남게 됩니다.&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;아래의 그림에서 적절한 Confidence threshold와 IOU threshold를 사용한다면 초록색 영역만 남길 수 있을 겁니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbRbDo/btrUSuzuswD/iiIDyn56m5yYVTKc8GaZX1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbRbDo/btrUSuzuswD/iiIDyn56m5yYVTKc8GaZX1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbRbDo/btrUSuzuswD/iiIDyn56m5yYVTKc8GaZX1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbRbDo%2FbtrUSuzuswD%2FiiIDyn56m5yYVTKc8GaZX1%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;600&quot; height=&quot;520&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Soft NMS&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 여기서 하나의 의문점이 생깁니다. 만약, 클래스가 같은 객체가 겹쳐있다면 어떻게 되느냐입니다. 기존의 NMS 알고리즘을 이용하면&amp;nbsp;아래의 그림의 초록색 영역이 3의 과정에서 제거됩니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sUm88/btrW6pVCjcu/BZz27rr62LAXHkDeoV2hYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sUm88/btrW6pVCjcu/BZz27rr62LAXHkDeoV2hYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sUm88/btrW6pVCjcu/BZz27rr62LAXHkDeoV2hYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsUm88%2FbtrW6pVCjcu%2FBZz27rr62LAXHkDeoV2hYK%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;502&quot; height=&quot;742&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연히, 초록색 영역이 제거되면 AP 성능이 감소하게 됩니다. 이를 해결하기 위해서 기존의 NMS 알고리즘을 개선시킨 것이 Soft NMS 알고리즘입니다.&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;Soft NMS 알고리즘은 NMS 알고리즘의 3번째 과정을 수정시킨 것입니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;1272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eds2BQ/btrWYMdgCZn/KiVI5v5J2TaBQe2LmCalU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eds2BQ/btrWYMdgCZn/KiVI5v5J2TaBQe2LmCalU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eds2BQ/btrWYMdgCZn/KiVI5v5J2TaBQe2LmCalU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feds2BQ%2FbtrWYMdgCZn%2FKiVI5v5J2TaBQe2LmCalU1%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;422&quot; height=&quot;1272&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;1272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 NMS는 IOU threshold 이상일 때 영역을 제거해버리는 방식이었다면, Soft-NMS는 Confidence score를 낮추는 방식을 택합니다. Confidence score를 낮추는 방식은 IOU threshold를 기준보다 크면 Confidence score를 낮추는 이산적 방식 ( 1 ) 과 가우시안 함수를 이용하여 연속적으로 Confidence score를 낮추는 방식 ( 2 ) 이 있습니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lgWNp/btrW2uJVSHG/Mux6b41o38EunCvrcj5Xbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lgWNp/btrW2uJVSHG/Mux6b41o38EunCvrcj5Xbk/img.png&quot; data-alt=&quot;( 1 ) 이산적으로 confidence score&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lgWNp/btrW2uJVSHG/Mux6b41o38EunCvrcj5Xbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlgWNp%2FbtrW2uJVSHG%2FMux6b41o38EunCvrcj5Xbk%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;416&quot; height=&quot;72&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;( 1 ) 이산적으로 confidence score&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGiBA5/btrWU6XCEL2/OkKzciKHrBCFAMRTUeC5l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGiBA5/btrWU6XCEL2/OkKzciKHrBCFAMRTUeC5l0/img.png&quot; data-alt=&quot;( 2 ) 연속적으로 confidence score&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGiBA5/btrWU6XCEL2/OkKzciKHrBCFAMRTUeC5l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGiBA5%2FbtrWU6XCEL2%2FOkKzciKHrBCFAMRTUeC5l0%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;415&quot; height=&quot;84&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;( 2 ) 연속적으로 confidence score&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;Soft NMS 방식은 영역을 제거하는 것이 아니라 Confidence score를 줄이는 방식이기 때문에 알고리즘 종료 전에 confidence threshold 이하인 영역을 제거해주는 작업이 필요합니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 1 ] &lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;Bodla, Navaneeth, et al. &quot;Soft-NMS--improving object detection with one line of code.&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;Proceedings of the IEEE international conference on computer vision&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;. 2017.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Object Detection</category>
      <category>non max suppression</category>
      <category>object detection</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/62</guid>
      <comments>https://imlim0813.tistory.com/62#entry62comment</comments>
      <pubDate>Tue, 24 Jan 2023 16:56:39 +0900</pubDate>
    </item>
    <item>
      <title>[논문 정리] R-CNN</title>
      <link>https://imlim0813.tistory.com/61</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2598&quot; data-origin-height=&quot;788&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDAUUb/btrXo4R5CU4/KMybllzlNDgkzDqAvuVoAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDAUUb/btrXo4R5CU4/KMybllzlNDgkzDqAvuVoAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDAUUb/btrXo4R5CU4/KMybllzlNDgkzDqAvuVoAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDAUUb%2FbtrXo4R5CU4%2FKMybllzlNDgkzDqAvuVoAK%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;715&quot; height=&quot;275&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2598&quot; data-origin-height=&quot;788&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Paper&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp; Girshick, R., Donahue, J., Darrell, T., &amp;amp; Malik, J. (2014). Rich feature hierarchies for accurate object detection and semantic segmentation. In&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;Proceedings of the IEEE conference on computer vision and pattern recognition&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(pp. 580-587).&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 저자는 R-CNN 모델이 첫 번째로 ILSVRC 2012 우승 모델인 AlexNet을 사용하여 성능을 기존 모델 대비 30% 이상 올렸다는 점과 파인튜닝을 통해 성능을 향상했다는 점을 논문의 핵심 포인트로 꼽았습니다.&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; R-CNN은 이름 그대로 Region Proposal과 CNN 모델을 결합시킨 모델입니다. &amp;nbsp;논문에서는 R-CNN을 학습시키기 위해 PASCAL VOC 데이터 셋을 사용했습니다. PASCAL VOC는 train 데이터와 val 데이터를 합쳐도 12000개가량으로 CNN모델을 학습시키기에 부족했고, 저자는 이를 해결하기 위해 ImageNet 데이터셋으로 학습된 AlexNet에 파인튜닝을 하였다고 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Object detetcion with R-CNN&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; R-CNN 모델은 세가지의 프로세스로 구성됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Region proposal&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; R-CNN은 region propsal을 위해 &lt;a href=&quot;https://imlim0813.tistory.com/57&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Selective search&lt;/a&gt; 방식을 이용합니다. (Sliding window 방식도 고려는 했으나, CNN 모델의 Receptive field의 크기와 Stride가 커서 사용하지 않았다고 합니다)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Feature Extraction&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; AlexNet 모델에 Selective Search를 통해 얻은 proposal들을 전부 집어넣고, 일곱 번째 단의 출력인 4096차원의 feature vector를 추출합니다. CNN 모델은 고정된 이미지 크기를 입력으로 받기 때문에 이미지 크기를 Resize 시켜야 합니다. 저자는 이미지의 크기나 이미지 가로 세로 비율을 고려하지 않고, proposal 주변 16픽셀을 포함하여&amp;nbsp;Resize 시켰다고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;※ CNN이 고정된 이미지 크기를 입력으로 받는 것은 classifier 역할을 하는 fully connected layer 때문입니다. 이에 관련된 내용은 Overfeat 논문에서 나옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. SVM&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 학습된 CNN 모델으로부터 얻은 feature vector들을 이용하여 클래스 별로 SVM을 학습합니다. SVM은 객체인지 아닌지 판별하는 역할을 합니다. ( 즉, PASCAL VOC는 클래스가 20개이므로 21개의 SVM을 요구합니다 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;요약하자면, R-CNN은 다음과 같은 과정을 거칩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccs6PF/btrXtRLe0zp/mIYF8k0LAckXmS9MWV1mnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccs6PF/btrXtRLe0zp/mIYF8k0LAckXmS9MWV1mnK/img.png&quot; data-alt=&quot;[ 1 ] R-CNN process&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccs6PF/btrXtRLe0zp/mIYF8k0LAckXmS9MWV1mnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccs6PF%2FbtrXtRLe0zp%2FmIYF8k0LAckXmS9MWV1mnK%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;385&quot; height=&quot;345&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 1 ] R-CNN process&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Selective search를 통하여 proposal들을 추출&lt;/li&gt;
&lt;li&gt;각 proposal을 학습된 AlexNet의 입력으로 사용하여 일곱 번째 단의 출력 ( feature ) 추출&lt;/li&gt;
&lt;li&gt;클래스에 해당하는 feature를 이용하여 SVM 학습&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CNN 모델 학습 ( Feature Extractor )&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Supervised pre-training&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 위에서 나온 AlexNet 모델을 학습시키기 위해 우선 ImageNet 데이터를 이용하여 학습을 진행합니다. 이는 Image Classification 학습을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;※&amp;nbsp;R-CNN 모델은 그 목적이 Object Detection이므로 Classification이 목적인 ImageNet 데이터 셋에 학습된 AlexNet을 Auxiliary dataset에 학습되었다고 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Domain-specific fine-tuning&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Pre-trained된 AlexNet을 가져와서 마지막 단의 Linear Layer의 출력 클래스 개수만 데이터 셋에 맞게 바꾼 뒤, 모델을 파인튜닝시킵니다.&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;letter-spacing: 0px;&quot;&gt;※ 이 때, Selective search를 통해 얻은 proposal들이 입력으로 사용되는데, 실제 객체의 위치 (바운딩 박스)와의 IOU가 0.5 이상이라면 positive, 그렇지 않으면 negative로 둡니다. ( Positive는 객체에 해당하는 클래스이고, Negative는 Background인 듯합니다 )&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&gt;※&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;positive에서 32개의 샘플, negative에서 96개의 샘플을 가져와 미니배치 사용하여 학습을 진행합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Test&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Selective search의 fast mode를 이용하여 2000개의 proposal들을 추출하여 이를 CNN 모델의 입력으로 사용합니다. 그 이후, &lt;a href=&quot;https://imlim0813.tistory.com/62&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Non Max Supperession&lt;/a&gt;을 통해 겹치는 영역들을 제거한다고 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Pascal VOC 2010 Result&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZsSvn/btrXnJOFXf1/JYa5tFzgVjQORevqg3hKw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZsSvn/btrXnJOFXf1/JYa5tFzgVjQORevqg3hKw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZsSvn/btrXnJOFXf1/JYa5tFzgVjQORevqg3hKw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZsSvn%2FbtrXnJOFXf1%2FJYa5tFzgVjQORevqg3hKw0%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;3000&quot; height=&quot;489&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;489&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표에서 보이다시피, R-CNN이 기존의 모델들보다 우수함을 알 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Bounding Box regression&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 예측된 바운딩 박스는 당연히 실제 바운딩 박스와 차이가 나기 때문에 이 오차를 줄이고자 AlexNet의 5번째 Conv Layer에 Pooling이 적용된 출력을 feature로 사용하여 ridge regression을 진행하였다고 합니다. 선형 회귀를 위해, 아래의 식을 사용합니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;747&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oSVQu/btrXqDmqorc/0qvufqZQMiShr4sx4Wt5L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oSVQu/btrXqDmqorc/0qvufqZQMiShr4sx4Wt5L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oSVQu/btrXqDmqorc/0qvufqZQMiShr4sx4Wt5L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoSVQu%2FbtrXqDmqorc%2F0qvufqZQMiShr4sx4Wt5L1%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;221&quot; height=&quot;159&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;747&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;$\hat{G}$ 는 예측 바운딩 박스입니다. 즉, 우리가 찾고 싶은 것은 $\hat{G}$ = $G$가 되도록 하는 $d(P)$입니다. 이를 만족하는 $d(P)$를 $t$라고 하면 아래와 같이 나타낼 수 있습니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdwhN6/btrXm6cvT58/tO8WYiveS0zqs8g82ITGw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdwhN6/btrXm6cvT58/tO8WYiveS0zqs8g82ITGw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdwhN6/btrXm6cvT58/tO8WYiveS0zqs8g82ITGw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdwhN6%2FbtrXm6cvT58%2FtO8WYiveS0zqs8g82ITGw0%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;237&quot; height=&quot;164&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;642&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;$d(P)$를 $t$ 에 근사화시키는 릿지 회귀를 식으로 나타내면 아래와 같고, 이것이 bounding box regression입니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2964&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r8U9p/btrXn9zzGBJ/TTQCkLKETyw17G0BwcDKj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r8U9p/btrXn9zzGBJ/TTQCkLKETyw17G0BwcDKj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r8U9p/btrXn9zzGBJ/TTQCkLKETyw17G0BwcDKj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr8U9p%2FbtrXn9zzGBJ%2FTTQCkLKETyw17G0BwcDKj0%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;393&quot; height=&quot;123&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2964&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbHNAp/btrWUdCs1oh/k6odcVrzNJiT0n6fLHbKnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbHNAp/btrWUdCs1oh/k6odcVrzNJiT0n6fLHbKnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbHNAp/btrWUdCs1oh/k6odcVrzNJiT0n6fLHbKnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbHNAp%2FbtrWUdCs1oh%2Fk6odcVrzNJiT0n6fLHbKnK%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;133&quot; height=&quot;19&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 1 ]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e&quot;&gt;https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Appendix &amp;amp; Question&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. SVM vs Softmax Layer&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;: 처음 논문을 읽을 때는 Domain-Specific fine-tuning과정에서 이미 분류를 위한 학습을 진행하였는데 왜 SVM을 사용하는지가 이해가 되지 않았다. 해답은 Appendix에 나와있었는데 SVM을 사용한 이유는 성능이 더 잘 나와서라고 한다.&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;: Domain-specific fine-tuning과정으로 객체 분류 학습을 진행하고, 다시 한번 SVM을 통해 객체 분류 학습을 시킨게 맞다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2 ) Bounding Box&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;: Result 표에서 R-CNN과 R-CNN BB가 분리된 것을 보고, R-CNN는 bounding box를 어떻게 예측하는지에 대한 의문이 생겼다.&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;span style=&quot;color: #ee2323;&quot;&gt; 표에서 나온 R-CNN은 bounding box regression을 진행하지 않는다.&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;그 이유는 Selective search를 통해 얻은 proposal&amp;nbsp;자체가 bounding box이기 때문이다.&lt;/span&gt;&amp;nbsp;( 파이썬을 이용하여 Selecitive search를 이미지에 적용하면 bounding box 좌표를 반환한다 )&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;: R-CNN은 selective search를 통해 추출한 &lt;span style=&quot;color: #ee2323;&quot;&gt;고정된 bounding box&lt;/span&gt;의 객체여부를 다루는 문제로 볼 수 있다 ( SVM ).&amp;nbsp;여기서 한발 더 나아가, R-CNN BB는 selective search를 통해 얻은 bounding box의 좌표를 실제 bounding box에 근사화하는 작업 ( Ridge regression )까지 진행한다고 볼 수 있다.&lt;/p&gt;</description>
      <category>Object Detection</category>
      <category>object detection</category>
      <category>R-CNN</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/61</guid>
      <comments>https://imlim0813.tistory.com/61#entry61comment</comments>
      <pubDate>Tue, 24 Jan 2023 02:01:33 +0900</pubDate>
    </item>
    <item>
      <title>[명령어 정리] git repo 생성부터 git commit까지</title>
      <link>https://imlim0813.tistory.com/60</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;git init&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;git을 생성하고 싶은 폴더 위에서 git init 명령어를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;git add&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. git add의 역할&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&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;git이 추적하고 있지 않은 파일을 추적하도록 합니다 (파일을 생성한 경우).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUAIXY/btrUVjcWbfo/ggDsPQcqCEhxmCe0fZtryk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUAIXY/btrUVjcWbfo/ggDsPQcqCEhxmCe0fZtryk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUAIXY/btrUVjcWbfo/ggDsPQcqCEhxmCe0fZtryk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUAIXY%2FbtrUVjcWbfo%2FggDsPQcqCEhxmCe0fZtryk%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;688&quot; height=&quot;124&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수정한 파일을 git이 추적하도록 합니다 (이미 커밋까지 한 파일을 수정한 경우).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1578&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehphtN/btrUTZFNYTe/B1kG4eMG3mGLKCWaAdTJNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehphtN/btrUTZFNYTe/B1kG4eMG3mGLKCWaAdTJNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehphtN/btrUTZFNYTe/B1kG4eMG3mGLKCWaAdTJNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehphtN%2FbtrUTZFNYTe%2FB1kG4eMG3mGLKCWaAdTJNK%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;694&quot; height=&quot;170&quot; data-origin-width=&quot;1578&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&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;b&gt;2. git add 사용법&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&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;git add &amp;lt;파일 이름&amp;gt; : 특정 파일을 git의 Staging area로 올립니다.&lt;/li&gt;
&lt;li&gt;git add . : 생성 및 수정한 파일 전부를 한번에 Staging area로 올립니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;git commit&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. git commit의 역할&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;/li&gt;
&lt;li&gt;커밋을 함으로써 Staging area에 있던 파일들을 Repository로 올립니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. git commit 사용법&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;git commit -m &quot;커밋 메시지&quot; : 커밋 메시지가 짧을 때, 편집기 없이 간편하게 커밋하기 위해 사용합니다.&lt;/li&gt;
&lt;li&gt;git commit : 커밋 메시지가 길어서 편집기를 이용해야할 때 사용합니다.&lt;/li&gt;
&lt;li&gt;git commit --amend : 커밋을 실수로 진행한 경우, 해당 파일의 커밋을 덮어씁니다.&lt;/li&gt;
&lt;li&gt;git commit -a -m &quot;커밋 메시지&quot; : git add와 커밋을 동시에 수행해줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Git Example (CLI)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. Example&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Git_Practice라는 폴더에 first.txt라는 파일을 만들었고, 이를 git을 활용하여 버전관리를 하고 싶다는 상황을 가정하겠습니다. 그러기 위해서는 Git_Practice 폴더 위에서 아래와 같이 진행하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;git init : Git_Practice라는 폴더를 git repository로 생성.&lt;/li&gt;
&lt;li&gt;git add . / git add first.txt : first.txt를 Staging area로 올림. (파일이 하나밖에 없으므로 둘 중 어느 명령어도 상관 없음)&lt;/li&gt;
&lt;li&gt;git commit -m &quot;커밋 내용&quot; : 체크포인트 생성과 이를 설명할 커밋 메시지 생성. ( 저는 first commit이라는 내용을 사용했습니다)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. Result ( gitKraKen을 통해 시각화하였습니다. )&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;size18&quot;&gt;&lt;b&gt;1 ) Repository / branch&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;522&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XwldF/btrUPZtlmxh/rWHJTkdZoBPjuueOA0oIDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XwldF/btrUPZtlmxh/rWHJTkdZoBPjuueOA0oIDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XwldF/btrUPZtlmxh/rWHJTkdZoBPjuueOA0oIDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXwldF%2FbtrUPZtlmxh%2FrWHJTkdZoBPjuueOA0oIDK%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;394&quot; height=&quot;98&quot; data-origin-width=&quot;522&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Git_Practice라는 폴더가 Repository가 된 것을 확인할 수 있고, master라는 이름의 branch가 생성되었음을 알 수 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(git init을 진행하면 기본적으로 master라는 이름의 branch를 생성합니다).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2 ) Commit&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPvli7/btrUSzU0tZw/oT81VO75ZkuMp7t6qvsPk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPvli7/btrUSzU0tZw/oT81VO75ZkuMp7t6qvsPk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPvli7/btrUSzU0tZw/oT81VO75ZkuMp7t6qvsPk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPvli7%2FbtrUSzU0tZw%2FoT81VO75ZkuMp7t6qvsPk1%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;400&quot; height=&quot;247&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;494&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; git add와 git commit을 진행하면, 위와 같이 master branch가 해당 파일을 repository에 등록하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 커밋정보는 git log 혹은 git log --oneline 명령어를 통해서 확인가능합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로, 위와 같이 파일을 커밋하면 git에서 해당 파일을 추적하게 됩니다. 즉, 파일 내용을 수정하면 파일의 상태를 tracked에서 modified로 변경하여 commit을 요구합니다.&lt;/p&gt;</description>
      <category>Lecture &amp;amp; etc/Git</category>
      <category>cli</category>
      <category>Git</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/60</guid>
      <comments>https://imlim0813.tistory.com/60#entry60comment</comments>
      <pubDate>Fri, 30 Dec 2022 09:32:33 +0900</pubDate>
    </item>
    <item>
      <title>Gradient Descent / Newton Method</title>
      <link>https://imlim0813.tistory.com/59</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;딥러닝은 optimizer로 Gradient Descent 기반의 기법을 사용합니다. 그러나, Quasi-Newton Method라는 다른 대안도 있습니다.&amp;nbsp;이 글에서는 왜 Quasi-Newton Method가 아닌 Gradient Descent을 사용하는지에 대해 알아보려고 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Gradient Descent&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Gradient Descent의 기본적인 공식은 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\large {\theta = \theta - \eta \nabla_{\theta} J(\theta)}$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gradient Descent은 극소점을 찾는 것이 그 목적입니다. 위 식을 보면 알 수 있듯이, $J(\theta)$ 즉, 기울기가 0이 되버리는 순간에는 더 이상 $\theta$가 변하지 않고, 이는 극점을 뜻합니다. 또한, 기울기의 반대방향으로 $\theta$를 업데이트 시킴으로써 극대가 아닌 극소점을 찾아가는 방식입니다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Newton Method&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Newton Method은 함수의 기울기가 0이 되는 지점을 찾는 방식입니다. 수식은 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\large {x_{n+1} = x_n + \dfrac {f'(x_n)}{f''(x_n)}}$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 행렬로 확장시키게 되면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\large {X_{n+1} = X_n + \nabla^2 f(X_n)^{-1} f(X_n)}$&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;따라서, 이 이차미분을 근사화 시키겠다는 것이 Quasi-Newton Method 입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Quasi-Newton Method&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;그러면, 이차미분의 문제가 풀렸으니 Quasi-Newton Method 쓰면 되지 않나? 라는 의문이 당연히 생깁니다.&amp;nbsp;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그러나, Loss function이 완벽한 이차함수를 이루지 않는 이상 Quasi-Newton Method는 불안정하다고 합니다 [ 1 ].&amp;nbsp;&lt;/span&gt;따라서, Loss function 대부분이 이차함수가 아닌 딥러닝에서는 Gradient Descent를 optimizer로 채택한 것 같습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 1 ] &lt;a href=&quot;https://stats.stackexchange.com/questions/253632/why-is-newtons-method-not-widely-used-in-machine-learning&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stats.stackexchange.com/questions/253632/why-is-newtons-method-not-widely-used-in-machine-learning&lt;/a&gt;&lt;/p&gt;</description>
      <category>Deep Learning/Fundamental</category>
      <category>deep learning</category>
      <category>gradient descent</category>
      <category>Optimizer</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/59</guid>
      <comments>https://imlim0813.tistory.com/59#entry59comment</comments>
      <pubDate>Wed, 28 Dec 2022 20:52:19 +0900</pubDate>
    </item>
    <item>
      <title>[개념 정리] Convolution 연산 종류</title>
      <link>https://imlim0813.tistory.com/58</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2012년 AlexNet의 ILSCVRC 2012년 이후로 CNN 기반의 딥러닝 모델이 컴퓨터 비전 분야에서 큰 활약을 하고 있습니다. 그에 따라, 가장 기초적인 (Naive) Convolution 연산도 다양한 발전이 있었습니다. PyTorch&amp;nbsp;프레임워크에서 가지는 하이퍼 파라미터를 기준으로 다양한 Convolution 연산들을 정리하고, 어떤 논문에서 아래 개념들이 사용되었는지 정리하는 시간을 가지려고 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Naive Convolution&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1 ) 개념 및 해당 개념을 사용한 논문&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가장 흔히 알려져있고, 자주 사용되는 Convolution입니다. Torch에서 Conv2d가 이 Convolution 연산에 해당합니다.&amp;nbsp;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://imlim0813.tistory.com/27&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LeNet 논문&lt;/a&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;에서도 설명하였듯이, 기존 Linear 레이어의 여러가지 한계때문에 탄생했습니다. 아래의 그림처럼 Conv연산은 2D에서 동작하여 Local feature들을 잘 추출한다는 특징이 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;CNN 기반 모델이라면 해당연산을 사용하지 않은 논문을 찾기가 더 힘들다고 할 정도로 매우 많이 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buTDig/btrUNWinaGI/Up3sBWkF1divFGgkP4DF2k/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buTDig/btrUNWinaGI/Up3sBWkF1divFGgkP4DF2k/img.gif&quot; data-alt=&quot;Naive Convolution [ 1 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buTDig/btrUNWinaGI/Up3sBWkF1divFGgkP4DF2k/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/buTDig/btrUNWinaGI/Up3sBWkF1divFGgkP4DF2k/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;301&quot; height=&quot;449&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Naive Convolution [ 1 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M82b3/btrURQaoXmr/zYOr8RLemZV7FHbuuY1bb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M82b3/btrURQaoXmr/zYOr8RLemZV7FHbuuY1bb0/img.png&quot; data-alt=&quot;Torch.nn.Conv2d [ 2 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M82b3/btrURQaoXmr/zYOr8RLemZV7FHbuuY1bb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM82b3%2FbtrURQaoXmr%2FzYOr8RLemZV7FHbuuY1bb0%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;1494&quot; height=&quot;112&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Torch.nn.Conv2d [ 2 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;In_channels &amp;amp; out_channels : 입력 채널의 수와 출력 채널의 수를 결정하는 파라미터&lt;br /&gt;&lt;br /&gt;- CNN기반 딥러닝 모델은 레이어가 깊어질수록 feature map의 크기는 줄여가고 channel의 수는 키우는 형태를 갖습니다.&lt;br /&gt;&lt;br /&gt;- 추후에 말씀드리겠지만, Xception 논문 기준으로 channel의 수는 중요한 의미를 갖게 됩니다 (channel dimension).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;kernel_size : 필터의 커널사이즈를 가리키는 파라미터&lt;br /&gt;&lt;br /&gt;- 커널사이즈는 쉽게 말해서 &quot;얼만큼 볼거냐?&quot;로 말할 수 있습니다. 즉, Convolution 필터가 연산을 처리하는 영역의 크기를 뜻합니다.&lt;br /&gt;&lt;br /&gt;- 커널 사이즈는 LeNet과 AlexNet에서는 레이어가 깊어질수록 점점 작아지는 형태를 가졌습니다. 하지만, VGGNet 이후로 3 x 3으로 고정하여 사용되기 시작했습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;stride : 필터의 연산을 얼만큼의 간격을 두고 진행할 것인지를 의미하는 파라미터&lt;br /&gt;&lt;br /&gt;- stride는 얼만큼의 간격을 두고 Conv연산을 진행할지에 관한 파라미터입니다. 예를 들어, 7 x 7 이미지가 존재하는데 3 x 3 Conv와 stride를 2로 두었다고 가정하겠습니다. 그렇다면, 출력 feature map의 크기는 3 x 3이 됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;- 연산량을 줄이기 위해서 stride를 키울 수도 있겠지만, 이 역시 VGGNet 이후로 1 x 1으로 고정되었습니다. 다만, feature map의 크기를 줄이기 위한 Pooling 연산시에 kernel의 크기와 stride 크기를 2로 두어 절반으로 줄이는 형태로 자주 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Padding &amp;amp; Padding_mode : feature map의 가장자리를 채우는 파라미터&lt;br /&gt;&lt;br /&gt;- Padding은 LeNet 논문에서는 feature map 가장자리의 연산 횟수와 중앙의 연산 횟수가 일치하지 않다는 문제점을 보완하기 위해 사용된다고 하였지만, 이후에는 feature map의 크기를 유지시키기 위한 목적으로 사용됩니다.&lt;br /&gt;&lt;br /&gt;- Padding은 여러가지 방식이 있습니다. 0으로 채우는 zero padding도 있고, 원래 feature map을 대칭하여 채울 수도 있습니다. 주로 0을 사용하는 것 같지만, padding_mode에서 여러가지 파라미터를 통해 padding을 수행할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;bias : bias의 여부를 결정하는 파라미터&lt;br /&gt;&lt;br /&gt;- 이 파라미터가 True면 Conv 연산이 출력하는 feature map에 학습가능한 bias를 추가합니다 (기본적으로 True).&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Dilated Convolutions&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1 ) 개념 및 해당 개념을 사용한 논문&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Atrous Convolution으로도 불리며, Segmentation 분야의 DeepLab 계열이 적극적으로 활용합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;동일한 컴퓨터 계산량으로 더 넓은 영역을 커버해서, 실시간으로 처리해야하는 경우 자주 사용된다고 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpzdOE/btrUSukFrys/m8pk4doUidUAMASsLD5Ez0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpzdOE/btrUSukFrys/m8pk4doUidUAMASsLD5Ez0/img.gif&quot; data-alt=&quot;Atrous Convolution [ 1 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpzdOE/btrUSukFrys/m8pk4doUidUAMASsLD5Ez0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bpzdOE/btrUSukFrys/m8pk4doUidUAMASsLD5Ez0/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;302&quot; height=&quot;291&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Atrous Convolution [ 1 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&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;1494&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bmdww/btrUNqRBDI8/KmDtBk3eoGzTVHZbmrOTfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bmdww/btrUNqRBDI8/KmDtBk3eoGzTVHZbmrOTfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bmdww/btrUNqRBDI8/KmDtBk3eoGzTVHZbmrOTfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBmdww%2FbtrUNqRBDI8%2FKmDtBk3eoGzTVHZbmrOTfK%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;1494&quot; height=&quot;112&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dilation : 커널의 간격을 결정하는 파라미터&lt;br /&gt;&lt;br /&gt;- 위 그림 (dilation=2)에서 보이는 것처럼 dilation은 커널의 간격을 결정합니다. 컴퓨터 계산량을 유지하면서도 마치 5 x 5 Conv 연산처럼 동작합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Group Convolution&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1 ) 개념 및 해당 개념을 사용한 논문&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Group Convolution은 &lt;a href=&quot;https://imlim0813.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ResNext 논문&lt;/a&gt;에서 Cardinality라는 개념을 도입하면서 사용된 Conv 연산입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이 연산은 입력 채널을 group의 개수만큼 나눈 후, 각각 conv 연산을 수행합니다.&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&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;1494&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4vCmy/btrUN237i2K/SD4akYK1mKSYtYaLkIHklk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4vCmy/btrUN237i2K/SD4akYK1mKSYtYaLkIHklk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4vCmy/btrUN237i2K/SD4akYK1mKSYtYaLkIHklk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4vCmy%2FbtrUN237i2K%2FSD4akYK1mKSYtYaLkIHklk%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;1494&quot; height=&quot;112&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;groups : ResNext의 cardinality 파라미터&lt;br /&gt;&lt;br /&gt;- 이 파라미터는 완벽히 ResNext에서 설명한 것과 동일하기 때문에 자세한 설명은 생략하겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. Transposed Convolution&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1 ) 개념 및 해당 개념을 사용한 논문&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;deconvolution으로도 불렸던 연산입니다 (실제로는 Conv연산의 역연산이 아닌 Tranpose 연산이라 Transposed Convolution으로 불립니다).&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://imlim0813.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ZFNet&lt;/a&gt;에서 Transposed Convolution을 이용하여 Convolution 레이어의 시각화를 진행했습니다. 뿐만 아니라, Encoder-Decoder 구조의 Decoder에서도 feature map의 크기를 복원하기 위해 자주 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjS7OO/btrUNqRBVaK/civUAMDkqkDr2Y1MYM1yb1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjS7OO/btrUNqRBVaK/civUAMDkqkDr2Y1MYM1yb1/img.gif&quot; data-alt=&quot;Transposed Convolution [ 1 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjS7OO/btrUNqRBVaK/civUAMDkqkDr2Y1MYM1yb1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bjS7OO/btrUNqRBVaK/civUAMDkqkDr2Y1MYM1yb1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;294&quot; height=&quot;288&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Transposed Convolution [ 1 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&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;1700&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H5RuN/btrUOPi7jUj/TlFef5U7KxFBZIDBNbPz80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H5RuN/btrUOPi7jUj/TlFef5U7KxFBZIDBNbPz80/img.png&quot; data-alt=&quot;Torch.nn.ConvTranspose2d&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H5RuN/btrUOPi7jUj/TlFef5U7KxFBZIDBNbPz80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH5RuN%2FbtrUOPi7jUj%2FTlFef5U7KxFBZIDBNbPz80%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;1700&quot; height=&quot;162&quot; data-origin-width=&quot;1700&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Torch.nn.ConvTranspose2d&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전반적인 파라미터 역할 자체는 Conv2d와 동일합니다. 그러나, 연산과정이 차이가 존재합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;자세한 연산 과정은 어떤 분이 자세히 설명해주셔서&amp;nbsp;&lt;a href=&quot;https://cumulu-s.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://cumulu-s.tistory.com/29&lt;/a&gt;를&amp;nbsp;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;참조하시면 될것 같습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 1 ] &lt;a href=&quot;https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 2 ] &lt;a href=&quot;https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Lecture &amp;amp; etc/Torch</category>
      <category>Convolution 종류</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/58</guid>
      <comments>https://imlim0813.tistory.com/58#entry58comment</comments>
      <pubDate>Wed, 28 Dec 2022 20:10:57 +0900</pubDate>
    </item>
    <item>
      <title>[개념 정리] Object Detection Region Proposal</title>
      <link>https://imlim0813.tistory.com/57</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Region Proposal&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;a href=&quot;https://imlim0813.tistory.com/56&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Object Detection&lt;/a&gt;은 여러 개의 객체가 한 사진 내에 존재할 수 있다고 했습니다. 따라서, 이 여러 개의 객체를 어떻게 탐지하고 분류할 것인가에 대해 생각해봐야 하는데 &quot;사진 내 객체가 있는 영역들을 분할하여 각각의 분할된 사진을 입력으로 사용하여 분류 및 바운딩 박스 예측을 수행한다.&quot;&amp;nbsp;정도가 가장 직관적인 것 같습니다.&amp;nbsp;사진 내 객체가 있는 영역들을 분할하기 위해 대표적으로 아래 두 가지 방식을 사용합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1 ) Sliding window&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;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTVvEI/btrUIlIGVju/OS4APhszMGATOlHQz5ZKq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTVvEI/btrUIlIGVju/OS4APhszMGATOlHQz5ZKq1/img.png&quot; data-alt=&quot;Sliding window [ 1 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTVvEI/btrUIlIGVju/OS4APhszMGATOlHQz5ZKq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTVvEI%2FbtrUIlIGVju%2FOS4APhszMGATOlHQz5ZKq1%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;311&quot; height=&quot;315&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Sliding window [ 1 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 방식은 여러가지 커널 사이즈를 가진 필터들이 사진을 분할하기 때문에 &lt;span style=&quot;color: #ee2323;&quot;&gt;분할된 사진의 개수가 너무 많아진다는 단점이 존재합니다&amp;nbsp;&lt;/span&gt;(과도한 수의 사진이 문제인 이유는 모든 사진이 각각 CNN 모델의 입력으로 사용되어 컴퓨터 연산량을 키우기 때문입니다).&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; 위에서 나온 단점을 해결하기 위해 딥러닝 모델 내에서 sliding window를 처리하는 방식으로 발전하였습니다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;1136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ2Cml/btrUyCytLwD/w5njR8OJS2op2kauMy1kD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ2Cml/btrUyCytLwD/w5njR8OJS2op2kauMy1kD0/img.png&quot; data-alt=&quot;Sliding window in CNN model [ 2 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ2Cml/btrUyCytLwD/w5njR8OJS2op2kauMy1kD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ2Cml%2FbtrUyCytLwD%2Fw5njR8OJS2op2kauMy1kD0%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;1136&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;1136&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Sliding window in CNN model [ 2 ]&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;그림에 대한 자세한 설명은 Overfeat 논문 정리에 있으므로 간단한 설명만 하겠습니다. 14 x 14 크기의 사진이 CNN 모델의 입력으로 사용되었을 때 모든 영역을 커버하는 값 하나가 최종적으로 나오게 됩니다 (1 stage 이후, 5 x 5 Conv 연산을 거친 1 x 1을 의미합니다). 같은 논리로 16 x 16 크기를 가진 사진에 이 모델을 적용하면 값이 4개가 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 이 모델은 14 x 14 커널 사이즈, stride 2를 가진 필터를 이용하여 sliding window 기법을 적용시킨 것과 같은 효과를 가집니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2 ) Selective Search&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Selective Search 방식은 Sliding window처럼 CNN 모델 내에서 처리하는 것이 아니라, 물체가 있을만한 영역을 분할하고 이를 입력으로 사용합니다. Selective Search는 다음과 같은 과정을 거칩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Capture All Scales : 사진 내 객체의 크기가 제각각이기 때문에 다양한 크기의 필터를 사용하여 검출합니다.&lt;/li&gt;
&lt;li&gt;Diversification : 여러가지의 전략 (컬러, 질감, 형태, 크기)으로 분할된 영역들을 그룹화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;924&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oX7pk/btrUBbOdHGK/JiXPs6rcjQG1jSkke2JW90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oX7pk/btrUBbOdHGK/JiXPs6rcjQG1jSkke2JW90/img.png&quot; data-alt=&quot;Selective Search [ 3 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oX7pk/btrUBbOdHGK/JiXPs6rcjQG1jSkke2JW90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoX7pk%2FbtrUBbOdHGK%2FJiXPs6rcjQG1jSkke2JW90%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;548&quot; height=&quot;924&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;924&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Selective Search [ 3 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림은 selective search의 결과를 나타냅니다. 보이다시피, 객체를 잘 검출해 내는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하지만, Selective Search는 CNN 모델 내에서 동작하는 방식이 아니기때문에 end-to-end 학습이 불가능하고, 추론 시간도 길어진다는 치명적인 단점이 존재합니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 1 ] &lt;a href=&quot;https://www.youtube.com/watch?v=5e5pjeojznk&quot;&gt;https://www.youtube.com/watch?v=5e5pjeojznk&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 2 ] &lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;Sermanet, Pierre, et al. &quot;Overfeat: Integrated recognition, localization and detection using convolutional networks.&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;arXiv preprint arXiv:1312.6229&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(2013).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 3 ] &lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;Uijlings, Jasper RR, et al. &quot;Selective search for object recognition.&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;International journal of computer vision&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;104.2 (2013): 154-171.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Object Detection</category>
      <category>object detection</category>
      <category>region proposal</category>
      <category>selective search</category>
      <category>sliding window</category>
      <author>imlim</author>
      <guid isPermaLink="true">https://imlim0813.tistory.com/57</guid>
      <comments>https://imlim0813.tistory.com/57#entry57comment</comments>
      <pubDate>Tue, 27 Dec 2022 11:59:15 +0900</pubDate>
    </item>
  </channel>
</rss>