Introduction

Algorithm 문제를 풀고 GitHub에서 관리하고 있었는데, 문제를 해결할 때 replit을 초기에 많이 사용했었다.
하지만 현재 사용하고 있는 Visual Studio Code와 indentation의 규칙이 달라서 GitHub Actions로 모두 동일한 format을 가지도록 자동화하겠다.

GitHub Actions는 구동 조건 (CronJob, 특정 branch에 push, …)을 만족하면 준비된 스크립트를 자동적으로 실행해준다.
따라서 CI/CD를 포함하여 다양한 작업에 사용되고 있다. (로또 자동화도 가능,,,)

i-wanna-be-rich
Read more »

Introduction

Go는 구글에서 개발한 프로그래밍 언어로, 간결하고 효율적인 코드 작성을 위해 설계된 언어입니다. Go는 정적 타입 언어로, C와 유닉스 환경에서 사용되는 도구들의 장점을 결합한 언어로 개발되었습니다.

Features of Go

  1. 간결하고 가독성이 좋은 문법
    • C 스타일의 문법을 가지고 있으며, 불필요한 기능을 제거하여 코드를 간결하게 작성 가능
    • 문법이 간단하고 가독성이 좋아 새로운 개발자들의 빠른 숙달
  2. 효율적인 동시성 지원
    • 동시성을 위한 기능 내장 $\rightarrow$ 병렬 프로그래밍의 쉬운 구현
    • Goroutine은 경량 스레드로, 작은 메모리 오버헤드로 수많은 고루틴을 동시에 실행 가능 $\rightarrow$ 대규모 시스템에서 효율적인 동시성 처리 구현 가능
  3. 빠른 컴파일과 실행 속도
    • 정적 타입 언어지만 빠른 컴파일 속도
    • Garbage collection을 통한 편한 메모리 관리 $\rightarrow$ 대규모 시스템에서도 빠른 실행 속도를 제공합니다.
  4. 강력한 표준 라이브러리
    • 풍부한 표준 라이브러리를 제공 (네트워킹, 암호화, 웹 개발, 데이터베이스 액세스 등 다양한 작업)
  5. 크로스 플랫폼 지원
    • 다양한 운영 체제와 아키텍처에서 사용할 수 있도록 크로스 플랫폼 지원 제공
    • 하나의 코드베이스로 여러 플랫폼에서 실행할 수 있는 이식성 높은 프로그램 개발 가능

Go는 웹 서버, 분산 시스템, 클라우드 서비스, 네트워크 프로그래밍 등 다양한 분야에서 사용된다.
특히, 동시성 처리에 강점을 가지고 있어 대규모 시스템의 성능을 향상시킬 수 있다.
또한, Go는 개발자들의 생산성을 높이기 위해 설계된 언어로, 간결한 문법과 강력한 도구들을 제공하여 개발자들이 효율적으로 코드를 작성할 수 있도록 도와준다.

Read more »

Introduction

  • Kubernetes$_{^{\ [1]}}$: Container화된 application을 자동화하고 관리하기 위한 open source container orchestration 플랫폼$_{^{\ [2,3]}}$
    • MLOps에서 왜 Kubernetes가 필요할까?$_{^{\ [4]}}$
      • 수많은 머신러닝 모델의 학습 요청을 차례대로 실행하는 것
      • 다른 작업 공간에서도 같은 실행 환경을 보장해야 하는 것
      • 배포된 서비스에 장애가 생겼을 때 빠르게 대응해야 하는 것
      • Etc.
    • Cluster: Container화된 application을 실행하는 node라고 하는 worker machine의 집합
      • 모든 cluster는 최소 한 개의 worker node를 가짐
    • Kubectl: Kubernetes의 cluster와 통신하여 다양한 object들의 상태 확인 또는 CRUD 작업 등을 위해 사용되는 CLI 도구$_{^{\ [5]}}$
      • CRUD: Create (생성), Read (읽기), Update (갱신), Delete (삭제)
    • Node: Cluster 내에서 workload를 실행할 수 있는 하드웨어 또는 가상 머신 인스턴스$_{^{\ [6]}}$
      • Cluster에 따라 가상 또는 물리적 머신일 수 있음
      • Control plane에 의해 관리되며 pod를 실행하는 데 필요한 서비스를 포함
    • Pod: Cluster의 가장 작은 배포 단위
      • 한 개 이상의 container로 구성
      • Storage 및 network를 공유하고 함께 batch 및 scheduling (공유 context)
    • etcd: Cluster의 데이터를 저장하는 key-value 기반 DB
    • Namespace: Cluster 내의 논리적 분리 단위
      • Resource를 논리적으로 나누기 위한 방법
      • 사용자별 접근 권한 부여 가능
  • Minikube$_{^{\ [7]}}$: 로컬 개발 환경에서 단일 node Kubernetes cluster를 실행하기 위한 도구
Read more »

본 후기는 2023.05.25 ~ 2023.06.15에 25연대에서 진행된 보충역 훈련소 3주과정를 토대로 작성되었습니다.

후기를 시작하기 앞서 훈련소는 연대에 따라, 중대에 따라 큰 차이가 존재할 수 있는 것 같습니다.
따라서 다양한 후기 글들을 참고하시는 것을 추천드립니다.

Read more »

DEER: Detection-agnostic End-to-End Recognizer for Scene Text Spotting

Introduction

이 논문은 NAVER Clova 팀에서 개발한 end-to-end text spotting 모델을 제안한다.
End-to-end text spotting 모델은 text detector와 recognizer로 구성되어있다.
해당 논문의 저자들은 기존 text spotting 모델들은 detector와 recognizer 사이에 다소 밀접하게 결합되어있다고 아래와 같이 주장한다.

  1. Detector에서 잘라낸 이미지는 recognizer에 입력되기 때문에 필연적으로 detector의 성능에 따라 recognizer의 성능이 결정된다.
  2. Detctor에서 crop된 영역의 localized features를 recognzier에 전달하여 detector의 종속성을 감소시킬 수 있지만 여전히 존재하는 detector의 오류 누적으로 인해 recognition 실패가 발생할 수 있다.
  3. Feature pooling과 masking은 end-to-end text spotting 모델을 학습하기 위해 bounding boxes 데이터가 여전히 필요하다.

이에 대한 자세한 설명은 발표자료의 6, 7, 8페이지에서 확인할 수 있다.

Object detection 분야에서는 end-to-end Transformer 기반 접근 방식이 발전함에 따라 이미지의 개별 객체를 엄격하게 recognize하기 위해 정확한 영역 정보, 정교한 ground truth 할당 및 feature pooling이 필요하지 않다는 것이 분명해지고 있다.
그렇기에 저자들은 detection 결과의 정확성에 대한 의존성을 완화할 수 있는 DEER (Detection-agnostic end-to-end Recognizer)를 제안한다.
DEER는 정확한 text 영역을 추출하기 위해 detector에 의존하지 않고 detector가 각 text instance에 대한 single reference point를 localize하도록 한다.
Reference point 주위의 text를 포괄적으로 recognize하는 text decoder는 text sequence를 decoding하는 동안 특정 text instance의 attending region을 결정하는 방법을 학습한다.
DEER는 기존 모델들과 다르게 detecotr의 역할이 single reference point를 localize하는 것 뿐이기 때문에 훨씬 더 다양한 검출 알고리즘과 주석을 사용할 수 있다.
이러한 접근 방식을 통해 pooling operations와 polygon-type 주석 없이 회전 및 곡선 text instance를 자연스럽게 처리할 수 있다.

Read more »