본문 바로가기

Python

Anaconda 가상 환경 Export 방법 (offline / Linux / tar.gz) Computer A의 가상환경 Env1을 Computer B로 옮기고 싶은 경우 보통 아래의 명령어를 쓴다. conda env export -n Env1 --file Env1.yaml conda env create -n Env2 --file Env1.yaml 문제는 인터넷 사용이 불가능한 환경에서는 해당 명령어로 가상환경을 옮기는 것이 불가능하다는 것이다. 이럴 때는 가상 환경을 통째로 압축한 다음 설치하고자 하는 컴퓨터에서 압축 해제를 하는 방법을 사용하면 된다. tar 명령어를 사용하면 금방이다. ''' Computer A Root - /home/user & Computer B Root - /mnt/user ''' ## Computer A에서 cd /home/user/anaconda3/envs tar.. 더보기
OpenVINO 사용 방법 정리 모델 학습에는 GPU가 필수적이지만 학습이 완료된 모델을 납품할 때는 GPU가 달린 워크스테이션 형태로 납품하는 건 꺼려지게 된다. 비용이 많이 들기 때문이다. 소비자 입장에서도 워크스테이션 비용을 감당해야해서 거부감을 많이 느낀다. 그래서 여러 회사에서는 GPU 없는 MiniPC 환경에서도 충분히 모델을 돌릴 수 있게 경량화 작업을 거친다. Knowledge Distillation 기법을 쓰거나 애초에 사이즈가 작은 network를 사용한다거나 하는데... 이런거 저런거 신경 쓸 거 없이 한 번에 해결해주는 툴이 있다. 바로 인텔의 OpenVINO ToolKit이다. 학습이 완료된 모델을 OpenVINO로 변환해서 사용해보면 inference time이 기대 이상으로 빠르다는 걸 느낄 수 있다. 문제는.. 더보기
NIA AIHub 원격 서버 환경 구축 1. 서버에 아나콘다 설치 https://jcil.co.kr/18 어렵게 어렵게 설치하고 주피터 노트북 설정도 해서 port 열어서 사용하려고 했더니, 서버 관리하는 곳으로부터 포트 열어주는 건 불가능하고 기존 도커 환경(?)에서 새로 가상환경 설치해서 사용하라는 안내 받음 2. 이게 구조가 아래 처럼 이루어져 있다. "Naver VPN → Window 원격 데스크톱 연결 → 내부 리눅스 서버 접속 → Docker 환경에서 개발" 결론이 뭐냐면 Window 원격 데스크톱 연결로 들어가면 기본으로 제공되는 주피터 노트북이 있는데 여기서 터미널을 열어서 가상환경을 파줘야한다. 또 중요한 건 conda env list 와 같은 명령어는 먹히는데 conda activate 명령어는 안 먹힌다. su 를 먼저 입.. 더보기
Python Multiprocessing 작업하며 발생한 이슈들 정리 1. Queue에서 get( )을 해줘도 Memory 반납이 안 되는 현상 DICOM을 PNG로 변환하는 과정에서 속도 좀 올리려고 Multiprocessing 작업을 하던 중에 Queue( )도 사용하게 됐는데, 이 놈이 get( )을 하면 메모리 반납도 같이 해줘야하는데 계속 들고 있어서 서버가 터지기 직전까지 간 적이 있다. 2~3일 구글링 끝에 원인을 찾게 됐다. Numpy version 문제였다. 1.16에서 1.18로 바꾸니까 잘 되더라. 이 글이 나 같은 현상을 겪는 사람들에게 얼른 노출이 되어 도움이 되길 바라며... https://stackoverflow.com/questions/54419043/memory-use-if-multiprocessing-queue-is-not-used-by-t.. 더보기
Matplotlib을 이용해 그래프 그리기 Python의 matplotlib을 이용해 sine 함수 그래프를 그리는 방법에 대한 정리 글이다. 코드 몇 줄이면 뚝딱 뚝딱 할 수 있는 작업이지만 처음 하는 사람에게는 X축 설정에서 헷갈릴 부분들이 있어 그 부분을 중심으로 정리하고자 한다. import numpy as np import matplotlib.pyplot as plt fs = 100 time = np.arange(-5, 5, 1 / fs) signal = np.sin(time) plt.figure(1) plt.plot(time, signal) plt.show() [Line 4] fs는 sampling rate을 의미한다. 전자 장비를 사용하여 다루는 신호는 무조건 digital signal 즉 discrete signal이다. 자연에서 .. 더보기
Python으로 신호 푸리에 변환하는 방법 신호 처리를 하다 보면 가장 먼저 접하게 되는 개념이 '푸리에 변환'이다. 이번 글에서는 파이썬의 numpy를 통해 푸리에 변환하는 방법에 대해 정리하고자 한다. 그 전에... 푸리에 변환에 대한 이론적 배경을 정확하게 알고있는 게 아니라 틀린 부분이 있을 수 있다는 점을 미리 밝힙니다!! 푸리에 변환 (Fourier transform) 시간 영역에서 표현되는 신호를 주파수 영역으로 변환하여 다른 관점에서 신호를 분석하는 방법 Python에서 푸리에 변환을 하고 싶으면 np.fft.fft( ) 함수를 아래와 같이 이용하면 된다. import numpy as np import matplotlib.pyplot as plt fs = 100 t = np.arange(0, 3, 1 / fs) f1 = 35 f2 .. 더보기
Python으로 DICOM 파일 다루는 방법 DICOM 파일을 다룰 일이 생겨 공부 중이다. 지금 다루는 영상의 Modality가 CT이기 때문에 CT를 중심으로 정리해두고자 한다. 이번 글에서는 Hounsfield Unit (하우슨필드 유닛) Window Center, Window Width DICOM 파일 읽는 방법 에 대해 정리하도록 하겠다. Hounsfield Unit ? 우선 CT의 픽셀 값은 일반 RGB 이미지와는 다르다. RGB 이미지의 각 픽셀은 0 ~ 255의 값으로 이루어져 있지만, CT는 Hounsfield Unit (HU)라는 단위로 이루어져 있다. HU란 X 선이 몸을 투과할 때 감쇠되는 정도를 나타내는 단위이다. 물을 통과할 때를 0. 으로 두고 다른 부위의 감쇠정도를 상대적으로 표현한다. 이미 실험적(?)으로 정리되어 있.. 더보기
Python의 fileinput module로 파일 수정하는 방법 fileinput 모듈이라고 해서 크게 다른 건 없는 것 같다. 그냥 Python에서 파일 입출력할 때 쓰는 모듈인데 흔히 쓰는 open( ) 함수 말고 fileinput.input( ) 함수를 쓰는 거라 생각하면 된다. 그럼 왜 fileinput 이란 모듈을 따로 만들었으며 언제 사용하는 걸까?? 이렇게 저렇게 쓰다보니 fileinput을 사용하면 보다 간단하게 파일 수정을 할 수 있기 때문이란 생각을 하게 됐다. 아래와 같이 test_text.txt 파일이 있다고 가정하자. name : tube name : ryan name : apeach 그리고 형태는 유지시키면서 두 번째 줄의 "ryan"을 "라이언"으로 바꿔보도록 하자. open( )을 사용하면 불가능한 건 아니지만 fileinput.input.. 더보기