Closed pptnz closed 7 years ago
YOLO 모델이 빠르고 정확하여 과제에 더 적합한 것 같아, 이 모델의 가중치를 사용합니다. You Only Look Once: Unified, Real-Time Object Detection
@pptnz 트레이닝과 테스트를 위한 이미지셋의 준비는 어떻게 준비하고 있나요? 전처리 코드도 Repository에 함께 올려주시면 감사하겠습니다.
준비된 이미지셋은 다음과 같습니다. 우선 FDDB의 이미지를 이용하고, 모자라다고 판단되면 image net의 이미지들을 사용할 것입니다.
이미지에 대한 별 다른 전처리는 필요하지 않으나, FDDB는 annotation을 text에서 XML로 변환하는 작업이 필요합니다.
감사합니다.
@pptnz 혹시 FDDB의 annotation이 주어진 규칙이 있는 형태라면, XML로 변환하는 프로그램은 제가 작성하도록 하겠습니다.
사람의 몸 전체를 인식하는 image net은 프로젝트와 맞지 않아 얼굴에 집중한 FDDB를 사용하기로 하였습니다.
그 결과 2555 장의 사진과 그에 대응하는 Annotation을 얻을 수 있었습니다.
@pptnz 프로젝트와 맞지 않는다는게 몸전체가 나오지 않으면 인식이 되지 않기 때문인가요?
몸 전체를 인식하는 것과 얼굴을 인식하는 것이 다른 문제라고 판단하였습니다. 그래서 학습을 진행할 때 몸 전체를 인식시킬지 얼굴을 인식시킬지 정해야 했습니다. 프로젝트에서 사용자와의 상호작용을 목표로 삼기 때문에, 몸 전체보다는 얼굴을 인식시키는 것이 더 효과적일 것이라고 생각하였습니다.
FDDB 이미지셋의 텍스트 annotation을 xml로 변환하는 전처리 프로그램 구현을 완료하였습니다. AnnotationToXMLConverter
변환된 xml을 바탕으로 training 중입니다. model은 tiny-yolo.cfg를 1 개의 class(person)에 맞게 변형하여 사용합니다. initialization weight은 tiny-yolo-voc, yolo-face의 두 가중치 셋을 가져와서 두 대의 컴퓨터에서 각각 학습시킵니다.
Learning하는 환경은 다음과 같습니다. Learning Rate = 0.0001 Batch Size = 16 Epoch number = 20
저는 tiny-yolo-1c 모델(tiny-yolo 모델을 1 class에 맞게 변형하여 붙인 이름입니다.)과 tiny-yolo-voc의 가중치를 사용하고, 핌언 언니는 yolo-face 모델과 yolo-face_final.weights 가중치를 사용합니다.
tiny-yolo-1c 모델의 학습 진행 상황 step 2125까지 loss가 117.229에서 1.7로 현저하게 떨어졌습니다. 이에 따라 step 2126부터 Learning Rate를 1e-4에서 1e-6으로 낮추어 미세하게 학습시키고 있습니다. 현재는 step 3144입니다.
중간 중간에 간단하게 test해보았을 때 training data에서 높은 인식률을 보이며, training data가 아닌 이미지에서도 잘 인식합니다. 구체적인 인식률은 나중에 trianing이 어느 정도 마무리되면 평가하도록 하겠습니다.
@pptnz YOLO 모델을 적용해 보지는 않았지만 소개영상이 워낙 인상깊어서(본시리즈였나 007이었나? -_-;;) 결과가 기대됩니다. Test 데이터는 Training 데이터의 10~20% 수준으로 준비하시면 좋을것 같습니다.
@Jamjomjara 저도 그 영상 보았습니다! 영상처럼 잘 될지 모르겠습니다. 훈련 데이터에 얼굴 정면 사진이 많아서 정면 인식은 잘 되는데 측면 인식이 잘 안됩니다. 사용자가 웹툰 앱을 계속 보면서 상호작용한다고 보면 괜찮을 것 같기도 합니다. 조언 감사합니다.
tiny-yolo-1c 모델의 test Youtube Faces DB에서 가져온 데이터로 test 해보았습니다. 이 데이터셋은 youtube의 1595명의 5021개의 영상에서 캡처한 스냅샷 62만 여장의 얼굴 사진을 가지고 있습니다. 각각 다른 영상에서 가져온 255개 사진으로 시험해 보았습니다. 정면이고 얼굴이 크게 나온 사진이 대부분인 데이터라 그런지, 얼굴이라고 인식하지 못한 사진이 5장에 불과했습니다. 즉, 98% 정도의 높은 정확도를 보였습니다.
현재까지의 학습 상황
CNN을 어떻게 Tensorflow로 구현했는지 Tensorflow.org의 튜토리얼로 살펴보았습니다. 이 튜토리얼을 통해 CNN으로 MNIST 숫자 data를 인식하는 방법을 알게 되었습니다. Image Recognition A Guide to TF Layers: Building a Convolutional Neural Network
TensorFlow Android Camera Demo의 코드를 살펴보며 Tensorflow 모델이 어떻게 안드로이드와 연결되는지 파악하였습니다. Scalable Object Detection using Deep Neural Networks 위의 Demo 앱의 기본이 되는 모델을 어떻게 만들었는지 논문을 읽었습니다. 논문은 image 안에서 box 후보들을 정하고 어떤 class에 해당하는지 확률로 나타낸다는 내용입니다. 우리 과제는 class가 사람에 한정되어 있어 훨씬 복잡도가 낮습니다.
중간 발표 이전까지 완료할 일들
SSD: Single Shot MultiBox Detector 논문을 읽어야 합니다. training 소스코드가 공개되어 있어서 코드와 함께 보면 직접 구현해볼 수 있을 것 같습니다. 같은 내용을 Tensorflow로 구현한 코드를 보는 편이 나을 것 같습니다. How we Built and Trained an SSD Multibox Detector in Tensorflow
모델을 과제에 맞게 수정해야 합니다.
중간 발표 이후 해야 할 일