본문 바로가기

전체 글

CNN에서 커널 사이즈는 왜 3x3을 주로 쓸까? 대부분이 3x3 kernel size를 사용한다. 5x5도 있고 7x7도 있고 다양하게 사용할 수 있는데 대부분이 3x3을 쓴다. 이유는 모델 파라미터 수에서 큰 차이가 있기 때문이다. (1) 3x3 kernel (2) 5x5 kernel 3x3 kernel 2개를 사용하는 것이 5x5 kernel 1개를 사용하는 것보다 모델 파라미터 수가 더 적다. 그래서 3x3을 주로 사용하는 것이다. 더보기
CNN이 이미지에 더 효율적인 이유 이미지를 다루데에는 CNN을 가장 많이 사용한다. convolution이 이미지 연산에 특화되어 있기 때문이다. 근데 왜 특화 되어 있다 말할 수 있는 걸까? convolution layer와 fully connected layer를 비교해보면 이에 대한 답을 찾을 수 있다. 훨씬 적은 모델 파라미터 요구 개수 입력 이미지 크기가 [ 200 x 200 ]라고 가정했을 때 (1) fully connected layer의 경우 node를 1개로만 둬도 40,001개(가중치 40,000 + 바이어스 1)의 모델 파라미터가 필요하지만 (2) convolution layer를 사용하는 경우 3x3 커널 100개를 사용한다해도 1,000개(커널 900 + 바이어스 100)만 필요하다. 결과적으로 cnn연산이 훨씬 .. 더보기
[리더십 심포지엄] 의료 인공지능의 현재와 미래 후기 각종 학회, 심포지엄 등이 많이 열리는 11월, 연구실에서는 등록비 지원이 불가능해서 자비로 [리더십 심포지엄] 의료 인공지능의 현재와 미래 사전 등록 후 11월 8일에 듣고 왔다. 나 같은 대학원생보단 의학박사분들이 훨씬 더 많아서 당황하고 괜히 긴장했던 심포지엄이었다. 현장 사진 좀 찍어둘 걸... 발표 듣다가 찍은 ppt 화면으로 대신한다. 심포지엄에는 역시나 VUNO도 참석해있었다. VUNO는 이곳저곳 참여를 많이하는 회사인 것 같다. 법제학회에도 참석하는 걸 보면 단순히 인공지능 기술에만 집중하는 게 아니라 인공지능 의료기기 관련 규제, 인력 양성, 현황 파악 등 여러가지에 대해 다루고 고민하고 해결하려고 하는 것 같다. 회사가 앞으로 나아가야할 방향을 정하고 계속해서 성장하기 위해 다방면으로 .. 더보기
perspective transformation 와 homography 차이 기하 변환(geometric transformation)에 대해 공부 중이다. 다크프로그래머 블로그(영상처리 -> [영상 Geometry] 시리즈에 많은 개념들이 이해하기 쉽게 정리되어 있다)를 보며 많이 배우고 있다. 오늘은 블로그 글을 읽으며 공부하던 중에 헷갈리는 개념이 있어서 알아본 결과를 정리해보고자 한다. perspective transformation(원근 변환)와 homography( = projective transformation) 이 두 개념 사이에 어떤 차이가 있는 걸까?? 알아본 결과 perspective transformation = homography 관계라고 한다. OpenCV에서는 cv2.getPerspectiveTransform( )와 cv2.findHomography( .. 더보기
OpenCV4 다운받는 방법 OpenCV3는 pip install 이나 conda install 을 사용해서 다운받아줄 수 있는데, OpenCV4는 이와는 다르게 조금 복잡한 방식으로 받아줘야하나보다. 여기에서 opencv_python-4.1.1-cp36-cp36m-win_amd64.whl을 받아주자. cp36은 python3.6, win_amd64는 window 64비트를 위한 파일이란 뜻이다. 다운받은 파일을 바탕화면으로 옮긴 뒤 명령 프롬프트 창에서도 경로를 바탕화면까지 이동시켜주자. 그 다음 pip install opencv_python-4.1.1-cp36-cp36m-win_amd64.whl 명령을 입력해주면 OpenCV4를 설치할 수 있다. [ 참고 사이트 ] https://pysource.com/2019/03/15/how.. 더보기
custom keypoint를 설정해 descriptor를 얻는 방법 / sift.compute( ) 앞선 글에서는 keypoint 추출을 SIFT로 했었는데 이를 custom keypoints로 대체해 사용하는 방법에 대해 정리하고자 한다. cv2.KeyPoint( )를 사용해서 keypoint를 정의해 사용해주면 된다. 다음의 예제에선 내가 만든 모델이 keypoint 좌표로 (370, 200)을 뽑아냈다 가정한 상태로 진행했다. import cv2 imageA = cv2.imread('./pano_1.jpeg') grayA = cv2.cvtColor(imageA,cv2.COLOR_BGR2GRAY) keypoint_x = 370 keypoint_y = 200 keypoint_size = 100 keypoint = cv2.KeyPoint(keypoint_x, keypoint_y, keypoint_siz.. 더보기
cv2.BFMatcher( )에 대해 알아보자 파노라마 사진을 만들기 위해선 image stitching이라고도 부르는 image registration (영상 정합)을 해야한다. 그리고 이를 위해서는 두 이미지에서 같은 지점을 가리키는 좌표들의 쌍들을 먼저 알아내야 한다. 그래야 변환 행렬을 계산해 registration을 할 수 있기 때문이다. image registration은 보통 아래와 같은 흐름으로 진행된다. 이번 글에서는 matching 과정에서 쓰이는 cv2.BFMatcher( ) 함수에 대해 정리하고자 한다. cv2.BFMatcher( ) 에서 BF는 Brute Force의 약자이다. Brute Force는 원래부터 있던 개념으로 무식하게 전부 다 확인해본다는 의미를 갖는다. 다르게 말하면 가능한 모든 경우에 대해 다 계산해본 후 최.. 더보기
COFW Dataset 여는 방법 matlab 파일을 python으로 여는 방법으로 가장 흔히 검색되는 코드는 아래와 같다. from scipy import io mat = io.loadmat('./COFW_train_color.mat') 문제는 이 방식이 에러를 낸다는 점이다. v7.3 files 저쩌구라하면서 에러를 낸다. 해결방법을 여기에서 찾을 수 있었다. import cv2, h5py import numpy as np f = h5py.File('./COFW_train_color.mat', 'r') bboxed = f['bboxesTr'] images = f['IsTr'] keypoints = f['phisTr'] idx = 399 images = images[0] image_ref = images[idx] image = f[im.. 더보기