no image
[VS Code] Copilot 무료 적용하기 | Windows
VS Code에서 GitHub Copilot을 무료로 적용할 수 있다는 기쁜 소식을 듣고 제 VS Code에도 적용하기 위해 실행해본 과정을 기록합니다. (사실 매우 쉬워서 적을 필요도 없지만...) https://code.visualstudio.com/blogs/2024/12/18/free-github-copilot Announcing a free GitHub Copilot for VS CodeAnnouncing a free plan for GitHub Copilot in Visual Studio Code.code.visualstudio.com 우선 VS Code를 실행합니다. 제 환경은 Windows이고, 기본적으로 VS Code가 설치되어 있고 GitHub 계정도 연결되어 있습니다. 창의 상단 탐색..
2024.12.20
[Docker] Docker Image 용량 최적화 방법 정리
머신러닝, 딥러닝 Docker image는 용량이 다소 큰 경우가 있습니다. 이 경우 리소스를 활용하는 관점에서 비효율성이 발생하므로 적절한 사이즈로 최적화하는 과정이 필요합니다. 대표적인 방법은 아래와 같습니다.작은 Base Image 사용하기Multi Stage BuildContainer 패키징작은 Base Image 사용Docker Image의 특성상 다양한 환경을 설정하기 때문에 비슷한 기능을 목표로 하더라도 서로 다른 리소스가 설치되어 있어서 어떤 경우에서는 당연히 설치되어야 하는 것들이 없는 경우도 있습니다. 파이썬의 예를 들어 보면 아래와 같은 경우가 있습니다.python:3.9  ➡️ 파이썬 표준 이미지python:3.9-slim ➡️ 파이썬 슬림 이미지로 Debian 기반. Product..
2024.12.17
no image
[Docker] Docker 주요 개념 및 CLI 기본 활용 정리
기본 개념가상화파이썬으로 개발을 하다보면 다양한 라이브러리를 갖다 쓰는 과정에서 의존성 충돌이 나거나, OS에 따라 제대로 동작하지 않는 경험들을 한 적이 있을 겁니다. 개발하는 일련의 프로세스, Local 환경에서 개발하고 완료되면 Staging 서버에 올리고 최종적으론 Production 서버에 배포를 살펴봤을 때 Local 환경과 Production 환경이 다르기 때문에 올바르게 작동하지 않을 수 있기 때문입니다. 이러한 문제를 해결하기 위해 가상화라는 기술이 등장했습니다.  가상화란 컴퓨터와 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어로, 물리적인 컴퓨터 자원을 논리적인 단위로 나누고 통합하여 자원을 활용할 수 있게 하는 기술입니다.[1] 그 중 소프트웨어 가상화는 Research / Produ..
2024.12.17
no image
VS Code에서 파이썬 가상환경 활성화 및 비활성화하기
기본적으로 다음과 같은 상황을 가정합니다.Windows 10 + VS Code Python 설치 (저같은 경우 pyenv로 설치)별도의 프로젝트 디렉토리 생성 완료디렉토리를 생성하고 해당 디렉토리에서 VS Code를 실행하면(또는 code .을 통해 이동하면) 아무것도 없는 디렉토리가 나옵니다. 여기서 다음과 같은 명령어를 실행하면 가상환경 폴더를 만들 수 있습니다. 저는 .venv라는 이름의 가상환경 폴더를 만들었고, 안에 파일 등의 내용은 그 아래 이미지를 참고해주세요.  $python -m venv [가상환경]   하지만, 아직 가상환경이 활성화되지는 않았습니다. 가상 환경을 활성화하기 위해서는 Scripts라는 하위 폴더로 이동한 후 activate을 해줘야 합니다. 아래 코드처럼 하면 됩니다. ..
2024.12.12
no image
CVAT로 Labeling 해서 영수증 OCR 데이터셋 만들기
1. CVAT 소개딥러닝 프로젝트를 진행하려다 보면, 모델이 없다기 보다는 메모리의 한계이거나 데이터가 없어서 제한되는 경우가 많습니다. 여기서는 객체 탐지, 특히 OCR을 수행하기 위한 데이터를 만드는 여정의 맛보기를 공유하고자 합니다. CVAT는 Computer Vision Annotation Tool의 약자로 컴퓨터 비전 알고리즘용 데이터 라벨링(원래 발음은 레이블링이지만, 통상적으로 많이 쓰는 표현 채택) 도구 입니다. Open CV처럼 Intel에서 개발된 오픈 소스 기반의 이미지 및 비디오 라벨링을 지원하기 때문에 CV 작업을 위해 활용이 가능합니다. CVAT는 docker를 통해 사용할 수 있지만, 편의를 위해 웹으로 사용했으며 Google이나 GitHub 계정이 있으면 쉽게 로그인할 수 있..
2024.11.08
no image
[QGIS] 서울 4대문 CSV 좌표 업로드 및 바운더리 형성 | 포인트를 폴리곤으로 변경하기
배경 서울은 4대문 즉 숭례문, 흥인지문, 돈의문, 숙정문으로 둘러싸여 있습니다. 이번에는 이전에 업데이트했던 베이스맵이 올라가있는 QGIS 프로젝트에 각 4대문의 (1) 좌표를 업로드하여 레이어를 형성하고, (2) 좌표 포인트를 직선으로 연결하여 도형(폴리곤)을 형성하여 4대문 안이 어딘지를 살펴보도록 하겠습니다. 위 작업을 위해 필요한 4대문의 좌표는 csv 파일로 위도(lat), 경도(lon)로 구성되어 있습니다. 순서는 '숭례문 ➡ 흥인지문 ➡ 숙정문 ➡ 돈의문 터' 로 되어있음을 유념하시기 바랍니다. 참고로 여기서 사용할 QGIS 버전은 3.22.5 입니다. csv 좌표 업로드 위에서 다운로드한 csv 파일을 이용해 좌표 레이어를 만들어보겠습니다. [ 레이어 - 레이어 추가 - 구분자로 분리된 ..
2022.06.20
no image
[QGIS] 프로젝트 시작 + 베이스맵 설치 | Open Map Street (OMS), TMS for Korea (카카오맵, 네이버맵 etc)
QGIS는 오픈소스의 지리정보시스템(Geographic Information System)을 활용가능한 응용 프로그램입니다. 여러 데이터를 보거나, 편집하거나, 분석이 가능합니다. 비슷한 기능을 제공하는 프로그램으로는 구글어스, ArcGIS 등이 있습니다. QGIS는 C++, Python 으로 프로그래밍되어 있는데, 덕분에 Python을 조금 할 줄 알면 더 많은 기능을 사용할 수 있을 것으로 보입니다.  구글어스는 구글에서 자체적으로 가지고 있는 구글맵, ArcGIS에서도 자체적인 맵을 제공하고 있지만, QGIS는 자체적인 디폴트로 켜진 지도의 형태는 없는 것으로 보입니다. 이는 프로그램을 설치 후 실행시켰을 때 아래와 같이 아무런 지도가 나타나지 않아 당황하게 됩니다. QGIS는 베이스맵이라는 것을 ..
2022.06.13
no image
[Brightics] 각국 증시(주가지수)의 성과 비교하기_Normalization
주식투자를 하는데 있어 다양한 투자 방법이 존재하지만, 여러 자산군의 조합을 통해 분산투자를 하는 방법이 경영대학원을 비롯해 모든 투자론에 가장 기초로 통용되고 있다. 그러기 위해서는 여러 자산군을 함께 놓고 비교할 필요가 있는데, 여기에 단순히 비교하기 어려운 점이 몇가지가 있다. 1. 각 주가지수의 단위가 다르다. 현재, KOSPI는 2,000 언저리에 있고, 나스닥은 10,000, S&P 500은 3,000, 다우존스는 25,000 등 각 지수별로 상이하기 때문에 똑같이 맞춰줄 필요가 있다. 2. 자산군들은 여러 나라에 골고루 분포되어야 하는데, 나라별로 거래일이 상이하다. 일반적으로, 평일엔 거래가 가능하지만, 각 국가별로 휴일이 다르기 때문이다. 예를 들어, 우리나라는 설과 추석에 쉬지만 미국의..
2020.07.10
no image
[Brightics] 데이터 전처리, 결측치(Null, N/A) 제거
Brightics Studio 역시 다른 데이터 분석 툴들과 마찬가지로, 데이터 전처리 그중에서도 결측치 제거에 관련된 툴들을 제공한다. 이번 예시에서도 저번 피어슨 상관분석과 유사한 데이터를 사용했다. 지난번과 조금 다른 점은 강수량도 예제 풀이에 같이 사용한다는 점이다. 기본 전제는 다음과 같다. '기온과 강수량이 전력 사용량에 미치는 상관관계' https://seanpark11.tistory.com/19 주어진 데이터를 로드하고, 결측치를 찾아보기 위해서 Statistic Summary를 추가한 후 Target statisitc 중 Null Count를 클릭해서 실행시켜준다. 이 예시 데이터에서는 기온에서는 4개, 강수량에서는 573개의 결측치가 나타났다. 우선, 강수량의 경우는 실제로 없는 (건조..
2020.07.09
반응형

VS Code에서 GitHub Copilot을 무료로 적용할 수 있다는 기쁜 소식을 듣고 제 VS Code에도 적용하기 위해 실행해본 과정을 기록합니다. (사실 매우 쉬워서 적을 필요도 없지만...)

 

https://code.visualstudio.com/blogs/2024/12/18/free-github-copilot

 

Announcing a free GitHub Copilot for VS Code

Announcing a free plan for GitHub Copilot in Visual Studio Code.

code.visualstudio.com

 

우선 VS Code를 실행합니다. 제 환경은 Windows이고, 기본적으로 VS Code가 설치되어 있고 GitHub 계정도 연결되어 있습니다. 창의 상단 탐색(Search) 칸 우측에 보면 Copilot 로고를 확인할 수 있습니다.

 

해당 로고를 클릭하면 아래 이미지 같은 창이 우측에 생성됩니다. 사용하겠다는 버튼(파란색으로 활성화)을 클릭해주면 연결을 자동으로 해줍니다. 

 

연결 후에는 GitHub에 연결한다는 창이 잠깐 뜨는데, VS Code에 GitHub 계정 연동이 되어 있다면 별다른 작업을 할 필요가 없습니다. 잘 연결이 되었다면 우측에 LLM에 연결할 수 있는 창을 확인할 수 있습니다. 연결되는 LLM은 GPT 4o나 Claude 3.5 Sonnet이 가능한 것으로 보입니다. 

 

 

코드 입력창에도 자동완성이 잘되는 것을 확인할 수 있습니다. 이제 VS Code에서도 창을 옮길 필요없이 코드 생산성이 많이 올라갈 수 있을 것 같네요.

 

 

 

반응형
반응형

머신러닝, 딥러닝 Docker image는 용량이 다소 큰 경우가 있습니다. 이 경우 리소스를 활용하는 관점에서 비효율성이 발생하므로 적절한 사이즈로 최적화하는 과정이 필요합니다. 대표적인 방법은 아래와 같습니다.

  1. 작은 Base Image 사용하기
  2. Multi Stage Build
  3. Container 패키징

작은 Base Image 사용

Docker Image의 특성상 다양한 환경을 설정하기 때문에 비슷한 기능을 목표로 하더라도 서로 다른 리소스가 설치되어 있어서 어떤 경우에서는 당연히 설치되어야 하는 것들이 없는 경우도 있습니다. 파이썬의 예를 들어 보면 아래와 같은 경우가 있습니다.

  • python:3.9  ➡️ 파이썬 표준 이미지
  • python:3.9-slim ➡️ 파이썬 슬림 이미지로 Debian 기반. Production 환경에 적합
  • python:3.9-alpine ➡️ Alpine Linux 기반 사용. 크기는 작으나 수동 설치가 필요

Multi Stage Build

도커 이미지를 효율적으로 작성하고 최적화하기 위해 컨테이너 이미지를 만들며 빌드에는 필요하지만, 최종 컨테이너에 필요 없는 내용을 제외하면서 이미지를 생성하는 방법입니다. 이름처럼 하나의 파일에 여러 이미지를 빌드하고 사용하는 것입니다. 

 

아래는 Multi Stage Build 구현을 위한 Dockerfile 예시에서 중요한 부분만 발췌한 것입니다. 살펴보면 스테이지 마다 FROM을 나누고 as build와 as runtime으로 나눈 것을 확인할 수 있습니다. 그리고 COPY --from=build를 통해 build에서 필요한 내용만 추출할 수 있습니다. 

# Stage 1: Build
FROM python:3.9 as build

...

# Stage 2: Runtime
FROM pyton:3.9-slim as runtime

...

COPY --from=build /root/.local /root/.local

...

Container 패키징

도커 이미지 컨테이너를 패키징하는 과정에서 최적화를 하는 것도 필요합니다. 아래는 용량을 줄이기 위해 체크해야 할 요소들입니다 

  1. .dockerignore를 통해 필요없는 파일들을 제거
  2. .pt, .pth같은 큰 사이즈 파일은 빌드에 포함하지 않고, 빌드 타임 혹은 컨테이너 시작하는 스크립트에서 다운로드
  3. Dockerfile에서 command의 순서를 변경 가능성이 낮은 명령어를 위로 높은 명령어를 아래로 놓는 방식으로 최적화

참고자료

[1] 변성윤. "Docker". boostcamp AI Tech.

반응형
반응형

기본 개념

가상화

파이썬으로 개발을 하다보면 다양한 라이브러리를 갖다 쓰는 과정에서 의존성 충돌이 나거나, OS에 따라 제대로 동작하지 않는 경험들을 한 적이 있을 겁니다. 개발하는 일련의 프로세스, Local 환경에서 개발하고 완료되면 Staging 서버에 올리고 최종적으론 Production 서버에 배포를 살펴봤을 때 Local 환경과 Production 환경이 다르기 때문에 올바르게 작동하지 않을  있기 때문입니다. 이러한 문제를 해결하기 위해 가상화라는 기술이 등장했습니다. 

 

가상화란 컴퓨터와 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어로, 물리적인 컴퓨터 자원을 논리적인 단위로 나누고 통합하여 자원을 활용할 있게 하는 기술입니다.[1] 그 중 소프트웨어 가상화는 Research / Production 환경에서 공통적으로 사용하는 환경 정도로 간단하게 정의할 수 있습니다. 즉, 애플리케이션을 활용하기 위한 환경을 구분하고 이를 필요한 상황에서 적재적소에 활용할 수 있도록 도와줍니다. 

 

가상화를 위해서 애플리케이션이 구동하는 환경을 잘 정리해둘 필요가 있는데, 이를 사람이 기록한다면 작성 중 실수가 있거나 누락 가능성이 있습니다. 따라서, 자동화가 필요하게 되었고 이를 위한 기술이 필요합니다.

Docker 

가상환경을 자동으로 만들어주는 기술은 여러 가지가 있지만, 대표적인 것 중 하나가 '컨테이너'입니다. 이는 애플리케이션 실행에 필요한 모든 파일을 포함해 전체 런타임 환경에서 애플리케이션을 패키징하고 격리하는 기술을 말합니다. 즉, 환경 자체를 하나의 템플릿으로 제공하는 것이죠.

 

이러한 컨테이너 기술을 사용할 수 있도록 나온 오픈소스가 Docker입니다. Docker를 사용하기에 앞서 아래 4가지 정도는 알아야 추가적인 설명을 이해할 수 있기 때문에 간단하게 기록하고 넘어가겠습니다. 앞으로 기재하는 많은 표현에서 Docker는 편의상 생략될 수 있습니다. 

 

  • Docker Image : 컨테이너를 실행할 사용할 있는 템플릿 (Read Only). OS, 설정 등을 포함한 실행 환경으로 다른 사람들이 만든 Docker Image 어느 환경에 가져와서도 실행 가능
  • Docker Container : Docker Image 활용해 실행된 인스턴스 (수정 가능)
  • Docker Compose : 여러 개의 Docker Image 실행하기 위해서 사용하는 방법
  • Container Registry : 자신만의 Docker Image 만들어 저장. 다른 사람에게 공유하거나 다른 사람의 소프트웨어를 받아서 사용 가능

 

Docker의 기본 활용

Image 다운로드

애플리케이션 구동을 위한 템플릿인 이미지를 다운로드 받기 위해서는 git처럼 pull을 해오면 됩니다. 

docker pull [이미지 이름]:[태그]

 

필요한 이미지들은 깃허브 처럼 Dockerhub 같은 레지스트리에서 이미지를 pull하는 방법을 안내하고 있으니 참고하면 좋을 것 같습니다. 

PyTorch in dockerhub

 

다운로드 받은 이미지들은 images를 통해 확인할 수 있습니다.

docker images

Image 실행

다운로드 받은 이미지들은 다음과 같은 명령어로 실행할 수 있습니다.

docker run [옵션] [이미지 이름]:[태그]

 

위 코드로 실행할 수 있으나 여러가지 옵션이 있습니다.

  • --name : 이름 지정
  • -e : 환경변수 설정
  • -d : 데몬(백그라운드) 모드 
  • -p : 포트 지정 옵션으로 로컬 호스트 포트:컨테이너 포트 형태로 지정

Dockerfile 작성

Docker Image를 빌드하기 위해 필요한 정보를 입력합니다. 주요하게 입력할 것들은 아래와 같습니다.[2]

주요 내용 설명
FROM <img> 이미지 빌드에 사용할 베이스 이미지 지정
RUN <cmd> 실행할 리눅스 명령어 실행. 여러 명령어가 있는 경우  && \로 이어서 아래로 줄바꾸면서 작성
WORKDIR <dir> 명령어를 실행할 컨테이너 경로 지정
COPY <src> <dst> 로컬 디렉토리<src>에서 컨테이너 내 디렉토리<dst>로 복사 
CMD <cmd>  실행할 명령어, 인자를 지정해서 띄어쓰기를 하지 않고 사용. 예를 들어, ["python","main.py"]로 하면 python main.py를 실행. 
ENV <path> 컨테이너 내 환경변수를 지정. 파이썬 애플리케이션에서는 아래를 보통 지정
ENV PYTHON=/app
ENV PYTHONBUFFERED=1
EXPOSE <port> 컨테이너 외부에 노출할 포트 지정. 예를 들어, localhost:8000에서 8000 같은 것을 지정
ENTRYPOINT <cmd> 이미지를 컨테이너로 띄울 때 항상 실행하는 명령어 지정. CMD도 컨테이너 실행 시점에 명령어 적용 가능하지만, 오버라이딩이 불가. (보안에서 안전)

 

위와 같이 Dockerfile을 만들고 나면 이미지를 생성(빌드)합니다. 생성할 때는 아래와 같은 코드를 활용할 수 있습니다. 만약 현재 폴더에 Dockerfile이 있으면 .만 작성해주면 됩니다. 

docker build -t [빌드 이미지 이름:태그 이름] "Dockerfiile 경로"

 

이렇게 만든 이미지를 인터넷에 올릴 수 있습니다. 깃허브처럼 push 명령어를 사용합니다. 또한, push한 이미지는 pull도 가능합니다. 

docker push [이미지 이름:태그]

Docker Compose

하나의 Docker Image가 아니라 여러 개를 동작시키고 싶다면 docker-compose.yml 파일에 작성해서 Docke Compose를 가능하도록 하면 됩니다. yaml 파일 작성을 위해 필요한 것들을 간단히 살펴보겠습니다.

 

services는 실핼할 컨테이너를 정의합니다. 각 서비스는 하나의 컨테이너로 세부 설정을 저장하며, 아래의 예시를 살펴보면 web과 redis라는 서비스로 구성되는 것을 확인할 수 있습니다. 각 서비스의 구성 요소는 dockerfile에 있는 내용과 동일합니다. 

services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

 

이렇게 작성한 docke-compose.yml 파일이 있따면 아래 코드를 통해 적용하면서 실행할 수 있습니다. 

docker-compose up

 

그 외에도 아래와 같은 추가적인 기능들이 있습니다.

docker-compose -d              # 백그라운드 실행
docker-comopse down            # 서비스 중단 (컨테이너, 볼륨 등 삭제)
docker-compose logs <서비스명> # 로그 확인

 

참고자료

[1] https://terms.tta.or.kr/dictionary/dictionaryView.do?subject=%EA%B0%80%EC%83%81%ED%99%94

[2] https://docs.docker.com/build/concepts/dockerfile/

[3] https://docs.docker.com/compose/gettingstarted/

[4] 변성윤. "Docker". boostcamp AI Tech.

 

반응형
반응형

기본적으로 다음과 같은 상황을 가정합니다.

  • Windows 10 + 
  • VS Code 
  • Python 설치 (저같은 경우 pyenv로 설치)
  • 별도의 프로젝트 디렉토리 생성 완료

디렉토리를 생성하고 해당 디렉토리에서 VS Code를 실행하면(또는 code .을 통해 이동하면) 아무것도 없는 디렉토리가 나옵니다. 여기서 다음과 같은 명령어를 실행하면 가상환경 폴더를 만들 수 있습니다. 저는 .venv라는 이름의 가상환경 폴더를 만들었고, 안에 파일 등의 내용은 그 아래 이미지를 참고해주세요. 

 

$python -m venv [가상환경]

 

 

 

하지만, 아직 가상환경이 활성화되지는 않았습니다. 가상 환경을 활성화하기 위해서는 Scripts라는 하위 폴더로 이동한 후 activate을 해줘야 합니다. 아래 코드처럼 하면 됩니다. 코드 아래 이미지를 보면 잘 생성된 것을 확인할 수 있습니다.

 

여기서 약간 혼란스러웠던 것은 경로를 지정할 때 슬래시의 방향(/ or \)인데 VS Code에서는 윈도우즈 시스템이 일반적으로 사용하는 역슬래시 말고 그냥 슬래시로 동작합니다. 

 

$cd [가상환경]/Scripts
$source activate

 

 

만약 가상환경을 끝내려면 어떻게 해야할까요? activate 보다 훨씬 간단하게 deactivate만으로 가능합니다. 경로 이동이 필요한가 테스트를 해봤는데 따로 필요하지 않는 것을 확인했습니다. 

 

$deactivate
반응형
반응형

1. CVAT 소개

딥러닝 프로젝트를 진행하려다 보면, 모델이 없다기 보다는 메모리의 한계이거나 데이터가 없어서 제한되는 경우가 많습니다. 여기서는 객체 탐지, 특히 OCR을 수행하기 위한 데이터를 만드는 여정의 맛보기를 공유하고자 합니다.
 
CVAT는 Computer Vision Annotation Tool의 약자로 컴퓨터 비전 알고리즘용 데이터 라벨링(원래 발음은 레이블링이지만, 통상적으로 많이 쓰는 표현 채택) 도구 입니다. Open CV처럼 Intel에서 개발된 오픈 소스 기반의 이미지 및 비디오 라벨링을 지원하기 때문에 CV 작업을 위해 활용이 가능합니다.
 
CVAT는 docker를 통해 사용할 수 있지만, 편의를 위해 웹으로 사용했으며 Google이나 GitHub 계정이 있으면 쉽게 로그인할 수 있습니다. 웹용 애플리케이션은 아래 링크를 통해 접근할 수 있습니다.
 
Computer Vision Annotation Tool

Computer Vision Annotation Tool

app.cvat.ai

 
 

2. Annotation 진행하기

2.1. Task 생성하기 

처음 로그인을 하게 되면 아래와 비슷한 창이 나옵니다. 데이터를 생성하기 위해서는 Projects 또는 Tasks에서 생성해줘야 하는데, 여기서는 Tasks에서 생성하도록 하겠습니다. 아래 창에서 우측 상단의 "+" 박스를 클릭합니다.
 

 
그러면 새로운 task를 생성하기 위한 팝업이 나옵니다. Name / Labels는 필수로 지정해줘야 하고, 라벨링을 진행할 데이터를 업로드할 수 있습니다. OCR이기 때문에 Labels는 text 한개만 지정하고, 색은 빨간색으로 선택했습니다. (스포이드로 선택 가능) 그리고 필수는 아니지만, "Add an attribute" 버튼을 클릭해서 박스의 글자를 기재하는 transcription도 추가했습니다. 
 

 
위에 세팅이 끝나고 Continue를 누르게 되면, 제가 지정한 Label이 나오게 되는데요. Raw 탭을 클릭하면, 리스트와 딕셔너리 형태로 표현되는 것을 확인할 수 있습니다.
 

 
이렇게 완료하고 Submit 버튼을 누른 후 좌측 상단 탭에 있는 Jobs로 이동하면, 아래 이미지처럼 잘 올라가 있는 것을 확인할 수 있습니다.
 

 

2.2. Annotation 수행하기 

잘 저장한 task에 대해서 데이터 라벨링을 진행해보겠습니다. Jobs에서 해당 프로젝트로 이동하면, 아래와 같은 창이 나오게 되는데, 사각형의 형태로 라벨링을 진행하려고 합니다. 가이드라인은 임의로 아래와 같이 수립했습니다.
 

  • 모든 글자 객체는 사각형만 허용 (즉, 4개 점 이상 허용x)
  • 일정하게 줄글 형태로 이어지기 때문에 최대한 직사각형 
  • 다만, 휘어짐이 심해서 직사각형으로 할 경우 겹치는 영역이 많을 경우 일반 사각형 허용

annotation은 그림판처럼 좌측에서 선택할 수 있습니다. 여기서 제가 사용한 것은 직사각형 모양과 오각형 모양(Polygon)을 사용했습니다. 
 

 
버튼을 클릭해서 사각형을 잘 그려보면 (직관적으로 그릴 수 있습니다), 사각형이 잘 생성된 것을 확인할 수 있고, 제가 만들고 싶었던 transcription이라는 attribute를 default 화살표를 누르면 추가로 확인할 수 있습니다. 이를 잘 입력해줍니다. 
 

 
이러허게 여러 개를 반복해서 만들면 아래처럼 만들 수 있습니다. 
 

 

2.3. dataset 가져오기

일련의 작업을 마무리하고, 저희가 원하는 데이터 포맷으로 가져와야 할 것 입니다. 이를 수행하기 위해선 좌측 상단의 'Menu'를 클릭해서 'Export job dataset'을 누르면 됩니다. 저장하려는 이름과 데이터 포맷을 선택하고 OK 합니다. 

 
여기서 제가 잘 몰라서 헤맸던 부분인데, 여기서 다운로드는 시스템 경로에 지정된 폴더에 자동으로 저장되지 않습니다. 여러번 눌러도 잘 저장되지 않았는데 CVAT에서는 한번 zip 파일로 만들어주고 이를 수동으로 저장하는 형태입니다. 이러한 실수를 피하기 위해서는 아래 이미지 같은 알림이 뜰 때 "here"를 클릭하거나 Requests 탭으로 직접 이동해야 합니다. 
 

 
그렇게 이동하면 아래처럼 제가 요청했던 작업들을 전체적으로 조회할 수 있는데, 가장 위에 있는 Export Annotations의 ...을 클릭해 다운로드해주면 됩니다. 

 
저장한  압축파일을 풀고, json을 확인해보니 잘 입력된 것처럼 보입니다. (실제로 처음 다운로드 받았을 때는 한 줄로 표기되어있어서 보기 편하도록 일부 수정했습니다)
 

반응형
반응형

배경

서울은 4대문 즉 숭례문, 흥인지문, 돈의문, 숙정문으로 둘러싸여 있습니다. 이번에는 이전에 업데이트했던 베이스맵이 올라가있는 QGIS 프로젝트에 각 4대문의 (1) 좌표를 업로드하여 레이어를 형성하고, (2) 좌표 포인트를 직선으로 연결하여 도형(폴리곤)을 형성하여 4대문 안이 어딘지를 살펴보도록 하겠습니다.

 

위 작업을 위해 필요한 4대문의 좌표는 csv 파일로 위도(lat), 경도(lon)로 구성되어 있습니다. 순서는 '숭례문 ➡ 흥인지문 ➡ 숙정문 ➡ 돈의문 터' 로 되어있음을 유념하시기 바랍니다.

4 Gates.csv
0.00MB

참고로 여기서 사용할 QGIS 버전은 3.22.5 입니다.

 

csv 좌표 업로드

위에서 다운로드한 csv 파일을 이용해 좌표 레이어를 만들어보겠습니다. [ 레이어 - 레이어 추가 - 구분자로 분리된 텍스트 레이어 추가 ] 로 들어가서 위 파일을 저장한 위치로 이동하여 파일을 올려둡니다.

 

위 과정을 거쳐서 업로드한 파일은 아래 사진 좌측처럼 올라가게 됩니다. X필드는 lon를 설정하고 Y필드는 lat으로 설정해줍니다. 해당 좌표는 4대문 각각이므로 '포인트 좌표', 좌표계는 OSM 기본좌표계를 설정해줍니다. 설정이 끝나면 추가하여 레이어를 형성합니다. 만들어진 레이어는 아래 사진 우측처럼 잘 올라간 것을 확인할 수 있습니다.

 

(색은 그때마다 달라질 수 있습니다. 저는 해당 레이어 스타일을 통해 눈에 띄는 빨간색으로 바꿔줬습니다.)

 

 

포인트를 폴리곤으로 변환하기

 

포인트를 폴리곤으로 변환하는 것은 다음과 같이 두 과정을 거쳐서 바꿔줍니다.

 

(1) 포인트를 이어 라인 형성

(2) 라인을 이어 폴리곤 형성

 

우선 포인트를 이어 라인을 만들어 봅시다. 먼저 [ 공간처리 - 툴박스 ] 를 눌러 화면 우측에 툴박스를 만들어 줍니다. 이를 활성화시키지 않으면, 매번 기능을 찾아야 하는 번거로움이 있기 때문에 활성화를 하는 편이 낫습니다.

 

그다음으로는 [ 벡터 생성 - 포인트를 경로로 ] 이동(또는 '포인트 경로'를 키워드로 검색 가능)하여 'Create closed loop' 옵션을 선택한 다음 '실행'을 눌러줍니다. 만약 closed loop를 선택하지 않는 경우 아래 그림과 같이 폐경로가 형성되지 않고 처음과 끝이 연결되지 않습니다. (폴리곤을 만들 때는 크게 문제되지는 않습니다)

 

다음은 라인을 이어 폴리곤을 형성하겠습니다. 똑같이 툴박스로 이동하여 [ 벡터 도형 - 라인을 폴리곤으로 ] 을 선택(또는 검색창에서 '라인 폴리곤'으로 검색)해 실행합니다. 이 경우 별도 옵션을 선택할 필요는 없습니다. 잘 실행이 마무리 되었다면 아래 그림과 같은 폴리곤이 형성됨을 확인할 수 있습니다.

 

이 기능들을 활용할 때 유의해야할 점은 여기서 포인트들의 순서에 따라 경로와 폴리곤의 모양이 달라질 수 있다는 것입니다. 즉, 위 파일의 순서와 다르게 가령 '숭례문 - 숙정문 - 흥인지문 - 돈의문 터' 로 할 경우 평범한 사각형이 아닌 대각선이 교차한 도형이 형성될 것입니다.

 

그렇기 때문에 자신의 QGIS 활용 목적에 따라 적절한 순서를 갖추는 것이 필요합니다.

반응형
반응형

QGIS는 오픈소스의 지리정보시스템(Geographic Information System)을 활용가능한 응용 프로그램입니다. 여러 데이터를 보거나, 편집하거나, 분석이 가능합니다. 비슷한 기능을 제공하는 프로그램으로는 구글어스, ArcGIS 등이 있습니다. QGIS는 C++, Python 으로 프로그래밍되어 있는데, 덕분에 Python을 조금 할 줄 알면 더 많은 기능을 사용할 수 있을 것으로 보입니다. 

 

구글어스는 구글에서 자체적으로 가지고 있는 구글맵, ArcGIS에서도 자체적인 맵을 제공하고 있지만, QGIS는 자체적인 디폴트로 켜진 지도의 형태는 없는 것으로 보입니다. 이는 프로그램을 설치 후 실행시켰을 때 아래와 같이 아무런 지도가 나타나지 않아 당황하게 됩니다. QGIS는 베이스맵이라는 것을 선택해야 화면상에 표시할 콘텐츠에 필요한 배경을 활용할 수 있습니다. 

(QGIS 버전 3.22.5. 입니다)

 

먼저 베이스맵 선택을 위한 플러그인을 설치할 필요가 있습니다. 위 사진처럼 리본메뉴 상단에서 [ 플러그인 - 플러그인 관리 및 설치 ] 로 들어갑니다. 여기서는 총 두가지 베이스맵을 설치해볼 예정인데, 하나는 Quick Map Services이고 다른 하나는 우리나라 웹서비스(다음, 네이버 등)에서 제공하는 TMS for Korea 입니다.

 

첫번째로 Quick Map Services 입니다. 이는 NextGIS 라는 팀에서 개발되고 있는 플러그인으로 기본적으로 파이썬 라이브러리 중 하나인 folium에서도 사용하는 Open Street Map (OSM) 등을 사용할 수 있습니다. 개인적으로 다른 플러그인보다 눈에띄는 색 및 전세계에 대한 맵을 제공하기 때문에 선호하는 편입니다.

 

설치는 위에서 들어간 플러그인 관리에서 QuickMapServices를 검색하셔서 설치를 해주면 됩니다. (여기서 유의할 것은 띄어쓰기로 검색은 어렵다는 점입니다.) 

 

이렇게 설치한 플러그인이 잘 동작하는지 확인하기 위해서는 프로젝트를 만들어야 합니다. 리본메뉴 좌측 최상단의 [ 프로젝트 - 새로 생성 ] 을 통해 아래 사진과 같이 깨끗한 프로젝트를 하나 만들어줍니다. 그리고 리본메뉴에서 오른쪽으로 이동하면 [ 웹 - QuickMapServices - OSM - OSM Standard ] 를 선택하여 줍니다.

 

그렇게 하면, 아래와 같이 잘 동작하는 것을 알 수 있습니다. (물론 디폴트로 한국 맵이 뜨는 것은 아니고, 확대/이동을 해줘야 합니다) 그리고 좌측하단에 OSM Standard란 레이어도 잘 생성된 것을 확인할 수 있습니다.

 


 

다음으로는 TMS for Korea가 있습니다. TMS가 무엇인지 잘 몰랐기에 찾아봤는데, Tile Map Service의 약자로 이미 구역별로 나눠서 지리정보를 제공하는 시스템입니다. 대부분 REST API 표준을 사용하여 단순한 url을 제공하는 것을 목적으로 합니다. 

 

이 플러그인의 경우 카카오, 네이버, VWorld (공간정보산업진흥원) 등 한국에 특화된 베이스맵을 활용할 수 있습니다. 스마트폰 앱 등으로 익숙한 네이버, 카카오맵의 모양을 활용하려면 이 기능을 사용하면 됩니다. 다만, 위의 OSM과 달리 해당 웹서비스와 통신방식이 느린지 잘 켜지지 않는 경우가 있으므로 주의할 필요가 있습니다. 

 

플러그인 다운로드는 아까 위에서와 마찬가지로 다운로드를 하는데, 이번에는 키워드로 'tms' 이정도로 검색해서 다운로드 하면 됩니다.

 

그 다음 실행해주는 것도 비슷하게  [ 웹 - QuickMapServices - TMS for Korea - Kakao Maps - Street ] 를 선택했습니다. 그러면 아래와 같이 베이스맵이 잘 켜지는 것을 확인할 수 있습니다.

 

 

베이스맵 사용시 주의해야할 점은 각 맵별로 사용하는 좌표계가 다른데, 가끔 작동이 잘안하는 것처럼 보일 때는 좌표계가 다르게 설정되어있는 경우가 있습니다. 이를 맞춰줘야 한다는 사실만 유념하시면 될 것 같습니다.

 

 

반응형
반응형

주식투자를 하는데 있어 다양한 투자 방법이 존재하지만, 여러 자산군의 조합을 통해 분산투자를 하는 방법이 경영대학원을 비롯해 모든 투자론에 가장 기초로 통용되고 있다. 그러기 위해서는 여러 자산군을 함께 놓고 비교할 필요가 있는데, 여기에 단순히 비교하기 어려운 점이 몇가지가 있다.

 

1. 각 주가지수의 단위가 다르다. 현재, KOSPI는 2,000 언저리에 있고, 나스닥은 10,000, S&P 500은 3,000, 다우존스는 25,000 등 각 지수별로 상이하기 때문에 똑같이 맞춰줄 필요가 있다.

 

2. 자산군들은 여러 나라에 골고루 분포되어야 하는데, 나라별로 거래일이 상이하다. 일반적으로, 평일엔 거래가 가능하지만, 각 국가별로 휴일이 다르기 때문이다. 예를 들어, 우리나라는 설과 추석에 쉬지만 미국의 국경일에는 쉬지 않는 것 처럼 말이다.

 

 

 

Delete Missing Data로 null값들을 제거해준 후, Unpivot을 통해 여러 데이터를 한꺼번에 모아서 차트를 만들어 줄 수 있다. x축은 date, value를 설정해 y축으로 활용하고, 아래 사진에서 표시한것처럼 데이터가 25000개이므로, Show rows를 30,000개로 설정하면 아래 차트와같이 나올 것이다.

하지만, 여전히 문제가 남아있는 것은 scale의 차이 때문에 유독 튀어올라 보이거나, 너무 낮은 값들이 존재한다. 이를 맞춰주기 위해서 정규화(Normalization)가 필요하다. 정규화는 쉽게 말해, 값을 크기로 나눠 최대값을 1로 맞춰주는 것으로 이해해도 좋다. 정규화를 하면 좋은 것은 스케일의 차이로 인한 통계 해석의 어려움을 줄이고, 그 사이에서 패턴을 찾을 수 있다는 것이다.

 

Normalize 함수를 이용해, 우리가 활용할 value(각 지수의 값)를 index(코스피, 나스닥 등등 지수의 구분)로 group by해주고, MinMaxScaler로 선택해주면 된다.

 

그 결과는 아래와 같이 나타낼 수 있다. 뭔가 금융에서 그럴싸하게 보이게 만들어진 것 같다.

 

위 분석 방법의 문제점도 있다. 가장 쉽게 생각할 수 있는 것은 중간에 결측치를 빼준 것인데, 결측치를 빼줬을 때 엄청난 금융시장에 충격이 가해진다면 (예를 들어, 911테러나 코로나) 그런 위기 상황에서 자산의 상관관계를 분석하기는 어려울 것이다. 하지만, 아주 긴 시계열로 전반적인 트렌드를 살펴보고자 한다면 이렇게 분석하는 것도 그리 나쁘지 않은 선택이 되리라 판단한다.

 

 


위 내용은 모두 아래의 Brightics Studio의 Tutorial을 기반으로 작성하였습니다.

 

https://www.brightics.ai/kr/docs/ai/s1.0/tutorials/87_py_stock_price_analysis?type=insight

 

Brightics Studio

 

www.brightics.ai

 

반응형
반응형

Brightics Studio 역시 다른 데이터 분석 툴들과 마찬가지로, 데이터 전처리 그중에서도 결측치 제거에 관련된 툴들을 제공한다. 이번 예시에서도 저번 피어슨 상관분석과 유사한 데이터를 사용했다. 지난번과 조금 다른 점은 강수량도 예제 풀이에 같이 사용한다는 점이다. 기본 전제는 다음과 같다.

 

'기온과 강수량이 전력 사용량에 미치는 상관관계'

 

https://seanpark11.tistory.com/19

 

 

주어진 데이터를 로드하고, 결측치를 찾아보기 위해서 Statistic Summary를 추가한 후 Target statisitc 중 Null Count를 클릭해서 실행시켜준다. 이 예시 데이터에서는 기온에서는 4개, 강수량에서는 573개의 결측치가 나타났다.

 

우선, 강수량의 경우는 실제로 없는 (건조한) 경우가 있기 때문에 결측치에 문제가 없다고 판단하기로 하자. 대신에, 실제로 강수량이 없었으므로 그 빈자리 대신에 0으로 채울 필요가 있다. (1)

 

그러나, 기온의 경우 값이 존재하지 않는 것은 문제가 있다고 볼 수 있는데, 아래 사례에서는 개수가 작으므로 제거하기로 결정했다. (2)

 

 

위 두가지 (1), (2) 결정을 실행에 옮겨야 하는데, 순서는 (2) -> (1)의 순서로 진행했다. (2)처럼 삭제하는 경우는 굉장히 간단한데, 'Delete Missing Data' 함수를 이용해 우리가 지우고자 하는 열만 아래 이미지처럼 설정해주면 끝이다. 

 

 

그에 비해, 바꿔주는 것은 조금은 더 번거로운 과정을 거쳐야 한다. 우선 'Replace Missing Number'를 선택해 우리가 바꿔줘야 할 열을 선택한다. 그런 다음, 우리가 채워줘야 할 값을 넣어야 하는데 우리가 지정하는 어떤 값을 넣기 위해서는 'To'를 선택해주면 된다. 

(나머지 경우들은 의미 그대로 평균, 중간값, 최소, 최대를 넣게 된다.)

 

그리고 마지막으로 Fill Holes With에 우리가 넣고자하는 0을 써주면 된다. (여기서는 default로 0.0이 설정되어 있으니까 따로 해줄 필요는 없다.) 

 

 

그리고 그 결과를 위 statistic summary를 똑같이 적용해보면, 아래와 같은 결과를 확인할 수 있다. Null Count가 모두 0이므로, 우리가 생각했던데로 잘 시행됐다고 할 수 있다.

 

 


위 내용은 모두 아래의 Brightics Studio의 Tutorial을 기반으로 작성하였습니다.

 

https://www.brightics.ai/kr/docs/ai/s1.0/tutorials/25_0_py_Create_Date_Var?type=insight

 

Brightics Studio

 

www.brightics.ai

 

반응형