2023년 3월 24일 금요일

과학 논문 작성 시 전문적인 차트 만드는 오픈소스 도구 소개

이 글은 과학 논문 작성 시 전문적인 차트 만드는 도구를 간략히 소개한다.

t-SNE 기반 계층 클러스터링

논문 토픽, 저자, 인용수를 이용해 계층 클러스터링할 수 있다. 이를 위해, scikit-learn을 이용할 수 있다. 사용을 위해, 다음 colab 링크를 참고한다.

계층 클러스터링 예시

분산 플롯 다이어그램
분산 플롯 다이어그램은 데이터 좌표계에서 특정 지점의 영향력을 보여줄 때 효과적이다. 사용을 위해, 다음 링크를 방문한다.

흐름 다이어그램(Sankey)
이 다이어그램은 서로 다른 집합 간의 개념 내포 및 맵핑 관계를 표현하는 데 유용하다. 사용을 위해, 다음 링크를 방문한다.

그래프 분석
개념간의 관계성을 분석한 차트이다. 다음 도구를 이용하면, 손쉽게 만들 수 있다.

개념 구조도
개념의 특정 범위, 편차와 구조를 확인할 때 사용한다. 다음 도구를 이용해 개발할 수 있다.

레퍼런스

  1. Hierarchical clustering with CoLab
  2. Circle scatter chart with CoLab
  3. ‘Variable Importance Plot’ and Variable Selection
  4. RStudio
  5. gephi.org
  6. sankey diagram
  7. cytoscape.org/what_is_cytoscape.html
  8. spacy.io/usage/linguistic-features#vectors-similarity

2023년 3월 12일 일요일

Visual SLAM 관련 단일 영상 기반 Depth map 예측 오픈소스 기술

이 글은 단일 영상 기반 Visual SLAM 오픈소스 기술을 기록용으로 공유한다. 이 글은 관련 기술의 소개 및 사용방법을 간략히 공유한다.

소개
오늘날 테슬라 자율주행에 사용되는 Visual SLAM은 다양한 오픈소스 모델로 공개되어 있다. 특히, 단일 영상을 사용하는 뎁스맵 예측 모델은 물류 등 다양한 분야에서 사용된다. 
활용 예시
단일 뎁스맵 예측 모델 조사

사용방법
다음 링크를 선택해, Colab을 실행한다. 
입력 이미지에 대한 깊이맵 예측 결과를 다음과 같이 확인할 수 있다.
깊이맵 예측 결과

이외, monodepth2와 같은 도구를 사용하면, 동영상에서 깊이맵을 손쉽게 얻을 수 있다.

레퍼런스

2023년 3월 9일 목요일

가장 간단한 파이토치 도커 이미지 빌드 및 확장하기

이 글은 가장 간단한 파이토치 도커 이미지 생성하는 방법을 남긴다. 

도커 이미지를 생성하기 전에 고려사항이 있다.
1. 생성할 도커 이미지 내 설치할 패키지, 라이브러리 간 버전 호환성 및 의존성 확인
2. 기존 이미지를 기반으로 확장해 생성할 경우, 기존 이미지의 패키지 버전 호환성 확인
3. 생성할 도커 이미지의 크기 만큼 디스크 용량 확인

이 글은 2번 방식으로 도커 이미지를 생성하는 방법을 간략히 정리한다. 기타, 도커에 대한 설치 등 상세 내용은 다음 링크를 참고한다. 

도커 이미지 확장 빌드 예제
이 경우는 기존 이미지를 이용해 패키지를 설치, 확장 후 새 이미지를 생성한다. 이 경우는 보통 딥러닝 개발 환경 등 설치하기 까다롭고 버전 호환성 문제가 자주 발생하는 경우에 사용한다.

파이토치, CUDA의 특정 버전으로 생성된 이미지를 도커 허브에서 검색한다. 

터미널에서 도커 이미지를 생성할 폴더를 만든다. 그리고 Dockerfile을 편집한다.
mkdir docker
gedit Dockerfile

다음과 같이 도커 명령을 입력한 후 저장한다. 
FROM pytorch/pytorch:1.12.1-cuda11.3-cudnn8-devel
MAINTAINER taewook

RUN apt-get update
RUN apt-get install -y libx11-6 libgl1-mesa-glx
RUN pip install torch tensorboard numpy

이때 도커의 레이어 빌드 메커니즘을 고려해, RUN 을 잘 조합해 정의한다. 

참고로, 도커는 레이어 구조로 설치 패키지를 관리하기 때문에, 이미 빌드된 레이어를 재활용해, 도커 빌드 속도를 크게 개선할 수 있다. 아울러, 빌드된 레이어를 재활용해, 빌드될 이미지를 조합할 수 있다.
도커 레이어 구조

터미널에서 다음과 같이 도커 이미지를 빌드한다.
docker bulid --tag docker_image .


레퍼런스

부록: 자주 사용하는 도커 명령어
docker build -t app_program_docker_image .
docker save -o app_program_docker_image.tar cbc
docker system prune -a -f
docker ps -a
docker image rm -f
docker rmi <image id> --force
docker run -v c:/dep_build/input:/app_program/input -v c:/dep_build/output:/app_program/output app_program_docker_image_name conda run -n venv_app python ./bin/user_app.py --input ./input --output ./output

부록: 도커 이미지 빌드 명령어 예시
FROM image_name
ENV PIP_ROOT_USER_ACTION=ignore
ENV PATH /usr/
RUN apt-get install python3-pip -y
RUN apt-get install python3.9
RUN pip install --upgrade pip 
CMD ["bash"]
CMD tail -f /dev/null

2023년 3월 5일 일요일

우분투 파이썬 패키지 버전 의존성 불일치 문제 해결 방법

이 글은 우분투 파이썬 패키지 버전 의존성 불일치 문제 해결 방법을 간략히 정리한다.

패키지 버전 디펜던시(의존성) 에러

우분투에서 개발하다보면, 여러 패키지 간 버전이 일치하지 않아, import가 실패하는 경우가 빈번히 발생한다. 특히, 오픈소스를 github에서 다운받아 사용할 경우, 사용된 패키지 버전이 명시되지 않았을 때는 직접 해당 버전을 탐색해 설치해야 한다.

의존성 에러

이 경우, 원하는 패키지 버전을 탐색하기 위해서는 pip package history를 확인해야 한다. 서로 유사한 패키지 릴리즈 시점의 버전을 찾는다.

패키지 버전 히스토리

그리고, 다음과 같이 버전을 명시해 설치하도록 한다.

pip install torch==1.10.1 torchvision==0.11.2 torchautdio==0.10.1

pip install scikit-learn matplotlib yacs timm==0.4.9

참고로 본인이 개발한 프로그램은 virtualenv, docker 등을 통해 개발환경을 반듯이 가상화해야 개발팀 전체가 사용할 때 문제가 없다. 아울러, 개발된 프로그램의 패키지 버전도 pip freeze로 기록해 놓는 습관을 가지는 것이 좋다.

참고

2023년 3월 4일 토요일

생성(Generative) AI 오픈소스 딥러닝 모델 Stable Diffusion, ControlNet 개념 및 ComfyUI 사용 방법

이 글은 Stable Diffusion개념과 생성(Generative) AI 오픈소스 도구 설치, 사용 방법을 간략히 나눔한다. 우선, Stable Diffusion, ControlNet 기술의 동작 개념을 설명한다. 그리고, 오픈소스 ComfyUI 등 도구를 소개하고, 사용법을 예시한다. 아울러, civitai.com(Stable Diffusion AI Art models 공유 웹사이트)에서 다양한 이미지 스타일로 학습된 Stable Diffusion 모델 다운로드 방법 등을 나눔한다. 

참고로, 이 글에서 본인은 충실한 집사로써, 불건전한? 이미지 생성 낚시 보다는 귀여운 캣ㅎ 이미지 생성에 집중합니다. - Cat using ChatGPT 

Stable Diffusion개념
Stable Diffusion(스테이블 디퓨전)은 Stability AIRunway도구의 협업으로 개발된 생성 AI 모델이다. 이 모델은 OMMER Lab의 도움을 많이 받아 개발되었다. Stable Diffusion의 원래 이름은 LDM(Latent Diffusion Model)이었다. 
Stable Diffusion은 text to image diffusion을 지원한다. 
Stable Diffusion 기반 생성 AI 예시
OMMER Lab 연구 내용

Stable Diffusion은 다음 그림과 같이 디퓨전 확산 모델을 사용한다. 확산 모델은 입력 이미지와 노이즈 라벨링 데이터 간의 가중치를 학습한다. 디퓨전은 전형적인 UNet(encoder-decoder. autoencoder 모델) 모델을 따른다. 입력 모델에 대한 노이즈를 학습한 가중치 모델을 역으로 실행하면, 원본 입력모델을 생성할 수 있다. 이는 GAN(생성 적대 네트워크) 모델과 유사한 개념을 차용한 것이다.  
Diffusion의 UNet 구조

여기에 모델의 역방향(Reverse Diffusion Process)으로, text encoding 벡터를 입력해, 원하는 스타일의 이미지를 생성하기 위해, 임의의 노이즈인 Random Latent Noise(zT)와 디노이즈 가중치 레이어인 Denoised Latent(Z0)를 UNet 모델 사이에 삽입한다(다음 그림 참고). 

이를 통해, 텍스트 프롬프트는 아래와 같은 과정을 거쳐 이미지를 생성한다.
Input text prompt > Text embedding + Time step + Random latent noise > Diffusion > Denoised latent

이 결과로, T 시행이 많을 수록 다음과 같이 유사한 입력 이미지가 되도록 한다.

이를 다 종합하면, 다음과 같은 딥러닝 모델 구조가 완성된다. 이제 모델의 각 파라메터를 조정하면, 텍스트 입력에 대한 다양한 스타일의 학습 가중치를 조정하게 되고, 이를 통해, 원하는 이미지를 생성할 수 있다.
Stable Diffusion Model

ControlNet은 Stable Diffusion 생성 AI 모델에 추가적인 조건을 부여해 좀 더 다양한 이미지를 생성하는 신경망 딥러닝 모델이다.
ControlNet = Stable Diffusion 조건 추가 모델

Stable Diffusion 모델은 text prompt, time encoder, encoder-decoder 모델을 연결한 이미지 생성 모델이다. 여기에 ControlNet을 포함하면 다음과 같다. 

결론적으로 ControlNet은 조건을 설정할 수 있는 conv net을 추가함으로써, 각 encoder, decoder 레이어의 스타일(특징 가중치)을 세부 조정할 수 있다. 

손쉬운 생성AI 도구 ComfyUI 설치해 보기
여기서는 ControlNet을 직접 사용하기 보다는 이를 좀더 편리하게 사용할 수 있는 ComfyUI를 통해 생성AI 도구를 설치해 보겠다. 이 도구는 다음 기능을 제공한다(참고).
  • 노드/그래프/흐름도 인터페이스를 통해 코딩할 필요 없이 이미지 생성 가능
  • 메모리 최적화. --lowvram을 사용하면 3GB 미만 vram을 가진 GPU에서도 작동
  • 학습모델 파일포맷인 ckpt, 세이프텐서(safetensors) 모델 모두 로드할 수 있음 
  • 로라(일반 및 로콘) 모델 지원. 고급 모델(ESRGAN, ESRGAN, SwinIR, Swin2SR 등) 지원
만약, ControlNet을 직접 설치해 사용하려면, 아래 링크를 참고 바란다.
ComfyUI는 Stable Diffusion 학습모델파일을 로딩해, 스타일을 GUI방식으로 손쉽게 설정하고, 이미지를 생성할 수 있도록 만든 도구이다. 터미널에서 다음 명령을 실행한다.
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 xformers
pip install -r requirements.txt

사용해 보기
설치 후 다음과 같이 실행한다.
python main.py

그럼 다음과 같이 웹 기반 그래프 노드 로직 디자인이 가능한 창이 표시된다. 

이제, 다음과 같이 적절한 Stable Diffusion 학습 모델 파일, 텍스트 프롬프트 및 파라메터를 입력해, 다양한 스타일의 이미지를 생성해 본다. 이 경우, 눈이 파란색인 골드 태비 고양이를 생성해보았다(참고로, 실제 파란색 눈 골드 태비는 본적이 없음)

프롭프트 예. Realistic cute cat sitting on soft sofa, with blue eyes and brown stripes 
프롬프트 및 파라메터 설정 
이미지 생성 결과

프롭프트와 파라메터를 수정해 보면, 다음과 같이 자연스럽고 다양한 이미지를 자동 생성할 수 있다. 

다음과 같이, 예술적인 스타일로 이미지를 생성하는 것도 그리 어렵지 않다.

참고로, Stable Diffusion 학습모델 파일은 civitai.com 과 같은 곳에서 손쉽게 다운로드 받을 수 있다. 이를 이용해, 원하는 이미지 스타일을 프롬프트로 쉽게 생성할 수 있다.
civitai.com, Stable Diffusion AI Art models

civitai.com 방문 후 원하는 스타일 이미지의 학습모델은 다운로드 버튼으로 저장받을 수 있다. 지원되는 모델 포맷은 safetensors 등이다. 

ComfyUI에서 이 학습모델파일을 선택한 후, 프롬프트로 이미지를 생성할 수 있다.

마무리
여기서는 생성 AI 오픈소스 딥러닝 모델인 Stable Diffusion, ControlNet 개념을 살펴보고, 이를 편리하게 사용할 수 있는 도구인 ComfyUI를 설치해, 사용하는 방법을 알아보았다. 이런 도구들은 디자인 분야에서 급속히 확산되고 있다. 이런 멀티모달(다양한 입력 - 출력) 딥러닝 모델은 GPT4와 같이 구현되고, 많은 분야에 적용될 것이다.
 
ChatGPT를 사용한 생성AI 프로그램 개발 방법은 다음 링크를 참고한다.
서비스형 생성AI 도구는 다음 링크를 참고한다.

레퍼런스