7월, 2017의 게시물 표시

Scale-Aware Face Detection

이미지
▣  기존 시스템  아래와 같이 Single-scale detectors를 이용해 다양한 크기의 얼굴을 검출하기 위해 image pyramids를 구성했다고 하자. 각 scale 별로 많은 계산량이 소요된다. face patch를 CNN으로 학습시켜서 sliding window를 적용한 것은 이미 1990년 대에 나왔다. 이제 새로운 방법을 생각해보자. 기존 연구 중에는 CNN의 feature를 각 pyramid level에서 추출 후 DPM과 연결시키는 " A Deep Pyramid Deformable Part Model for Face Detection" 가 있었다. ▣  제안 시스템 제안하는 방법은 아래 그림으로 설명된다.  imput image를 작은 크기로 down scale 한 후  Scale Proposal Network (SPN)로 prediction 된 Scale histogram을 얻는다. Scale histogram은 input image에 존재하는 얼굴 크기를 추정한다. 단 얼굴의 위치 정보를 포함하는 것은 아니다. input image는   Scale histogram에서 얻은 scale 정보를 기반으로 아래와 같이 resampling 된다. 그리고 각 scale에 대해 single scale에 최적화 된 RPN Network로 얼굴의 위치를 찾는다. ▣  성능 성능 비교가 FDDB라 조금 신뢰는 가지 않는다. 하지만 무려 SenseTime에서 나온 논문이다. 이들이 중요시하는 것은 accuracy 뿐 아니라 speed 도 고려한다. 아래 표를 보면 속도가 매우 빠른 것을 알 수 있다. 물체가 있을 만한 size를 light한 알고리즘으로 찾고 좀 더 신뢰성 있는 알고리즘으로 정확하게 물체의 위치를 찾는 접근 방법이 사실 새로운 것은 아니다.  내가 예전에 낸 특허에도 이런 방법으로 번호판 검출을 하는게 있었다.  deep l

Perceptual Generative Adversarial Networks for Small Object Detection

이미지
▣  간략 소개 아래에서 "features for small instance"는 작은 객체에서 CNN layer의 윗 단에서 나온 feature이고    "features for large instance" 아래 그림과 같이 큰 객체에서 나온 feature이다. 작은 객체에서 나온 feature는 구분이 어려울 정도로 low resolution이다. 이것을 아래의 큰 객체에서 나온 feature처럼 만들어 주면 어떨까? 이게 이 논문의 중요 아이디어다. ▣    Perceptual GANs의 개요 이제 논문의 아이디어는 알았으니 자세히 network를 분석해보자. step1> 먼저, discriminator의 perception branch가 큰 객체만 포함하는 학습 이미지를 가지고 학습된다. step2> 그 다음 generator network는 작은 객체만 포함된 학습 이미지를 가지고 super-resolved large-object를 생성하도록 학습된다. step3> discriminator network의 adversarial branch가 step2 에서 생성한    super-resolved large-object 와 큰 객체의 feature를 구분하도록 학습된다. 위와같은 GAN 학습이 반복되면서 작은 객체에 대한 정확도가 향상된다. ▣    Perceptual GANs에 대한 상세 분석 아래는 일반적인 GAN의 수식이다. 이런 default 개념을 vanilla라는 표현을 써서 vanilla GAN이라고 한다. 보통 x는 real sample, z는  noise distribution에서 생성된 generator의 input vector이다. DC-GAN의 경우 100-d 이다. 제안하는  Perceptual GANs에서는 x가 큰 객체이고, z는 작은객체가 된다아래 수식으로 표현된다.  자세한 network에 대한

Google Cloud Engine 사용기-faster_rcnn_resnet101

이미지
▣ 가장 잘 설명된 아래 구글 공식 사이트를 참조해서 사용해보자. https://cloud.google.com/blog/big-data/2017/06/training-an-object-detector-using-cloud-machine-learning-engine 자 내가 하고 싶은 것은 아래와 같이 detection&classification이다. ▣ 전처리 작업. training을 하기 위한 전처리 작업들은 위 사이트에 자세히 소개되어 있기 때문에 따라하면 된다. ▣ 학습 아래와 같은 명령어를 치면 학습이 시작된다. gcloud ml-engine jobs submit training `whoami`_object_detection_`date +%s` \ --job-dir=${YOUR_GCS_BUCKET}/train \ --packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz \ --module-name object_detection.train \ --region us-central1 \ --config object_detection/samples/cloud/cloud.yml \ -- \ --train_dir=${YOUR_GCS_BUCKET}/train \ --pipeline_config_path=${YOUR_GCS_BUCKET}/data/faster_rcnn_resnet101_pets.config 여기서 `whoami`_object_detection_`date +%s` 는 내 ID가 포함된 JOB 이름이다. config는 GPU작업을 할 때 사용되는 YAML 파일이다. 아래와 같이 몇 개의 GPU를 쓸지 어떤 GPU를  쓸지를 결정 할 수 있다. train_dir은 training checkpoints 와 events 등이 저장될 장소이다. t

google vision API 사용하기

이미지
 ▣ 간단 사용법. 아래 사이트를 참고해서 설치 후 예제를 실행해 봤다. http://statkclee.github.io/deep-learning/gc-vision.html 그러면 아래와 같이 detection 결과를 볼 수 있다. 모든 python 예제코드들은 구글에서 아래 github를 통해 제공한다. https://github.com/GoogleCloudPlatform/python-docs-samples  ▣ Google Cloud Vision API 사용법 먼저 아래의  Google Cloud Vision API 사용 예제를 익혀보자. https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/vision/api/label 위 예제를 해보기 위해서 아래와 같이 사이트에서 Google Cloud SDK 을 설치하고 간단하게 gcloud 사용법을 익힌다. https://cloud.google.com/sdk/docs/quickstart-linux 이제 아래 예제를 따라해보자. https://cloud.google.com/storage/docs/quickstart-gsutil  로컬 터미널에서 접속을 해 본다. 1. 내 터미널에서 bucket 생성해보기 $ gsutil mb gs://my-data-vision00 아래와 같은 응답이 나오면서 내 cloud에 my-data-vision00 이라는 bucket이 생성된 걸 확인할 수 있었다.    Creating gs://my-data-vision00/... 2. 내 bucket에 object 를 upload 해보자. 아래와 같이 내 bucket에 잘 저장된 걸 확인할 수 있다. 3. 다른 유용한 기능들. 다른 것도 매우 간단해서 더 이상 정리하지 않아도 된다.  ● Give someone access to your

Google Cloud Engine 사용기-mnist 편

이미지
Google Cloud Engine을 이용해 처음으로 학습을 시작해본다. Cloud 자체를 처음 해보는 초보라 재밌을 것 같다. ▣ 그냥 해보려고 했으나 이미 자세한 설명이 아래 있으므로 공부하는 차원에서 아래를 따라해본다. 아래를 수행하기 위해  Cloud Machine Learning Engine API 를 enable 해야 하는데 이제부터 과금이 들어간다. https://github.com/GoogleCloudPlatform/cloudml-dist-mnist-example ▣ 터미널에서의 학습. 위 예제는 터미널에서의 학습에 대해 설명하고 있다. 다음과 같은 절차대로 학습을 하면 된다. 1. 아래 명령어에 따라 project를 clone한다. 2.  training jobs에서 사용할  bucket 생성.   → 아래 명령어에서  gcloud config list project --format "value(core.project)"  을 치면 내가 사용하고 있는 project ID를 알려준다. 아래 명령어는 현재 내가 설정하고 있는 project ID를 알려준다. gcloud info |tr -d '[]' | awk '/project:/ {print $2}' 아래 명령어는 현재 내가 설정하고 있는 project ID를 알려준다.   gsutil mkdir $BUCKET  명령어를 쳐서  bucket을 생성한다. 3. 이제 mnist data를 tfrecords format으로 변환하고 내가 생성한 BUCKET 의 data에     저장하자.   →  아래와 같이 잘 저장된 것을 확인할 수 있다. 4.  Submit a training job to Cloud Machine Learning.     → 아래와 같은 명령어를 치면 학습이 시작된다.   → JOB_ID는 아무 값이나 되지만 아래와 같이 tutorial 대로 해보자. 5

Google Cloud Engine 사용기 - Hello World 편

이미지
▣ 설치 구글 클라우드는 Datalab이라는 매우 편리한 도구를 제공한다. 자세한 소개는 아래 사이트를 참고하자.  → https://cloud.google.com/datalab/ 설치는 아래를 따라하자. → https://cloud.google.com/ml-engine/docs/quickstarts/datalab ▣ Hello, Google Cloud! 아래와 같이 작동을 확인해 본다. 내가 만든 instance를 확인해 보고 싶으면 shell에  datalab list  명령어를 치면 된다. 다시 연결하고 싶으면   datalab connect --port 8081 instance-name 내가 만든 key값을 기억하고 있어야 한다. 위 명령어를 실행하면 password를 묻는다.