본문 바로가기

전체 글

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.. 더보기
Facial Landmark Dataset 정리 구글링을 통해 사용가능한 데이터셋들을 긁어모아봤다. 랜드마크 검출 모델에 관심있는 사람들에게 이 글이 검색되길 바란다. 1. http://mmlab.ie.cuhk.edu.hk/archive/CNN_FacePoint.htm 13,466 개의 학습용 이미지(LPW - 5,590, NET - 7,876)와 2,551 개의 테스트용 이미지(BioID - 1,521, LFPW - 1,030)를 다운받을 수 있다. 양눈의 동공 좌표, 코 끝 좌표, 입술의 양끝 좌표, 총 5개의 좌표를 제공한다. 이미지 자체를 다운받을 수 있어서 바로 사용할 수 있다. 2. https://neerajkumar.org/databases/lfpw/ 총 1,432개의 이미지(LFPW - Labeld Face Parts in the Wil.. 더보기
얼굴에서 랜드마크를 추출하는 모델을 만들어보자 사진(또는 동영상)을 입력받으면 얼굴 영역을 찾은 뒤 Landmark를 추출해내는 모델을 만들어 보려고 한다. 그리고 추출한 Landmark를 기반으로 얼굴의 방향 추적 기능과 시선추적 기능까지 추가해볼 생각이다. 여기에 더해 안드로이드폰에서 돌아갈 수 있도록 모델 배포까지 목표로 삼았다. 시간 나는대로 틈틈히 찾아보고 정리하다보면 만족할만한 결과물이 나올 거라 생각한다. 우선 보면서 따라해볼 수 있는 사이트나 공부에 도움될만한 사이트들을 정리해봤다. [빵형의 개발도상국] https://www.youtube.com/channel/UC9PB9nKYqKEx_N3KM-JVTpg/videos 1.1 고양이 얼굴 인식 - https://www.opentutorials.org/module/3811/22896 1.2.. 더보기
joint training, alternate training supervised learning에서는 모델 구조 설계 못지않게 loss function을 정의하는 것이 중요하다. 대표적인 loss function은 다음과 같다. tf.reduce_mean(tf.square(pred - true)) → regression tf.nn.sigmoid_cross_entropy_with_logits( ) → binary classification과 multi-label classification tf.nn.softmax_cross_entropy_with_logits_v2( ) → multi-class classification 해결하고자 하는 문제에 맞게 loss function을 설정해 사용해주면 된다. 딥러닝 공부 시작할때만 해도 위의 3개 loss function만 .. 더보기
1.5. draw_bounding_boxes 함수 설계 및 inference 결과 확인 pretrained model을 실행시켜서 결과 받아보는 과정까지 알아보았다. 이제는 detecting 결과를 이미지에 표현해주기만 하면 된다. 튜토리얼 코드를 봐보면 ./object_detection/utils/visualization_utils.py 를 사용해서 그려주는 걸 볼 수 있는데 그냥 경험삼아 직접 한 번 구현해보고 싶어서 draw_bounding_boxes 함수를 만들었다. 1. class_info.txt 만들기 코드 설명에 앞서 class_info.txt를 만들어줄 필요가 있다. draw_bounding_boxes 함수는 class에 대한 정보를 text가 아닌 int로 반환해준다. 따라서 각 숫자가 어떤 class를 뜻하지는 지에 대한 정보가 필요하다. visualization_util.. 더보기
1.4. run_inference_for_single_image 함수 설계 pretrained model 을 메모리에 올리는 과정까지 알아봤다. 이제 메모리에 올려진 계산 그래프에서 예측을 위해 필요한 텐서 두 개를 가져와 실행하는 데에 필요한 함수들을 알아보자. 관련 글로 [Deep Learning/Tensorflow] - MNIST 분류 모델, 조금 다르게 실행해보자 가 있으니 읽고 오길 바란다. 모델 실행을 위해서는 계산 그래프에서 텐서를 가져와 object detecting 결과를 뽑아주는 함수 결과값을 통해 이미지에 bounding box를 그려주는 함수 가 필요하다. 이번 글에서는 '1. 계산 그래프에서 텐서를 가져와 object detection 결과를 뽑아주는 함수' 에 대해 알아보도록 하겠다. 이 과정에서 이전에 다운받지 않은 opencv를 사용할 것이기 때문에.. 더보기