반응형

전체 글 16

AlexNet 구현, CIFAR-10 이미지 분류하기

(지난 글) https://bedlocked.tistory.com/19 AlexNet의 구조와 구현AlexNet은 2012년에 발표된 이미지 분류 CNN 아키텍쳐이고, 그 당시에 타 모델들에 비해 뛰어난 성능으로 이미지 객체 인식 대회인 ImageNet Large Scale Visual Recognition Challenge에서 우승을 했다. 처음으로 Cbedlocked.tistory.com 지난번 게시물에서는 AlexNet이 어떠한 구조를 가지고 있는지, 왜 당시의 타 모델들에 비해 뛰어난 성능을 가질 수 있었는지 살펴보았다. 이번에는 CIFAR-10 데이터셋을 이용해 AlexNet 모델을 학습시키고 이미지를 분류해보겠다. device = torch.device("cuda" if torch.cuda..

컴퓨터 비전 2026.01.14

AlexNet의 구조와 구현

AlexNet은 2012년에 발표된 이미지 분류 CNN 아키텍쳐이고, 그 당시에 타 모델들에 비해 뛰어난 성능으로 이미지 객체 인식 대회인 ImageNet Large Scale Visual Recognition Challenge에서 우승을 했다. 처음으로 CNN 기반 딥러닝 모델이 고전적 이미지 분류 모델들의 성능을 앞지른 사례로 딥러닝이 많은 주목을 받기 시작하는 계기가 됐다고 한다. 오늘은 AlexNet의 어떠한 구조적 특징들이 큰 성능 향상으로 이어질 수 있었는지 논문의 내용을 토대로 살펴보고 신경망을 pytorch로 구현해보겠다. 논문 링크: https://papers.nips.cc/paper_files/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Pap..

컴퓨터 비전 2026.01.10

이미지에서의 Edge Detection (First Derivative, Laplacian, Canny Edge Detection)

오늘은 Edge Detection 을 하는 방법에 대해서 정리해보겠다. 우선 이미지의 엣지를 어떻게 정의할 수 있을까? 바로 이미지에서 픽셀들의 Intensity가 급격하게 변화하는 부분이다. 픽셀값이 이미지의 어떤 부분에서 급격하게 변하는지는 인접한 픽셀들의 값을 비교해보면 구할 수 있다. 만약 픽셀값들이 연속적이라고 가정한다면 미분을 통해 각 픽셀에서의 Intensity 변화량을 계산할 수 있을 것이다. 이미지는 2D로 x, y 성분이 있으므로 Gradient ∇를 계산하면 된다. 엣지의 강도는 Gradient의 크기로 생각할 수 있다. 마지막으로 엣지의 방향은 다음과 같다. 하지만 이미지 픽셀값들은 연속적이지 않기 때문에 실제로 미분 계산을 할 수는 없고(실제 이미지의 Intensity 값은 ..

컴퓨터 비전 2026.01.04

openCV 활용한 문서 스캐너 프로그램 만들기(2)

(지난 글) https://bedlocked.tistory.com/15 지난번에 만든 문서 스캔 프로그램을 Stramlit을 통해서 배포해보았다. 하지만 이 코드 그대로 배포할 수는 없었으니 그 이유는..openCV의 VideoCapture 대신 Streamlit의 camera_input을 사용해야했다. (아마 로컬이 아닌 클라우드 상에서 프로그램이 실행되기 때문인듯) 일반화 성능 개선을 위해 Canny Edge Detection 후 findContours를 통해 가장 큰 사각형을 찾는 방식으로 바꾸었다. 사진 촬영을 다시 해야하는 경우에는 위와 같이 findContours 결과를 보여준다. 촬영이 잘 된 경우는 이렇게 나온다. 수정된 코드는 아래에서 확인할 수 있다!github repository: h..

컴퓨터 비전 2025.12.28

SVM(Support Vector Machine) 개념과 수학적 원리

머신러닝을 하면서 SVM을 데이터 피처 증강에 사용해본 적은 있지만 그 원리에 대해 자세히 공부해본 적이 없었다. 그래서 이번에 따로 공부도 해볼겸 여기에 내용을 정리해보겠다! SVM(Support Vector Machine)은 분류에 사용되는 지도학습 알고리즘으로, 데이터를 가장 잘 구분할 수 있는 결정 경계를 찾는 것이 알고리즘의 목표이다. 여기서 결정 경계를 초명면이라고도 부른다. n 차원의 데이터를 구분짓는 결정 경계(초명면)는 n-1 차원이 된다. (데이터가 2차원이면 직선, 3차원이면 평면, ....) SVM은 결정 경계를 기준으로 마진(결정 경계와 가장 가까운 데이터 포인트 사이의 거리)이 최대가 되도록 하는 결정 경계를 찾는다. 결정 경계와 가장 가까운 데이터 포인트들을 Suppor..

머신러닝 2025.12.20

openCV 활용한 문서 스캐너 프로그램 만들기

openCV 라이브러리를 활용해 문서 스캔을 해주는 프로그램을 만들어 보기로 했다. 처음에 구상한 구조는 다음과 같았다. 웹캠을 사용해 문서가 포함된 사진을 촬영한다↓Grayscaling 적용↓이미지에 Blur / Dilate 를 적용한다↓Corner detection 을 통해 이미지 내 문서의 네 모서리 좌표를 구한다↓구한 좌표를 토대로 Perspective Transform 을 적용해 문서로 꽉 채운 이미지를 만든다 우선 촬영한 이미지에 Blurring, Dilation 적용 없이 Corner Detection을 해보았다. Corner Detection에는 openCV의 goodFeaturesToTrack() 함수를 사용했다. corners = cv2.goodFeaturesToTrack(img_gr..

컴퓨터 비전 2025.12.16

[openCV] Morphological Operations in Images

모폴로지 연산(Morphological Operation)은 이미지 프로세싱의 한 가지 방법으로 이미지를 형태(shape) 관점에서 변형, 분석하며 주로 바이너리 이미지에 활용된다. 모폴로지 연산을 통해 노이즈 제거, 엣지 변형, 객체의 형태 분석 등을 해낼 수 있다. 연산의 종류로는 Erosion(침식), Dilation(팽창), Gradient, Opening, Closing 이 있다. Erosion이미지를 커널이 스캔하고, 커널의 모든 영역이 이미지의 객체 내부에 포함될 때 (교집합) 커널의 중심점의 집합이 Erosion의 결과가 된다. Erosion을 통해 커널보다 크기가 작은 white noise를 제거하거나 객체의 경계를 후퇴시킬 수 있다. Dilation이미지를 커널이 스캔하고, 커널의..

[openCV] Image Thresholding

이미지 임계 처리, Image Thresholding은 특정 임계값(threshold)를 기준으로 이미지의 픽셀값을 두 가지로 나누는 것이다. 물체와 배경을 분리하거나 이미지에서 특정 영역을 추출하는 가장 기본적인 방법으로 활용된다. 또한 텍스트 추출, 노이즈 제거 등에도 활용될 수 있다. 기본적인 binary thresholding에서는 픽셀값이 임계값보다 크면 255(흰색), 작으면 0(검은색)으로 변환한다. openCV에서는 binary thresholding의 여러가지 변형으로 몇가지를 제공한다. Binary Threshold Inverted: 임계값보다 크면 0, 작으면 255Truncated Threshold: 임계값보다 크면 임계값, 작으면 픽셀값 유지To Zero Threshold: 임계값..

[openCV] Image Transformation - Affine Transformation, Perspective Transformation

오늘은 opencv 라이브러리를 활용해 이미지의 transformation을 해보겠다. Affine Transformation과 Perspective Transformation 모두 한 이미지의 좌표를 다른 좌표로 변환하는 기하학적 변환이다. 둘의 차이점은 변환 가능한 형태와 변환의 자유도에 있다. Affine Transformation 우선 Affine Transformation은 이미지의 회전, 축소와 확대, 이동 등을 포함하는 변환이다. 변환 후에 원래 평행한 선들이 그대로 평행하게 유지된다는 특징이 있다. 이미지에 Affine Transformation을 적용하는 방법은 바로 행렬곱(Matrix Multiplication)을 활용하는 것이다. 그리고 행렬곱을 용이하게 하기 위해서 우리는 Homog..

[openCV] Image Transformation - Log, Gamma, Piecewise-linear

하나의 이미지 안에서 대부분의 픽셀값들이 비슷한 값을 가지고 있을 경우 시각적으로 물체를 구분해내기 어려워진다. 이를 극복할 수 있는 방법으로 픽셀값들이 더 wide range 안에 분포할 수 있도록 하는 것이 있다. 오늘은 이러한 방법 중 Log Transformation, Power-law (Gamma) Transformation, Piecewise-linear Transformation 세가지를 해보겠다. Log Transformation아래와 같은 식을 이용해 픽셀값을 0~255 범위로 매핑한다. s=c⋅log(1+r) 로그 함수의 특성상 입력값이 작은 부분에서는 기울기가 크기 때문에 어두운 영역을 크게 밝히고, 이미 밝은 영역은 상대적으로 덜 증가시킨다. 따라서 어두운 픽셀을 밝히고 강조하고 ..