2023년 4월 9일 일요일

GPT 기반 디지인 도구 OpenAI for Grasshopper 소개

이 글은 GPT 기반 3차원 디자인 도구인 OpenAI for Grasshopper 를 간략히 소개한다.

소개
이 Grasshopper 플러그인(.gha)은 .NET용 OpenAI API를 사용해, GPT를 이용한 디자인을 가능하게 한다. 기능은 다음과 같다. 이 기능을 사용하기 위해서는 OpenAI key가 있어야 한다.
  • ChatGPT 지원
  • 생성 AI 지원
  • 디자인 편집
  • Codex, BIM 등
사용방법
사용 절차는 다음과 같다.
  1. 이미지를 묘사하는 프롭프트 입력
  2. ChatGPT에서 생성AI용 텍스트 생성
  3. 생성AI이용해 이미지 생성
  4. 이미지 비전 분석
  5. 이미지에서 벡터 추출
  6. 벡터를 라이노 3D 모델 생성에 사용
다음 영상은 앞의 단계 실행 방법을 보여준다.

사용 개념 예시(link)

결론
점차 많은 디자인도구가 GPT와 같은 LLM(Large Language Model)과 통합될 것이다 도구를 잘 사용하면 생산성과 품질이 높은 디자인 모델을 빨리 얻을 수 있다. 다만, 사용하는 도구가 하는 역할을 해본적이 없는 경우, 기본기가 없으므로, 원하는 성과를 얻기 어렵다는 점을 명심해야 한다. 

레퍼런스
부록: ChatGPT with Revit

부록: OpenDataBIM

BIM 지원 Revit 모델러 기반 Python 코딩 도구 소개

이 글은 BIM을 지원하는 Revit 모델러를 기반으로 하는 Python 도구들을 간략히 소개한다. 
래빗 기반 파이썬 코딩

파이썬은 매우 강력한 스크립트 기반 언어로, 매우 다양한 수치해석, 데이터 분석 등 라이브러리를 무료로 제공한다. 파이썬을 통해, 값비싼 데이터 분석 도구를 더이상 구입할 필요가 없어졌다. Revit과 같은 BIM 모델링 도구에서도 파이썬 코딩을 지원한다. 이 글은 관련된 도구를 간략히 알아본다.

래빗 기반 파이썬

pyRevit 도구
pyRevit은 래빗 애드인 도구로, 파이썬 프로그래밍을 지원한다. 설치를 위해 다음 링크를 방문해 애드인을 다운로드 받아 설치한다.
설치 후 revit을 실행해, 애드인 메뉴를 확인해 보면, 다음 툴바를 사용할 수 있다.
설치 후 모습

pyRevit Settings 메뉴를 선택해, 파이썬 모듈 확인, UI 스타일 등 옵션을 설정할 수 있다.
pyRevit 애드인 설정

pyRevit은 유용한 파이썬 도구를 확장 패키지로 지원한다. 예를 들어, MEP를 설계하는 데 도움이 되는 MEPDesign 같은 도구를 사용할 수 있다. 이는 확장이 가능하다.
pyRevit 확장 리스트

Revit python shell 도구
이 도구는 pyRevit보다 단순하고, 사용하기 쉽다. 다음 링크를 이용해 다운로드 및 설치해 본다. 
실행하면, 다음 애드인 메뉴를 확인할 수 있다. 여기서 파이썬 파일이나 코드를 실행할 수 있다.
단순한 UI를 가진 래빗 파이썬 쉘

다이나모 파이썬 스크립트 노드
래빗에 포함된 다이나모(dynamo) 그래프 기반 모델링 도구 내에 있는 파이썬 스크릅트 노드를 사용할 수도 있다. 사용법은 다음 영상을 참고한다.
다이나모 파이썬 노드

마무리
래빗에서 파이썬을 사용하는 방법은 다양하지만, 사실, 파이썬의 큰 장점인 강력한 라이브러리를 사용하는 것은 많은 한계가 있다. 특히, 닷넷 기반 컴포넌트를 호출하는 아이언 파이썬을 사용하는 윈도우 프로그램 특성상 래빗도 이 한계에서 동작되어 PIP와 같은 강력한 패키지 설치 프로그램이 제대로 동작되지 않는다(버전 불일치 등). 래빗 기반 파이썬은 이를 고려해 사용해야 한다.

레퍼런스

2023년 4월 3일 월요일

멀티모달(Multi-modal) 기반 딥러닝 학습 프레임웍 MMF 소개

이 글은 멀티모달(Multi-modal) 기반 딥러닝 학습 프레임웍 MMF를 간략히 소개한다.
멀티모달 개념

소개
멀티모달(다중 모드) AI 문제는 시각적 질문 답변, 이미지 캡션 및 시각적 대화에서 구현된 AI, 가상 비서 및 소셜 미디어에서 혐오 콘텐츠 감지에 이르기까지 다양하다. 

MMF ("MultiModal Framework")는 PyTorch에 구축된 모듈식 프레임워크이다. MMF는 최첨단 비전 및 사전 학습된 언어 모델, 다양한 기본 제공 표준 데이터 세트, 공통 레이어 및 모델 구성 요소, 교육, 추론 유틸리티와 함께 ​​패키지로 제공된다. MMF는 Facebook 팀에서 다중 모달 솔류션에 사용된다.

설치
파이토치가 설치되어 있는 가정에 터미널에서 아래를 실행한다.
pip install —-pre mmf
python -c “import mmf; print(mmf.__version__)”

사용
사용 방법은 다음과 같다.
cd ~/mmf/data
mkdir -p models && cd models;
wget https://dl.fbaipublicfiles.com/pythia/pretrained_models/textvqa/lorra_best.pth
cd ../..
python tools/run.py --datasets textvqa --model lorra --config \
configs/vqa/textvqa/lorra.yaml --resume_file data/models/lorra_best.pth \
--evalai_inference 1 --run_type inference

상세 내용은 메뉴얼을 참고한다.

레퍼런스

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로 기록해 놓는 습관을 가지는 것이 좋다.

참고