본문 바로가기

DATA SCIENCE/Study

(21)
Inductive Bias에 관하여... 1. 개 요 최근 의료 도메인의 morphological semantic segmentation 분야의 캐글 대회에 참여했었다. 진행 기간이 일주일 정도였는데, 회사 업무와 개인 일정으로 인해 시간을 내기가 어려운 상황. 때문에 기존에 짜두었던 ViT 기반의 Semantic Segmentation을 사용했다. 해당 알고리즘은 Multi Scale Windows를 병렬로 사용하고(PSPNet, Segformer 논문에서는 직렬로 사용했으나 몇 번의 실험 결과 다시 decoder를 통해 복원하는 과정에서 지나치게 많은 정보를 잃는 것으로 판단돼 병렬로 사용함으로써 이를 해결하려 했다), gpu의 메모리가 허용하는 선까지 head의 개수를 늘리는 전략을 채택했고(ViT Adapter for Dense Pred..
[Computer Vision] CNN vs ViT - 컴퓨터 비전에서 가장 많이 비교되고 있는 두 방법론이며, 실질적으로 두 가지를 섞어서 사용하기도 하지만 본질적으로 어떤 차이가 있을까? - 가장 많이 언급되는 사항이 CNN은 inductive bias가 크다는 것이고, ViT는 이로부터 비교적 자유롭다는 것이다. 다소 모호한 내용인데, 간단히 말해 CNN은 특정 window size의 kernel, padding, dilation을 이용해 각기 다른 사이즈로 Embedding하는 것은 가능해도, 본질적으로 대상 객체와 가까이 있는 것에 편향된다는 것. 반면 ViT는 기본적으로 하나의 이미지를 여러 장의 Patch로 분할한 뒤, 각각의 Patched Image에 대한 Attention Score로 각각의 이미지에 대한 맥락적 가중치를 고려하게 되기 때..
[BentoML 1.x] 1편 : BentoML 시작 00. 이 글을 시작한 이유 최근 모델 배포와 관련해 BentoML을 적용 테스트하며 느낀 장단점 및 이를 보완하기 위한 코드를 정리해놓는다. 일단 BentoML의 경우, 커뮤니티가 구글이나 일반적인 블로그가 아닌 Slack을 통해 형성되어 있다. 이로 인해 접근성이 떨어지고, 자연히 유저들의 문제와 그걸 풀어주는 다른 유저들의 데이터가 엄청나게 적다. 게다가 버전이 업데이트되면서 내부 라이브러리 구조가 바뀌고(app, artifact 등), 이를 이후의 버전에 적용하기 어려워지면서 문제가 심화된다. 결국 최신 버전의 BentoML을 쓰려면 운영자에게 직접 물어봐야하는 상태(근데 그걸 또 잘 답해준다?!). 01. BentoML Start BentoML에 대한 소개나 용어 정리는 따로 하지 않는다. 만약..
Docker : npm install error Docker를 이용해 npm install을 진행하는 과정에서 다음과 같은 에러가 발생했다. 'The command '/bin/sh -c npm install' returned a non-zero code: 1' 어제까지만 해도 정상적으로 작동하던 코드가 (심지어 실무 코드도 아니고, 학습용 예제 코드가) 에러를 일으키니 당황스러울따름; 찾아보니 인터넷 연결 문제 등으로 공식 경로를 통해 데이터를 받아오지 못해서 생기는 문제라고 한다. 때문에 만약 vpn 등으로 연결해있다면 이를 점검하고, 그것이 아니라면 도커 엔진을 재시작해야 한다. 만약 일반적인 환경에서 작업하고 있다면, systemctl restart docker 와 같은 코드를 통해 도커를 재시작하거나 wsl과 같은 환경이라면 wsl 자체를 sh..
WSL에서 Docker 사용 윈도우에서 Docker를 쉽게 사용하는 법 Windows 10 이상부터 사용가능한 WSL을 이용해 docker를 사용하는 법을 다룬다. 공식 문서에서는 Windows 및 WSL 환경에서 Docker를 사용하기 위해 Docker Desktop을 설치한 후, WSL2 및 Visual Studio Code를 이용해 작업하라고 권장한다. 다만 Docker Desktop을 설치하기 귀찮거나, 설치하기 힘든 상황에 있는 경우를 대비해 문서로 정리한다. 이 경우 Docker 명령어를 실행할 때마다 앞에 sudo를 붙여야 하는 번거로움이 있다. 우선 사전에 WSL 혹은 WSL2를 설치한 환경이어야 한다. 만약 WSL이 설치된 환경이 아니라면 아래와 같이 'Windows 기능 켜기/끄기'에서 HyperV와 WSL(Win..
PYTHON Interface Option : argv와 flags, 그리고 argparse # 01. Python Interface Option PYTHON 코드를 실행시키기 위한 방법의 하나로 인터페이스를 통해 특정 변수를 추가하는 방법이 있다. 대표적인 방법(라이브러리)으로는 세 가지가 있으며 다음과 같다. 1. sys.argv 2. argparse 3. absl.flags & absl.app 이에 대해 하나씩 간단하게 사용법과 특징을 익혀보고, 추가적인 사항이 생긴다면 업데이트 하겠다. # 02. Tutorial0.py : 공통 코드 이번 포스팅의 주목적은 python의 interface option을 통한 변수 입력이기에 다음과 같이 간단한 코드를 구현했다. now = "" # 이 부분에 변수를 부여해 다음의 코드가 작동한다 if now.lower() == "morning" : prin..
Windows10에서 WSL2 로컬 디렉토리 사용법 # 01. 사용배경 처음에는 Windows 11 환경에서 WSL2를 설치해 로컬 경로로 사용했었습니다. Windows11 환경에서는 WSL2 및 사용할 Linux 배포 등을 설치하면, 파일 탐색기의 하단에 다음과 같이 펭귄 모양의 Linux 경로가 생성되어 윈도우즈 로컬 환경에서 작업하는 것처럼 사용할 수 있습니다. 다만 Windows 11 자체가(제가 사용했던 것은 insider preview-developer 버전) 아직 많은 오류와 잦은 업데이트의 과정에서 정상적으로 작업하기가 어려워, 결국 Windows11 사용을 뒤로 미뤄두기로 했습니다. 하지만 그렇다고 기존에 누리던 편리했던 점을 포기하기에는 또 아쉬워서 이와 같이 포스팅을 진행해보도록 하겠습니다. # 02. 사용방법 우선은 Windows 1..
MLOps란 무엇인가? 01. [Why] MLOps가 왜 필요한가? MLOps는 ML + Operations가 결합된 단어라는 것은 이미 많이들 알고 있는 사실이지만, 도대체 왜! MLOps가 필요한지, MLOps를 위해선 무엇이 필요한지 아는 사람은 정작 많이 없는 것 같다. 아마 그 이유는 MLOps라는 개념이 아직 널리 퍼지지 않았을뿐더러, 대표적인 프레임워크로 제안되는 Kubeflow, Airflow, MLflow와 같은 툴이 완벽하게 MLOps를 구현했다고 보기 어렵기 때문으로 보이기도 한다. MLOps가 왜 필요한지 한 장의 이미지로 표현하면 다음과 같다. ML Project를 연구/개발하는 단계에선 실질적으로 MLOps에 대한 필요성을 크게 느끼지 못한다. 그 필요성을 느끼는 것은 해당 Project가 Servic..
WSL2 환경에서 WEBCAM 사용 결론부터 말하자면 현재 WSL2 환경에서 WEBCAM의 직접적 사용은 불가능하다. 그 이유는 WSL2는 Windows의 하부 시스템으로서 동작하기에 하드웨어적 접근이 불가능하기 때문이라고 하며, 현재 개선 중이라고 한다. 물론 방법은 있다. WSL2에서 웹캠을 사용하기 위해 현재 웹캠의 화면을 특정 IP로 스트리밍한 다음, 그것을 읽어들이는 것. 이를 위해 라즈베리파이를 이용해 와이파이 공유기에 연결해 가져오는 방식이나 다른 서비스를 사용하는 방법이 주로 쓰이는 것 같다. 이 방법에 대해 궁금하다면 아래의 영상을 고려해보면 좋을 것 같다. https://www.youtube.com/watch?v=e7wpVUgtLz0 그 외에 Microsoft에서 현재 지속적으로 개선하고 있는 사항이 있으며, 그로 인해 ..
ModuleNotFoundError: No module named 'apt_pkg' WSL2, Ubuntu-18.04 환경에서 Yolov4 Darknet에 대해 테스트를 진행 중 다음과 같은 에러가 발생했다. ModuleNotFoundError: No module named 'apt_pkg' Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi' E: Sub-process returned an error code 사용하고 있는 GPU가 30 시리즈인 반면, 작동..