본문 바로가기

전체 글

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를 사용할 것이기 때문에.. 더보기
tf.gfile.GFile( )은 무엇일까 TF object detection API 공부 중에 tf.gfile.GFile( ) 을 접하게 됐는데 구글링해봐도 딱히 원하는 답변이 안 나오더라. 그나마 힌트를 얻을 수 있던 곳이 여기다. 이것저것 막 해보다 보니 tf.gfile.GFile( )은 파이썬의 open( )이랑 사용법이 완전히 일치하단 걸 알게됐다. 그래서 나 혼자서 아래와 같은 결론을 내려봤다. tf.gfile.GFile( )은 tensorflow 구조에 특화된 파일 입출력 함수 간단한 예제를 봐보면 왜 이런 결론을 내리게 됐는지 이해할 수 있을 거다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import tensorflow as tf with open('test.txt', 'w') as f: f.write('test.. 더보기
1.3. Pretrained model의 계산 그래프 로드 다운받은 pretrained model 관련 파일들 중에서 예측에 필요한 파일은 frozen_inference_graph.pb 이다. 그니까 우리의 목표는 아래와 같은 결과 사진을 얻는 것이고, 이를 위해선 하드디스크에 저장돼 있는 frozen_inference_graph.pb 파일을 메모리에 올려 실행해줘야한다는 말이다. 그래서 이번 글에선 frozen_inference_graph.pb를 메모리에 올리는 과정까지 알아보겠다. 글 시작에 앞서 protocol buffer와 관련된 글, [인공지능 용어 정리] - Protocol Buffer 개념 ~ Protocol Buffer 실습 2을 읽고 오길 바란다. protocol buffer가 무엇이고 어떻게 사용하는 지를 알아야 이후부터 진행되는 내용을 정확히.. 더보기
1.2. Pretrained model 다운로드 및 압축 풀기 object_detection_tutorial.ipynb을 살펴보면 전체적인 흐름이 다음과 같다. 사용하고자 하는 pretrained model의 tar.gz 파일 다운로드 tar.gz 파일 압축 풀기 pretrained model의 계산 그래프 로드 모델 실행 및 결과 출력 이번 글에서는 모델을 다운받고 압축을 푸는 방법까지 알아보겠다. 1. pretrained model 다운로드 Tensorflow에서 지원하는 object detection model 종류와 다운로드 주소는 detection_model_zoo에서 확인할 수 있다. detection_model_zoo에서 바로 모델 다운받아서 알집으로 압축 풀어주면 되기는 한다. 가장 쉽고 간단한 방법이다. 근데 이를 코드로 작성해서 사용하는 방법에 대.. 더보기