전체 글 49

다양한 파일을 읽어와 이미지 분류하기

images 폴더와 labels 폴더에 동일한 이름의 파일이 존재 labels 폴더의 txt 파일 맨 앞에는 대응하는 이미지의 클래스를 기록 import os import shutil images_folder = './train/images' labels_folder = './train/labels' output_folder = './train/classes' for label_file in os.listdir(labels_folder): if label_file.endswith('.txt'): # 동일한 이름의 이미지 파일 경로 생성 image_name = label_file.replace('.txt', '.jpg') image_path = os.path.join(images_folder, image_..

Edge-Connect: 모듈 분석

나만의 머신러닝 코드를 작성하기 위해선 기존에 완성된 코드를 분석하는 것이 우선이라고 생각하였다. 따라서 2019년에 발표된 edge connect 논문의 코드를 먼저 깊게 분석하기로 한다. 메인 함수 더보기 main.py 개요 모델을 불러와서 argument를 넣고 train 혹은 test를 진행하는 함수 보조 모듈 config.py, edge_conncect.py 함수 main(mode = None) 1. arguements 받기 (import config.py) 2. CUDA 설정 3. 랜덤 시드 설정 4. 모델 초기화 (import edge_connect.py) 5. train/test/eval에 따른 실험 진행 load_config(mode = None) config.yml 파일을 받아서 arg..

Edge-Connect: models.py

코드를 이해하기 위한 사전 지식 더보기 nn.DataParallel() 함수 nn.DataParallel은 PyTorch에서 제공하는 함수로, 모델을 여러 GPU에 분산시켜 병렬로 학습할 수 있게 해줍니다. 이 함수의 주요 특징은 다음과 같습니다: 모델의 복사본을 여러 GPU에 분산시킵니다. 각 GPU에서는 데이터의 서브셋(subset)에 대해 연산을 수행합니다. 모든 GPU에서의 연산 결과는 자동으로 합쳐져 최종 결과를 생성합니다. 이를 통해 대규모 데이터셋과 복잡한 모델을 더 빠르게 학습할 수 있습니다. self.add_module() 함수와 모델 초기화 방식 self.add_module('generator', generator)는 nn.Module 클래스의 메서드로, 모델의 서브모듈을 동적으로 추가..

Edge-Connect: dataset.py

코드를 이해하기 위해 필요한 지식 더보기 특수 메서드 __len__과 __getitem__ __len__ 메서드: __len__은 컨테이너 타입의 객체(예: 리스트, 튜플, 세트, 사용자 정의 컬렉션 등)의 길이를 반환하는 특수 메서드입니다. 예를 들어, len(obj)를 호출하면 내부적으로 obj.__len__()이 호출됩니다. PyTorch의 Dataset 클래스에서 __len__은 데이터셋의 총 항목 수를 반환합니다. __getitem__ 메서드: __getitem__은 컨테이너 타입의 객체에서 특정 인덱스의 항목을 가져오는 특수 메서드입니다. 예를 들어, obj[index]를 호출하면 내부적으로 obj.__getitem__(index)가 호출됩니다. PyTorch의 Dataset 클래스에서 __g..

Edge-Connect: utils.py

import os import sys import time import random import numpy as np import matplotlib.pyplot as plt from PIL import Image # 디렉토리를 받아 폴더를 만들어주는 함수 def create_dir(dir): if not os.path.exists(dir): os.makedirs(dir) # def create_mask(width, height, mask_width, mask_height, x=None, y=None): mask = np.zeros((height, width)) # ex) 512x512가 0으로 채워진 이미지 mask_x = x if x is not None else random.randint(0, wi..

Edge-Connect: main.py

import os import cv2 import random import numpy as np import torch import argparse from shutil import copyfile from src.config import Config # yml 파일을 dict로 변환하여 가지고 있는 객체. from src.edge_connect import EdgeConnect def main(mode=None): r"""starts the model Args: mode (int): 1: train, 2: test, 3: eval, reads from config file if not specified """ # train의 경우 mode = 1로 설정된 뒤 main 함수가 호출된다. # mode, a..

Edge-Connect: metrics.py

코드를 이해하기 위해 필요한 지식 더보기 혼동행렬(Confusion Matrix) 혼동 행렬은 분류 모델의 성능을 설명하는 데 사용되는 표입니다. 이 표는 네 가지 구성 요소로 이루어져 있습니다: 1. 진양성 (True Positive, TP): 모델이 양성 클래스를 정확하게 예측함. 2. 거짓양성 (False Positive, FP): 모델이 양성 클래스를 잘못 예측함 (오류의 한 종류). 3. 진음성 (True Negative, TN): 모델이 음성 클래스를 정확하게 예측함. 4. 거짓음성 (False Negative, FN): 모델이 음성 클래스를 잘못 예측함 (또 다른 오류의 종류). P N P TP FP N FN TN 정밀도(Precision): 공식: TP / (TP + FP) 의미: 모델이 ..

Edge-Connect: config.py

코드를 이해하기 위해 필요한 지식 더보기 __로 시작하고 끝나는 메서드들: 이러한 메서드들은 파이썬에서 '매직 메서드' 또는 '특수 메서드'라고 불립니다. 이 메서드들은 파이썬의 내장 동작과 밀접하게 연관되어 있으며, 특정 연산이나 함수 호출에 자동으로 응답합니다. 예를 들어, __init__() 메서드는 클래스의 인스턴스가 생성될 때 자동으로 호출되며, 객체 초기화에 사용됩니다. __getattr__() 메서드는 속성 조회가 실패했을 때 호출됩니다. 이러한 메서드들은 파이썬의 객체 지향 프로그래밍에서 중요한 역할을 하며, 연산자 오버로딩이나 사용자 정의 동작을 구현하는 데 사용됩니다. Config 클래스에서 파생된 객체가 DEFAULT_CONFIG를 참조하는 방법: DEFAULT_CONFIG는 전역 변..

Edge-Connect: loss.py

알아둬야 할 지식 더보기 self.register_buffer 사용 이유: self.register_buffer는 PyTorch의 nn.Module에서 제공하는 메서드로, 모듈의 상태(state)에 텐서를 저장하지만, 이 텐서는 모델 파라미터로 간주되지 않습니다. 즉, 이 텐서는 학습 과정에서 업데이트되지 않습니다. target_real_label을 텐서로 변환하고 register_buffer를 사용하여 저장하는 이유는, 이 값을 모델의 일부로 유지하면서도 역전파(backpropagation)에서는 무시하기 위함입니다. 이렇게 함으로써, 이 값은 모델 저장 및 로딩 과정에서 자동으로 처리되며, GPU 연산에도 사용될 수 있습니다. NSGAN, LSGAN, Hinge Loss의 차이: NSGAN (Non-..