Dev Blog

김민섭의 개발 블로그
All
Computer Vision
Python
Crawling
C
[C] Convolution Neural Network
목적 평소에 Python으로 인공지능 공부하면서 GPU 가속부터 최적화 과정에서 항상 아쉬움이 남았다. Low-level에서 메모리 관리하고 싶은 생각이 있어서 C로 구현해봐야겠다고 생각하였다. 수학 함수 이 프로젝트가 끝나고 검색해보면서 GSL 문서를 참고해보니 자료구조를 다음과 같이 설계했었다. matrix_block 구조체에서 데이터 저장을 담당하고, matrix 에서 matrix_block 구조체 데이터 참조하는 방식이다. 다음과 같이 설계하면, Python의 slice 기능을 쉽게 구현할 수 있다. 하지만 잘 모르고 개발한 필자는 수학 함수를 다음과 같이 구현하였다. 1. ReLU (Rectified Linear Unit) 정의: ReLU는 신경망에서 자주 사용되는 활성화 함수이다. 공식: 역할: ReLU는 음수를 0으로 변환하고 양수는 그대로 유지하여 비선형성을 추가한다. 이를 통해 모델이 더 복잡한 패턴을 학습할 수 있도록 한다. 구현: 2. 손실 함수: MSE (Mean Squared Error) 정의: MSE는 예측값과 실제값 사이의 오차를 제곱하여 평균을 구하는 손실 함수이다. 공식: - y^i: 예측값 - y_i: 실제값 - N: 데이터의 개수 구현: 출력 행렬과 목표 행렬 간의 차이를 계산한 뒤, 이를 제곱해 합산하고 평균을 구하는 방식으로 손실을 계산한다.
  1. C
  2. Computer Vision
  • 김민섭
[Python] Google Image Crawling
௹ 필요성 필자 같은 경우, 학습용 이미지 다운로드를 목적으로 사용하고 있었다. 허나 최근에 Google에서 업데이트를 진행해 작동하지 않게 되었고, 새로 제작하게 되었다. Crawling 분야는 웹 페이지 업데이트에 민감하기 때문에 이 문서를 참고할 때 글 업로드 시간을 참고하기 바란다. (2024.12.) ௹ 알고리즘 이 프로그램은 다음 알고리즘으로 작동된다: Google Image에 접속한다. 이미지 검색한다. 모든 이미지를 불러온다. 이미지를 다운로드한다. 이제 하나씩 구현해보자. 1. Google Image 접속 및 이미지 검색하기 Google Image에 접속하고 이미지를 따로 검색할 수 있지만, Query를 사용하여 이를 동시에 진행할 수 있다. 2. 모든 이미지 불러오기 Google Image에서 최적화 때문에 한 번에 모든 이미지를 불러오지 않는다. 이를 불러오기 위해 페이지 끝까지 스크롤 다운해야 한다. 이는 Javascript 명령어를 통해 구현할 수 있다. 화면 끝까지 스크롤 다운하는 코드이다. 3. 이미지 다운로드하기 이미지 다운로드를 위해 우리는 HTML에서 CLASS 개념을 알아야 한다. 간단히 설명하면, 웹에서 특정 요소에 대한 이름이라고 생각하면 된다. 이번 상황을 예로 들면, "우리가 원하는 이미지 이름" 이 된다.
  1. Python
  2. Crawling
  • 김민섭
[Python] Edge Detection
Sobel 알고리즘은 영상 처리에서 엣지 검출을 위해 사용하는 필터로, 이미지의 각 픽셀에서 그래디언트(gradient)를 계산하여 엣지를 감지한다. 이 알고리즘은 두 개의 방향(수직과 수평)의 그래디언트를 계산하기 위해 Sobel 커널을 사용한다. ௹ Sobel 필터 Sobel 필터는 수직 방향과 수평 방향을 계산하기 위한 두 개의 3×3 커널로 구성된다. 수직 방향 Sobel 필터 (G_x): 수평 방향 Sobel 필터 (G_y): ௹ Sobel 알고리즘 그레이스케일 변환 입력 이미지를 그레이스케일로 변환하여 단일 채널 이미지를 얻는다. 이를 통해 계산량을 줄이고, 밝기 정보만으로 엣지를 감지한다. 그레이스케일 변환은 다음 식을 사용한다: 그래디언트 계산 수직 방향(G_x)과 수평 방향 (G_y)의 그래디언트를 Sobel 필터와의 합성곱(convolution)을 통해 계산한다. 합성곱은 다음 식으로 표현된다: 그래디언트 크기 계산 두 방향의 그래디언트 값을 결합하여 최종 엣지 강도를 계산한다. 그래디언트 크기는 다음 식으로 계산한다: 시각화
  1. Python
  2. Computer Vision
  • 김민섭
[Python] Implementation of Differences (SSD) through Depth Map Sum of Squared
௹ 양안 시차 (Binocular Disparity) 이미지 출처: OpenCV official docs 양안 시차는 인간과 같은 양안 시각 시스템에서 두 눈이 약간 다른 각도에서 대상을 보는 데서 발생하는 시각적 차이를 의미한다. 가까운 사물일 수록 시차(Disparity)가 크고, 멀리에 있는 사물일 수록 시차가 작다. x와 x': 3D 공간 상의 한 점(Scene Point)이 두 카메라에서 투영된 이미지 평면 상의 좌표 B : 두 카메라 센터 간의 거리 (Baseline) f : 카메라의 초점 거리(Focal Length) 깊이(Depth) : 3D 공간 상의 한 점(Scene Point)에서 카메라까지의 거리 : 3D 공간 상의 한 점(Scene Point)에서 카메라까지의 거리 ௹ The Sum of Squared Differences (제곱 차 합) 기본 개념으로 왼쪽, 오른쪽 이미지가 유사하지 않을 수록 거리가 가깝고, 유사할 수록 거리가 멀다고 설명했다. 여기서 핵심은 "두 이미지 간 유사도" 라고 볼 수 있다. 필자는 이번에 MSE(평균제곱오차) 방식으로 유사도를 구하였다. I_L: 왼쪽 이미지 I_R:오른쪽 이미지 B: Block size(블록 사이즈); 비교할 이미지 크기 d: Disparity(깊이) OpenCV로 구현 Numpy로 구현
  1. Python
  2. Computer Vision
  • 김민섭
👍
1