<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>log404</title>
    <link>https://ksc036.tistory.com/</link>
    <description>ksc036 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Tue, 2 Jun 2026 21:10:06 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ksc036</managingEditor>
    <item>
      <title>Leet Code - LRU Cache</title>
      <link>https://ksc036.tistory.com/133</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/lru-cache/description/?envType=problem-list-v2&amp;amp;envId=Practice-I&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/lru-cache/description/?envType=problem-list-v2&amp;amp;envId=Practice-I&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1780300719779&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# change problem 
# how 
from collections import deque
class LRUCache:
    _nowSize = -1
    _totalSize = -1
    _q = None
    _hash = None

    def __init__(self, capacity: int):
        self._hash = {}
        self._nowSize = 0
        self._q = deque()
        self._totalSize = capacity
    def get(self, key: int) -&amp;gt; int:
        if key in self._hash.keys():
            self._q.remove(key)
            self._q.append(key)
            return self._hash[key]
        return -1
    def put(self, key: int, value: int) -&amp;gt; None:
        if key in self._hash.keys():
            self._hash[key] = value
            self._q.remove(key)
            self._q.append(key)
            #should update?
        else:
            if self._nowSize == self._totalSize:
                lastValue = self._q.popleft()
                del self._hash[lastValue]
                self._hash[key] = value
                self._q.append(key)
            else:
                self._hash[key] = value
                self._nowSize+=1
                self._q.append(key)



# Your LRUCache object will be instantiated and called as such:
# obj = LRUCache(capacity)
# param_1 = obj.get(key)
# obj.put(key,value)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘/LeetCode</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/133</guid>
      <comments>https://ksc036.tistory.com/133#entry133comment</comments>
      <pubDate>Mon, 1 Jun 2026 16:59:02 +0900</pubDate>
    </item>
    <item>
      <title>독서리뷰 0531 - 하버드의 첫 강의 시간관리 수업</title>
      <link>https://ksc036.tistory.com/132</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;효율적으로 업무효율을 높이는 시간관리 방법에 대한 내용을 읽었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메일, 전화 , 인터넷 등 효율적인 도구등을 사용해서 시간효율을 높이기 위한 방법들을 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전 책이어서 ai를 활용한 방법은 나오지 않지만 전반적으로 직장생활을 할때 유용한 스킬들을 소개한다.&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>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/132</guid>
      <comments>https://ksc036.tistory.com/132#entry132comment</comments>
      <pubDate>Mon, 1 Jun 2026 02:28:05 +0900</pubDate>
    </item>
    <item>
      <title>10분 독서 66일 후기</title>
      <link>https://ksc036.tistory.com/131</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;도전 기간&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떠한 행동이 습관으로 이어지는데 66일이 걸린다고 하여서 26년 03월 25일 ~ 26년 05월 30일까지 하루 10분 독서를 하고 블로그에 포스팅을 남기는 것을 실천해보았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;55개의 포스팅을 작성하였고 11번을 제외하고 성공하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래의 목적은 독해력 향상과 의지를 키우는 것이였는데, 정성적으로 평가해보았을 때 드라마틱 하지는 않지만 뭔가 변화가 느껴지는데? 정도의 변화를 경험한 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 책을 읽으면서 인상이 깊은 내용들을 내 삶에 하나 둘 씩 적용시켜가면서 좋은 습관들이 몸에 베여나가는게 느껴져서 좋았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 현재는 시간을 관리하는 내용에 대한 책을 읽고 있는데 이 책은 실제로 현실에 영향을 주고 있는 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루에 마지막에 다음날 해야할 것을 미리 계획을 세우고 다음날 아침에 사진을 찍어서 확인하는 습관을 들이니깐 하루의 생산성이 높아졌다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;후기&lt;/h3&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;</description>
      <category>자기계발/목표</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/131</guid>
      <comments>https://ksc036.tistory.com/131#entry131comment</comments>
      <pubDate>Sun, 31 May 2026 01:27:49 +0900</pubDate>
    </item>
    <item>
      <title>독서리뷰 0530 - 하버드의 첫 강의 시간관리 수업</title>
      <link>https://ksc036.tistory.com/130</link>
      <description>&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;오늘의 인상깊은 한줄은 &quot;효과적으로 다른 사람의 힘을 빌릴 줄 안다면 적은 노력으로 큰 성과를 올릴 수 있다.&quot; 이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 사람들에게 도움을 요청하는 것을 두려워하는 경향이 있었다. 하지만 상황에 따라서 이런 것들을 적극적으로 이용할 줄 알아야 인간관계도 잘 이어질 것이라 생각한다.&lt;/p&gt;</description>
      <category>자기계발/10분 독서</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/130</guid>
      <comments>https://ksc036.tistory.com/130#entry130comment</comments>
      <pubDate>Sun, 31 May 2026 01:18:07 +0900</pubDate>
    </item>
    <item>
      <title>독서리뷰 0528 - 하버드의 첫 강의 시간관리 수업</title>
      <link>https://ksc036.tistory.com/129</link>
      <description>&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;이러한 상황에 기초해 아이젠 하워는 아이젠하워 원칙을 만들었다. 중요도와 급선무에 따라 업무를 중요도와 급함에 따라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;특히 중요하지만 급하지 않은 일들이 중요하다고 하는데, 대표적으로는 기업 문화 수립, 가치관 정립, 사업 계획, 사업 준비, 인간관계 정립, 직원 훈련 등이 여기에 해당한다고 한다.&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;</description>
      <category>자기계발/10분 독서</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/129</guid>
      <comments>https://ksc036.tistory.com/129#entry129comment</comments>
      <pubDate>Fri, 29 May 2026 00:55:48 +0900</pubDate>
    </item>
    <item>
      <title>단타 : 프리장에서 상승</title>
      <link>https://ksc036.tistory.com/128</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어제 저녁부터 상승한 soxl을 보고 처음에는 조금만 가지고 있다가 프리장에 많이 샀다. +400만원이 넘어가는 수익을 보고도 어제도 프리장에서 많이오르다가 더올랐으니깐 오늘도 그렇겠지라고 막연히 생각했다.&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;수익이 나도 익절하지 않고 초 단기로 들어갔는데 한번에 무너지니깐 수익이 한번에 +100만원까지 내려갔다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심지어 그정도에서 익절해서 다행이지 아니였으면 음전할뻔했다. 많이 버는 것도 중요하지만 수익을 지키는 것도 중요한 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 사이 어딘가 줄을 잘 타는 방법이 없을까?&lt;br /&gt;&lt;br /&gt;오늘 미국의 5년물 국채 입찰 결과가 있는 날이여서 2시전에 마무리를 할 생각이였지만 너무 욕심을 부렸던 것 같다.&lt;/p&gt;</description>
      <category>투자</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/128</guid>
      <comments>https://ksc036.tistory.com/128#entry128comment</comments>
      <pubDate>Wed, 27 May 2026 23:13:29 +0900</pubDate>
    </item>
    <item>
      <title>독서리뷰 0526 - 하버드의 첫 강의 시간관리 수업</title>
      <link>https://ksc036.tistory.com/127</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;업무환경에서 시간을 절약할 수 있는 몇가지 팁을 읽었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업무를 진행중에 어떤 것을 요청받았다면 바로 컨텍스트를 전환하는 것이 아니라 양해를 구하고 기록을 간략하게 한 뒤에 집중을 전환하는 것과 갑자기 방문 혹은 일을 맡아야하면 지금 당장 처리해야하는 건지 확실하게 물어보는 것 등에 대한 이야기였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방해 요소를 최소한으로 줄이고 개선할 수 있는 방안도 꾸준히 생각해보아야한다.&lt;/p&gt;</description>
      <category>자기계발/10분 독서</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/127</guid>
      <comments>https://ksc036.tistory.com/127#entry127comment</comments>
      <pubDate>Tue, 26 May 2026 23:58:09 +0900</pubDate>
    </item>
    <item>
      <title>상승장의 일시적 하락시 대응법</title>
      <link>https://ksc036.tistory.com/126</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2026년05월 26일 반도체지수 SOXX와 레버리지상품SOXL의 수익률이 엄청나다.&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;최근에 SOXL이 거의 20~30프로 정도 조정을 받으면서 상승장이 끝난 것 아니냐는 추측이 있었는데, 견고한 실적과 함께 계속 상승사이클이 지속되고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전쟁과 공급망 불안이라는 악재속에서도 빅테크에서 계속 투자를 늘린다고하고, 반도체 가격의 상승으로 인해서 반도체업계의 수익성이 개선되는 결과가 나왔다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근본적인 상승사이클이 지속될 것이라는 생각이 들면 일시하락시에 많은 비중을 상승하는 섹터에 넣어놔도 괜찮을 것 같다.&lt;/p&gt;</description>
      <category>투자</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/126</guid>
      <comments>https://ksc036.tistory.com/126#entry126comment</comments>
      <pubDate>Tue, 26 May 2026 22:57:52 +0900</pubDate>
    </item>
    <item>
      <title>Cell Detection with Star-Convex Polygons</title>
      <link>https://ksc036.tistory.com/125</link>
      <description>&lt;h1&gt;&lt;span&gt;&lt;b&gt;StarDist 논문 정리: 세포&amp;middot;핵 검출을 별 모양 다각형으로 해결하는 방법&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현미경 이미지에서 세포나 핵을 자동으로 검출하고 분할하는 작업은 생물학 연구에서 매우 중요하다. 세포 개수 측정, 세포 형태 분석, 세포 추적, 질병 관련 이미지 분석 등 다양한 연구에서 기본 단계로 사용되기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 정리한 논문은 **&amp;ldquo;Cell Detection with Star-Convex Polygons&amp;rdquo;**로, 흔히 &lt;span&gt;&lt;b&gt;StarDist&lt;/b&gt;&lt;/span&gt;라고 부르는 방법을 제안한 논문이다. 이 논문은 MICCAI 2018에 발표되었고, Uwe Schmidt, Martin Weigert, Coleman Broaddus, Gene Myers가 저자이다. 논문에서는 crowded cell, 즉 세포나 핵이 서로 붙어 있거나 겹쳐 보이는 상황에서 기존 방식들이 가지는 한계를 해결하기 위해 &lt;span&gt;&lt;b&gt;star-convex polygon&lt;/b&gt;&lt;/span&gt;, 별 모양 볼록 다각형 기반의 세포 검출 방법을 제안한다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1. 왜 StarDist가 필요한가?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현미경 이미지에서 세포나 핵을 분할할 때 가장 흔한 문제는 &lt;span&gt;&lt;b&gt;붙어 있는 세포를 하나로 합쳐버리는 것&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 대표적인 방식은 크게 두 가지로 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째는 &lt;span&gt;&lt;b&gt;픽셀 단위 분할 방식&lt;/b&gt;&lt;/span&gt;이다.&lt;br /&gt;U-Net처럼 이미지의 각 픽셀을 세포인지 배경인지 분류한 뒤, 연결된 픽셀들을 하나의 객체로 묶는다. 이 방식은 단순하고 성능도 좋지만, 세포들이 서로 붙어 있으면 경계가 조금만 잘못 예측되어도 두 세포가 하나로 합쳐지는 문제가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째는 &lt;span&gt;&lt;b&gt;객체 검출 방식&lt;/b&gt;&lt;/span&gt;이다.&lt;br /&gt;Mask R-CNN처럼 먼저 bounding box를 찾고, 그 안에서 마스크를 예측하는 방식이다. 하지만 세포나 핵은 사각형으로 표현하기 애매한 경우가 많다. 특히 세포가 비스듬하게 붙어 있으면 bounding box가 많이 겹치게 되고, NMS 과정에서 실제 존재하는 세포가 제거될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문 Fig. 1에서도 이런 문제가 잘 나타난다. 붙어 있는 세포가 하나로 병합되거나, bounding box가 겹쳐서 유효한 세포 인스턴스가 억제되는 사례를 보여준다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. StarDist의 핵심 아이디어&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarDist의 핵심은 세포나 핵을 &lt;span&gt;&lt;b&gt;bounding box가 아니라 별 모양 다각형으로 표현하는 것&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세포 중심 근처의 한 픽셀에서 여러 방향으로 선을 뻗는다. 그리고 각 방향마다 세포 경계까지의 거리를 예측한다. 예를 들어 32개의 방향을 사용한다면, 한 픽셀에서 32개의 반지름 길이를 예측하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 거리들을 연결하면 하나의 다각형이 만들어진다. 이 다각형이 바로 해당 세포 또는 핵의 형태를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 StarDist는 각 픽셀마다 다음 두 가지를 예측한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;이 픽셀이 객체 내부에 있을 확률&lt;/li&gt;
&lt;li&gt;이 픽셀을 중심으로 여러 방향의 경계까지 거리&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서는 객체 확률을 단순한 세포/배경 분류값으로 두지 않고, &lt;span&gt;&lt;b&gt;배경까지의 거리 기반 값&lt;/b&gt;&lt;/span&gt;으로 정의한다. 이렇게 하면 세포 중심에 가까운 픽셀이 더 높은 확률을 가지게 되고, NMS 과정에서 중심부에서 나온 polygon이 선택될 가능성이 높아진다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;3. 모델 구조&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarDist는 복잡한 모델을 사용하는 것이 아니라, 비교적 단순한 &lt;span&gt;&lt;b&gt;U-Net 기반 구조&lt;/b&gt;&lt;/span&gt;를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;U-Net의 마지막 feature layer 뒤에 추가 convolution layer를 붙이고, 출력은 두 갈래로 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 출력은 &lt;span&gt;&lt;b&gt;object probability map&lt;/b&gt;&lt;/span&gt;이다.&lt;br /&gt;각 픽셀이 객체 내부인지, 그리고 중심에 가까운지를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 출력은 &lt;span&gt;&lt;b&gt;radial distance map&lt;/b&gt;&lt;/span&gt;이다.&lt;br /&gt;각 픽셀에서 여러 방향으로 객체 경계까지의 거리를 예측한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문 실험에서는 보통 &lt;span&gt;&lt;b&gt;32개의 radial direction&lt;/b&gt;&lt;/span&gt;을 사용한다. 즉 각 픽셀마다 32방향의 거리값을 예측하고, 이를 이용해 다각형 형태의 세포 인스턴스를 만든다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;4. 학습 방식&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarDist는 두 가지 loss를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;object probability에 대해서는 일반적인 &lt;span&gt;&lt;b&gt;binary cross entropy loss&lt;/b&gt;&lt;/span&gt;를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;polygon distance에 대해서는 &lt;span&gt;&lt;b&gt;mean absolute error loss&lt;/b&gt;&lt;/span&gt;를 사용한다. 다만 모든 픽셀을 동일하게 보지 않고, ground truth object probability로 가중치를 준다. 즉 배경 픽셀은 거의 영향을 주지 않고, 세포 중심에 가까운 픽셀일수록 더 중요하게 학습된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방식은 NMS 과정과도 잘 맞는다. 실제 추론에서는 중심에 가까운 픽셀에서 나온 polygon이 선택될 가능성이 높기 때문에, 학습에서도 중심부의 distance 예측을 더 중요하게 보는 것이다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;5. 추론 과정: NMS 사용&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 이미지를 통과하면 각 픽셀마다 polygon 후보가 나온다. 하지만 모든 픽셀에서 나온 polygon을 그대로 사용하면 너무 많은 후보가 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 StarDist는 object probability가 일정 threshold 이상인 픽셀만 후보로 사용하고, 그중에서 &lt;span&gt;&lt;b&gt;Non-Maximum Suppression&lt;/b&gt;&lt;/span&gt;, 즉 NMS를 적용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NMS는 겹치는 후보들 중 확률이 높은 polygon만 남기는 과정이다. 기존 객체 검출에서도 많이 사용하는 방식이지만, StarDist에서는 bounding box가 아니라 polygon끼리의 겹침을 기준으로 후보를 제거한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 최종적으로 남은 polygon들이 각각 하나의 세포 또는 핵 인스턴스가 된다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;6. 실험 데이터셋&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서는 세 가지 데이터셋을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째는 &lt;span&gt;&lt;b&gt;Toy dataset&lt;/b&gt;&lt;/span&gt;이다.&lt;br /&gt;인위적으로 만든 데이터셋으로, 서로 닿아 있는 반타원 형태의 객체들이 포함되어 있다. bounding box 기반 방법의 한계를 보여주기 위해 만든 데이터셋이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째는 &lt;span&gt;&lt;b&gt;TRAgen dataset&lt;/b&gt;&lt;/span&gt;이다.&lt;br /&gt;세포 분열, 형태 변화, 카메라 노이즈, 현미경 blur 등을 포함한 합성 세포 이미지 데이터셋이다. 매우 crowded한 세포 상황을 시뮬레이션한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째는 &lt;span&gt;&lt;b&gt;DSB2018 dataset&lt;/b&gt;&lt;/span&gt;이다.&lt;br /&gt;2018 Data Science Bowl의 세포핵 이미지 데이터셋 중 fluorescence microscopy image 일부를 사용했다. 논문에서는 라벨 오류가 있는 이미지를 제거하고 총 497장의 이미지를 사용했다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;7. 비교한 방법들&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서는 StarDist를 다음 방법들과 비교했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;U-Net 2-class&lt;/b&gt;는 세포와 배경만 구분한다.&lt;br /&gt;구조는 단순하지만, 붙어 있는 세포를 잘 분리하지 못하는 문제가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;U-Net 3-class&lt;/b&gt;는 세포, 배경, 경계 픽셀을 추가로 구분한다.&lt;br /&gt;세포 경계를 별도 클래스로 예측하기 때문에 crowded cell에서 2-class U-Net보다 유리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Mask R-CNN&lt;/b&gt;은 bounding box 기반 region proposal과 mask segmentation을 결합한 대표적인 instance segmentation 방법이다. 성능은 강력하지만 파라미터 수가 많고, hyperparameter tuning이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;StarDist&lt;/b&gt;는 U-Net backbone에 star-convex polygon 예측을 결합한 방식이다. 논문에서는 32개의 radial direction을 사용했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;8. 실험 결과&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Toy dataset에서는 StarDist와 U-Net 계열 방법들이 좋은 성능을 보였다. 특히 StarDist는 bounding box 기반 방법이 어려워하는 기울어진 객체나 서로 닿아 있는 객체에서도 좋은 결과를 냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TRAgen dataset에서도 StarDist는 높은 성능을 보였다. U-Net 2-class는 붙어 있는 세포를 병합하는 문제가 있었지만, StarDist는 crowded cell에서도 비교적 안정적인 결과를 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 중요한 실제 데이터셋인 DSB2018에서는 StarDist가 IoU threshold 0.75 미만 구간에서 다른 방법들보다 좋은 성능을 보였다. 논문 Table 1에 따르면 DSB2018에서 IoU 0.50 기준 AP는 StarDist가 0.8641, Mask R-CNN이 0.8323, U-Net 3-class가 0.8060, U-Net 2-class가 0.6739였다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 IoU threshold가 아주 높아질수록 StarDist의 성능은 떨어지는 경향이 있다. 이는 StarDist가 픽셀 단위의 자유로운 마스크가 아니라 32방향의 parametric shape model로 객체를 표현하기 때문이다. 아주 정밀한 경계 표현에서는 per-pixel segmentation 방식이 더 유리할 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;9. StarDist의 장점&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarDist의 가장 큰 장점은 &lt;span&gt;&lt;b&gt;붙어 있는 세포나 핵을 잘 분리할 수 있다&lt;/b&gt;&lt;/span&gt;는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 U-Net 방식은 경계가 조금만 잘못 예측되어도 두 세포를 하나로 합칠 수 있다. 반면 StarDist는 각 세포를 하나의 polygon 객체로 직접 예측하기 때문에 crowded cell 상황에서 더 안정적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 다른 장점은 &lt;span&gt;&lt;b&gt;Mask R-CNN보다 단순하고 가볍다&lt;/b&gt;&lt;/span&gt;는 점이다. 논문에서는 Mask R-CNN이 약 4,500만 개의 파라미터를 가지는 반면, StarDist는 훨씬 작은 U-Net 기반 구조를 사용한다고 설명한다. 그래서 학습과 사용이 비교적 쉽고, hyperparameter도 적다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 StarDist는 실수하더라도 비교적 자연스러운 형태의 세포 모양을 예측한다. 논문에서는 이를 &amp;ldquo;gracefully&amp;rdquo;라고 표현하는데, 잘못 예측하더라도 이상한 구멍이 생긴 마스크나 불규칙한 형태보다는 그럴듯한 세포 형태를 유지하는 경향이 있다는 의미다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;10. 한계점&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarDist는 모든 객체에 적합한 방법은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarDist는 이름 그대로 star-convex한 형태, 즉 중심점에서 경계까지 방사형으로 표현하기 좋은 형태에 적합하다. 세포핵처럼 둥글거나 타원형에 가까운 객체에는 잘 맞지만, 매우 길쭉하거나 복잡하게 휘어진 형태, 가지가 많은 구조에는 한계가 있을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 32개의 방향으로 경계를 표현하기 때문에 아주 정밀한 경계가 필요한 경우에는 픽셀 단위 segmentation보다 불리할 수 있다. 논문에서도 높은 IoU threshold에서는 StarDist가 synthetic dataset에서 상대적으로 낮은 결과를 보이는 이유를 이 parametric shape representation 때문이라고 설명한다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;11. 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarDist는 세포나 핵을 사각형 bounding box가 아니라 &lt;span&gt;&lt;b&gt;별 모양 다각형&lt;/b&gt;&lt;/span&gt;으로 표현하는 instance segmentation 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법은 특히 세포가 많이 붙어 있는 crowded microscopy image에서 강점을 가진다. U-Net처럼 픽셀을 먼저 분류한 뒤 묶는 방식은 붙어 있는 세포를 하나로 합치는 문제가 있고, Mask R-CNN처럼 bounding box를 사용하는 방식은 세포 형태를 사각형으로 근사하면서 문제가 생길 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarDist는 각 픽셀에서 객체 확률과 여러 방향의 경계 거리값을 예측하고, NMS를 통해 최종 세포 인스턴스를 선택한다. 구조는 U-Net 기반이라 비교적 단순하지만, 실제 microscopy image dataset에서 강력한 성능을 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 모든 형태의 객체에 적합한 것은 아니다. 둥글거나 타원형에 가까운 세포핵에는 잘 맞지만, 복잡한 구조나 매우 정밀한 경계가 필요한 경우에는 다른 segmentation 방법이 더 적합할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 이 논문은 세포 이미지 분석에서 &amp;ldquo;객체를 어떤 형태로 표현할 것인가&amp;rdquo;가 성능에 얼마나 큰 영향을 주는지 잘 보여주는 사례라고 생각한다. 단순히 모델을 더 크게 만드는 것이 아니라, 문제의 특성에 맞는 표현 방식을 선택하는 것이 중요하다는 점에서 의미 있는 논문이다.&lt;/p&gt;</description>
      <category>AI/논문리뷰</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/125</guid>
      <comments>https://ksc036.tistory.com/125#entry125comment</comments>
      <pubDate>Tue, 26 May 2026 15:29:13 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 기능개발</title>
      <link>https://ksc036.tistory.com/124</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42586&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42586&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1779761243411&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42586&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bf9f4m/dJMb9efkieA/hapSUwV6MXfAh2dRhyOek0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/OrEGT/dJMb8SXEbNB/0eXuJPU2IPMJSS5BAKwCRk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42586&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42586&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bf9f4m/dJMb9efkieA/hapSUwV6MXfAh2dRhyOek0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/OrEGT/dJMb8SXEbNB/0eXuJPU2IPMJSS5BAKwCRk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;pre id=&quot;code_1779761250700&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math
def solution(progresses, speeds):
    answer = []
    remainDay = []
    n = len(progresses)
    for i in range(n):
        remainDay.append(int(math.ceil((100-progresses[i])/speeds[i])))
    
    maxDay = -1
    count = 0
    for i in range(n):
        if maxDay &amp;lt; remainDay[i]:
            if count != 0:
                answer.append(count)
            maxDay = remainDay[i]
            count = 1
        else:
            count += 1
    if count != 0:
        answer.append(count)
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/프로그래머스 고득점 kit</category>
      <author>ksc036</author>
      <guid isPermaLink="true">https://ksc036.tistory.com/124</guid>
      <comments>https://ksc036.tistory.com/124#entry124comment</comments>
      <pubDate>Tue, 26 May 2026 11:15:47 +0900</pubDate>
    </item>
  </channel>
</rss>