분류 전체보기
-
LWIR 영상의 특성: 열 복사와 물체별 밝기영상처리/IR image 2025. 6. 26. 21:47
1. LWIR 영상은 태양광 영향이 거의 없는 순수 열 영상이다LWIR(Long‑Wave Infrared, 8–14 µm)는 태양 복사 스펙트럼에서 거의 에너지가 없는 영역입니다. 따라서 LWIR 영상은 태양광 반사가 아닌, 물체의 온도에 기반한 열 영상입니다.태양은 약 6000 K의 흑체로, 에너지 대부분은 0.3–2.5 µm에 집중되어 있습니다. 8–14 µm 구간은 거의 빈 영역이므로, LWIR에서는 태양광 영향이 무시 가능합니다.흑체 복사는 다음과 같이 표현됩니다.L(λ, T) = ε × (2hc² / λ⁵) × [1 / (exp(hc / λkT) − 1)]ε: 복사율 (emissivity, 0~1)h: 플랑크 상수, c: 빛의 속도, k: 볼츠만 상수2. emissivity, 반사율, 그리고 반..
-
PyTorch를 활용한 신경망 모델 정의Pytorch 2025. 3. 10. 11:20
PyTorch에서 신경망을 정의하는 방법을 정리한다.모델을 생성할 때는 nn.Module을 상속받아 필요한 레이어를 정의하고, forward() 메서드에서 연산을 수행하도록 구성한다.1. 신경망 모델 정의 (nn.Module 사용)import torchimport torch.nn as nnclass NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(7, 32) # 입력 차원 7 → 은닉층 32 self.fc2 = nn.Linear(32, 1) # 은닉층 32 → 출력층 1 self.relu = nn.ReLU() self.sigmoi..
-
PyTorch 모델 학습 및 평가 코드 이해하기Pytorch 2025. 3. 10. 11:17
PyTorch를 사용하여 모델을 학습하고 평가하는 과정에서 중요한 개념과 코드를 정리한다.특히, train()과 evaluate() 함수에서의 주요 동작을 하나씩 분석하며, 학습과 평가의 차이를 명확히 이해한다.1. 학습 코드 (train 함수)import torchimport torch.nn as nncriterion = nn.BCELoss()optimizer = nn.Adam(model.parameters(), lr=0.01)def train(model, train_loader, optimizer, criterion, device): model.train() # 모델을 학습 모드로 설정 running_loss = 0.0 for data, label in train_loader: ..
-
PyTorch의 view()와 reshape() 비교Pytorch 2025. 3. 6. 12:52
PyTorch에서 텐서의 크기를 변경하는 두 가지 주요 방법은 view()와 reshape()이다. 두 함수 모두 기존 텐서의 크기를 변경할 수 있지만, 내부적으로 동작 방식에 차이가 있다. 본 글에서는 두 함수의 차이점과 언제 각각을 사용해야 하는지 설명한다.1. view() 함수view()는 기존 텐서의 메모리 공유를 유지하면서 크기를 변경한다. 즉, 원본 텐서와 새로운 텐서는 같은 메모리를 가리키므로, 하나를 변경하면 다른 하나에도 영향을 미친다. 하지만 view()를 사용하려면 텐서가 연속적인(Contiguous) 메모리 레이아웃을 가져야 한다.예제 코드:import torchtensor = torch.arange(6).reshape(2, 3)view_tensor = tensor.view(3, 2..
-
C++ 스마트 포인터(Smart Pointer) 이해하기c++ 2025. 3. 2. 21:34
C++의 스마트 포인터는 메모리 관리 자동화를 위한 도구로, 수동으로 new 및 delete를 호출하는 번거로움을 줄이고 메모리 누수(memory leak) 문제를 방지하는 데 도움을 준다. 스마트 포인터는 C++11 이후부터 표준 라이브러리에 포함되었으며, std::unique_ptr, std::shared_ptr, std::weak_ptr가 주요 타입이다.이번 글에서는 스마트 포인터의 종류와 사용법을 예제와 함께 자세히 살펴본다.1. std::unique_ptr - 단일 소유권 스마트 포인터특징객체에 대한 단 하나의 소유자만 존재할 수 있다.복사가 불가능하지만 이동(move) 가능하다.객체가 소유권을 잃으면 자동으로 해제된다.사용 예제#include #include class Resource {pub..
-
고급 문법과 최적화c++ 2025. 3. 2. 19:19
C++는 강력한 성능과 유연성을 제공하는 언어지만, 효과적으로 사용하기 위해서는 고급 문법과 최적화 기법을 이해해야 한다. 특히 제품 수준의 C++ 코딩에서는 성능과 유지보수성을 동시에 고려하는 것이 중요하다.이번 포스트에서는 C++의 고급 기능과 성능 최적화 방법을 설명한다.1. Modern C++ (C++11, C++14, C++17, C++20)의 핵심 기능스마트 포인터(Smart Pointer)C++의 **new**와 **delete**를 직접 사용하는 것은 메모리 누수와 관련된 버그를 초래할 가능성이 있다. 이를 방지하기 위해 스마트 포인터를 사용한다.#include void useSmartPointer() { std::unique_ptr ptr = std::make_unique(10); ..
-
코드 품질과 유지보수성c++ 2025. 3. 2. 19:13
제품 수준(Product-Level) C++ 코딩: 코드 품질과 유지보수성소프트웨어 제품 개발에서는 코드 품질과 유지보수성이 매우 중요하다. 개인 프로젝트에서는 단순히 동작하는 코드를 작성하는 것이 목표일 수 있지만, 제품 수준의 C++ 코딩에서는 장기적인 유지보수와 확장성을 고려해야 한다.이번 포스트에서는 코드 품질과 유지보수성을 높이기 위한 핵심 원칙을 설명한다.1. 클린 코드 작성클린 코드(Clean Code)란 읽기 쉽고 유지보수하기 쉬운 코드를 의미한다. 코드는 개발자뿐만 아니라 팀원, 미래의 유지보수 담당자도 쉽게 이해할 수 있어야 한다.가독성이 높은 코드 작성아래 두 코드를 비교해 보자.가독성이 낮은 코드 예시int f(int a, int b) { return a * b - (a + b..
-
C++ 구조체 vs 클래스: 차이점과 올바른 활용법c++ 2025. 2. 24. 19:03
C++에서 구조체(struct)와 클래스(class)의 차이는 많은 프로그래머들이 한 번쯤 궁금해하는 주제입니다. 구조체와 클래스 모두 데이터를 담을 수 있는 사용자 정의 데이터 타입이지만, 몇 가지 중요한 차이점이 존재합니다.1. 기본 접근 제어자의 차이구조체와 클래스의 가장 큰 차이점은 멤버 변수 및 함수의 기본 접근 제어자가 다르다는 점입니다.구조체(struct): 기본적으로 public 접근 지정자를 가집니다.클래스(class): 기본적으로 private 접근 지정자를 가집니다.예제 코드로 확인해보겠습니다.#include using namespace std;struct MyStruct { int a; // 기본적으로 public};class MyClass { int a; // 기본적..