<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>JM.log</title>
        <link>https://velog.io/</link>
        <description>개인 공부</description>
        <lastBuildDate>Fri, 01 Oct 2021 18:07:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. JM.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/tobe-honest" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[React-native에서 전역변수 사용하기]]></title>
            <link>https://velog.io/@tobe-honest/React-native%EC%97%90%EC%84%9C-%EC%A0%84%EC%97%AD%EB%B3%80%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@tobe-honest/React-native%EC%97%90%EC%84%9C-%EC%A0%84%EC%97%AD%EB%B3%80%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 01 Oct 2021 18:07:39 GMT</pubDate>
            <description><![CDATA[<p>props를 사용하여 어떠한 값을 전달하는 과정에서 많은 컴포넌트를 거칠 수 있는데 중간에 사용이 되지않고 전달만 되는 컴포넌트 들이 보이는데 이런 것을 prop drilling이라고 한다.</p>
<p>3<del>4개 컴포넌트 사이에서 prop drilling이 2</del>3번만 일어나도 state관리가 지저분한 상태가 된다. 추가로 불필요한 re-rendering으로 인해 성능상의 이슈도 많이 발생시킨다.</p>
<p>따라서 props로 전역변수를 사용하기에는 무리가 있다.</p>
<p>그럼 어떻게 State를 깔끔하게 관리할 수 있을까?</p>
<p>정답은 <strong>Context와 Hooks</strong>를 사용하는 것이다.</p>
<blockquote>
<p><strong>Context</strong>는 명시적으로 props를 통하지 않고 컴포넌트간 데이터 공유 방법을 제공함</p>
</blockquote>
<blockquote>
<p><strong>Hooks</strong>는 functional 컴포넌트에 State를 추가할 수 있게 해줌</p>
</blockquote>
<p>global state/function을 update하기 위해 Context object에 저장을 하고, global settings를 update하기 위해 Hooks object에 저장을 한다.</p>
<p>그럼 이제 사용법에 대해 알아보자.</p>
<ol>
<li><p>가장 먼저 context를 hold할 컴포넌트를 만든다.</p>
<blockquote>
<p>   // components/AppContext.js
   import React from &quot;react&quot;;</p>
<p>   const AppContext = React.createContext();</p>
<p>   export default AppContext;</p>
</blockquote>
</li>
</ol>
<ol start="2">
<li>Global variables를 선언한다.<blockquote>
<p>   // App.js
 import React, { useState } from &#39;react&#39;;
 import AppContext from &#39;./components/AppContext&#39;;</p>
</blockquote>
 export const App = () =&gt; {
   // Define as many global variables as your app needs, and hooks 
   // to set the state of the variable.<blockquote>
</blockquote>
   const [setting1value, setSetting1value] = useState(&#39;initialValue1&#39;);
   const [setting2value, setSetting2value] = useState(false);</li>
</ol>
<p>Global variables와 그 상태를 update할 Hooks는 컴포넌트 트리의 가장 최상위인 App.js에 선언한다.</p>
<ol start="3">
<li><p>Global variables를 update할 functions를 선언한다.</p>
<blockquote>
<p>   // App.js continued
 // For each global variable, define a function for updating it.
 // In the case of setting1value, we’ll just use setSetting1value.
 // If we want to toggle setting2value, we can create a function to do so...</p>
</blockquote>
<p> const toggleSetting2 = () =&gt; {
   setting3 ? setSetting2(true) : setSetting2value(false);
 };</p>
</li>
<li><p>Object를 생성한다.</p>
<blockquote>
<p>   // App.js continued
 const userSettings = {
   setting1name: setting1value,
   setting2name: setting2value,
   setSetting1value,
   toggleSetting2,
 };</p>
</blockquote>
</li>
</ol>
<p>Global variables와 그것들을 update하기 위한 functions를 hold할 object를 생성한다.</p>
<ol start="5">
<li>App을 context provider로 감싼다.<blockquote>
<p>   // App.js continued
 return (
   &lt;AppContext.Provider value={userSettings}&gt;</p>
<pre><code> {/* All other components are wrapped by the AppContext.Provider */}</code></pre><p>   &lt;/AppContext.Provider&gt;
 );</p>
</blockquote>
</li>
</ol>
<p>&#39;AppContext.Provider&#39;로 App의 모든 컴포넌트를 감싸고 value로 &#39;userSettings&#39; object를 props로써 넘겨준다.</p>
<ol start="6">
<li><p>context에 접근하여 전역 변수 사용하기.</p>
<blockquote>
<p>   // components/MyComponent.js
 import { useContext } from &#39;react&#39;;
 import AppContext from &#39;./AppContext&#39;;</p>
</blockquote>
<p> export const myComponent = () =&gt; {
   // Get the global variables &amp; functions via context
   const myContext = useContext(AppContext);</p>
</li>
<li><p>context에 접근하여 전역 변수 사용하기.</p>
<blockquote>
<pre><code>import React, { useContext } from &quot;react&quot;;
import { TextInput } from &quot;react-native&quot;;
import AppContext from &quot;./AppContext&quot;;

export const MyTextInput = () =&gt; {
  // Get the global variables &amp; functions via context
  const myContext = useContext(AppContext);</code></pre><p>   return (</p>
<pre><code>    &lt;TextInput
      value={myContext.setting1value}
      onChangeText={myContext.setSetting1value}
    /&gt;</code></pre><p>   );
 };</p>
</blockquote>
</li>
</ol>
<p>자식 컴포넌트는 context에서 전달된 함수를 사용하여 global context를 update할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[다층 퍼셉트론(Multi-layer Perceptron, MLP)]]></title>
            <link>https://velog.io/@tobe-honest/%EB%8B%A4%EC%B8%B5-%ED%8D%BC%EC%85%89%ED%8A%B8%EB%A1%A0Multi-layer-Perceptron-MLP</link>
            <guid>https://velog.io/@tobe-honest/%EB%8B%A4%EC%B8%B5-%ED%8D%BC%EC%85%89%ED%8A%B8%EB%A1%A0Multi-layer-Perceptron-MLP</guid>
            <pubDate>Sun, 29 Aug 2021 16:59:57 GMT</pubDate>
            <description><![CDATA[<h2 id="nnneural-network">NN(Neural Network)</h2>
<h4 id="-인공지능의-수학적-수식들이-우리-뇌의-뉴런으로-모사할-수-있기에-nn이라는-이름이-붙음">-&gt;인공지능의 수학적 수식들이 우리 뇌의 뉴런으로 모사할 수 있기에 NN이라는 이름이 붙음</h4>
<h3 id="nn--perceptron--선형-분류기--feedforwardnetwork">NN := Perceptron := 선형 분류기 := FeedForwardNetwork</h3>
<br>

<h3 id="activation-function">Activation function</h3>
<h4 id="--주어진-신호를-0과-1로-만들어-내기-위한-함수">-&gt; 주어진 신호를 0과 1로 만들어 내기 위한 함수</h4>
<h3 id="mlp">MLP</h3>
<h4 id="--logistic-regression-units을-쌓아서-만들-수-있음">-&gt; Logistic regression units을 쌓아서 만들 수 있음</h4>
<h3 id="backpropagation">Backpropagation</h3>
<h4 id="--역방향으로-오차를-전파시키면서-각층의-가중치를-업데이트하고-최적의-학습결과를-찾아가는-방법">-&gt; 역방향으로 오차를 전파시키면서 각층의 가중치를 업데이트하고 최적의 학습결과를 찾아가는 방법</h4>
<h3 id="perceptron">Perceptron</h3>
<h4 id="입력층과-출력층-사이의-은닉층이-하나인-신경망을-의미함">입력층과 출력층 사이의 은닉층이 하나인 신경망을 의미함</h4>
<p><img src="https://images.velog.io/images/tobe-honest/post/9a2c1497-f2db-4fc6-afd5-e7cd68ecc44a/Perceptrons.jpeg" alt=""></p>
<p><br><br></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[선형회귀]]></title>
            <link>https://velog.io/@tobe-honest/%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80</link>
            <guid>https://velog.io/@tobe-honest/%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80</guid>
            <pubDate>Sun, 29 Aug 2021 15:47:53 GMT</pubDate>
            <description><![CDATA[<h1 id="linear-regression-선형회귀">Linear regression ;선형회귀</h1>
<h2 id="1-hypothesis">1. Hypothesis</h2>
<h2 id="2-cost-function">2. Cost function</h2>
<h2 id="3-gradient-descent">3. Gradient descent</h2>
<h1 id="multivariable-linear-regression">Multivariable Linear regression</h1>
<h2 id="1-hypothesis-1">1. Hypothesis</h2>
<h2 id="2-cost-function-1">2. Cost function</h2>
<p><br><br><br></p>
<h2 id="linear-regression">Linear regression</h2>
<h3 id="연속적인-숫자를-예측하는-task">연속적인 숫자를 예측하는 task</h3>
<h3 id="입력값과-정답값을-통해-선을-그려서-새로운-입력값이-나오면-그-선으로-부터-새로운-입력에-대한-정답을-유추함">입력값과 정답값을 통해 선을 그려서 새로운 입력값이 나오면 그 선으로 부터 새로운 입력에 대한 정답을 유추함</h3>
<br>

<h3 id="hypothesis-가설-설정">Hypothesis (가설 설정)</h3>
<h4 id="hx--wx--b-linear-hypothesis---1차-방정식">H(x) = Wx + b (Linear Hypothesis) -&gt; 1차 방정식</h4>
<blockquote>
<h4 id="함수의-답과-실제-정답의-차이가-적은-hypothesis가설이-좋은-가설임">함수의 답과 실제 정답의 차이가 적은 Hypothesis(가설)이 좋은 가설임</h4>
</blockquote>
<h4 id="w와-b가-모델의-파라미터">W와 b가 모델의 파라미터</h4>
<br>

<h3 id="cost-function-손실-함수">Cost function (손실 함수)</h3>
<h4 id="cost-function--loss-function--objective-function">cost function = Loss function = Objective function</h4>
<blockquote>
<h4 id="costwb--hx---y-predict---gt">cost(W,b) = H(x) - y (Predict - GT)</h4>
</blockquote>
<h4 id="함수의-답과-실제-정답의-차이를-의미하며-앞서-얘기한것-처럼-cost가-작으면-작을-수록-좋은-가설이며-cost는-작을-수록-좋음">함수의 답과 실제 정답의 차이를 의미하며 앞서 얘기한것 처럼 cost가 작으면 작을 수록 좋은 가설이며 cost는 작을 수록 좋음</h4>
<blockquote>
<h4 id="cost--frac1msum_i1mhxi---yi2">cost = $\frac{1}{m}$$\sum_{i=1}^m(H(x^{(i)}) - y^{(i)})^2$</h4>
<p>전체 Sample의 평균 cost를 구함</p>
</blockquote>
<br>

<h3 id="목표">목표</h3>
<blockquote>
<p>$minimize_{W,b};cost{(W,b)}$</p>
</blockquote>
<h3 id="결국-가장-작은-cost값을-갖게-하는-w와b를-찾는것이-선형회귀의-솔루션을-구하는-방법">결국 가장 작은 cost값을 갖게 하는 W와b를 찾는것이 선형회귀의 솔루션을 구하는 방법</h3>
<p><br><br></p>
<h3 id="gradient-descent-algorithms-경사-하강-알고리즘">Gradient descent algorithms (경사 하강 알고리즘)</h3>
<h4 id="minimize-cost-function">&gt; minimize cost function</h4>
<h4 id="gradient-descent-is-used-many-minimization-problems">&gt; Gradient descent is used many minimization problems</h4>
<h4 id="for-a-given-cost-function-costwb-it-will-find-w-b-to-minimize-cost">&gt; For a given cost function cost(W,b), it will find W, b to minimize cost</h4>
<h4 id="it-can-be-applied-to-more-general-function-costw1-w2-">&gt; It can be applied to more general function: cost(w1, w2, ...)</h4>
<p><br><br></p>
<h3 id="linear-regression-cost-function-graph">&lt; Linear regression cost function graph &gt;</h3>
<blockquote>
<p><img src="https://images.velog.io/images/tobe-honest/post/f58ce0fb-76dc-425d-93ce-bcda283fa36c/%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80%20cost%20function%20graph.png" alt=""></p>
</blockquote>
<h4 id="cost-function의-수식에서-wxb---y만-봤을-때-x와-y는-상수일-때-w2-형태를-갖기-때문에-2차-그래프가-그려짐">cost function의 수식에서 (Wx+b - y)만 봤을 때 x와 y는 상수일 때 $W^2$ 형태를 갖기 때문에 2차 그래프가 그려짐</h4>
<br>

<h4 id="기울기가-0이-될-때-까지-w값을-조정함"><del>&gt; 기울기가 0이 될 때 까지 $W$값을 조정함</del></h4>
<blockquote>
<h4 id="기울기가-0이-될-때-까지-w를-조정하지만-w가-더-이상-변하지-않는-cost를-구함">기울기가 0이 될 때 까지 $W$를 조정하지만 $W$가 더 이상 변하지 않는 cost를 구함</h4>
</blockquote>
<h4 id="즉-w값이-더-이상-변하지-않을-때-까지-gradient-descent-algorithm을-반복">즉, $W$값이 더 이상 변하지 않을 때 까지 Gradient descent Algorithm을 반복</h4>
<h4 id="기울기는-미분을-통해서-구할-수-있음">기울기는 미분을 통해서 구할 수 있음</h4>
<br>

<h3 id="foramal-definition-of-gradient-descent-algorithm">&lt;Foramal definition of &quot;Gradient Descent Algorithm&quot;&gt;</h3>
<blockquote>
<p>$W_{t+1} := W_{t} - \alpha\frac{\sigma}{\sigma W_{t}}cost(W_{t})$</p>
</blockquote>
<h4 id="fracsigmasigma-w_tcostw_t--기울기">$\frac{\sigma}{\sigma W_{t}}cost(W_{t})$ : 기울기</h4>
<p>*<em>보통 $\alpha$는 0.1이나 0.01과 같은 값</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인공지능이란]]></title>
            <link>https://velog.io/@tobe-honest/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@tobe-honest/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Sat, 28 Aug 2021 12:16:10 GMT</pubDate>
            <description><![CDATA[<h1 id="기존-프로그래밍-vs-인공지능">기존 프로그래밍 vs 인공지능</h1>
<h3 id="기존-sw자료구조-알고리즘">기존 SW(자료구조, 알고리즘)</h3>
<h4 id="--최적의-솔루션을-프로그래머가-찾아-직접-해당-솔루션을-코딩한다">-&gt; 최적의 솔루션을 프로그래머가 찾아 직접 해당 솔루션을 코딩한다</h4>
<h3 id="인공지능">인공지능</h3>
<h4 id="--데이터와-task-classification-regression-등-모델을-지정해주면-최적의-솔루션을-기계가-찾아준다">-&gt; 데이터와 task (classification, regression 등) 모델을 지정해주면 최적의 솔루션을 기계가 찾아준다</h4>
<h3 id="기계가-배우는-것">기계가 배우는 것</h3>
<h4 id="task별-모델선형-회귀-선형-분류-등을-학습">Task별 모델(선형 회귀, 선형 분류 등)을 학습</h4>
<h4 id="모델의-파라미터를-학습">모델의 파라미터를 학습</h4>
<p>그렇다면 <strong>학습</strong>이란 무엇일까 ?</p>
<h3 id="학습이란">학습이란</h3>
<h4 id="사람이-다양한-경험을-통해서-지식이-성장해-가는-것을-의미하며-경험-지식-성장-각각은-다음과-같이-이해를-하면-된다">사람이 다양한 <strong>경험</strong>을 통해서 <strong>지식</strong>이 <strong>성장</strong>해 가는 것을 의미하며 경험, 지식, 성장 각각은 다음과 같이 이해를 하면 된다</h4>
<h4 id="경험--입력할-데이터와-그에-따른-정답class-label">경험 : 입력할 데이터와 그에 따른 정답(class label)</h4>
<h4 id="작업-목표지식--결정한-task-모델영상-분류-음성-분류">작업 목표(지식) : 결정한 task 모델(영상 분류, 음성 분류)</h4>
<h4 id="성능-지표성장--정답에-가까운-솔루션을-찾아가고-있는-것인지-평가">성능 지표(성장) : 정답에 가까운 솔루션을 찾아가고 있는 것인지 (평가)</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[Instance-aware Image Colorization]]></title>
            <link>https://velog.io/@tobe-honest/Instance-aware-Image-Colorization</link>
            <guid>https://velog.io/@tobe-honest/Instance-aware-Image-Colorization</guid>
            <pubDate>Sun, 28 Mar 2021 14:02:14 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>  Colorful Image Colorization에서 garyscale을 통해 그럴듯한 Colorization 결과를 가져왔지만 여러개의 object가 있는 이미지에서는 그럴듯한 Colorizaition 결과를 가져오지 못하고 실패했습니다.</p>
<p>  이러한 결과가 나오는 이유는 기존 모델이 <code>전체 이미지에 대해서 colorization</code>하기 때문입니다. </p>
<p>  그렇기에 figure와 ground가 명백히 나뉘지 않으면 이 모델은 object-level에서의 의미있는 semantics를 효과적으로 찾거나 학습할 수 없습니다.</p>
<p>그래서 본 논문에서는 Instance-aware colorization(object와 background를 명확히 나누어 colorization)을 성공하기 위한 방법을 제안합니다.</p>
<h1 id="contribution">Contribution</h1>
<p>Object와 background를 명확히 나누기 위해서는 object가 어디있는지를 알고 있으면 됩니다.</p>
<p>그렇기에 본 논문에서는 미리 학습된 object detector를 사용하여 object를 찾고 찾은 object에 대한 colorization을 합니다.</p>
<p>그럼 object에 대해서는 colorization이 되었고 이를 이미지 전체에 대한 colorization과 합친다면 배경과 object에 대한 완전한 colorization이 완성되는 것입니다. </p>
<p>이 부분에 대해서는 뒤에서 설명하겠습니다.</p>
<p>앞서 말한 것들을 정리해서 말하자면 다음과 같습니다.</p>
<pre><code>1) 사전 학습된 detection모델로 object instance를 검출하고 이를 통해 cropped된 object의 이미지를 만든다.
2) 이미지 전체에 대한 네트워크와 object에 대한 네트워크 각각의 학습을 한다.
3) 2에서 학습한 두 네트워크에서 추출한 feature map을 Fusion한다.</code></pre><p>이를 머리 속에 두고 조금 더 자세히 알아보겠습니다.</p>
<h1 id="full-image-colorization--instance-colorization">Full-image Colorization &amp; Instance Colorization</h1>
<p><img src="https://images.velog.io/images/tobe-honest/post/abde48f7-e28a-4186-af8e-793a220ca9b7/image.png" alt=""></p>
<p>이미지 전체에 대해 Colorization을 하는 네트워크와 Object에 대해 Colorization을 하는 네트워크가 어떻게 동작 되는지에 대한 이미지입니다.</p>
<p>우선 입력으로 주어진 grayscale 이미지 X가 주어졌을 때, 모델은 사전학습 된 detection model을 이용해 X에 대해서 bounding box(Bi)를 찾기 시작합니다.</p>
<p>그 다음 탐지된 모든 object(Xi)를 잘라내고 Instance network에서 Xi를 colorization 하기 위해 사용됩니다.</p>
<p>하지만 Instance의 색상이 예측된 배경의 색과 양립할 수 없을 가능성이 있으므로 본 논문에서는 제안하는 Fusion module을 사용하여 추출된 전체 이미지 feature map과 모든 layer에서의 모든 Instance feature map을 fusion하는 것을 제안합니다.</p>
<h1 id="fusion-module">Fusion module</h1>
<p><img src="https://images.velog.io/images/tobe-honest/post/967f9b22-e83a-4597-bbbd-2cdab63bf9f0/image.png" alt=""></p>
<p>Fusion module의 input은 2가지 입니다.</p>
<p>(1)전체 이미지에 대해 학습하는 네트워크로 부터의 feature(f<sub>j</sub><sup>X</sup>)</p>
<p>(2)object에 대해 학습하는 네트워크로 부터 feature(f<sub>j</sub><sup>X<sub>i</sub></sup>)와 그에 대응하는 bounding boxes(B<sub>i</sub>)</p>
<p><del>f<sub>j</sub><sup>X</sup>과 각각의 object에 대한 feature인 <sub>j</sub><sup>X<sub>i</sub></sup>를 합치기 위해object의 위치와 크기가 정의된 B<sub>i</sub>를 이용합니다.</del></p>
<p>Fusion module에서 하는 일은 다음과 같습니다.</p>
<ul>
<li><p>3개의 convolutional layers로 구성된 작은 network를 통해 W<sub>F</sub>와 W<sub>I</sub><sup>i</sup>를 예측합니다.</p>
</li>
<li><p>그 다음 f<sub>j</sub><sup>X<sub>i</sub></sup>와 f<sub>j</sub><sup>X<sub>i</sub></sup>의 weight map(W<sub>I</sub><sup>i</sup>)를 f<sub>j</sub><sup>X</sup>과 f<sub>j</sub><sup>X</sup>의 weight map(W<sub>F</sub>)의 사이즈에 맞게 resize합니다.
(이 때, padding은 0을 사용하고, resize된 f<sub>j</sub><sup>X<sub>i</sub></sup>와 W<sub>I</sub><sup>i</sup>를 각각 f&amp;#772<sub>j</sub><sup>X<sub>i</sub></sup> W&amp;#772<sub>I</sub><sup>i</sup>라 합니다.)</p>
</li>
<li><p>그 후 모든 weight map을 쌓고, 각각의 픽셀에 대해 softmax를 적용한 뒤, 아래에 나오는 식과 같이 weighted sum을 하여 fused feature를 얻을 수 있습니다.</p>
</li>
</ul>
<p>(N : instance의 수)</p>
<p><img src="https://images.velog.io/images/tobe-honest/post/b12ccda7-35c6-4231-9d05-b6804f83991f/image.png" alt=""></p>
<h1 id="loss-function-and-training">Loss Function and Training</h1>
<p>본 논문에서 사용한 Loss Function은 Smooth-L1이고 δ=1이다. 
(Real-Time User-Guided Image Colorization with Learned Deep Priors &lt;- 해당 논문에서 사용한 Loss function을 따라서 사용했다고 함.)
<img src="https://images.velog.io/images/tobe-honest/post/452954b0-92ed-43e0-8fa0-00fd8357b853/image.png" alt=""></p>
<p>모델을 학습하는 순서는 다음과 같다. </p>
<pre><code>1) full-image colorization을 학습시킨다
2) 1에서 학습된 모델의 weight로 Instance model을 초기화 한 뒤, 학습시킨다.
3) 마지막으로 1,2에서의 모델의 weight를 fusion module로 가져와서 학습시킨다.</code></pre><h1 id="result">Result</h1>
<h3 id="evaluation-metrics">Evaluation metrics.</h3>
<p>기존 Colorization methods에 의한 실험 평가방법을 따라, Colorization 품질을 정량화하기 위해 PSNR과 SSIM으로 평가를 했습니다. </p>
<p>Color 이미지에서 SSIM을 계산하기 위해 각각의 채널에서 계산된 SSIM 값의 평균을 구합니다. </p>
<p>추가적으로 지각 측정지표 LPIPS를 추가로 사용합니다.</p>
<hr>
<p>full-image level 에서의 정량적 평가
<img src="https://images.velog.io/images/tobe-honest/post/91509d38-e3c0-41bd-b446-a50ef6548fc6/image.png" alt=""></p>
<hr>
<p>instance level 에서의 정략적 평가
<img src="https://images.velog.io/images/tobe-honest/post/c7eecdbd-867b-4412-9ca5-d453011c2121/image.png" alt=""></p>
<hr>
<p>LPIPS는 신호가 가질 수 있는 최대 신호에 대한 잡음의 비를 나타내며 이미지 또는 영상 분야에서 생성 혹은 압축된 영상의 화질에 대한 손실 정보를 평가하기 위한 목적으로 사용한다. s는 영상에서의 최대 값으로서 해당 채널의 최댓값에서 최솟값을 뺀 값이다. 예를 들면 8-bit Gray 이미지일 경우 255(255-0)가 된다. 단위는 데시벨[db]을 사용하며 , 손실이 적을수록 높은 값을 가진다. 무손실 영상의 경우 MSE가 0 이 되기 때문에 PSNR은 정의되지 않는다.</p>
<p>SSIM은 수치적인 에러가 아닌 인간의 시각적 화질 차이 및 유사도를 평가하기 위해 고안된 방법이다. 사람의 시각 시스템은 이미지의 구조 정보를 도출하는데 특화되어 있기 때문에 구조 정보의 왜곡 정도가 지각에 큰 영향을 미친다는 것이 SSIM의 핵심 가설이다. 원본 이미지 A와 왜곡된 이미지 B 가 있다고 할 때 SSIM은 두 이미지의 휘도, 대비, 및 구조를 비교한다.</p>
<p><del>이게 detectron으로 object 탐지하고 탐지한 object를 crop해서 그 crop된 이미지에 있는 object에 대해 colorization하는 것 같은데 더 자세하게 세세하게 object를 colorization할거면 detection말고 segmentation이 낫지 않은가?
detectron이 segmentation보다 성능이 좋아서인가 ?</del></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Colorful Image Colorization]]></title>
            <link>https://velog.io/@tobe-honest/Colorful-Image-Colorization</link>
            <guid>https://velog.io/@tobe-honest/Colorful-Image-Colorization</guid>
            <pubDate>Sun, 21 Mar 2021 14:42:21 GMT</pubDate>
            <description><![CDATA[<p><strong>keywords : self-supervised representation learning, colorization</strong>
<H1>Abstract</H1></p>
<p><code>Grayscale</code>의 이미지가 입력으로 들어왔을 때, <code>그럴듯한 착각</code>을 줄 수 있는 Colorization 결과가 나오는데 그러한 결과를 만들어내는 문제를 다루는 논문입니다.</p>
<blockquote>
<p>쉽게 말하자면 <code>회색빛이 도는 desaturated</code>하게 나오는 현상(?)을 해결하겠다는 이야기이다.</p>
</blockquote>
<p>이전까지의 방법들은 사용자와 상호작용에 크게 의존하거나 회색빛이 도는<code>desaturated colorizations</code>의 결과를 가져옵니다.
<img src="https://images.velog.io/images/tobe-honest/post/fbf728b1-3a53-498a-b8b1-a902a1ffc724/image.png" alt=""></p>
<p>이 논문에서는 이런 desaturated하게 colorization 되는 문제를 <code>classification</code>으로 해결할 것이고 학습 할 때 클래스 <code>rebalancing</code>을 통해 결과로 나오는 색의 다양성을 증가시킬 것이라고 합니다.</p>
<p><del>++ 테스트 시에는 CNN에서 feed forward pass로 구현되며 100만개 이상의 컬러 영상에 대해 학습된다.</del></p>
<H1>Introduction</H1>
<H3>이 논문의 궁극적인 목표는 GT와 완벽하게 같은 사진을 만드는 것이 아니라 사람을 속일 수 있는 <a style=color:red>"그럴듯한"</a>사진을 만드는 것입니다.</H3>

<p><del>시각적으로 설득력 있는 결과를 도출하기 위해 grayscale의 semantic, texture와 색상 version 사이의 통계적 의존성을 충분히 model한다.</del></p>
<p><del>&gt;우리가 글을 읽을 때 문맥을 파악하고 글을 이해하는 것 처럼 사진도 주어진 상황을 파악하여 사진을 이해한다.</del></p>
<p>우선 모델은 lightness channel L로 Lab color sapce에서 이미지의 a,b color channel을 예측합니다.</p>
<p>(색을 예측 한다는 것은 어떠한 색의 이미지도 train data로 사용 될 수 있기에 제약이 없다는 nice한 특성을 갖습니다.)</p>
<blockquote>
<p>어떤 색의 이미지이던 이미지의 L채널을 입력으로 a,b 채널을 정답으로 가져가면 train data로 사용할 수 있다는 것.</p>
</blockquote>
<p>방금 Lab color space라는 말을 했는데 이것에 대해 조금 설명을 해보겠습니다.
Lab color space는 인간의 시각에 대한 연구를 바탕으로 정의된 것으로 L은 밝기, a와 b가 실질적인 색을 나타냅니다.</p>
<p>L값은 0~100사이이며 값이 커질수록 검은색에 가까워 집니다.
a값은 빨강과 초록 중 어느쪽으로 치우쳤는지를 나타냅니다. 값이 음수이면 초록에 치우친 색깔이며, 양수이면 빨강/보라 쪽으로 치우친 색입니다. b값은 노랑과 파랑을 나타냅니다. 값이 음수이면 파랑이고 양수이면 노랑입니다.</p>
<p>이전의 연구들은 색을 예측하기 위해서 <code>CNN</code>에서 학습되었습니다. 하지만 그로 부터 나온 결과는 <code>desaturated</code>했습니다.</p>
<p>사실 이런 문제는 conservative한 예측의 loss 함수를 사용하기 때문에 발생합니다. (일반적인 regression 문제로 부터 발생함.)</p>
<p>색을 예측 하는 것은 본질적으로 multimodal이라 할 수 있습니다. 예를 들어 바나나는 익기 전에는 초록색, 익은 후에는 노랑색을 갖는데 이렇게 2가지 modal을 갖기 때문에 multimodal하다고 할 수 있습니다.</p>
<p>문제의 multimodal을 적절히 model하기 위해, 각 픽셀의 가능한 색의 분포를 예측합니다.
또한 rare한 색을 보다 더 잘 표현하기 위해 학습할 때, loss를 re-weight한다.</p>
<blockquote>
<p>앞서 말한 것과 같이 한 물체나 배경은 여러 종류의 색을 갖을 수 있기 때문에 각 픽셀에서 나타낼 수 있는 색의 분포를 예측하는 것입니다.</p>
</blockquote>
<p>이러한 방법은 모델이 학습되는 많은 양의 데이터에서의 완전한 다양성을 이용할 수 있게 합니다. 마지막으로, 분포의 annealed-mean을 이용하여 마지막 colorization을 생성합니다. 그 결과는 이전 방법들 보다 더 생생하고 시각적으로 진짜같아 보인다.</p>
<p>이 논문은 앞서 말한 것 처럼 사람에게 &quot;그럴듯&quot;하게 보이는 이미지를 만드는 것이 목표이기 때문에 평가도 실제로 사람에게 진행했다.
<code>결과로 32%의 참가자를 속이는데 성공했다.</code>
그리고 이 테스트는 본 논문의 알고리즘이 거의 실제와 근접한 결과 즉, &quot;그럴듯한&quot; 이미지를 만들어 낸다는 것을 보여줍니다.</p>
<p>추가로 본 논문에서 제안한 방법으로 나온 결과를 이용해 downstream object classification task에서 사용해도 될 정도로 realistic하다는 것을 보여줍니다.</p>
<p>이전의 work들과 최근 연구인 self-supervision algorithms와 비교를 했을 때 성능 훨씬 잘 나왔다. 또한 다양한 평가방법에서 sota를 기록했습니다.</p>
<H2>이전의 colorization 연구</H2>
<H3>비모수 방법과 모수 방법(None Parametric & Parametric)</H3>

<blockquote>
<p><strong>비모수 방법</strong> : <strong>입력 grayscale image가 지정된</strong> 비모수 방법은 먼저 소스 데이터로 사용할 하나 이상의 <strong>색상 참조 이미지(사용자가 제공하거나 자동으로 검색)</strong>를 정의합니다.
그런 다음 <strong>Image Analogies(영상 아날로그) 프레임워크</strong>에 따라 <strong>색상이 기준 영상의 유사한 영역에서 입력 영상으로 전송</strong>됩니다.</p>
</blockquote>
<blockquote>
<p><strong>모수 방법</strong> : 파라메트릭 방법은 학습 시 컬러 이미지의 대규모 데이터 셋에서 <strong>예측 함수를 학습</strong>하여 문제를 <strong>연속적인 색 공간에 대한 회귀</strong> 또는 <strong>정량화된 색 값의 분류</strong>로 간주한다.</p>
</blockquote>
<p><del>우리의 방법은 또한 색상을 분류하는 방법을 배우지만, 더 큰 모델로 그렇게 하고, 더 많은 데이터에 대해 훈련되며, 손실 함수와 최종 연속 출력에 매핑하는 몇 가지 혁신으로 그렇게 한다.</del></p>
<H2>현재의 colorization 연구</H2>
본 논문이 쓰여질 당시, 대규모 데이터와 CNN을 활용하는 유사한 시스템을 개발하는 연구들이 있었습니다. 본 논문에서는 rare classes를 rebalance하는 classification loss를 사용했지만 다른 연구들에서는 un-rebalance 한 classification loss를 사용하거나, regression loss를 사용하였습니다.


<p>본 논문에서는 single-stream 구조를 사용했으며, VGG network에 depth와 dilated convolutions를 추가하여 사용했습니다.
<img src="https://images.velog.io/images/tobe-honest/post/9429f015-e44c-4215-96af-e4a9ed09693b/image.png" alt=""></p>
<p>본 논문에서 제안한 네트워크의 구조입니다. 각각의 conv layer는 convolution 과 RELU가 2~3번씩 반복되고, batchnormalization도 있습니다. 이 네트워크의 특징이라면 특징인것이 있는데 그것은 바로 pool layer가 없다는 것입니다. resolution을 downsampling 하거나 upsampling하는 모든 과정은 conv blocks를 통해서 진행됩니다.</p>
<p><del>(conv layer와 pool의 차이점은 정확하게 뭘까?)</del>
<del>conv layer는 파라미터가 있음 =&gt; 학습을 한다는 의미
pool layer는 파라미터가 없음 =&gt; 학습을 안한다는 의미.</del></p>
<p>CNN이 위 그림에 표시된 구조를 사용하여 grayscale 입력에서 정량화된 색상 값 출력에 대한 분포로 mapping하도록 학습합니다.</p>
<H2>Objective Function</H2>
(H,W,1)의 lightness channel에서, (H,W,2)인 2개의 컬러채널과 관련된 Yhat을 mapping하는 함수를 학습하는 것이 목표입니다.

<blockquote>
<p>색 분포에서 가능한 색을 찾는다는 의미로 생각하면 됨.</p>
</blockquote>
<p>만약 어떤 object가 구별되는 ab값을 취할 수 있다면, 유클리드 loss에 대한 최적의 해결책은 ab의 평균이 될 것입니다.
<img src="https://images.velog.io/images/tobe-honest/post/43640945-2572-4967-9c44-a44897d70b80/image.png" alt=""></p>
<p>그렇지만 색상 예측에서 이 평균을 이용한 유클리드 loss는 회색빛이 도는 desaturated한 결과를 야기합니다.</p>
<p>이러한 loss는 Colorization 문제의 고유한 모호성과multimodal 특성에 대해 강인하지 않습니다.</p>
<p><img src="https://images.velog.io/images/tobe-honest/post/0ff48d9a-cacd-461d-8493-e51d37fd7ab7/image.png" alt=""></p>
<p>ab값이 나타낼 수 있는 색의 개수를 Q라 하고, Zhat을 그런 가능한 색에 대한 확률적 분포라 할 때,입력 X에 대해 Zhat을 mapping하는 것을 학습합니다.</p>
<p>이렇게 예측한 Zhat과 GT를 비교하려면 같은 형태가 되어야 하기에 GT도 이런 분포를 띄는 벡터로 바꿔줍니다. </p>
<p><img src="https://images.velog.io/images/tobe-honest/post/7ada24a0-1c68-45e4-8866-a8500c56af4d/image.png" alt=""></p>
<p>GT인 이미지 Y를 분포벡터 Z로 바꾸는 함수를 위와 같이 정의합니다.</p>
<p>본 논문은 다음과 같은 loss 함수를 사용하여 앞서 말한 두 값의 loss를 구합니다.
<img src="https://images.velog.io/images/tobe-honest/post/4b6b2837-3e3e-45ac-9204-c503b77729d5/image.png" alt=""></p>
<p>이 식에서 v()는 색의 rare함에 따른 weighting term으로 rare한 색의 class를 rebalance할 수 있습니다.</p>
<H2>Class rebalancing</H2>
natural한 이미지에 대해서 ab값의 분포는 낮은 값으로 편향되어 있습니다. 이러한 결과는 구름, 포장도로, 흙, 벽과 같은 배경들이 낮은 값을 갖고 있기 때문입니다. 

<p><img src="https://images.velog.io/images/tobe-honest/post/52429e8c-1376-414d-a2ba-4f53eb79ad32/image.png" alt=""></p>
<p>사진에 보이는 것과 같이 가운데에 많은 확률이 분포하고 있습니다. 이것은 결국 desaturated하게 될 확률이 높다는 의미가 됩니다. 이러한 색의 불균형을 해결하기 위해 학습 시 각 픽셀이 가지는 색의 rarity를 기반으로 loss를 reweighting하는 방법을 사용합니다.</p>
<p>각 픽셀은 그 픽셀과 가장 가까운 ab bin(픽셀을 이야기 하는 것 같음)의 weight를 기반으로 reweight됩니다.</p>
<H2>Class Probabilities to Point Estimates</H2>
예측한 분포벡터 Zhat을 ab space에 있는 한 점인 Yhat 으로 mapping하는 함수인 H를 구해야합니다.
방법은 2가지가 있고 하나는 각 픽셀에 대한 예측된 분포의 mode를 취하는 방법이고 다른 방법은 mean을 취하는 것입니다. 

<p>mode를 취하는 방법은 선명하게 보일 수 있지만 중간중간에 전혀 관계없는 색이 채워질 수 있습니다.</p>
<p>반면에 mean을 취하는 방법은 전혀 관계없는 색이 나오지는 않지만 desaturated한 결과를 가져옵니다.</p>
<p>그렇다면 두 방법의 중간점을 구하면 중간중간 관계없는 값이 나오는 현상과 desaturated한 현상을 해결할 수 있지 않을까? 라는 생각이 듭니다.</p>
<p>그래서 두 방법에서의 중간점을 찾기 위해 softma 분포의 온도 T를 조정하고 결과의 평균을 구하여 interpolate합니다.
일단 식은 다음과 같습니다.</p>
<p><img src="https://images.velog.io/images/tobe-honest/post/1fa377ae-e570-4682-b7af-08e80aedf97b/image.png" alt=""></p>
<p>이 개념은 현실에서 물리적인 담금질을 하는 과정으로 부터 나온 개념이며 담글질은 금속을 뜨겁게 달구었다가 천천히 냉각시키면서 강화시키는 것 
입니다.</p>
<p>물리적 담금질로 부터 만들어진 개념이기 때문에 온도 T라는 변수가 있는 것이고 이 온도 T를 1로 설정하면 분포가 변하지 않고, T를 낮출수록 더 강한(desaturated하지 않은) 분포가 형성됩니다. 그리고 T가 0이면 앞서 말한 Mode에서의 분포가 됩니다.</p>
<p><img src="https://images.velog.io/images/tobe-honest/post/b1753ed9-230c-43b1-973f-803fb7e44a2f/image.png" alt=""></p>
<p>본 논문에서는 T값이 0.38일 때 최적의 분포가 나온다고 합니다.</p>
<H2>Result</H2>

<p><img src="https://images.velog.io/images/tobe-honest/post/8876512f-6368-4c66-8d16-bc111f21334b/image.png" alt=""></p>
<p>앞서 얘기했던 regression을 포함한 다른 방법들과의 차이를 보여주는 결과입니다.</p>
<p><img src="https://images.velog.io/images/tobe-honest/post/8b49f91a-00a8-49f3-a810-021c1be705f6/image.png" alt=""></p>
<p>평가 방법은 Perceptual realism(AMT), Semantic interpretability (VGG classification), Raw accuracy(AuC) 3가지로 나뉘어집니다. 하지만 이 논문에서는 진짜같은 &#39;그럴듯한&#39; 이미지를 만드는 것이 목적이기에 AMT가 이 논문에서 만들어낸 결과에 대한 조금 더 정확한 평가라고 할 수 있습니다. </p>
<p>AMT(Amazon Mechanical Turk)는 사람에게 직접 평가를 하게 하는 방법이며 실험에 참가한 사람에게 GT 이미지와 모델이 만들어낸 이미지를 보여주고 둘 중 진짜를 찾게 하는 것이다. 물론 사진은 1초만 보여줬다고 합니다.</p>
<p>이 방법을 사용하였을 때가 다른 평가 방법보다 본 논문에서 제안한 모델에 대한 성능이 제일 좋게 나온다. 당연한 결과라 생각한다.</p>
<p>결론</p>
<p>사람이 보기에 &#39;그럴듯한&#39; 사진을 만들기에 성공했다.
근데 갑자기 생각난 것인데 Colorization과 GAN이 다른 방식이지만 이렇게 사람이 보기에 input으로 들어가는 이미지와 같게 보이게 하는 것이 목적이라면 GAN이 더 나을 수 있겠다는 생각도 들었다. 물론 GAN에 대해 아직은 잘 모른다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Characters]]></title>
            <link>https://velog.io/@tobe-honest/Characters</link>
            <guid>https://velog.io/@tobe-honest/Characters</guid>
            <pubDate>Tue, 16 Mar 2021 18:10:38 GMT</pubDate>
            <description><![CDATA[<p>이번 글은 Characters와 ASCII Code에 대해 다루어 보겠습니다.
<H1>Characters</H1></p>
<p>
Character란 상징적으로 쓰이는 것입니다. 영어의 경우 각각의 Character는 single byte로 표현 할 수 있습니다. 다른 언어는 2byte나 그 이상으로 표현이 가능하다고 하네요.
</p>
<p>
Character는 알파벳 대문자, 소문자, 한 자리 숫자, 혹은 부등호와 같은 기호들 포함합니다. 그렇기에 여러가지 Character를 합치면 사람이 읽을 수 있게 만들 수 있습니다.
</p>
<p>
  Character는 char ch; 와 같이 선언 할 수 있습니다. 이 <a>ch</a>는 변수명을 말하며, 1byte의 value가 저장되어 있는 컴퓨터 메모리의 특정 부분의 지표로 사용이된다. ++ 8bits = 1byte, 8-bit integer[0..255]
</p>

<H1>ASCII code</H1>
<p>
컴퓨터는 ASCII code를 이용해서 우리가 보는 'A','a'를 구분 할 수 있다. 컴퓨터 화면은 <a>pixel</a>이라 불리는 수천개의 작은 점들로 구성되어 있다. 컴퓨터가 'A'를 "print"하라고 요청했을 때, 'A'를 나타 내기 위해서 'A'가 되기 위한 곳은 0 아닌 곳은 1. 이런식으로 값을 바꾼다.
</p>
<p>
ASCII는 American Standard Code for Information Interchange의 약어이며 Roman(English-like) alphabets를 describe한 것이다.
'A'는 8bits로 표현이 되고 8bits에서 맨 앞의 1bit는 앞서 말한 <a>on/off</a>를 나타내고 보통 이 맨 앞의 1bit는 메모리에 저장 될 때 0으로 설정된다. 
  <p>
    ++ 메모리를 읽는 순서는 거꾸로이다.
    1000001<sub>2</sub>가 있을 때, 
    b<sub>7</sub>
    b<sub>6</sub>
    b<sub>5</sub>
    b<sub>4</sub>
    b<sub>3</sub>
    b<sub>2</sub>
    b<sub>1</sub>
    로 읽는다.
  </p>
</p>]]></description>
        </item>
        <item>
            <title><![CDATA[Computer Memory]]></title>
            <link>https://velog.io/@tobe-honest/Computer-Memory</link>
            <guid>https://velog.io/@tobe-honest/Computer-Memory</guid>
            <pubDate>Tue, 16 Mar 2021 17:48:10 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요 CA&amp;OS에 대한 세 번째 글이네요.</p>
<p>이번글은 컴퓨터에서 메모리가 무엇인지에 대해서 알아보도록 하겠습니다.</p>
<H1>Computer Memory</H1>
<p>
컴퓨터에서 현재 작업중인 메모리는 일반적으로 컴퓨터 메모리에 저장됩니다.
</p>
<p>
메모리는 집에 있는 스위치보드와 비슷합니다.스위치보드의 스위치들은 거실, 복도, 현관 등의 이름이 있습니다. 스위치보드는 항상 그 자리에 그대로 있고 단순히 스위치를 flip하는 것 만으로도 <a>on/off</a>가 가능하죠. 메모리도 이와 같습니다.
</p>
<p>
컴퓨터에서 각 데이터는 address 혹은 location을 가지고 있습니다. 이것은 스위치에서 스위치의 이름에 해당하죠. 그리고 각 데이터는 value도 가지고 있습니다. 이는 스위치에서 (on/off)state에 해당이 됩니다.
high level의 languages에서는 이 locations를 <a>register</a>라 부릅니다.
</p>
<h1>Bits, Nibbles, Bytes</h1>
가장 작은 저장 단위는 bit이며 0 또는 1로 나타냅니다. 이러한 비트는 편의를 위해서 더 큰 단위로 그룹화 되어 나타낼 수 있습니다.
4개의 연속된 bits는 1nybble(or nyble)로 표현 할 수 있습니다.
<p>
modern computer에서는 편의를 위해 8개의 bits를 1byte라고 나타냅니다. 비교를 해보자면 8bits = 2nybble = 1byte 가 되겠네요.
</p>

<h1>Word of Memory</h1>
Word라는 것은 컴퓨터에 있는 CPU가 내부적으로 사용하는 bit의 수를 이야기합니다. Word는 제조사마다, 그리고 CPU의 종류마다 다릅니다. 그래도 평균적인 값이 있겠죠? 요즘은 보통 <a>32 또는 64 bits</a>의 Word를 갖는 CPU를 사용합니다.]]></description>
        </item>
        <item>
            <title><![CDATA[Data representation]]></title>
            <link>https://velog.io/@tobe-honest/Data-representation</link>
            <guid>https://velog.io/@tobe-honest/Data-representation</guid>
            <pubDate>Tue, 16 Mar 2021 17:28:40 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요 CA&amp;OS에 대한 두 번째 글이네요.</p>
<p>
이번글은 데이터가 무엇인지에 대해서와 컴퓨터에서 데이터의 표현에 대해 알아보도록 하겠습니다.
  <H1>Data?</H1>
데이터의 표현을 알기 위해선 먼저 데이터가 무엇인지를 알아야겠죠?
    <p>
데이터란 사실 혹은 어떠한 정보를 이야기합니다. 조금 풀어서 이야기 하면
컴퓨터 세상이 아닌 실제 세상에서 얻은 어떠한 현상에 대한 불연속적 사실과 대응하는 정보를 이야기합니다.
    </p>
    <p>
사실 Value(값)이라는 것의 기본은 Data로부터 오는 것입니다.
Value의 예로는 123, 10,000￦, 이미지의 색, 음악의 톤, "문장"이 있습니다. 이렇게 예를 들어봤는데 감이 오시는 분들은 아시겠지만 여러분이 python에서 알고있는 dict의 key,value 할때 그 value가 맞습니다.
        <p>
또 하나의 예를 들어보자면 kaggle에서 우울증 문제를 풀기 위해 데이터를 받고 그 데이터를 표로 표현했을 때 column이 key값이 되는 것이고 row가 value가 되는 것에서 이 value가 위에서 말한 value라는 것 입니다.
        </p>
    </p>
    <p>
하지만 Value는 추상적이고, 해석이 가능합니다. 123는 숫자, March는 달 이라는 범주로 말이죠. 또한 같은 Value는 다르게 표현이 가능합니다. 12라는 Value가 있다고 할 때, 영어로는 Twelve, 2진수로는 1100, 16진수로는 C라는 등의 다양한 표현이 가능하다는 이야기 입니다.
    </p>
    <p>
이렇게 다양한 표현이 가능하기 때문에 우리는 어떤 표현이 가장 컴퓨터에 적합할지에 대해 배워야 합니다!
      </p>
</p>
<p>
  <H1>Representaion of Data in Computer</H1>
  <p>
    디지털 컴퓨터는 2진수로 표현이 됩니다. 그렇기에 0과 1로 표현을 하는 것이고 모든 것을 1(True) 아니면 0(False)로 저장합니다. 
  <p>
    그래서 이렇게 쓰여지는 1,0의 조합에서 각각을 instance라고 하고 이 instance들의 조합을 state라고 합니다. 조금 더 여러분이 친숙한 말로 얘기하면 state에 있는 instance하나가 bit가 되는 겁니다.
  </p>
  <p>
  앞서 얘기 했던 것 처럼 Value의 적절한 표현이 필요한데 그것이 바로 bit입니다. Value는 bit의 squence로 표현이 가능합니다.
  (1000001)<sub>2</sub> = 65<sub>10</sub> 으로 표현이 가능하다는 것이죠.
  </p>
  <p>
  그렇다면 컴퓨터는 어떻게 이 연속적인 1,0의 조합이 의미하는 것을 알 수 있을까요?
  </p>
  <p>
  조금 웃긴 이야기이지만 컴퓨터는 알지 못합니다. 방금 까지 컴퓨터가 알 수 있는 형태로 Value를 만든다 했으면서 컴퓨터는 모른다고? 라는 생각을 하실 수 있습니다. 사실 방금 말했던 (1000001)<sub>2</sub> = 65<sub>10</sub>에서 65는 정수, (1000001)<sub>2</sub>는 2진수를 의미합니다. 뭐 다르게도 해석이 되겠죠. 아무튼 중요한 것은 사람은 이것들을 마음대로 바꿔가며 해석이 가능합니다. 그래서 결론은 컴퓨터가 의미를 이해하는 방법은 사람이 결정하는 것이다. 이게 결론입니다.
  </p>
  </p>
</p>]]></description>
        </item>
        <item>
            <title><![CDATA[CA&OS - 시작]]></title>
            <link>https://velog.io/@tobe-honest/CAOS-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@tobe-honest/CAOS-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Tue, 16 Mar 2021 16:52:04 GMT</pubDate>
            <description><![CDATA[<H1>Computer Operate?</H1>
Modern Computer System에서는 기본적으로 data를 input을 받은 뒤 Processing 단계를 거친다.
<p>
프로세싱 단계에서는 Control과 ALU가 수행이 된다.
컴퓨터는 자신만의 메모리에 저장된 instruction의 control하에 컴퓨터를 operate한다.
간단하게 말하자면 컴퓨터 메모리에 있는 명령을 통해 컴퓨터를 작동시키는 것이다.
</p>
<p>
ALU는 arithmetical logic unit의 약자로 산술적 논리 유닛인데 말 그대로 데이터에 대해 산술적인 논리에 대한 작업을 하는 unit이다.  
</p>
<p>
두 단계(Processing)을 거치고 output이 나오게 된다.
그리고 추후에 사용하기 위해서 output으로 나온 결과를 저장한다.
</p>

<H1>Computer Architecture</H1>
컴퓨터 구조는 컴퓨터의 하드웨어에 대한 학문이다.
<p>
우리는 종종 high-level의 programming(C,JAVA)을 할 때 컴퓨터 구조를 무시한다. 예를 들어 얘기하자면 print("a")가 있을 때 하드웨어에서 어떠한 구조로 동작 하는지 생각을 하지 않고 프로그래밍을 하는 경우가 대다수 인데 이런 경우를 이야기 하는 것이다.
</p>
<p style="color:navy;">
사실 컴퓨터구조를 알아야 하는 이유는 이게 어디인가 쓰이기 때문인데 어디에 쓰일까?
<p>1. 어셈블리어 프로그래밍</p>
<p>2. 장치 드라이버와 같은 소프트웨어의 시스템 설계</p>
<p>3. 사용하는 프로그램이 무엇을 의미하는지 이해할 때</p>
</p>

<p style="color:red;">요즘 공부하는 컴퓨터 구조 및 운영체제에 대해서 시작을 알리는 글이다.
혹시 관심이 있으신 분은 저와 함께 공부를 해도 좋을 것 같습니다.</p>]]></description>
        </item>
        <item>
            <title><![CDATA[도커, 터미널&코드 관련 명령어]]></title>
            <link>https://velog.io/@tobe-honest/%EB%8F%84%EC%BB%A4-%ED%84%B0%EB%AF%B8%EB%84%90%EC%BD%94%EB%93%9C-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4</link>
            <guid>https://velog.io/@tobe-honest/%EB%8F%84%EC%BB%A4-%ED%84%B0%EB%AF%B8%EB%84%90%EC%BD%94%EB%93%9C-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4</guid>
            <pubDate>Tue, 16 Mar 2021 09:15:36 GMT</pubDate>
            <description><![CDATA[<H1>docker</H1>
<H3>docker start __name__ <a>docker 시작</a></H3>
<H3>docker stop __name__ <a>docker 멈춤</a></H3>
<H3>docker exec -it __name__ /bin/bash <a>docker 실행</a></H3>
도커를 시작한 뒤 실행을 해야한다. 또한 사용을 다한 도커는 멈춰줘야 한다.
<H1>terminal & code</H1>
<H3>sh __file name__.sh <a>sh파일 실행하기</a></H3>
<H3>scp -r 보내는 위치(보낼 폴더) 보낼위치 <a>서버와 local간의 파일(폴더복사)</a></H3> 
<H3>nvidia-smi gpu -l <a>1초마다 gpu 사용량 갱신</a></H3>
<H3>OMP_NUM_THREADS=1 <a>CPU 사용량 제한</a></H3>
<H3>CUDA_VISIBLE_DEVICES=7 <a>사용할 GPU카드 지정</a></H3>
<H3>mkdir __folder name__ <a>(make directory)폴더 만들기</a></H3>
<H3>rm -r <a>(remove)폴더 삭제하기</a></H3>
<H3>mv(보내는 위치)(보낼 위치) <a>(move)파일 및 폴더 옮기기</a></H3>
]]></description>
        </item>
        <item>
            <title><![CDATA[Without sudo exe docker]]></title>
            <link>https://velog.io/@tobe-honest/Without-sudo-exe-docker</link>
            <guid>https://velog.io/@tobe-honest/Without-sudo-exe-docker</guid>
            <pubDate>Mon, 15 Mar 2021 12:44:35 GMT</pubDate>
            <description><![CDATA[<p>단순히</p>
<h1 id="sudo-usermod--ag-docker-user"><em>sudo usermod -aG docker $USER</em></h1>
<p>를 입력한뒤 로그아웃 후 재접속 하면 된다.</p>
]]></description>
        </item>
    </channel>
</rss>