<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>juheon-jeong.log</title>
        <link>https://velog.io/</link>
        <description>Object Detection, Segmentation, Multi-Object Tracking</description>
        <lastBuildDate>Tue, 09 Jan 2024 05:16:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>juheon-jeong.log</title>
            <url>https://images.velog.io/images/juheon-jeong/profile/dd76b5c8-1e24-4577-95b6-1b32da20ec87/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. juheon-jeong.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/juheon-jeong" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Torch 걸음마]]></title>
            <link>https://velog.io/@juheon-jeong/Torch-%EA%B1%B8%EC%9D%8C%EB%A7%88</link>
            <guid>https://velog.io/@juheon-jeong/Torch-%EA%B1%B8%EC%9D%8C%EB%A7%88</guid>
            <pubDate>Tue, 09 Jan 2024 05:16:24 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[리눅스 걸음마]]></title>
            <link>https://velog.io/@juheon-jeong/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B1%B8%EC%9D%8C%EB%A7%88</link>
            <guid>https://velog.io/@juheon-jeong/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B1%B8%EC%9D%8C%EB%A7%88</guid>
            <pubDate>Tue, 09 Jan 2024 02:31:59 GMT</pubDate>
            <description><![CDATA[<ol>
<li>.deb파일 설치하기 <pre><code class="language-bash">sudo  dpkg -i filename.deb
</code></pre>
</li>
</ol>
<pre><code>
2. scp 명령어 사용
- 로컬에서 원격으로 (Local→Remote)
````bash
scp [전송할 파일 경로] [유저명]@[IP주소]:[받을 경로]
scp [옵션] [파일명1] [파일명2] [유저명]@[IP주소]:[받을 경로]</code></pre><ul>
<li>원격에서 로컬로 (Remote→Local)<pre><code class="language-bash">scp [유저명]@[IP주소]:[전송할 파일 경로] [받을 경로]
scp [옵션] [유저명]@[IP주소]:&quot;[파일명1] [파일명2]&quot; [받을 경로]</code></pre>
</li>
<li>원격에서 원격으로 (Remote→Remote)<pre><code class="language-bash">scp [유저명]@[IP주소]:[전송할 파일 경로] [유저명]@[IP주소]:[받을 경로]
scp [옵션] [유저명]@[IP주소]:&quot;[파일명1] [파일명2]&quot; [유저명]@[IP주소]:[받을 경로]</code></pre>
</li>
</ul>
<ol start="3">
<li><p>ssh 접속</p>
<pre><code class="language-bash">ssh [사용자 계정]@[원격지 ip]</code></pre>
</li>
<li><p>tar.gz or tar 파일 압축, 해제</p>
</li>
</ol>
<ul>
<li>tar로 압축<pre><code class="language-bash">tar -cvf [파일명.tar] [폴더명]</code></pre>
</li>
<li>tar 압축 풀기<pre><code class="language-bash">tar -xvf [파일명.tar]</code></pre>
</li>
<li>tar.gz로 압축<pre><code class="language-bash">tar -zcvf [파일명.tar.gz] [폴더명]</code></pre>
</li>
<li>tar.gz 압축 풀기<pre><code class="language-bash">tar -zxvf [파일명.tar.gz]</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Anaconda 환경설정 (서버에서 설정시)]]></title>
            <link>https://velog.io/@juheon-jeong/Anaconda-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-%EC%84%A4%EC%A0%95%EC%8B%9C</link>
            <guid>https://velog.io/@juheon-jeong/Anaconda-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-%EC%84%A4%EC%A0%95%EC%8B%9C</guid>
            <pubDate>Mon, 08 Jan 2024 04:22:51 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>nvcc -V으로 cuda 버전을 확인한다.</p>
<ul>
<li><p>이 때 그래픽 카드에 맞는 cuda 버전인지 확인하는 게 필수!</p>
</li>
<li><p>bashrc파일을 열고 cuda 경로 설정해줘야함!</p>
<pre><code class="language-bash">nano ~/.bashrc
//맨아래 위 두 문장을 추가 시켜줍니다. 다만 cuda 버전에 따라서 버전을 다르게 입력
//cuda 버전이 10.1인경우는 cuda-10-1로 변경
export PATH=/usr/local/cuda-11.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH

// CUDA 경로 업데이트
source ~/.bashrc
nvcc -V</code></pre>
</li>
</ul>
</li>
<li><p>conda 가상환경 생성, 삭제</p>
<ul>
<li>생성<pre><code class="language-bash">conda create -n [가상환경이름] python=3.x</code></pre>
<ul>
<li>삭제<pre><code class="language-bash">conda remove --name [가상환경이름] --all</code></pre>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Torch와 Cuda 연결</p>
<ul>
<li><p>Cuda 버전과 호환되는 <a href="https://pytorch.org/get-started/previous-versions/">Torch</a>를 설치. </p>
<pre><code class="language-python">#아래 코드를 이용해서 cuda와 Pytorch가 연결 잘 되있는지 확인!
import torch
torch.cuda.get_device_name(0)
torch.cuda.is_available()</code></pre>
</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[싱싱미역]차선인식 및 Detection Without Deeplearning]]></title>
            <link>https://velog.io/@juheon-jeong/%EC%8B%B1%EC%8B%B1%EB%AF%B8%EC%97%AD%EC%B0%A8%EC%84%A0%EC%9D%B8%EC%8B%9D-%EB%B0%8F-Detection-Without-Deeplearning</link>
            <guid>https://velog.io/@juheon-jeong/%EC%8B%B1%EC%8B%B1%EB%AF%B8%EC%97%AD%EC%B0%A8%EC%84%A0%EC%9D%B8%EC%8B%9D-%EB%B0%8F-Detection-Without-Deeplearning</guid>
            <pubDate>Tue, 19 Sep 2023 03:03:25 GMT</pubDate>
            <description><![CDATA[<p>9월 19일 
Canny edge detection, Gaussian blur, Region of interest 등을 이용한 차선인식</p>
<p>YOLOv8을 사용한 Detection 합쳐 결과 확인하기</p>
<p>확인해야 할 것</p>
<ol>
<li>차선인식시 해당 차선의 x, y 좌표 값이 나오는지
=&gt; 나온다 </li>
<li>YOLO에서 Detection한 x, y 좌표 값이 나오는지 
=&gt; Bbox 값이 나온다</li>
</ol>
<p>의문제기</p>
<p>=&gt; Bbox가  원래 물체보다 큰 경우들이 있는데 이 Bbox가 차선에 침범한 경우도 경고를 울리게 하는 것이 과연 실용적일까?</p>
<p>9월 22일 </p>
<ol>
<li>Image에 ROI영역을 정한다.</li>
<li>ROI를 기준으로 Bird&#39;s eye view(BEV)로 변환한다.</li>
<li>BEV에서 차선 검출을 시행한다</li>
</ol>
<ul>
<li>Canny edge</li>
<li>Hough 변환</li>
<li>Ransac </li>
</ul>
<ol start="4">
<li>차선 정보(좌표값)를 기준으로 원본이미지로 Backward 시킨다.</li>
</ol>
<p>9월 26일</p>
<p>Twinlitenet으로 차선을 도출한 뒤 Roi설정과 opencv 연산으로 본인 차선에 대한 정보를 가져온다.</p>
<p>=&gt; 도로 색이 변하거나 밤인 경우에도 Roi설정만 잘되어 있으면 본인차선 인식 가능.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[싱싱미역] 차선인식 딥러닝]]></title>
            <link>https://velog.io/@juheon-jeong/%EC%8B%B1%EC%8B%B1%EB%AF%B8%EC%97%AD-%EC%B0%A8%EC%84%A0%EC%9D%B8%EC%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D</link>
            <guid>https://velog.io/@juheon-jeong/%EC%8B%B1%EC%8B%B1%EB%AF%B8%EC%97%AD-%EC%B0%A8%EC%84%A0%EC%9D%B8%EC%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D</guid>
            <pubDate>Mon, 11 Sep 2023 08:10:09 GMT</pubDate>
            <description><![CDATA[<p><a href="https://github.com/chequanghuy/TwinLiteNet">TwinLiteNet</a></p>
<p>9월 11일</p>
<ul>
<li><p>데이터 셋 다운 및 requirement.txt를 실행</p>
<ul>
<li><p>cuda 버전과 torch 버전이 안맞아 오류 발생</p>
</li>
<li><p>수정과정에서 현재 pycharm 먹통 됨. 
```
ps -ef | grep pycharm
 kill -9 프로세스번호</p>
</li>
<li><p>utils.py의 train 함수 일부 수정</p>
<pre><code class="language-python">def train(args, train_loader, model, criterion, optimizer, epoch, max_epoch):
    model.train()

  total_batches = len(train_loader)
    pbar = enumerate(train_loader)
    LOGGER.info((&#39;\n&#39; + &#39;%13s&#39; * 4) % (&#39;Epoch&#39;,&#39;TverskyLoss&#39;,&#39;FocalLoss&#39; ,&#39;TotalLoss&#39;))
    pbar = tqdm(pbar, total=total_batches, bar_format=&#39;{l_bar}{bar:10}{r_bar}&#39;)
    for i, (_,input, target) in pbar:
        if args.onGPU == True:
            input = input.cuda().float() / 255.0        
        output = model(input)

        # target=target.cuda()
        optimizer.zero_grad()

        focal_loss,tversky_loss,loss = criterion(output,target)
      optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        pbar.set_description((&#39;%13s&#39; * 1 + &#39;%13.4g&#39; * 3) %
      (f&#39;{epoch}/{max_epoch - 1}&#39;, tversky_loss, focal_loss, loss.item()))


</code></pre>
</li>
</ul>
</li>
</ul>
<ul>
<li>epoch 2 로 train.py 학습완료<pre><code>  python3 train.py</code></pre></li>
<li>model_1.pth 파일 불러와 테스트 코드 실행<pre><code>  python3 val.py</code></pre><ul>
<li>테스트 코드 일부 수정<ul>
<li>torch.jit.trace() 부분에서 에러 발생
<img src="https://velog.velcdn.com/images/juheon-jeong/post/90007f81-719a-41b9-ac6b-092edb3f28f2/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>결과 이미지</li>
</ul>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/5bf7c68e-03cc-401e-9a0e-779cfcadbdb5/image.png" alt=""></p>
<p> <img src="https://velog.velcdn.com/images/juheon-jeong/post/01416352-9266-4f79-ac97-d6cc087150a6/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/f923b321-85b8-4095-ab6e-14cfe1adbaeb/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/0dcb6ce6-ba15-4470-950f-c15f74a810dc/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/b2885807-5ce0-470e-b7a1-48a4191247a8/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/911df100-2a4a-4f27-b92e-81c48ce0e749/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/a13a8efd-071b-4aa7-8742-70cd6fc53a58/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/a562645b-f628-43be-a2d7-8c3b95d0c4b0/image.png" alt=""></p>
<hr>
<p> BDD100k Dataset이 아닌 도로 주행 영상으로 돌려본 결과 정확하게 분리를 해줌.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2023 하계 모각코] 팀 "원래는 종경이가 팀장이었다" 6회차 - 계획 및 결과]]></title>
            <link>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-6%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-6%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Wed, 16 Aug 2023 06:34:22 GMT</pubDate>
            <description><![CDATA[<h3 id="목표">목표</h3>
<p>AI공동경진대회 준비 및 VIS(Video Instance Segmentation) 관련 논문을 읽어보자.</p>
<h3 id="사용-언어">사용 언어</h3>
<p>Python</p>
<h3 id="일정">일정</h3>
<p>4회차: 8/12 13:00 ~ 16:00</p>
<h3 id="6회차-목표--졸업프로젝트-관련-데이터-분석">6회차 목표 : 졸업프로젝트 관련 데이터 분석</h3>
<hr>
<ul>
<li><a href="https://bair.berkeley.edu/blog/2018/05/30/bdd/">Bdd100k image, detection</a> 파일 다운<ul>
<li>image :  1280, 720 / 정상 주행 데이터 셋<ul>
<li>json : label(x1, x2, y1, y2, category)</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/da38b619-6e86-4b74-a236-d6c33284db65/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/8261d00a-93c7-43f9-a148-d9ef76802cbc/image.png" alt=""></p>
<ul>
<li><a href="https://github.com/ultralytics">yolov8</a> 코드 실행<ul>
<li>사람의 경우 완벽하게 탐지하지 못함.</li>
<li>정상 주행 데이터셋으로 추가 학습을 진행해 사람에 대한 인식율을 높여볼 필요성 있음.<img src="https://velog.velcdn.com/images/juheon-jeong/post/8c1d806c-fc0a-4188-93f3-3fc63c3dc937/image.png" alt=""></li>
</ul>
</li>
<li>HEVI dataset 분석 <ul>
<li>image : 1920, 1200 / 정상 주행 데이터 셋</li>
<li>pickle : bbox, flow, frame_id, ego_motion을 가지고 있다.
<img src="https://velog.velcdn.com/images/juheon-jeong/post/03dd099d-7d7c-44fd-833e-8a532ad9aee4/image.png" alt=""></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23년 하계 모각코 팀 리뷰] 6회차]]></title>
            <link>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-6%ED%9A%8C%EC%B0%A8</link>
            <guid>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-6%ED%9A%8C%EC%B0%A8</guid>
            <pubDate>Sat, 12 Aug 2023 11:22:32 GMT</pubDate>
            <description><![CDATA[<p>일정 : 2023.08.12 13:00 ~ 16:00</p>
<p>김현수 : <a href="https://iam-han9ry.tistory.com/m/49">모각코 6회차</a></p>
<p>박광욱 : <a href="https://velog.io/@ccocco0609/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EA%B0%9C%EC%9D%B8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 6회차</a></p>
<p>박종경 : <a href="https://parkjonggyeong.tistory.com/63">모각코 6회차</a></p>
<p>정주헌 : <a href="https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-6%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 6회차</a></p>
<p>최원준 : <a href="https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 6회차</a></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/525d94fc-7d21-4de5-9775-edfa83835315/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23년 하계 모각코 팀 리뷰] 5회차]]></title>
            <link>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-5%ED%9A%8C%EC%B0%A8</link>
            <guid>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-5%ED%9A%8C%EC%B0%A8</guid>
            <pubDate>Sat, 05 Aug 2023 06:06:22 GMT</pubDate>
            <description><![CDATA[<p>일정 : 2023.08.05 13:00 ~ 16:00</p>
<p>김현수 : <a href="https://iam-han9ry.tistory.com/48">모각코 5회차</a></p>
<p>박광욱 : <a href="https://velog.io/@ccocco0609/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EA%B0%9C%EC%9D%B8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 5회차</a></p>
<p>박종경 : <a href="https://parkjonggyeong.tistory.com/62">모각코 5회차</a></p>
<p>정주헌 : <a href="https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-5%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 5회차</a></p>
<p>최원준 : <a href="https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 5회차</a>
<img src="https://velog.velcdn.com/images/juheon-jeong/post/6861ad4d-664c-4d25-9bde-849042ee5c6c/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2023 하계 모각코] 팀 "원래는 종경이가 팀장이었다" 5회차 - 계획 및 결과]]></title>
            <link>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-5%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-5%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Sat, 05 Aug 2023 06:02:52 GMT</pubDate>
            <description><![CDATA[<h3 id="목표">목표</h3>
<p>AI공동경진대회 준비 및 VIS(Video Instance Segmentation) 관련 논문을 읽어보자.</p>
<h3 id="사용-언어">사용 언어</h3>
<p>Python</p>
<h3 id="일정">일정</h3>
<p>4회차: 8/5 13:00 ~ 16:00</p>
<h3 id="4회차-목표--idol-논문-리뷰">4회차 목표 : <a href="https://www.ecva.net/papers/eccv_2022/papers_ECCV/papers/136880582.pdf">IDOL</a> 논문 리뷰</h3>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/63f9eecc-48f0-425e-b35c-a94425266e2e/image.png" alt=""></p>
<hr>
<p>*<em>등장 배경 *</em></p>
<ul>
<li>Online VIS 모델의 단점인 matching association 문제를 해결하여 더 높은 성능을 갖추기 위해 등장.</li>
</ul>
<p>** 핵심 기술 **</p>
<ul>
<li><strong>Contrastive learning</strong><ul>
<li>다른 frame 간의 동일한 instance의 유사성과 다른 Instance와의 차이를 학습<ul>
<li><strong>Optimal transport method</strong></li>
<li>모델이 예측한 class, bounding box와 ground truth에서 주어진 class, bounding box를 조합하여 cost 식 이용.</li>
</ul>
</li>
<li>cost 가 낮은 m1 개와 cost가 높은 m2 개를 각각 positive, negative로 설정하여 계산.</li>
</ul>
</li>
</ul>
<p>** 모델 구조 **
<img src="https://velog.velcdn.com/images/juheon-jeong/post/2e4e6d84-57bc-470e-849d-1141941c0c3a/image.png" alt=""></p>
<ul>
<li>Key Frame과 Reference Frame은 Backbone을 거친 후에 multi-scale feature maps을 생성하고 이를 Deformable Transformer의 input으로 이용.
<img src="https://velog.velcdn.com/images/juheon-jeong/post/1b3fa7c4-fe45-4d02-9172-7e0ccef1c507/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/06c55ccc-f823-4f73-bddf-af13f77af800/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/64565385-754c-4578-8032-c4bae62034ee/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/3b8d4704-f4a1-4ea3-90e2-b4c45de1dfcf/image.png" alt=""></li>
<li><ul>
<li>결과 **
<img src="https://velog.velcdn.com/images/juheon-jeong/post/330774d8-80d5-4794-bc81-c2bcde4f5b0a/image.png" alt=""></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2023 하계 모각코] 팀 "원래는 종경이가 팀장이었다" 4회차 - 계획 및 결과]]></title>
            <link>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-4%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-4%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Mon, 31 Jul 2023 01:40:15 GMT</pubDate>
            <description><![CDATA[<h3 id="목표">목표</h3>
<p>AI공동경진대회 준비 및 VIS(Video Instance Segmentation) 관련 논문을 읽어보자.</p>
<h3 id="사용-언어">사용 언어</h3>
<p>Python</p>
<h3 id="일정">일정</h3>
<p>4회차: 7/29 13:00 ~ 16:00</p>
<h3 id="4회차-목표--vita-논문-리뷰">4회차 목표 : <a href="https://arxiv.org/pdf/2206.04403.pdf">VITA</a> 논문 리뷰</h3>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/7983cc2b-1a8e-4508-91df-3fe83577d2d4/image.png" alt=""></p>
<hr>
<ul>
<li><p><strong>등장 배경</strong> 
앞선 선행 연구들은 Online, Offline 다양한 방식으로  VIS Task를 수행해왔다.  </p>
</li>
<li><p><em>Online*</em> :  Offline 모델에 비해 성능이 떨어짐, frame 혹은 clip 간 matching association method가 필요</p>
</li>
<li><p><em>Offline*</em> : 모델에 적용할 수 있는 Video 크기가 제한적임. 
따라서 본 논문에서는 일반적인 환경에서 Video input의 크기 제한을 덜 받는 모델을 제안한다.</p>
</li>
<li><p><strong>핵심 기술</strong></p>
<ul>
<li>dense feature map 대신 Object token(query) 사용</li>
<li>frame level detector인 mask2former 사용</li>
<li>Similarity loss 사용
<img src="https://velog.velcdn.com/images/juheon-jeong/post/2b345df8-ccdf-4c54-9a2d-ebf58aa43335/image.png" alt=""></li>
</ul>
</li>
<li><p><strong>모델 구조</strong>
<img src="https://velog.velcdn.com/images/juheon-jeong/post/cfc657ee-9a6b-43cd-a13c-f86d998f5e72/image.png" alt=""></p>
</li>
<li><p><strong>결과</strong></p>
<ul>
<li>Datasets :  YouTube-VIS 2019, 2021 OVIS![]<img src="https://velog.velcdn.com/images/juheon-jeong/post/a030173c-ac55-4e97-9e38-e6107e5aab59/image.png" alt=""></li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/fe100955-00f2-43d0-b9ee-d7f9b101ee03/image.png" alt=""></p>
<ul>
<li><p><strong>한계점</strong></p>
<ul>
<li><p>무한한 수의 frame 처리가 안된다.</p>
</li>
<li><p>객체 토큰은 시간정보를 명시적으로 활용하지 못한다. 따라서 매우 긴 sequence에서 어려운 케이스의 경우 이를 처리하기 어렵다.</p>
</li>
</ul>
<hr>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23년 하계 모각코 팀 리뷰] 4회차]]></title>
            <link>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-4%ED%9A%8C%EC%B0%A8</link>
            <guid>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-4%ED%9A%8C%EC%B0%A8</guid>
            <pubDate>Mon, 31 Jul 2023 01:34:13 GMT</pubDate>
            <description><![CDATA[<p>일정 : 2023.07.29 13:00 ~ 16:00</p>
<p>김현수 : <a href="https://iam-han9ry.tistory.com/47">모각코 4회차</a></p>
<p>박광욱 : <a href="https://velog.io/@ccocco0609/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EA%B0%9C%EC%9D%B8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 4회차</a></p>
<p>박종경 : <a href="https://parkjonggyeong.tistory.com/m/61">모각코 4회차</a></p>
<p>정주헌 : <a href="https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-4%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 4회차</a></p>
<p>최원준 : <a href="https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 4회차</a></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/8effdb8c-9f46-41ca-b700-c973cee11891/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/68d5a077-0483-4d75-8e73-a753e0483161/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23년 하계 모각코 팀 리뷰] 3회차]]></title>
            <link>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-3%ED%9A%8C%EC%B0%A8</link>
            <guid>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-3%ED%9A%8C%EC%B0%A8</guid>
            <pubDate>Sat, 22 Jul 2023 09:41:20 GMT</pubDate>
            <description><![CDATA[<p>일정 : 2023.07.22 13:00 ~ 16:00</p>
<p>김현수 : <a href="https://iam-han9ry.tistory.com/46">모각코 3회차</a></p>
<p>박광욱 : <a href="https://velog.io/@ccocco0609/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EA%B0%9C%EC%9D%B8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 3회차</a></p>
<p>박종경 : <a href="https://parkjonggyeong.tistory.com/60">모각코 3회차</a></p>
<p>정주헌 : <a href="https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-3%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 3회차</a></p>
<p>최원준 : <a href="https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0">모각코 3회차</a></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/84cdcd9d-c0c0-4442-b68e-43dc241d87b1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/f43a43f7-13d0-4428-b748-8cb99853b5c8/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2023 하계 모각코] 팀 "원래는 종경이가 팀장이었다" 3회차 - 계획 및 결과]]></title>
            <link>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-3%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-3%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Sat, 22 Jul 2023 09:10:17 GMT</pubDate>
            <description><![CDATA[<h3 id="목표">목표</h3>
<p>AI공동경진대회 준비 및 VIS(Video Instance Segmentation) 관련 논문을 읽어보자.</p>
<h3 id="사용-언어">사용 언어</h3>
<p>Python</p>
<h3 id="일정">일정</h3>
<p>3회차: 7/22 13:00 ~ 16:00</p>
<h3 id="3회차-목표--genvis-논문-리뷰">3회차 목표 : <a href="https://arxiv.org/pdf/2211.08834.pdf">GenVIS</a> 논문 리뷰</h3>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/4c125396-e9b2-4c2a-8182-2f9d50f8dfd2/image.png" alt=""></p>
<hr>
<ul>
<li><p><strong>등장 배경</strong> 
앞선 선행 연구들은 Online, Offline 다양한 방식으로  VIS Task를 수행해왔다.  </p>
</li>
<li><p><em>Online*</em> :  Offline 모델에 비해 성능이 떨어짐, frame 혹은 clip 간 matching association method가 필요</p>
</li>
<li><p><em>Offline*</em> : 모델에 적용할 수 있는 Video 크기가 제한적임. 
따라서 본 논문에서는 일반적인 환경에서 Video input의 크기 제한을 덜 받는 모델을 제안한다.</p>
</li>
<li><p><strong>핵심 기술</strong></p>
<ul>
<li>clip과  clip 사이의 관계 학습</li>
<li>new learning criterion 및 Unified Video Label Assignment(UVLA) 제안 </li>
<li>memory mechanism 적용</li>
</ul>
</li>
<li><p><strong>모델 구조</strong>
<img src="https://velog.velcdn.com/images/juheon-jeong/post/b6ca944b-04b5-4e03-83f3-7a969c6b74c8/image.png" alt=""></p>
</li>
<li><p><strong>결과</strong></p>
<ul>
<li>Datasets :  YouTube-VIS 2019, 2021, 2022, OVIS<img src="https://velog.velcdn.com/images/juheon-jeong/post/d0cc1a33-482e-48ea-894d-f323f82e0afe/image.png" alt=""></li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/9f033c5a-8bab-40f8-8420-34b5140bd156/image.png" alt="">
<img src="https://velog.velcdn.com/images/juheon-jeong/post/2c2054d2-9989-4614-8723-b9944ea3f33f/image.png" alt=""></p>
<ul>
<li><p><strong>한계점</strong></p>
<ul>
<li>Window size를 조정할 수 없다.</li>
<li>고유 ID를 할당하므로 한 Frame에 매우 많은 object가 있을 경우는 처리 할 수 없다.</li>
</ul>
<hr>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23년 하계 모각코 팀 리뷰] 2회차]]></title>
            <link>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-2%ED%9A%8C%EC%B0%A8</link>
            <guid>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-2%ED%9A%8C%EC%B0%A8</guid>
            <pubDate>Sat, 15 Jul 2023 09:44:19 GMT</pubDate>
            <description><![CDATA[<p>일정 : 2023.07.15 13:00 ~ 16:00</p>
<p>김현수 : <a href="https://iam-han9ry.tistory.com/m/45">모각코 2회차</a></p>
<p>박광욱 : <a href="https://velog.io/@ccocco0609/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EA%B0%9C%EC%9D%B8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 2회차</a></p>
<p>박종경 : <a href="https://parkjonggyeong.tistory.com/59">모각코 2회차</a></p>
<p>정주헌 : <a href="https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-2%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 2회차</a></p>
<p>최원준 : <a href="https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 2회차</a></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/20704acf-fa9d-450f-8e17-da88d60abf98/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/88a04284-9034-448d-a32f-7d211b15cf2d/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2023 하계 모각코] 팀 "원래는 종경이가 팀장이었다" 2회차 - 계획 및 결과]]></title>
            <link>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-2%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-2%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Sat, 15 Jul 2023 09:40:43 GMT</pubDate>
            <description><![CDATA[<p>목표
AI공동경진대회 준비 및 VIS(Video Instance Segmentation) 관련 논문을 읽어보자.</p>
<p>사용 언어
Python</p>
<p>일정
2회차: 7/15 13:00 ~ 16:00</p>
<p>목표 : <a href="https://arxiv.org/pdf/1802.02611.pdf">DeeplabV3+</a> 논문 리뷰 및 코드 구현</p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/76bc84e2-f6bf-48b2-8393-64ac2d98d5e6/image.png" alt=""></p>
<p>모델 구조 
<img src="https://velog.velcdn.com/images/juheon-jeong/post/ea413e43-cf57-4892-ad94-c67294048b20/image.png" alt=""></p>
<p>모델 특징</p>
<ul>
<li>Astrous convolution을 사용하여 receptive field를 효과적으로 키울 수 있었다.
여기서 Astrous convolution은 아래에 있는 그림처럼 특징 길이만큼 띄워서 convolution 연산을 수행하는 것이다.
<img src="https://velog.velcdn.com/images/juheon-jeong/post/e57c7ed7-a1d3-4422-99f6-c633d844d2da/image.png" alt=""></li>
<li>Astrous separable depthwise convolution을 통해 기존의 연산량을 줄일 수 있었다. </li>
</ul>
<p>해당 논문에서는 모델 구현을 위한 Backbone으로  Xception과 Resnet-101을 사용하였으며 코드 구조는 아래 그림과 같다.
<img src="https://velog.velcdn.com/images/juheon-jeong/post/c3b7dec3-5905-4bcc-a3b3-9cd07c4774e1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/c81905c1-b146-4f45-8278-13a5f965cc0c/image.png" alt=""></p>
<p>그 결과 기존의 존재하는 모델의 성능을 뛰어넘은 SOTA(state-of-the-art)를 달성하였다.</p>
<p><strong>코드구현</strong> </p>
<pre><code class="language-python">import math
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.utils.model_zoo as model_zoo

class Bottleneck(nn.Module):
    expansion = 4

    def __init__(self, inplanes, planes, stride=1, rate=1, downsample=None):
        super(Bottleneck, self).__init__()
        self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False)
        self.bn1 = nn.BatchNorm2d(planes)
        self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride,
                               dilation=rate, padding=rate, bias=False)
        self.bn2 = nn.BatchNorm2d(planes)
        self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False)
        self.bn3 = nn.BatchNorm2d(planes * 4)
        self.relu = nn.ReLU(inplace=True)
        self.downsample = downsample
        self.stride = stride
        self.rate = rate

    def forward(self, x):
        residual = x

        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)

        out = self.conv2(out)
        out = self.bn2(out)
        out = self.relu(out)

        out = self.conv3(out)
        out = self.bn3(out)

        if self.downsample is not None:
            residual = self.downsample(x)

        out += residual
        out = self.relu(out)

        return out

class ResNet(nn.Module):

    def __init__(self, nInputChannels, block, layers, os=16, pretrained=False):
        self.inplanes = 64
        super(ResNet, self).__init__()
        if os == 16:
            strides = [1, 2, 2, 1]
            rates = [1, 1, 1, 2]
            blocks = [1, 2, 4]
        elif os == 8:
            strides = [1, 2, 1, 1]
            rates = [1, 1, 2, 2]
            blocks = [1, 2, 1]
        else:
            raise NotImplementedError

        # Modules
        self.conv1 = nn.Conv2d(nInputChannels, 64, kernel_size=7, stride=2, padding=3,
                                bias=False)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

        self.layer1 = self._make_layer(block, 64, layers[0], stride=strides[0], rate=rates[0])
        self.layer2 = self._make_layer(block, 128, layers[1], stride=strides[1], rate=rates[1])
        self.layer3 = self._make_layer(block, 256, layers[2], stride=strides[2], rate=rates[2])
        self.layer4 = self._make_MG_unit(block, 512, blocks=blocks, stride=strides[3], rate=rates[3])

        self._init_weight()

        if pretrained:
            self._load_pretrained_model()

    def _make_layer(self, block, planes, blocks, stride=1, rate=1):
        downsample = None
        if stride != 1 or self.inplanes != planes * block.expansion:
            downsample = nn.Sequential(
                nn.Conv2d(self.inplanes, planes * block.expansion,
                          kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(planes * block.expansion),
            )

        layers = []
        layers.append(block(self.inplanes, planes, stride, rate, downsample))
        self.inplanes = planes * block.expansion
        for i in range(1, blocks):
            layers.append(block(self.inplanes, planes))

        return nn.Sequential(*layers)

    def _make_MG_unit(self, block, planes, blocks=[1,2,4], stride=1, rate=1):
        downsample = None
        if stride != 1 or self.inplanes != planes * block.expansion:
            downsample = nn.Sequential(
                nn.Conv2d(self.inplanes, planes * block.expansion,
                          kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(planes * block.expansion),
            )

        layers = []
        layers.append(block(self.inplanes, planes, stride, rate=blocks[0]*rate, downsample=downsample))
        self.inplanes = planes * block.expansion
        for i in range(1, len(blocks)):
            layers.append(block(self.inplanes, planes, stride=1, rate=blocks[i]*rate))

        return nn.Sequential(*layers)

    def forward(self, input):
        x = self.conv1(input)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.maxpool(x)

        x = self.layer1(x)
        low_level_feat = x
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.layer4(x)
        return x, low_level_feat

    def _init_weight(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                # n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                # m.weight.data.normal_(0, math.sqrt(2. / n))
                torch.nn.init.kaiming_normal_(m.weight)
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()

    def _load_pretrained_model(self):
        pretrain_dict = model_zoo.load_url(&#39;https://download.pytorch.org/models/resnet101-5d3b4d8f.pth&#39;)
        model_dict = {}
        state_dict = self.state_dict()
        for k, v in pretrain_dict.items():
            if k in state_dict:
                model_dict[k] = v
        state_dict.update(model_dict)
        self.load_state_dict(state_dict)

def ResNet101(nInputChannels=3, os=16, pretrained=False):
    model = ResNet(nInputChannels, Bottleneck, [3, 4, 23, 3], os, pretrained=pretrained)
    return model


class ASPP_module(nn.Module):
    def __init__(self, inplanes, planes, rate):
        super(ASPP_module, self).__init__()
        if rate == 1:
            kernel_size = 1
            padding = 0
        else:
            kernel_size = 3
            padding = rate
        self.atrous_convolution = nn.Conv2d(inplanes, planes, kernel_size=kernel_size,
                                            stride=1, padding=padding, dilation=rate, bias=False)
        self.bn = nn.BatchNorm2d(planes)
        self.relu = nn.ReLU()
        self.dropout = nn.Dropout(p=0.3)
        self._init_weight()

    def forward(self, x):
        x = self.atrous_convolution(x)
        x = self.bn(x)
        x = self.relu(x)
        # x = self.dropout(x)
        return x

    def _init_weight(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                # n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                # m.weight.data.normal_(0, math.sqrt(2. / n))
                torch.nn.init.kaiming_normal_(m.weight)
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()


class DeepLabv3_plus(nn.Module):
    def __init__(self, nInputChannels=3, n_classes=2, os=16, pretrained=False, _print=True):
        if _print:
            print(&quot;Constructing DeepLabv3+ model...&quot;)
            print(&quot;Number of classes: {}&quot;.format(n_classes))
            print(&quot;Output stride: {}&quot;.format(os))
            print(&quot;Number of Input Channels: {}&quot;.format(nInputChannels))
        super(DeepLabv3_plus, self).__init__()

        # Atrous Conv
        self.resnet_features = ResNet101(nInputChannels, os, pretrained=pretrained)

        # ASPP
        if os == 16:
            rates = [1, 6, 12, 18]
        elif os == 8:
            rates = [1, 12, 24, 36]
        else:
            raise NotImplementedError

        self.aspp1 = ASPP_module(2048, 256, rate=rates[0])
        self.aspp2 = ASPP_module(2048, 256, rate=rates[1])
        self.aspp3 = ASPP_module(2048, 256, rate=rates[2])
        self.aspp4 = ASPP_module(2048, 256, rate=rates[3])

        self.relu = nn.ReLU()

        self.global_avg_pool = nn.Sequential(nn.AdaptiveAvgPool2d((1, 1)),
                                             nn.Conv2d(2048, 256, 1, stride=1, bias=False),
                                             nn.BatchNorm2d(256),
                                             nn.ReLU())


        self.dropout = nn.Dropout(p=0.3)            # define dropout layer
        self.conv1 = nn.Conv2d(1280, 256, 1, bias=False)
        self.bn1 = nn.BatchNorm2d(256)

        # adopt [1x1, 48] for channel reduction.
        self.conv2 = nn.Conv2d(256, 48, 1, bias=False)
        self.bn2 = nn.BatchNorm2d(48)

        self.last_conv = nn.Sequential(nn.Conv2d(304, 256, kernel_size=3, stride=1, padding=1, bias=False),
                                       nn.BatchNorm2d(256),
                                       nn.ReLU(),
                                       nn.Dropout(p=0.3),
                                       nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1, bias=False),
                                       nn.BatchNorm2d(256),
                                       nn.ReLU(),
                                       nn.Dropout(p=0.3),
                                       nn.Conv2d(256, n_classes, kernel_size=1, stride=1))

    def forward(self, input):
        x, low_level_features = self.resnet_features(input)
        x1 = self.aspp1(x)
        x2 = self.aspp2(x)
        x3 = self.aspp3(x)
        x4 = self.aspp4(x)
        x5 = self.global_avg_pool(x)

        x5 = F.upsample(x5, size=x4.size()[2:], mode=&#39;bilinear&#39;, align_corners=True)

        x = torch.cat((x1, x2, x3, x4, x5), dim=1)

        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.dropout(x)                                         # add dropout layer
        x = F.upsample(x, size=(int(math.ceil(input.size()[-2]/4)),
                                int(math.ceil(input.size()[-1]/4))), mode=&#39;bilinear&#39;, align_corners=True)

        low_level_features = self.conv2(low_level_features)
        low_level_features = self.bn2(low_level_features)
        low_level_features = self.relu(low_level_features)
        low_level_features = self.dropout(low_level_features)       # add dropout layer

        x = torch.cat((x, low_level_features), dim=1)
        x = self.last_conv(x)
        x = F.upsample(x, size=input.size()[2:], mode=&#39;bilinear&#39;, align_corners=True)

        return x

    def freeze_bn(self):
        for m in self.modules():
            if isinstance(m, nn.BatchNorm2d):
                m.eval()

    def __init_weight(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                # n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                # m.weight.data.normal_(0, math.sqrt(2. / n))
                torch.nn.init.kaiming_normal_(m.weight)
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()

def get_1x_lr_params(model):
    &quot;&quot;&quot;
    This generator returns all the parameters of the net except for
    the last classification layer. Note that for each batchnorm layer,
    requires_grad is set to False in deeplab_resnet.py, therefore this function does not return
    any batchnorm parameter
    &quot;&quot;&quot;
    b = [model.resnet_features]
    for i in range(len(b)):
        for k in b[i].parameters():
            if k.requires_grad:
                yield k


def get_10x_lr_params(model):
    &quot;&quot;&quot;
    This generator returns all the parameters for the last layer of the net,
    which does the classification of pixel into classes
    &quot;&quot;&quot;
    b = [model.aspp1, model.aspp2, model.aspp3, model.aspp4, model.conv1, model.conv2, model.last_conv]
    for j in range(len(b)):
        for k in b[j].parameters():
            if k.requires_grad:
                yield k


if __name__ == &quot;__main__&quot;:
    model = DeepLabv3_plus(nInputChannels=3, n_classes=1, os=16, pretrained=True, _print=True)
    model.eval()
    image = torch.randn(1, 3, 512, 512)
    with torch.no_grad():
        output = model.forward(image)
    print(output.size())
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23년 하계 모각코 팀 리뷰] 1회차]]></title>
            <link>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-1%ED%9A%8C%EC%B0%A8</link>
            <guid>https://velog.io/@juheon-jeong/23%EB%85%84-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EB%A6%AC%EB%B7%B0-1%ED%9A%8C%EC%B0%A8</guid>
            <pubDate>Fri, 07 Jul 2023 11:31:23 GMT</pubDate>
            <description><![CDATA[<p>일정 : 2023.07.07 20:00 ~ 23:00</p>
<p>김현수 : <a href="https://iam-han9ry.tistory.com/39">모각코 1회차</a></p>
<p>박광욱 : <a href="https://velog.io/@ccocco0609/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%ED%9A%8C%EC%B0%A8-%EA%B0%9C%EC%9D%B8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 1회차</a></p>
<p>박종경 : <a href="https://parkjonggyeong.tistory.com/57">모각코 1회차</a></p>
<p>정주헌 : <a href="https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-1%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC">모각코 1회차</a></p>
<p>최원준 : <a href="https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B3%84%ED%9A%8D">모각코 1회차</a></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/945a24eb-d55f-4973-8809-4015d08f281a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/219328cc-feb8-4420-a033-c9cab76256df/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2023 하계 모각코] 팀 "원래는 종경이가 팀장이었다" 1회차 - 계획 및 결과]]></title>
            <link>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-1%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%ED%8C%80-%EC%9B%90%EB%9E%98%EB%8A%94-%EC%A2%85%EA%B2%BD%EC%9D%B4%EA%B0%80-%ED%8C%80%EC%9E%A5%EC%9D%B4%EC%97%88%EB%8B%A4-1%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Fri, 07 Jul 2023 11:04:00 GMT</pubDate>
            <description><![CDATA[<p>목표
AI공동경진대회 준비 및 VIS(Video Instance Segmentation) 관련 논문을 읽어보자.</p>
<p>사용 언어
Python</p>
<p>일정
1회차: 7/7 20:00 ~ 23:00
목표 : AI공동경진대회 baseline 코드 실행 및 데이터셋 분석</p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/bda23691-7d11-4486-a5f8-1a64d617189d/image.png" alt=""></p>
<p>baseline 코드의 경우 UNet을 기반으로 하였고 코드는 아래와 같았다.</p>
<pre><code class="language-python">
import os
import cv2
import pandas as pd
import numpy as np

import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

from tqdm import tqdm
import albumentations as A
from albumentations.pytorch import ToTensorV2

device = torch.device(&#39;cuda&#39; if torch.cuda.is_available() else &#39;cpu&#39;)

# RLE 디코딩 함수
def rle_decode(mask_rle, shape):
    s = mask_rle.split()
    starts, lengths = [np.asarray(x, dtype=int) for x in (s[0:][::2], s[1:][::2])]
    starts -= 1
    ends = starts + lengths
    img = np.zeros(shape[0]*shape[1], dtype=np.uint8)
    for lo, hi in zip(starts, ends):
        img[lo:hi] = 1
    return img.reshape(shape)

# RLE 인코딩 함수
def rle_encode(mask):
    pixels = mask.flatten()
    pixels = np.concatenate([[0], pixels, [0]])
    runs = np.where(pixels[1:] != pixels[:-1])[0] + 1
    runs[1::2] -= runs[::2]
    return &#39; &#39;.join(str(x) for x in runs)

class SatelliteDataset(Dataset):
    def __init__(self, csv_file, transform=None, infer=False):
        self.data = pd.read_csv(csv_file)
        self.transform = transform
        self.infer = infer

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        img_path = self.data.iloc[idx, 1]
        image = cv2.imread(img_path)
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

        if self.infer:
            if self.transform:
                image = self.transform(image=image)[&#39;image&#39;]
            return image

        mask_rle = self.data.iloc[idx, 2]
        mask = rle_decode(mask_rle, (image.shape[0], image.shape[1]))

        if self.transform:
            augmented = self.transform(image=image, mask=mask)
            image = augmented[&#39;image&#39;]
            mask = augmented[&#39;mask&#39;]

        return image, mask

 transform = A.Compose(
    [   
        A.Resize(224, 224),
        A.Normalize(),
        ToTensorV2()
    ]
)

dataset = SatelliteDataset(csv_file=&#39;./train.csv&#39;, transform=transform)
dataloader = DataLoader(dataset, batch_size=16, shuffle=True, num_workers=4)

# U-Net의 기본 구성 요소인 Double Convolution Block을 정의합니다.
def double_conv(in_channels, out_channels):
    return nn.Sequential(
        nn.Conv2d(in_channels, out_channels, 3, padding=1),
        nn.ReLU(inplace=True),
        nn.Conv2d(out_channels, out_channels, 3, padding=1),
        nn.ReLU(inplace=True)
    )

# 간단한 U-Net 모델 정의
class UNet(nn.Module):
    def __init__(self):
        super(UNet, self).__init__()
        self.dconv_down1 = double_conv(3, 64)
        self.dconv_down2 = double_conv(64, 128)
        self.dconv_down3 = double_conv(128, 256)
        self.dconv_down4 = double_conv(256, 512)

        self.maxpool = nn.MaxPool2d(2)
        self.upsample = nn.Upsample(scale_factor=2, mode=&#39;bilinear&#39;, align_corners=True)        

        self.dconv_up3 = double_conv(256 + 512, 256)
        self.dconv_up2 = double_conv(128 + 256, 128)
        self.dconv_up1 = double_conv(128 + 64, 64)

        self.conv_last = nn.Conv2d(64, 1, 1)

    def forward(self, x):
        conv1 = self.dconv_down1(x)
        x = self.maxpool(conv1)

        conv2 = self.dconv_down2(x)
        x = self.maxpool(conv2)

        conv3 = self.dconv_down3(x)
        x = self.maxpool(conv3)   

        x = self.dconv_down4(x)

        x = self.upsample(x)        
        x = torch.cat([x, conv3], dim=1)

        x = self.dconv_up3(x)
        x = self.upsample(x)        
        x = torch.cat([x, conv2], dim=1)       

        x = self.dconv_up2(x)
        x = self.upsample(x)        
        x = torch.cat([x, conv1], dim=1)   

        x = self.dconv_up1(x)

        out = self.conv_last(x)

        return out

# model 초기화
model = UNet().to(device)

# loss function과 optimizer 정의
criterion = torch.nn.BCEWithLogitsLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# training loop
for epoch in range(10):  # 10 에폭 동안 학습합니다.
    model.train()
    epoch_loss = 0
    for images, masks in tqdm(dataloader):
        images = images.float().to(device)
        masks = masks.float().to(device)

        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, masks.unsqueeze(1))
        loss.backward()
        optimizer.step()

        epoch_loss += loss.item()

    print(f&#39;Epoch {epoch+1}, Loss: {epoch_loss/len(dataloader)}&#39;)

test_dataset = SatelliteDataset(csv_file=&#39;./test.csv&#39;, transform=transform, infer=True)
test_dataloader = DataLoader(test_dataset, batch_size=16, shuffle=False, num_workers=4)

with torch.no_grad():
    model.eval()
    result = []
    for images in tqdm(test_dataloader):
        images = images.float().to(device)

        outputs = model(images)
        masks = torch.sigmoid(outputs).cpu().numpy()
        masks = np.squeeze(masks, axis=1)
        masks = (masks &gt; 0.35).astype(np.uint8) # Threshold = 0.35

        for i in range(len(images)):
            mask_rle = rle_encode(masks[i])
            if mask_rle == &#39;&#39;: # 예측된 건물 픽셀이 아예 없는 경우 -1
                result.append(-1)
            else:
                result.append(mask_rle)

submit = pd.read_csv(&#39;./sample_submission.csv&#39;)
submit[&#39;mask_rle&#39;] = result
submit.to_csv(&#39;./submit.csv&#39;, index=False)</code></pre>
<p>** Baseline 분석**
Baseline의 성능은 0.2204로 측정되었다.
모델이 매우 단순하므로 UNet의 encoder부분을 Resnet 50 layer로 바꾸어 finetuning하는 방식으로 바꾸거나 더 나은 모델로 교체해야한다고 판단하였다.</p>
<p><strong>Dataset 분석</strong>
Train image 크기 : 1024 * 1024</p>
<p>Train image 용량 : 13.0GB, 7140 장</p>
<p>Test image 크기 : 224 * 224 </p>
<p>Test image 용량 : 5.4GB, 60640 장</p>
<p>Train image 개수가 Test image에 비해 매우 적어 <strong>Data Augmentation</strong>이 필요하다고 판단하였고, Train과 Test image 픽셀 값이 다르므로 <strong>Test image를 기준</strong>으로 맞추어야한다고 생각하였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2023 하계 모각코 일정]]]></title>
            <link>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%EC%9D%BC%EC%A0%95</link>
            <guid>https://velog.io/@juheon-jeong/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%EC%9D%BC%EC%A0%95</guid>
            <pubDate>Fri, 07 Jul 2023 10:52:41 GMT</pubDate>
            <description><![CDATA[<p>2023 하계 모각코
팀명 : 원래는 종경이가 팀장이었다
구성원 :
김현수
박광욱
박종경
정주헌
최원준</p>
<p>목표
AI공동경진대회 준비 및 VIS(Video Instance Segmentation) 관련 논문을 읽어보자.</p>
<p>사용 언어
Python</p>
<p>일정
1회차: 7/7 20:00 ~ 23:00
목표 : AI공동경진대회 baseline 코드 실행 및 데이터셋 분석</p>
<p>2회차: 7/15 13:00 ~ 16:00
목표 : DeeplabV3+ 논문 리뷰 및 코드 구현</p>
<p>3회차: 7/22 13:00 ~ 16:00
목표 : VIS 관련 논문 리뷰 1</p>
<p>4회차 : 7/29 13:00 ~ 16:00
목표 : VIS 관련 논문 리뷰 2</p>
<p>5회차 : 8/5 13:00 ~ 16:00
목표 : VIS 관련 논문 리뷰 3</p>
<p>6회차 : 8/12 13:00 ~ 16:00
목표 : VIS 관련 논문 리뷰 4</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Satelite Image Semantic Segmentation 논문 정리]]></title>
            <link>https://velog.io/@juheon-jeong/Satelite-Image-Semantic-Segmentation-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@juheon-jeong/Satelite-Image-Semantic-Segmentation-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 28 Jun 2023 04:51:48 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/a3115742-24d6-4d4c-b84b-f8404dd12894/image.png" alt=""></p>
<p><a href="https://arxiv.org/pdf/2110.05812.pdf">해당 논문</a>은 인공위성 이미지를 가지고 Semantic Segmentation을 하는 과정에 대해 서술하였다.</p>
<p>이들은 IGN Open data를 활용하였고 모델은 Swin Transformer를 사용하였다.</p>
<p>이 때 Swin Transformer의 경우 <a href="https://github.com/open-mmlab/mmsegmentation">mmsegmentation</a>을 기반으로 만들었다.</p>
<p>Dataset</p>
<ul>
<li>BD Ortho for the satelite images</li>
<li>BD Foret v2 for vegetation data</li>
<li>BD Topo for buildings and roads</li>
</ul>
<p>클래스를 6개(Sparse forest, Dense forest, Moor, Herbaceous formation, Building, Road)로 축소하였다. </p>
<p>학습 시 ImageNet-22K로 사전학습된 모델을 가져와 사용하였고 Class Imbalnaced 문제 때문에 각 클래스별로 추가적인 weight를 더하였다. &#39;</p>
<p><img src="https://velog.velcdn.com/images/juheon-jeong/post/e10d1a4a-85f2-4758-aaaf-d177aa954ed4/image.png" alt=""></p>
<p>결과는 위의 그림과 같았고 총 3가지 한계점이 존재했다.</p>
<ol>
<li>위성 사진과 original segmentation은 같은 시간에 만들어진 것이 아니기 때문에 항상 정확하지는 않다.</li>
<li>데이터셋에 정보가 없는 구간이 존재한다. 따라서 일정 비율 이상 정보가 없을 경우 제거해야한다.</li>
<li>도로 segmentation은 다른 image에 가려져 안보이는 경우가 있어 정확하지 않다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[팀 리뷰 ]]></title>
            <link>https://velog.io/@juheon-jeong/%ED%8C%80-%EB%A6%AC%EB%B7%B0</link>
            <guid>https://velog.io/@juheon-jeong/%ED%8C%80-%EB%A6%AC%EB%B7%B0</guid>
            <pubDate>Fri, 16 Jun 2023 10:44:26 GMT</pubDate>
            <description><![CDATA[<p>23년 하계 모각코 팀 리뷰</p>
<p>팀장 : 정주헌
팀원 : 김현수, 박광욱, 박종경, 최원준</p>
]]></description>
        </item>
    </channel>
</rss>