Python Code 31

psycopg2 로 python 에서 postgresql 활용하는 법

psycopg2는 파이썬에서 Postgres DB를 연결할 때 사용하는 패키지 쿼리 실행, 트랜잭션 관리, 프로시저 호출, ORM 과 통합 등 다양하게 활용할 수 있음. 활용하는 법은 아래와 같음. 1. Package Install # Install pip install psycopg2 conda install psycopg2 2. connection setting import psycopg2 # postgresql server setting and connect host_name = '' # server ip port_num = '' # port db_name = '' user_ID = '' user_PW = '' 3. connection # Connection connection = psycopg2...

Python Code 2024.03.20

glob 사용법

python 에서 Path를 다룰 때 보통 os 모듈을 많이 사용했으나, Pytorch 에서 활용할 때 조금 불편한 부분이 있음. os 모듈보다 좀 더 편하고 많이 활용하는 패키지를 찾아보니 glob 이 있었고, 사실 알고 있었지만 os가 더 익숙해서 활용하지 않았음. 늦었지만 glob 활용법을 익혀두고 앞으로도 활용하지 않을듯 싶어 정리하고자 함. os 모듈과 거의 흡사하지만, 문자열과 형식을 더 다루기 쉬웠음. glob() 함수는 인자로 받은 패턴과 이름이 일치하는 모든 파일과 디렉터리의 리스트를 반환하며, 이 패턴을 그냥 *라고 주면 모든 파일과 폴더를 확인 가능함. from glob import glob glob('*.exe') # 현재 디렉터리의 .exe 파일 # output : ['python..

Python Code 2024.02.08

Pytorch training continue 코드

파이토치로 딥러닝 모델을 학습시키다가 환경적인 요인으로 학습이 중단될 경우, 처음부터 다시 학습시키면 시간과 자원 낭비가 심하게 된다. 따라서, 현재까지 학습되어 있는 모델을 지속적으로 저장해주고, 마지막 모델로부터 학습을 이어서 할 수 있는 코드 작성이 필요하다. Training 을 이어서 하기 위해 아래 함수로 모델 가중치와 optimizer load가 필요 def continue_training(model, model_path, optimizer, device): saved_checkpoint = torch.load(model_path, map_location=device) model.load_state_dict(saved_checkpoint['model']) optimizer.load_state_..

Python Code 2024.01.31

Attention UNET 모델 구조 파이토치(Pytorch) 코드

기존 UNET 구조에서 skip connection 결과가 Decoder 에 추가될 때, Attention score를 적용해보기 위해 Attention Layer를 추가 Codes # 02. Attention UNET Model class ConvBlock(nn.Module): def __init__(self, in_channels, out_channels): super().__init__() self.conv = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=True), nn.BatchNorm2d(out_channels), nn.ReLU(inplace=True), nn.Conv2d(..

Python Code 2024.01.23

torch 모델 save, load

Pytorch 에서 모델을 pth 파일로 저장 후, 가중치를 불러와서 prediction 시에 발생하는 오류가 있어서 정리 모델 파일에서 load_state_dict 로 정보들을 가져온 뒤 파라미터에 weight를 적용해도 성능이 0.0 으로 나오는 경우가 있음. 이런 경우는 모델 저장 시에 weight와 optimizer 정보까지 같이 저장한 경우여서, 두개 전부 load 해주어야함. # Torch model Save def save(ckpt_dir, model, optim, epoch, iou, f1): """ Save torch model in check point directory. Args: ckpt_dir (str): checkpoint directory path model (torch mod..

Python Code 2024.01.22

Nibabel 사용법

공식문서 페이지: https://nipy.org/nibabel/ 설치 pip install nibabel import nibabel as nib 데이터 읽기 (nib.load) Affine and Header affine: 4*4 array 형태로 voxel space에서 reference space으로의 변환을 설명함 header: 이미지의 모든 메타데이터를 저장하는 nibabel 구조로, 직접 쿼리할 수 있음 nib.aff2axcodes(affine) img.header['descrip'] 새 이미지를 만들었을 때 원본과 파생물이 일치하는지 확인하기 위해 Affine과 Header를 탐색할 수 있음 img load def display_slices(nii_file_path, num_slices=5):..

Python Code 2024.01.19

DICOM 파일 전처리

dicom meta 데이터를 활용한 이미지 전처리 - 실제 dicom 이미지에 저장된 값을 image값으로 변환하기 - dicom 내의 x좌표, y좌표 -> pixel_array[y좌표][x좌표]로 불러오기 - RescaleSlope,RescaleIntercept 는 디스크에 저장된 픽셀에서 메모리 표현으로의 선형 변환을 지정하는 태그 - CT 이미지는 일반적으로 부호없는 변수로 저장되기에 음수로도 저장되는 Houndsfield 단위에 대한 변환을 위해 후처리가 필요 1. Low-level 수준에서의 dicom 이미지 전처리 - RescaleSlope, RescaleIntercept를 활용하여 Dicnom 저장된 이미지 값으로 변환 - Dicom header의 Bits_Stored를 활용하여 normal..

Python Code 2024.01.19

Glob 이용해서 특정폴더의 이미지 경로들을 DataFrame으로 만들기

이미지 처리를 하다보면 원본 이미지와 레이블된 이미지가 동시에 들어가있는 경우가 있음. 이럴때는 glob 을 잘 활용해서 파일명으로 구분한 후, filepath 를 데이터프레임으로 만드는 코드가 유용함. def get_file_row_nii(file_paths): """Produces ID of a patient, image and mask filenames from a particular path""" file_paths = sorted(list(set(glob(f'{file_paths}/*.nii.gz')) - set(glob(f'{file_paths}/*_mask.nii.gz')))) temp = [] for file in file_paths: for i in range(0, len(nib.load..

Python Code 2024.01.11