<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.5">Jekyll</generator><link href="https://sangbeom1.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://sangbeom1.github.io/" rel="alternate" type="text/html" /><updated>2024-02-25T05:25:08+00:00</updated><id>https://sangbeom1.github.io/feed.xml</id><title type="html">SANGBEOM Blog</title><subtitle>상범</subtitle><author><name>SANGBEOM</name></author><entry><title type="html">Github Enterprise 계정 만들기</title><link href="https://sangbeom1.github.io/github/Enterprise/" rel="alternate" type="text/html" title="Github Enterprise 계정 만들기" /><published>2024-02-24T00:00:00+00:00</published><updated>2024-02-24T00:00:00+00:00</updated><id>https://sangbeom1.github.io/github/Enterprise</id><content type="html" xml:base="https://sangbeom1.github.io/github/Enterprise/"><![CDATA[<blockquote>
  <p>Github Organization(Enterprise)이란 여러명이 공통 그룹으로 프로젝트를 관리하는 공동 그룹 계정이라고 한다.팀 프로젝트를 진행할 떄 카테고리/그룹화 하기 좋고 google, facebook 등 다양한 회사에서 사용하고 있다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/148e8335-dbd6-48da-abd5-cc098b671d6f" /><br /></p>

<blockquote>
  <p>Organization 계정을 생성하는 것은 매우 쉽다. Github 우측 상단에 + 누른 후 New organization을 클릭해서 생성한다.<br /></p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/aac0100b-7ead-4b7e-af72-9f358b58f8af" /><br /></p>

<blockquote>
  <p>생성 버튼 클릭 후 Choos a plan 선텍 페이지로 이동한다. 총 3개의 Plan을 선택할 수 있고 팀 상황에 맞는 것을 선택한다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/eb6f776c-1643-4846-961a-123ca75cfd6c" /><br /></p>

<blockquote>
  <p>Organization 기본 정보 설정</p>
  <ul>
    <li>Organization account name<br />
그룹 대표 이름으로 진행 할 프로젝트의 목적 등 표현하면 좋다.</li>
    <li>Contact email<br />
대표 이메일 주소</li>
    <li>This organization belongs to
그룹이 어디 소속인지 설정. 법인 회사가 아니라면 My personal account를 선택.</li>
  </ul>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/6025db81-6133-4fce-a281-4068de2e23d9" /><br /></p>

<blockquote>
  <p>Organization 생성 완료.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/f39f37a0-765c-436b-8b79-f0cd4d22c5ed" /><br /></p>

<blockquote>
  <p>그룹 커밋, 푸쉬할 멤버를 초대할 수 있고 Teams 탭에서 팀 단위 협업이 가능하다. 또한 프로젝트 보드 기능도 있고 Trello,Jira 같은 협업/이슈 트래킹 도구를 대체할 수 있는 기능을 내장하고 있다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/515f8b9c-5d96-4839-8823-eca3387e0e34" /><br /></p>

<blockquote>
  <p>마지막으로 개인 Repository 경우 공동 작업자를 추가하고 싶다면 Collaborators로 추가할 수 있고 master 브랜치에서 push/merge 하는 권한만 공유받을 수 있다.<br />
프로젝트를 실질적으로 관리할 수 있는 건 프로젝트를 생성한 매니저 한 사람 이다. 하지만 Organization의 레파지토리는 팀 단위로 각각 팀원들에게 관리 권한을 포함한 세부적인 권한을 부여할 수 있다.</p>
</blockquote>

<p><em>참고자료</em><br /></p>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://nunucompany.tistory.com/2">홈페이지</a>
</div>
<p><br /></p>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://www.lainyzine.com/ko/article/how-to-create-an-organization-for-collaboration-on-github/">홈페이지</a>
</div>
<p><br /></p>]]></content><author><name>SANGBEOM</name></author><category term="Github" /><summary type="html"><![CDATA[Github Organization(Enterprise)이란 여러명이 공통 그룹으로 프로젝트를 관리하는 공동 그룹 계정이라고 한다.팀 프로젝트를 진행할 떄 카테고리/그룹화 하기 좋고 google, facebook 등 다양한 회사에서 사용하고 있다.]]></summary></entry><entry><title type="html">VSCode Git 연동</title><link href="https://sangbeom1.github.io/vscode/VSCode%EC%97%90%EC%84%9C-Git-%EC%97%B0%EB%8F%99/" rel="alternate" type="text/html" title="VSCode Git 연동" /><published>2024-02-02T00:00:00+00:00</published><updated>2024-02-02T00:00:00+00:00</updated><id>https://sangbeom1.github.io/vscode/VSCode%EC%97%90%EC%84%9C%20Git%20%EC%97%B0%EB%8F%99</id><content type="html" xml:base="https://sangbeom1.github.io/vscode/VSCode%EC%97%90%EC%84%9C-Git-%EC%97%B0%EB%8F%99/"><![CDATA[<blockquote>
  <p>VSCode를 Git에 연동해보자. <br />
<br /></p>
</blockquote>

<blockquote>
  <p>먼저 Visual Studio Code와 GitHub 계정이 필요하다.</p>
</blockquote>

<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://code.visualstudio.com/">Visual Studio Code</a>
</div>
<p><br /></p>

<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://github.com/">Github</a>
</div>
<p><br /></p>

<blockquote>
  <p>먼저 Git을 설치해 주자</p>
</blockquote>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://git-scm.com/downloads">Git</a>
</div>
<p><br /></p>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/70f88215-67d2-43ae-ad50-d0f753a9480e" /><br /></p>

<blockquote>
  <p>Windows Explorer integration - ‘Git Bash Here’을 선택하면, Windows 탐색기 우클릭 컨텍스트 메뉴에 ‘Git Bash here’ 옵션이 생긴다. <br />
노란 체크박스를 클릭 시 bash창을 따로 열지 않고 CMD 창에서도 작업이 가능하다.</p>
</blockquote>

<p><br />
<img width="1200" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/9de8d296-d872-4aae-b268-03eb7cd8c87d" /><br /></p>

<blockquote>
  <p>깃 연동에는 방법이 많지만 먼저 Git에 연동을 해놨다면 CMD 창으로 PUSH가 가능하다. 
        cd blog</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    git add .

    git commit -m "change theme"

    git push --set-upstream origin main

    git push
    
    git config user.name (github 이름)
    git config user.email (github 이메일)
</code></pre></div></div>

<p><br /></p>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/0a1771d9-b1ff-4751-880c-8e127dab657e" /><br /></p>

<blockquote>
  <p>Visual Studio Code에서 좌측 Source Control 클릭. Git의 모든 기능 커밋,푸쉬 동기화 기능은 요기서 가능하다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/271dd537-a863-42e7-bac7-09acd4a0d2b3" /><br /></p>

<blockquote>
  <p>먼저 업로드 할 프로젝트의 폴더를 열고 소스 제어에서 Github 게시를 선택, Github 로그인은 필수 이며 상단에서 전체(Public), 비공개(Private)를 선택 후 게시할 수 있다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/dd5720b0-3624-4960-9f06-433feebf92a5" /><br /></p>

<blockquote>
  <p>새로운 파일, 추가 변경 사항이 있으면 목록에 표시가 되고 +를 눌러 목록에 올린다. 이 후 커밋 버튼을 눌러 인덱스 목록에 파일만 커밋한다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/966b748d-540c-4748-b7aa-6372fcfa3719" /><br /></p>

<blockquote>
  <p>커밋 진행 시 ID와 Email을 입력해달라는 문구가 나올 시</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    git config user.name (github 이름)
    git config user.email (github 이메일)
</code></pre></div></div>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/a52b6b87-341f-4885-8180-0900b3668633" /><br /></p>

<blockquote>
  <p>커밋 버튼을 누르면 COMMIT_EDITMSG 창이 열린다. 커밋 할 파일 앞에 붙은 #을 지우면 파일이 커밋이 된다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/e4500618-a0bb-46ab-9838-4a176b93e0c7" /><br /></p>

<blockquote>
  <p>소스 제어 창의 더보기(…)을 눌러서 푸시를 선택, 깃허브에서 확인해보자</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/cd797b7c-6349-4861-8032-ff8a6c5424c5" /><br /></p>

<blockquote>
  <p>repository를 가져올 때는 혹은 다른 소스를 가져오고 싶을 때 Git Clone을 통해 가져올 수 있다.<br />
F1을 누르고 Git Clone 선택 후 로컬로 가져오고 싶은 repository를 선택</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/e7be7ab2-3f00-4e86-b667-e1be9ed75c37" /><br /></p>

<blockquote>
  <p>위치 선택 후 로컬 저장소에 저장하면 git 폴더가 생성된 것을 확인할 수 있다.</p>
</blockquote>

<p><em>참고자료(사진) 등</em></p>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://velog.io/@ahnsanghyeon/VSCode%EC%97%90%EC%84%9C-Git-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0">참고자료</a>
</div>
<p><br /></p>]]></content><author><name>SANGBEOM</name></author><category term="VSCode" /><summary type="html"><![CDATA[VSCode를 Git에 연동해보자.]]></summary></entry><entry><title type="html">Github Blog</title><link href="https://sangbeom1.github.io/github/Gitblog1/" rel="alternate" type="text/html" title="Github Blog" /><published>2024-02-01T00:00:00+00:00</published><updated>2024-02-01T00:00:00+00:00</updated><id>https://sangbeom1.github.io/github/Gitblog1</id><content type="html" xml:base="https://sangbeom1.github.io/github/Gitblog1/"><![CDATA[<blockquote>
  <p>Git blog를 생성해보자. 먼저 개인 Github 아이디가 필요하다. 로그인 후 진행하자.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/8c3612e0-b9d0-4de1-b91d-841ec698cb0e" /><br /></p>

<blockquote>
  <p>먼저 새로운 Repository를 만들자. 
예: Repository name : username.github.io 의 형식</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/d78fe3c6-700c-47b0-a54f-f24a74d4387a" /><br /></p>

<blockquote>
  <p>Public으로 설정 후 Add a README file 체크, 마지막으로 Create repository 클릭.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/ab0151da-3f28-44c5-95ad-19fd6dfdc818" /><br /></p>

<blockquote>
  <p>이렇게 repository가 생성된 걸 볼 수 있다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/7ac4da9b-1be0-47d4-816f-89b15321432d" /><br /></p>

<blockquote>
  <p>이 후 노란색 박스 HTTP 주소를 복사합니다. 차례로 CMD 창을열어서 진행하자.</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    mkdir git_blog 

    cd git_blog 

    git clone HTTPs 주소(자신 reposiory 복사 주소) 
</code></pre></div></div>

<ul>
  <li>permission error 경우<br /></li>
</ul>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://jason-api.tistory.com/79">홈페이지 참고</a>
</div>
<p><br /></p>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/db62a081-4491-4a0f-a286-6f86f45fae8b" /><br /></p>

<blockquote>
  <p>따라하자 (CMD)</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    cd username.github.io\

    echo "Hello World" &gt; index.html

    git add *

    git commit -m "Start git blog"

    git push -u origin main
</code></pre></div></div>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/64a151ee-4814-42e4-a45f-7fe2cc4e39e1" /><br /></p>

<blockquote>
  <p>로컬 저장 위치를 확인해보면 파일이 생성된 걸 확인할 수 있다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/57a76611-3598-4f73-a7dd-76ecd25e9eac" /><br /></p>
<blockquote>
  <p>이 후 지킬을 설치해 주자 (Ruby+Devkit 3.1.4-1 (x64))</p>
</blockquote>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://rubyinstaller.org/downloads/">루비(Ruby)다운로드</a>
</div>
<p><br /></p>

<blockquote>
  <p>지킬 설치 후 진행</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    gem install jekyll bundler

    설치 후 jekyll -v  &lt;br&gt; &lt;br&gt;
</code></pre></div></div>

<blockquote>
  <p>원격저장소에 연결 된 root directory에 저장해야 한다.</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    jekyll new ./ 

    git push를 했을 때 바로 설치 파일들이 보여야 한다. 
</code></pre></div></div>

<blockquote>
  <p>번들 설치</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    bundle install
</code></pre></div></div>

<blockquote>
  <p>jekyll 로컬 서버에 띄우기</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    boundle exec jekyll serve
</code></pre></div></div>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/c60924e7-ed9c-400f-a805-43efb76fae70" /><br /></p>

<blockquote>
  <p>http://127.0.0.1:4000 브라우저에 연결해보자<br />
<br /></p>
</blockquote>

<blockquote>
  <p>PUSH</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    git add .

    git commit -m "jekyll start"

    git push

    위 코드 입력 후 다시 페이지에 들어가보면 변경된 것을 확인할 수 있다. 
</code></pre></div></div>

<blockquote>
  <p>이제 테마를 선택해 보자</p>
</blockquote>

<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="http://jekyllthemes.org/">테마1</a>
</div>
<p><br /></p>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://jekyllthemes.io/free">테마2</a>
</div>
<p><br /></p>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="http://themes.jekyllrc.org/">테마3</a>
</div>
<p><br /></p>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://github.com/topics/jekyll-theme">테마4</a>
</div>
<p><br /></p>

<blockquote>
  <p>원하는 테마를 다운로드 해준다. 이 후 CMD에서 코드를 입력하자.</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    mkdir blog

    cd blog

    git init

    git remote add origin 개인깃헙주소

    git pull origin main

    이렇게 폴더와 repository가 연결되었다. 
</code></pre></div></div>

<blockquote>
  <p>blog 폴더의 데이터를 모두 지운다.</p>
  <ul>
    <li>repository에서 다운 받은 blog 폴더 안의 데이터들을 모두 삭제해 줍니다.
그냥 폴더 열어서 보이는 파일 데이터 모두 삭제하거나 rm -rf . 이용해서 모두 삭제해도 됩니다.</li>
  </ul>
</blockquote>

<blockquote>
  <p>jekyll new 를 이용하여 기본 패기지를 다운</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    jekyll new ./​

    blog 폴더에서 아래의 명령어 터미널에 입력
</code></pre></div></div>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/b9557d74-287d-4063-bdc3-f070891b893e" /><br /></p>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/f8aac4eb-4b1f-4f25-ae54-10e8a9bba9e7" /><br /></p>

<blockquote>
  <p>앞에서 다운받은 테마 내용을 blog에 복사 붙여넣기</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/29a18c09-76aa-4ad5-9ba2-fae833b779cc " /><br /></p>

<blockquote>
  <p>Conflict 이상태에서 bundle install 을 하고 bundle exec jekyll serve 명령을 통해 실행할 경우 아래 사진처럼 conflict error가 발생.</p>
</blockquote>

<ul>
  <li>404.html, about.markdown, index.markdown 세개의 파일을 삭제</li>
</ul>

<blockquote>
  <p>이 후 코드 입력 (터미널)</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    bundle install

    bundle exec jekyll serve
</code></pre></div></div>

<blockquote>
  <p>깃 허브  Add, Commit, Push 하기</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    git add .

    git commit -m "change theme"

    git push --set-upstream origin main

    git push &lt;br&gt;
</code></pre></div></div>

<blockquote>
  <p>gem 파일 삭제 재설치</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    rm Gemfile.lock

    bundle install

    gem update bundler

    gem install jekyll
</code></pre></div></div>

<p><br /></p>

<blockquote>
  <p>실행
        jekyll new ./​</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    gem install bundler 

    gem install jekyll

    gem install bundler

    bundle install

    bundle exec jekyll serve  
</code></pre></div></div>

<p><br /></p>

<blockquote>
  <p>충돌이 발생하면 충돌을 해결하고 다시 커밋</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    git pull origin main

    git push origin main
</code></pre></div></div>

<blockquote>
  <p>로컬 변경사항을 강제로 원격 저장소에 덮어쓰기<br /></p>
  <ul>
    <li>주의: 다른 사람이 작업 중인 경우에는 사용하지 않는 것이 좋습니다.</li>
  </ul>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    git push -u --force origin main
</code></pre></div></div>

<p><em>참고자료</em></p>

<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://supermemi.tistory.com/146">참고자료</a>
</div>
<p><br /></p>

<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://seong6496.tistory.com/258">참고자료</a>
</div>
<p><br /></p>]]></content><author><name>SANGBEOM</name></author><category term="Github" /><summary type="html"><![CDATA[Git blog를 생성해보자. 먼저 개인 Github 아이디가 필요하다. 로그인 후 진행하자.]]></summary></entry><entry><title type="html">Sourcetree 사용법, 깃허브 저장소 연동하기</title><link href="https://sangbeom1.github.io/github/GIt,Sourcetree/" rel="alternate" type="text/html" title="Sourcetree 사용법, 깃허브 저장소 연동하기" /><published>2024-01-14T00:00:00+00:00</published><updated>2024-01-14T00:00:00+00:00</updated><id>https://sangbeom1.github.io/github/GIt,Sourcetree</id><content type="html" xml:base="https://sangbeom1.github.io/github/GIt,Sourcetree/"><![CDATA[<blockquote>
  <p>먼저 소스트리(Sourcetree)를 다운로드 후 설치한다.<br />
이제 소스트리로 깃 저장소를 불러오는 과정을 진행해 보자.<br /></p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/714a4033-5d87-4eec-be91-87cd24c6f9c6" /><br /></p>

<blockquote>
  <p>만약 SSH키가 있다면 예, 없다면 아니오를 누르고 진행하자.<br /></p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/7fd563dc-1eea-42e1-a0cb-04a2975c1cd2" /><br /></p>

<blockquote>
  <p>순서</p>
  <ul>
    <li>Remote를 클릭<br /></li>
    <li>계정 추가<br /></li>
    <li>호스팅 서비스를 Github로 변경, 하단에 OAuth 토큰 새로고침을 클릭<br /></li>
  </ul>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/7676908d-0e96-4e65-a4c0-ce8b419c7c80" /><br /></p>

<blockquote>
  <p>Github 로그인 후 자신 계정에 권한을 요청하는 페이지를 확인 후 초록색 버튼 클릭.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/0e82df6b-ace8-4153-905c-c5219daa4fce" /><br /></p>

<blockquote>
  <p>Github 비밀번호를 입력 후 인증에 성공 확인.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/a99c5aa9-8fbb-4b59-bab6-abbc03df24b8" /><br /></p>

<blockquote>
  <p>소스트리에서 인증 성공 문구를 확인 후 확인 버튼을 누른다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/88fea2e6-38c9-4113-8422-00b83dad2620" /><br /></p>

<blockquote>
  <p>저장소 연동을 확인할 수 있다.</p>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/00aa3fa0-6b75-4ae1-9e4e-cf47bede7226" /><br /></p>

<blockquote>
  <p>검색을 사용해 저장소의 이름을 검색해 찾을 수 있다. 목록의 우측 하단 Clone 글자를 눌러서 로컬로 받을 수 있다.</p>
  <ul>
    <li>Clone Github 저장소를 로컬로 다운</li>
    <li>Add 로컬 파일을 저장소에 추가</li>
    <li>Create 새로운 저장소를 만듬</li>
  </ul>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/35ae77a4-a92d-479f-ae94-07c648c06fa9" /><br /></p>

<blockquote>
  <p>클론</p>
  <ul>
    <li>1번 Git 저장소의 주소를 입력</li>
    <li>2번 소스를 내려받을 로컬 경로 지정</li>
    <li>3번 북마크 이름을 입력</li>
    <li>완료 후 Clone 버튼 클릭</li>
  </ul>
</blockquote>

<p><br />
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/4827b0fc-52a3-412a-a906-4e4cce02b345" /><br /></p>

<p>클론까지 진행하면 소스트리 메인 페이지에 불러와진것을 확인할 수 있다. 이후 로컬 저장 파일 위치에 들어가 Github 파일이 생성되었는지 확인해보자.<br /></p>

<p><br />
<br /></p>

<p><em>참고자료</em><br />
https://velog.io/@jkh9615/%EC%86%8C%EC%8A%A4%ED%8A%B8%EB%A6%ACsourcetree-%EC%82%AC%EC%9A%A9%EB%B2%95-%EA%B9%83%ED%97%88%EB%B8%8C-%EC%A0%80%EC%9E%A5%EC%86%8C-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</p>]]></content><author><name>SANGBEOM</name></author><category term="Github" /><summary type="html"><![CDATA[먼저 소스트리(Sourcetree)를 다운로드 후 설치한다. 이제 소스트리로 깃 저장소를 불러오는 과정을 진행해 보자.]]></summary></entry><entry><title type="html">YOLOv8 Train</title><link href="https://sangbeom1.github.io/yolov8/YOLOv8-Train/" rel="alternate" type="text/html" title="YOLOv8 Train" /><published>2024-01-07T00:00:00+00:00</published><updated>2024-01-07T00:00:00+00:00</updated><id>https://sangbeom1.github.io/yolov8/YOLOv8-Train</id><content type="html" xml:base="https://sangbeom1.github.io/yolov8/YOLOv8-Train/"><![CDATA[<h1 id="yolov8-train">YOLOv8 Train</h1>
<p>오늘은 YOLOv8 Train에 대해서 알아보자.<br />
데이터를 가공했다면 전이학습이 필요하다. 좋은 모델일수록 좋은 학습이 필요한데 오늘은 이런 좋은 모델을 얻기위한 학습에 대해서 알아보도록 하자. Ultralytics에서 제공하는 Classify, Detect, Segment, Track, Pose 등 다양한 방법으로 트레인 할 수 있는 방법을 제공하고 있다.</p>

<p>Google Colab을 사용해서 학습과정을 진행하였다.<br /></p>

<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://docs.ultralytics.com/tasks/">Ultralytics 공식 홈페이지</a>에서 확인할 수 있습니다.
</div>
<p><br /></p>

<p><img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/ffd3b761-65b7-4725-9cc7-f85fd051e842" /><br /></p>

<blockquote>
  <p>1.YOLOv8와 YOLOv8 실행에 필요한 라이브러리 설치</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>!pip install ultralytics

import ultralytics
ultralytics.checks()
</code></pre></div></div>

<blockquote>
  <p>2.Downloading the Dataset</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>!pip install roboflow

from roboflow import Roboflow
rf = Roboflow(api_key="iS9n0*********")
project = rf.workspace("ai-e1r2s").project("driver-motion")
dataset = project.version(1).download("yolov8")
</code></pre></div></div>

<blockquote>
  <p>3.Load a Pre-trained model</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>from ultralytics import YOLO

YOLO 모델 초기화
model = YOLO('yolov8n.pt')
model = YOLO('yolov8s.pt')
model = YOLO('yolov8m.pt')
model = YOLO('yolov8l.pt')
model = YOLO('yolov8x.pt')
</code></pre></div></div>

<blockquote>
  <p>3-1 MS COCO Dataset에 정의되어 있는 클래스 개수와 종류 확인</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>print(type(model.names), len(model.names))

print(model.names)
</code></pre></div></div>

<blockquote>
  <p>4.Training
  1) data.yaml 파일 수정</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  # 불러온 파일 중 yaml 파일을 확인
  !cat /content/Driver-motion-1/data.yaml

  # PyYAML 설치
  !pip install PyYAML

  # 필요한 module import
  import yaml

  data = {'train' : '/content/Driver-motion-1/train/images',
    'val' : '/content/Driver-motion-1/valid',
    'test' : '/content/Driver-motion-1/test/images',
    'names' : ['calling', 'smoking', 'texting'],
    'nc' : 3 }

  with open('/content/Driver-motion-1/data.yaml','w') as f:
    yaml.dump(data,f)

  with open('/content/Driver-motion-1/data.yaml', 'r') as f:
    Driver_yaml = yaml.safe_load(f)
    display(Driver_yaml)
</code></pre></div></div>

<p>2) 불러온 pretraind-model인 yolo 모델을 기반으로, 학습 진행</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  # yolov8m.pt 모델을 기반으로, 우리가 만든 data.yaml으로 학습 진행 model.train(data = '/content/Driver-motion-1/data.yaml',
        epochs=100,
        patience=25,
        batch=32,
        imgsz=500,
        project='/content/drive/MyDrive/result',
        name='sample',
        exist_ok=True)      

  # 학습된 결과물 출력 print(type(model.names),len(model.names)) print(model.names)      

  # 밑 코드는 model이 항상 yolov8n.pt로 되어있음 !yolo task=detect mode=train model=yolov8m.pt data='/content/bebeface-6/data.yaml' epochs=1 patience=12 batch=32 imgsz=640 project='/content/drive/MyDrive/KOSA3/project/result' name=sample exist_ok=True
</code></pre></div></div>

<h1 id="참고-validate">참고 (Validate)</h1>
<blockquote>
  <p>mAP(Mean Average Precision) : 각 클래스에 대한 Average Precision을 평균내어 얻은 값으로, 모든 클래스에 대한 성능을 종합적으로 나타냄</p>
  <ul>
    <li>높은 mAP는 모델이 각 클래스에 대해 높은 정밀도와 재현율을 갖고 있다는 것</li>
  </ul>
</blockquote>

<blockquote>
  <p>Box(Precision, Recall) : 각 클래스에 대한 박스 수준의 정밀도와 재현율</p>
  <ul>
    <li>클래스 당 높은 박스 수준의 정밀도와 재현율은 모델이 해당 클래스를 얼마나 잘 감지하는지</li>
  </ul>
</blockquote>

<blockquote>
  <p>mAP50, mAP50-95 : IoU (Intersection over Union) 임계값을 다르게 한 경우의 mAP 값</p>
  <ul>
    <li>높은 mAP50와 mAP50-95는 모델이 다양한 IoU 임계값에서 좋은 성능을 보이는 것을 나타냅니다.</li>
  </ul>
</blockquote>

<blockquote>
  <p>Precision, Recall : 모델의 정밀도와 재현율</p>
  <ul>
    <li>높은 정밀도는 모델이 예측한 결과가 실제로 정답인 비율이 높다는 것</li>
    <li>높은 재현율은 모든 실제 정답 중에서 모델이 얼마나 많은 것을 찾아냈는지를 나타냅니다.</li>
  </ul>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import locale locale.getpreferredencoding = lambda: "UTF-8"

# training 과정에서 평가 지표를 보고 싶으면, 스크롤을 올려서 표를 찾으면 되고, # 따로 바로 보고싶으면 이 코드를 실행시키면 된다
!yolo task=detect mode=val model=/content/drive/MyDrive/KOSA3/project2/result/sample/weights/best.pt data=/content/Driver-motion-1/data.yaml
</code></pre></div></div>

<blockquote>
  <p>5.Prediction</p>
</blockquote>

<p>1) 방법1 CLI</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  !yolo task=detect mode=predict model=/content/drive/MyDrive/KOSA3/project2/result/sample/weights/best.pt conf=0.25 source=/content/drive/MyDrive/KOSA3/project/data/prediction save=True
</code></pre></div></div>

<p>2) 방법2  <br />
      model = YOLO(“/content/drive/MyDrive/KOSA3/project2/result/sample/weights/best.pt”)</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  # source = '내가 테스트할 사진이나 영상 미리 넣어놓기'
    results = model.predict(source = "/content/drive/MyDrive/KOSA3/project/data/custom_test_img", save=True)
</code></pre></div></div>

<p>3) 저장
    import shutil</p>

<blockquote>
  <p>복사할 폴더의 경로</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>source_folder = "/content/runs/detect/predict3"
</code></pre></div></div>

<blockquote>
  <p>Google Drive에 저장할 경로</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>destination_folder = "/content/drive/MyDrive/KOSA3/project/prediction/predict1" # 이미존재하는 폴더일 때 여기 뒤 숫자 바꾸기
</code></pre></div></div>

<blockquote>
  <p>shutil을 사용하여 폴더 복사</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>shutil.copytree(source_folder, destination_folder)

print(f"{source_folder} 폴더를 {destination_folder}로 복사 완료")
</code></pre></div></div>

<blockquote>
  <p>6.Export</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>model = YOLO("/content/drive/MyDrive/KOSA3/project2/result/sample/weights/best.pt")

model.export(format="onnx", imgsz=[480,640])
</code></pre></div></div>

<p>이러한 과정을 통해 모델의 결과를 얻을 수 있다. 
<img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/963ab220-adfa-4633-8b38-b6cab7380401" /><br /></p>]]></content><author><name>SANGBEOM</name></author><category term="YOLOv8" /><summary type="html"><![CDATA[YOLOv8 Train 오늘은 YOLOv8 Train에 대해서 알아보자. 데이터를 가공했다면 전이학습이 필요하다. 좋은 모델일수록 좋은 학습이 필요한데 오늘은 이런 좋은 모델을 얻기위한 학습에 대해서 알아보도록 하자. Ultralytics에서 제공하는 Classify, Detect, Segment, Track, Pose 등 다양한 방법으로 트레인 할 수 있는 방법을 제공하고 있다.]]></summary></entry><entry><title type="html">Roboflow 사용해보기</title><link href="https://sangbeom1.github.io/dataset/Roboflow/" rel="alternate" type="text/html" title="Roboflow 사용해보기" /><published>2024-01-04T00:00:00+00:00</published><updated>2024-01-04T00:00:00+00:00</updated><id>https://sangbeom1.github.io/dataset/Roboflow</id><content type="html" xml:base="https://sangbeom1.github.io/dataset/Roboflow/"><![CDATA[<h1 id="roboflow-란">Roboflow 란</h1>
<blockquote>
  <p>Roboflow는 컴퓨터 비전(Computer Vision) 기술을 사용해 다양한 모델을 만들 수 있도록 지원해주는 서비스입니다. 
많은 사람들이 제공하는 사진을 무료로 사용해 데이터셋을 만들 수 있습니다.</p>
</blockquote>

<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://roboflow.com/">roboflow 공식 홈페이지</a>에서 확인할 수 있습니다.
</div>
<p><br /></p>

<blockquote>
  <p>데이터 라벨링을 제공하는 사이트는 많이 있다. 
이번에 roboflow에서 정제하고 가공을 선택한 이유는 다양하고 많은 사진을 직관적으로 편리하게 가공하여 사용할 수 
있는 큰 장점을 가지고 있다. 또한 데이터셋을 Export할 때 다양한 형식을 지원하며 증강효과도 자체적으로 지원하고 있다. 
따라서 사용하기 편하며 다양한 기능을 이용해 볼 수 있다.<br /></p>
</blockquote>

<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://www.cvat.ai/">CVAT 공식 홈페이지</a>에서 확인할 수 있습니다.
</div>
<div style="border: 1px solid #4CAF50; padding: 10px; background-color: #f2f2f2;">
  <a href="https://www.aihub.or.kr/">AI-HUB 공식 홈페이지</a>에서 확인할 수 있습니다.
</div>
<blockquote>
  <p>이번 필자는 컴퓨터 비전 이미지 관련하여(CNN,RNN)사용해보려 한다.
이제부터 사용방법을 알아보자.<br /></p>
</blockquote>

<p><br /></p>
<h1 id="사용방법">사용방법</h1>

<p><img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/4c6dac3e-cc16-47de-b480-3c0bf04ad061" /><br /></p>
<blockquote>
  <p>roboflow 공식 홈페이지에 접속한다.<br />
*링크는 위 참조<br /></p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/6f1aceb3-fa99-46f2-8024-be54c94a9784" /><br /></p>
<blockquote>
  <p>로그인 후 들어오면 위와같은 창이 보인다. 요기서 상단에 Universe로 들어간다.<br />
*필자는 이미 데이터 셋을 프로젝트로 만들어 둔 상태이다. 아무것도 없어도 상관없다.</p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/825b74a6-b077-4a8f-9522-02cec59a3bda" /><br /></p>
<blockquote>
  <p>Universe로 들어왔다면 검색창에 내가 원하는 이미지 데이터를 검색한다.<br /></p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/59d92780-d894-4563-ba14-e833417d9dfb" /><br /></p>
<blockquote>
  <p>검색 후 자신에게 맞는 이미지 셋을 찾아 들어간다.<br />
*이미지 개수, 이미지 업로드 날짜를 잘 체크하기</p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/c52a0526-da0e-4cb2-9f44-4b0e37007d0a" /><br /></p>
<blockquote>
  <p>자신이 원하는 이미지 셋을 찾아다면 들어가 중앙에 View All Images를 클릭.<br /></p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/d29b69ff-67a4-4846-b48a-3dc03d730801" /><br /></p>
<blockquote>
  <p>좌측 Images에서 나에게 맞는 이미지인지 확인.<br />
좌측 Dataset 클릭 후 원하는 Format을 선택 우측 상단 Download Dataset 클릭.<br /></p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/6fecd628-4f31-43b2-b323-9568ff495376" /><br /></p>

<!-- EX) code
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/8404b051-d9ff-405e-8672-b25d64e821d5"><br> -->
<blockquote>
  <p>원하는 Format을 선택했다면 Export 방법을 선택.<br /></p>
  <ol>
    <li>ZIP 파일로 다운<br /></li>
    <li>코드로 바로 불러오는 방법</li>
  </ol>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/49efa509-9cc0-4dbc-8ecd-84d936274839" /><br />
<br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/7c145231-5328-4009-ba83-84bbc5031264" /><br /></p>
<blockquote>
  <p>이미지를 받았다면 우측 상단 Create New Project 클릭.<br />
Project Type을 지정한 후 프로젝트 이름과 Detecting 할 것을 지정.</p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/49d1620e-10ba-4e3d-a3c2-68aba138156d" /><br /></p>
<blockquote>
  <p>프로젝트를 생성했다면 좌측 Images 클릭.<br />
이미지를 누르고 Annotate를 지정.</p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/0f350e3f-b6ca-4bb2-b659-1f59a7b7399e" /><br /></p>
<blockquote>
  <p>기존 데이터셋을 가져올 때 사진을 업로드 한 사람의 Classes로 지정되어 있다.<br />
따라서 내가 프로젝트를 생성할 때 Detecting 할 것을 정한 Class로 수정이 필요하다.<br /> 
우측 상단에 Modify Classes를 눌러 수정.</p>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/3375a59c-a5df-4b8a-9c6a-b1d400107ac0" /><br />
<br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/97a83a18-2fb4-4155-88b9-41daded39f70" /><br /></p>
<blockquote>
  <p>Class 수정까지 완료 했다면 좌측 Generate에서 다양한 증강효과를 사용할 수 있다.<br /></p>
  <ol>
    <li>Source Images 원본 이미지들을 의미합니다. 이는 모델이 학습하거나 처리할 대상이 되는 이미지들로, 데이터셋의 일부가 될 수 있습니다.</li>
    <li>Train / Test Split 데이터를 훈련과 테스트용으로 나누는 과정입니다. 일반적으로 주어진 데이터셋을 훈련 데이터와 테스트 데이터로 나누어 모델을 훈련하고 테스트하는 데 사용됩니다. 이는 모델의 일반화 성능을 평가하는 데 도움이 됩니다.</li>
    <li>Preprocessing 이미지나 데이터를 모델에 입력하기 전에 사전에 처리하는 단계를 말합니다. 이는 이미지 크기를 조절하거나 정규화, 표준화 등의 작업을 수행하여 모델의 입력에 적합한 형태로 데이터를 가공하는 것을 의미합니다.</li>
    <li>Augmentation 데이터의 다양성을 높이기 위해 이미지에 다양한 변형을 적용하는 과정입니다. 이는 훈련 데이터의 다양성을 증가시켜 모델이 다양한 상황에서도 더 강건하게 동작하도록 도와줍니다.</li>
    <li>Create 생성</li>
  </ol>
</blockquote>

<p><br />
<img width="800" heigh="300" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/d8100e89-4de0-449f-9018-a58b1906a939" /><br /></p>
<blockquote>
  <p>마지막 Generate까지 완료했다면 우측 상단에 Export Dataset이 생긴다.<br />
요기서 처음 데이터 셋을 가져온 것과 동일하게 Format을 선택 우측 상단 Download Dataset 클릭. <br />
code와 zip 형식을 선택하여 편한 것으로 가져가 사용할 수 있다.<br /></p>
</blockquote>

<p><br />
요기까지 간단하게 roboflow사용방법에 대해서 알아보았다. 편하고 유용하게 사용할 수 있는 사이트였고 앞으로도 다양하게 많이 이용해 볼 예정이다. 
다음시간에는 데이터 셋을 가지고 전이학습을(Model Train) 해보도록 하자.</p>]]></content><author><name>SANGBEOM</name></author><category term="Dataset" /><summary type="html"><![CDATA[Roboflow 란 Roboflow는 컴퓨터 비전(Computer Vision) 기술을 사용해 다양한 모델을 만들 수 있도록 지원해주는 서비스입니다. 많은 사람들이 제공하는 사진을 무료로 사용해 데이터셋을 만들 수 있습니다.]]></summary></entry><entry><title type="html">DMS Project-Driver Monitoring System</title><link href="https://sangbeom1.github.io/dms-Project/" rel="alternate" type="text/html" title="DMS Project-Driver Monitoring System" /><published>2024-01-03T00:00:00+00:00</published><updated>2024-01-03T00:00:00+00:00</updated><id>https://sangbeom1.github.io/dms-Project</id><content type="html" xml:base="https://sangbeom1.github.io/dms-Project/"><![CDATA[<p>졸음감지 및 이상행동 감지 운전자 모니터링 시스템</p>

<p>최근 3년간 졸음, 주시 태만으로인한 연평균 사망자가 매년 8명정도 증가한다는 뉴스를 통해 모니터링 시스템의 필요성을 느꼈습니다.
그리고 2025년부터 유럽의 모든 차량에는 모니터링 솔루션 탑재가 법률화되어 국내에서 유럽으로 수출되는 차량에
는 DMS가 탑제되어야하고 그로 인해 발생하는 수익은 1.5조로 예상된다고합니다. 
또한 국내도 25년에 법안이 개정될 수 있다는 것을 확인 할 수 있었습니다.</p>

<p><br /></p>
<h1 id="demo-영상-클릭해서-보기">Demo 영상 클릭해서 보기</h1>
<p>click 1
<a href="https://www.youtube-nocookie.com/embed/VrDQqiV3zwU"><img src="https://img.youtube.com/vi/VrDQqiV3zwU/0.jpg" alt="main Demo" /></a></p>

<p><br />
click 2 
<a href="https://www.youtube.com/embed/6gZBNyvD2YM"><img src="https://img.youtube.com/vi/6gZBNyvD2YM/0.jpg" alt="Pose_Estimation, Eye-estimation" /></a></p>

<p><br />
clic 3
<a href="https://www.youtube.com/embed/mPX-4aKvrRo"><img src="https://img.youtube.com/vi/mPX-4aKvrRo/0.jpg" alt="Face3D" /></a></p>

<p><br /></p>
<h1 id="기능-소개">기능 소개</h1>

<p>프로젝트의 section은 총 3가지로 분류할 수 있습니다.</p>
<ol>
  <li>운전자 졸음감지
    <ul>
      <li>1단계: 휴게소 및 쉼터 안내 음성서비스</li>
      <li>2단계: 전방주시 음성안내 및 이미지 캡처</li>
      <li>3단계: 일정간격 사이렌 알림</li>
    </ul>
  </li>
  <li>운전자 이상행동감지
    <ul>
      <li>운전 중 통화 감지</li>
      <li>운전 중 문자 휴대폰 사용 감지</li>
      <li>운전 중 흠연 감지</li>
    </ul>
  </li>
  <li>지관적인 시각화
    <ul>
      <li>Face3D</li>
      <li>시선추적(Eye-estimation)</li>
      <li>행동 추적(Pose_Estimation)</li>
    </ul>
  </li>
</ol>

<p><br /></p>
<h1 id="설계-과정">설계 과정</h1>

<blockquote>
  <p>졸음 감지 Eye-Detection</p>
  <ul>
    <li>아키텍처 설계 과정 및 단계별 알림 설정</li>
  </ul>
</blockquote>

<p>Step 1</p>
<ul>
  <li>
    <p>졸음 감지시스템 설계 과정 운전자의 졸음을 판단할 수 있도록 눈에 대한 Data Set을 활용하여 붓꽃(Iris) 회귀 분류를 활용해 눈을 감을 때, 뜰 때 상황을 감지할 수 있도록 모델을 설계.</p>

    <ul>
      <li>
        <p>FaceMesh를 활용하여 눈의 크기를 종 횡비로 계산하기 위해, 눈 영역을 검출</p>
      </li>
      <li>
        <p>눈 영역을 Landmarks로 검출하여 Landmarks의 눈을 6개의 point로 지정</p>
      </li>
      <li>
        <p>6개의 점을 선분을 만들어 비율을 계산하고 눈이 감겨있는 정도를 파악하여 종횡비를 계산</p>
      </li>
      <li>
        <p>운전자의 눈 크기의 표준사양을 고려하여 종횡비를 0.3 ~ 0.35 임계치 설정</p>
      </li>
    </ul>
  </li>
</ul>

<p><img width="669" alt="main_drowsy" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/817c14e7-41d4-4def-adc8-f0a0e689ac34" /></p>

<p><br />
Step 2</p>
<ul>
  <li>
    <p>졸음감지 요구사항 및 추가 사양 단계 별 알림 설정-사람이 졸 때 눈을 뜨는 시간보다 감는 시간이 길다는 점을 고려하여 아키텍처 설계</p>

    <ul>
      <li>
        <p>1단계 : 눈 감음 +1, 눈 뜬 상태 -1 frame 으로 누적 10회 시 1차 알림 전방 5km 이내 있는 졸음 쉼터 및 휴게소 안내</p>
      </li>
      <li>
        <p>2단계 : 1단계 졸음 감지 후 계속해서 졸음 감지 시 +,- 누적되어 15회 달성 시 졸음 감지 음성 일림 치 캡쳐 기능</p>
      </li>
      <li>
        <p>3단계: 2단계 이 후 지속적으로 졸음 감지 시 3초 간격으로 사이렌 알림 제공</p>
      </li>
      <li>직관적으로 시선을 추적하는 모습을 볼 수 있게 눈 안에 Draw 함수 추가</li>
      <li>AI 제공 서비스 음성활용</li>
    </ul>
  </li>
</ul>

<p><img width="669" alt="main_drowsy" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/a2f3eeed-feca-4f9b-a43b-197c3bae5d8f" /></p>

<h1 id="data-set">Data Set</h1>
<ul>
  <li>haarcascade_frontalface_alt.xml / haarcascade_frontalface_alt2.xml / shape_predictor_68_face_landmarks.dat</li>
</ul>

<p><br /></p>
<blockquote>
  <p>이상 감지 Anomaly detection</p>
  <ul>
    <li>다음으로 이상 행동 감지를 하기 위해서 YOLOv8 모델 활용.</li>
  </ul>
</blockquote>

<p>step 1</p>
<ul>
  <li>데이터 셋<br />
  1.Roboflow에서 필요한 데이터 셋을 찾아 Annotate를 지정, class를 지정한 후 YOLOv8형식으로 만장 정도의 데이터 셋을 가공</li>
</ul>

<p><br /></p>

<p>Step 2</p>
<ul>
  <li>
    <p>전이학습<br />
  1.YOLOv8 s, n, m, l, x 등 다양한 모델활용</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>          Ex
          'metrics/precision(B)': 0.9766057367644005,    // 정밀도(정확도)
          'metrics/recall(B)': 0.9684228889682308,   // 재현율 : 높을 수록 놓치는게 낮다는 뜻
          'metrics/mAP50(B)': 0.9815056992918651,    // 평균 정밀도 : 50%이상인 경우 평균 정밀도
          'metrics/mAP50-95(B)': 0.7014963036097031,    / /mAP50을 더 엄하게 평가했을 경우의 정밀도, 탐지 정확도가 높은 모델일수록 높은 값을 가짐
          'fitness': 0.7314972431779194         // 모델의 전반적인 성능을 나타내는 단일 지표, 문제에 얼마나 적합한지를 평가

          mAP50이 높으면 좋은 모델 
          mAP50-95도 높으면 더욱 좋은 모델
</code></pre></div>    </div>

    <p>CNN 예측(prediction)의 정확도(Accuracy)향상</p>

    <p><br />
      method 1</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>          EX
          model.train(data = '/content/bebeface-4/data.yaml',
          epochs=1,
          patience=30,
          batch=32,
          imgsz=640,
          project='/content/drive/MyDrive/KOSA3/project/result',
          name='sample',
          exist_ok=True)
</code></pre></div>    </div>

    <ul>
      <li>기능설명
  data: 데이터 구성을 정의하는 YAML 파일의 경로
  epochs: 전체 데이터셋에 대한 학습 반복 횟수
  patience: 조기 종료를 적용할 때의 기다리는 에폭 수. 즉, 검증 손실이 개선되지 않은 상태에서 몇 번의 에폭을 더 학습할 것인지를 결정.
  <em>[케라스] 딥러닝 모델 학습 조기 종료시키기(early stopping) 동일 효과</em>
  batch: 각 미니배치의 크기.
  imgsz: 입력 이미지의 크기.
  project: 학습 중 생성되는 파일들이 저장될 프로젝트 디렉토리의 경로.
  name: 학습 중 생성되는 파일들의 이름(prefix).
  exist_ok: 지정된 프로젝트 및 이름의 디렉토리가 이미 존재할 경우에도 오류를 발생시키지 않고 계속 진행할지 여부를 나타냄.</li>
    </ul>

    <p><br />
       method 2</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>      1. 데이터 증강
      Augmentation settings
      augment:
          flipud: 0.0  # flipud (상하 반전)
          fliplr: 0.5  # fliplr (좌우 반전)
      mosaic: 1.0  # mosaic (모자이크 증강)
          mixup: 0.2  # mixup (믹스업 증강)  mixup: 0.2  # mixup augmentation

      2. Pytorch 데이터 증강 코드
      transform = transforms.Compose([
      transforms.RandomResizedCrop(640),
      transforms.RandomHorizontalFlip(),
      transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2),
          transforms.ToTensor(),
      ])
</code></pre></div>    </div>
  </li>
</ul>

<p><br />
<br />
Step 3</p>
<ul>
  <li>모델 적용
    <ul>
      <li>
        <p>통화중 : YOLOv8n 모델 활용, 학습 된 데이터 셋을 Ultralytics YOLO로 Detection하여 처음 감지 임계치 0.65를 시작으로 0.4 이하까 지 임계치를 측정하여 핸드폰 통화 감지</p>
      </li>
      <li>
        <p>문자중 : YOLOv8n 모델 활용, 학습 된 데이터 셋을 Ultralytics YOLO로 Detection하여 처음 감지 임계치 0.65를 시작으로 0.4 이하까 지 임계치를 측정하여 핸드폰 문자, 휴대폰 사용 감지</p>
      </li>
      <li>흡연 : YOLOv8n 모델 활용, 학습 된 데이터 셋을 Ultralytics YOLO로 Detection하여 처음 감지 임계치 0.65를 시작으로 0.4 이하까 지 임계치를 측정하여 흡연 감지</li>
      <li><strong>3초 동안 행동 유지시 안내 음성 제공</strong></li>
    </ul>
  </li>
</ul>

<p><img width="669" alt="main_yolo" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/646b2caa-8940-4be5-ac8e-64e7d07eb96f" /></p>

<p><br /></p>
<blockquote>
  <p>얼굴 탐지 Face Mesh</p>
</blockquote>

<ul>
  <li>
    <p>Mediapipe를 활용하여 얼굴 메쉬를 탐지</p>
  </li>
  <li>
    <p>FaceMesh를 통해 눈 종속성을 지정 종횡비를 계산하여 트리거 생성</p>
  </li>
  <li>
    <p>Face3D로 구현</p>
  </li>
</ul>

<p><img width="669" alt="main_yolo" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/fd98c048-e0d8-49cf-b749-7e8aff54ab8c" /></p>

<p><br /></p>
<h1 id="향후-발전-가능성">향후 발전 가능성</h1>
<blockquote>
  <p>Face 3D</p>
  <ul>
    <li>FaceMesh를 활용하여 향 후 운전자의 모습을 다양한 기능의 형태로 보여질 수 있도록 서비스를 제공하며 웹캠에서 실시간으로 얼굴을 감지하고, 직관적으로 시각화 할 수 있도록 적용 예정</li>
  </ul>
</blockquote>

<p><img width="669" alt="main_yolo" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/da4b5b14-9aec-452f-914e-04f5f11128f9" /></p>

<p><br /></p>
<blockquote>
  <p>Pose_Estimation, Eye-estimation</p>
  <ul>
    <li>운전자의 주의력 상태, 머리 자세와 각도, 눈 종횡비, 시선, 눈 감음 지속 시간, 정밀한 휴대폰 및 행동 감지를 추적할 수 있도록 모델에 적용 예정</li>
  </ul>
</blockquote>

<p><img width="669" alt="main_yolo" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/04f34a23-533d-4dfd-a774-42a39a144c8a" /></p>]]></content><author><name>SANGBEOM</name></author><category term="Project" /><summary type="html"><![CDATA[졸음감지 및 이상행동 감지 운전자 모니터링 시스템]]></summary></entry><entry><title type="html">MAC GPU 활용</title><link href="https://sangbeom1.github.io/mac-gpu-utilization/" rel="alternate" type="text/html" title="MAC GPU 활용" /><published>2023-12-23T00:00:00+00:00</published><updated>2023-12-23T00:00:00+00:00</updated><id>https://sangbeom1.github.io/Mac-GPU</id><content type="html" xml:base="https://sangbeom1.github.io/mac-gpu-utilization/"><![CDATA[<p>Mac에서 사용하는 GPU 알아보자.<br /></p>

<blockquote>
  <p>애플 실리콘 M1은 애플이 개발한 맞춤형 칩셋으로,에어, 프로, 미니 등 일부 애플 컴퓨터 제품군에 적용되었습니다. 
이전에 인텔이나 AMD와 같은 회사 제품을 사용했지만 이제 자체적으로 설계하고 칩셋을 만들어 사용하고 있습니다. 
M1은 기존의 인텔 기반 맥과 비교할 때 효율적이며 좋은 성능을 보여주고 있습니다. 전력 소비가 적고 더 높은  CPU와 GPU
성능을 제공하고 있습니다.<br /></p>
</blockquote>

<blockquote>
  <p>현재 필자는 MacOS m1칩을 사용하고 있는 유저로 Mac에서 딥러닝 프레임워크를 GPU 프로세서로 연산하기 위해서는 다양한 방법을 사용할 수 있습니다.
애플 실리콘의 GPU는 TensorFlow, PyTorch 및 Core ML과 같은 머신 러닝 프레임워크를 지원하고 있습니다. 이를 사용하면 훨씬 빠르게 모델 훈련을 할 수 있고
대규모 이미지, 비디오, 음성 데이터 집합을 처리하는 과정에서 이점이 두드러지게 나타납니다.<br /></p>
</blockquote>

<blockquote>
  <p>엔비디아에서 macOS에 대한 cuda지원을 하지 않아 다른 방법으로 활용해보고자 한다.<br /></p>
</blockquote>

<p><img width="600" alt="KakaoTalk_20240104_153645134" src="https://github.com/sangbeom1/sangbeom1.github.io/assets/145951445/c95a224d-584e-4f47-b4bc-2edb12d6a8c9" /><br /></p>

<p><br /></p>
<h1 id="xcode-및-커맨드라인-도구-설치">Xcode 및 커맨드라인 도구 설치</h1>
<p>먼저 Xcode 도구를 설치합니다. 앱스토어에서 무료로 다운 가능하며 개발에 필요한 도구와 라이브러리를 포함하고 있어 
컴파일러, 디버거, 테스트 프레임 워크 등 다양한 개발 도구를 사용하여 빌드 작업을 수행할 수 있습니다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  $ xcode-select --install
</code></pre></div></div>

<p><br /></p>
<h1 id="miniconda-활용">Miniconda 활용</h1>
<p>Miniconda는 python 환경을 구성하는데 사용되며 Anaconda 보다 경량화 되어있습니다. 다양한 패키지와 라이브러리를 설치하며 관리할 수 있고 
딥러닝을 위한 필수 패키지를 포함하고 있습니다. 가볍고 최소한의 패키지만 설치해 경량화하여 용량을 절약할 수 있습니다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1 $ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
2 $ bash Miniconda3-latest-MacOSX-arm64.sh
</code></pre></div></div>

<p>Pytorch m1환경에서 구동하기 위해 python 3.9 버전을 지정, Torch-m1-gpu 라는 env를 생성.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1 $ conda create -n torch-m1-gpu python=3.9
2 $ conda activate torch-m1-gpu 
</code></pre></div></div>

<p><br /></p>
<h1 id="pytorch">PyTorch</h1>
<p>PyTorch는 딥러닝 오픈소스 머신러닝 라이브러리 입니다. PyTorch는 높은 수준의 추상화와 텐서 연산, 그리고 미분 가능한 함수를 제공하고 있습니다. 
<a href="https://pytorch.org/">PyTorch 공식 홈페이지</a>에서 확인할 수 있습니다.</p>

<p>터미널을 열고 PyTorch 및 관련 라이브러리 설치</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ conda install pytorch torchvision torchaudio -c pytorch
</code></pre></div></div>

<p><br />
PyTorch에서 MPS(Multi-Process Service)가 활성화되어 있는지 확인</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1    (torch-m1-gpu) ➜  ~ python3
2 Python 3.9.16 (main, Mar  8 2023, 04:29:24) 
3 [Clang 14.0.6 ] :: Anaconda, Inc. on darwin
4 Type "help", "copyright", "credits" or "license" for more information.
5 &gt;&gt;&gt; import torch
6 &gt;&gt;&gt; import math
7 &gt;&gt;&gt; print(torch.backends.mps.is_available())
8 True
9 &gt;&gt;&gt; print(torch.backends.mps.is_built())
10 True
11 &gt;&gt;&gt; exit()
</code></pre></div></div>

<p><br />
만약 두 값이 모두 True라면, MPS를 사용할 수 있는 PyTorch환경임이 확인된 것입니다. 
실제 PyTorch상에서 해당 mps를 사용하도록 직접 설정하려면 아래와 같이 입력합니다.
import torch는 PyTorch 라이브러리를 가져오는 구문입니다. 
device = torch.device(“mps”)는 MPS를 사용하기 위한 디바이스를 설정하는 구문입니다.
MPS 디바이스는 torch.device 함수를 사용하여 지정할 수 있으며, mps를 입력하여 MPS 디바이스를 설정합니다. 
이 코드를 실행하면, MPS가 지원되는 환경에서 PyTorch에서 MPS를 사용하기 위한 기본 설정이 완료됩니다. 
이후 해당 환경에서 MPS를 이용한 모델 학습 등의 작업을 할 때, 이 설정이 활용됩니다.<br /></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1 import torch
2 device = torch.device("mps")
</code></pre></div></div>

<p><br /></p>
<h1 id="mps-간단한-모델-훈련">MPS 간단한 모델 훈련</h1>
<p>PyTorch를 사용하여 사인 함수의 값을 예측하는 모델</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import torch
import math
dtype = torch.float
device = torch.device("mps")

# Create random input and output data
x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype)
y = torch.sin(x)

# Randomly initialize weights
a = torch.randn((), device=device, dtype=dtype)
b = torch.randn((), device=device, dtype=dtype)
c = torch.randn((), device=device, dtype=dtype)
d = torch.randn((), device=device, dtype=dtype)

learning_rate = 1e-6
for t in range(2000):
    # Forward pass: compute predicted y
    y_pred = a + b * x + c * x ** 2 + d * x ** 3

    # Compute and print loss
    loss = (y_pred - y).pow(2).sum().item()
    if t % 100 == 99:
        print(t, loss)

# Backprop to compute gradients of a, b, c, d with respect to loss
    grad_y_pred = 2.0 * (y_pred - y)
    grad_a = grad_y_pred.sum()
    grad_b = (grad_y_pred * x).sum()
    grad_c = (grad_y_pred * x ** 2).sum()
    grad_d = (grad_y_pred * x ** 3).sum()

    # Update weights using gradient descent
    a -= learning_rate * grad_a
    b -= learning_rate * grad_b
    c -= learning_rate * grad_c
    d -= learning_rate * grad_d


print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')
</code></pre></div></div>

<h1 id="다양한-방법-참고">다양한 방법 참고</h1>
<p>Tensorflow 사용시</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Python 3.9
tensorflow-macos==2.9
</code></pre></div></div>

<p><br /></p>
<h1 id="가상-환경-activate-후-입력">가상 환경 activate 후 입력</h1>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python -m pip install tensorflow-macos==2.9
tensorflow-metal==0.7.0

python -m pip install tensorflow-metal==0.7.0
</code></pre></div></div>

<h1 id="여러가지-활성코드">여러가지 활성코드</h1>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))


import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))

import tensorflow as tf
print("TensorFlow 버전:", tf.__version__)
print("사용 가능한 GPU 목록:", tf.config.list_physical_devices('GPU'))

import tensorflow as tf

GPU가 사용되고 있는지 확인
physical_devices = tf.config.list_physical_devices('GPU')
print("Num GPUs Available: ", len(physical_devices))

TensorFlow가 GPU를 사용하는지 확인
print("TensorFlow GPU 사용 여부: ", bool(physical_devices))

현재 선택된 GPU 장치 확인
print("현재 선택된 GPU 장치: ", physical_devices[0].name if physical_devices else "None")


import tensorflow as tf
from tensorflow import device_lib

device_lib.list_local_devices()
tf.config.list_physical_devices('GPU')

import torch
print(torch.__version__)
print(torch.backends.mps.is_built())

import torch
print(torch.backends.mps.is_available())

import torch

mps_device = torch.device("mps")

MPS 장치에 바로 tensor를 생성합니다.
x = torch.ones(5, device=mps_device)
또는
x = torch.ones(5, device="mps")

GPU 상에서 연산을 진행합니다.
y = x * 2

또는, 다른 장치와 마찬가지로 MPS로 이동할 수도 있습니다.
class YourFavoriteNet:
pass


model = YourFavoriteNet()  # 어떤 모델의 객체를 생성한 뒤,
model.to(mps_device)       # MPS 장치로 이동합니다.

이제 모델과 텐서를 호출하면 GPU에서 연산이 이뤄집니다.
pred = model(x)

import torch
mps_device = torch.device("mps")
</code></pre></div></div>

<p>#참고<br />
https://cpuu.postype.com/post/14278479<br />
https://jobbu.life/ko/posts/apple_silicon_gpu_tensorflow/</p>]]></content><author><name>SANGBEOM</name></author><category term="Network" /><summary type="html"><![CDATA[Mac에서 사용하는 GPU 알아보자.]]></summary></entry></feed>