Object Detection: R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN, YOLO, and SSD

(Updating…)

Hi guys, today I am going to introduce some recent object detection techniques using CNN. This post is written based on CS231n of Stanford University.


1. What is Object Detection?

Object Detection is figuring out whether there exist objects (from some fixed set of categories we are interested in) in the input image, and localizing that objects.

The difference between object detection and classification+localization problem is

  • there might be varying number of outputs for every input image
  • you don’t know ahead of time how many objects you expect to find in each image

2. Evolution of Object Detection Techniques Using CNN

[R-CNN]

  1. Run some Region Proposal Network and get 2k Regions of Interest (ROI). This is not learned network though. Rather, it uses traditional computer vision techniques like Selective Search, which looks for blob regions.
  2. Warp ROIs to fixed size. This is because the rest part of R-CNN pipelines requires fixed size & square input.
  3. Run each ROIs through a convolutional neural network. Classify ROIs with SVMs. Predicts regression. What I mean by “Predicts regression” is that, do some correction (offset) to the bounding box proposed at the region proposal stage. Note that sometimes the final predicted bounding box will be outside the region of interest.

* There is also “background” class so that when there exists no object in the ROI, R-CNN predicts background to say that there was no object here.

 

[Fast R-CNN]

  1. Rather than processing each region of interest separately, instead we’re going to run the entire image through some convolutional layers all at once to give high resolution convolutional feature map corresponding to the entire image.
  2. We still use region proposals from some fixed thing like Selective Search,

 

 

Gradient, Gradient Ascent, Gradient Descent

오늘은 함수의 극대점, 극소점을 찾기 위해 사용되는 기법인 Gradient Ascent법, Gradient Descent법에 대해 설명하고자 한다.  ( 이 포스팅의 일부분은 다크프로그래머님의 Gradient Descent 탐색 방법 포스팅을 참고하였다.)


1.Gradient란?

1)정의: Gradient는 함수 f의 편미분으로 이루어진 벡터이다. (Gradient is a vector composed of partial derivatives of a function.)

gradient

예시)

gradient_ex

2)특징:

  • Gradient는 함수 f의 값이 가장 크게 변화하는 방향을 나타낸다. 또한 Gradient의 크기는 변화의 정도(기울기)를 나타낸다.
  • Gradient는 optimum에 도달했는지를 알려준다. (grad f = 0)

예시) 다음과 같은 함수 f(x,y)가 있다고 해보자.

ex2.png

(1,1)에서 f값이 최대로 변화하는 방향은 (2,2)이고 변화의 크기(기울기)는 ||(2.2)||=sqrt(8)이다.


2.Gradient Ascent 방법

비용함수의 값을 극대화시키는 파라미터 값을 아래와 같이 점진적으로 찾는 방법

ascent

(여기서 lambda_k는 알고리즘의 수렴속도를 조절하는 파라미터로, step size또는 learning rate이라고 부른다.)

아래의 함수 f를 예시로 들어 설명하겠다.

현재 보고있는 x의 값이 x_f라고 가정하자. 우리는 f를 극대화시키는 x_m을 찾는 것이 목표이므로  x_f에서 더 진전해야한다. Gradient Ascent 알고리즘을 사용해보자면, grad_f(x_k)은 양수이므로 (그림의 파란색 기울기를 보자. 기울기가 양수이다.) 이 알고리즘은 새로운 x의 값으로 x_k에서 더 앞으로 나아간 값을 잡는다. 이렇게 grad f값이 양수가 나오는 한 이 알고리즘은 x값을 점점 전진시켜 x_m에 도달하고자 한다.

 

이번에는 현재 보고있는 x의 값이 x_b라고 가정하자. 우리는 f를 극대화시키는 x_m을 찾는 것이 목표이므로  x_b에서 후진해야한다. Gradient Ascent 알고리즘을 사용해보자면, grad_f(x_k)은 음수이므로 (그림의 빨간색 기울기를 보자. 기울기가 음수이다.) 이 알고리즘은 새로운 x의 값으로 x_b의 뒤에 위치해있는 값을 잡는다. 이렇게 grad f값이 음수가 나오는 한 이 알고리즘은 x값을 점점 후진시켜 x_m에 도달하고자 한다.

gradient_ascent


3.Gradient Descent 방법

비용함수의 값을 극소화시키는 파라미터 값을 아래와 같이 점진적으로 찾는 방법

descent

마찬가지로, 아래의 함수 f를 예시로 들어 설명하겠다.

현재 보고있는 x의 값이 x_f라고 가정하자. 우리는 f를 극소화시키는 x_m을 찾는 것이 목표이므로  x_f에서 더 진전해야한다. Gradient Descent 알고리즘을 사용해보자면, grad_f(x_k)은 음수이므로 (그림의 파란색 기울기를 보자. 기울기가 음수이다.) 이 알고리즘은 새로운 x의 값으로 x_k에서 더 앞으로 나아간 값을 잡는다. 이렇게 grad f값이 음수가 나오는 한 이 알고리즘은 x값을 점점 전진시켜 x_m에 도달하고자 한다.

 

이번에는 현재 보고있는 x의 값이 x_b라고 가정하자. 우리는 f를 극소화시키는 x_m을 찾는 것이 목표이므로  x_b에서 후진해야한다. Gradient Descent 알고리즘을 사용해보자면, grad_f(x_k)은 양수이므로 (그림의 빨간색 기울기를 보자. 기울기가 음수이다.) 이 알고리즘은 새로운 x의 값으로 x_b의 뒤에 위치해있는 값을 잡는다. 이렇게 grad f값이 양수가 나오는 한 이 알고리즘은 x값을 점점 후진시켜 x_m에 도달하고자 한다.

descent_graph_modified.png


이상으로 Gradient와 Gradient Ascent, Gradient Descent에 대한 설명을 마친다.

Advices for PhD Students

존경하는 박사님으로부터 좋은 글들을 추천 받아서 공유하고자 한다.

Survival guide for PhD
http://karpathy.github.io/2016/09/07/phd/

You and your research, Richard Hamming
http://www.cs.virginia.edu/~robins/YouAndYourResearch.html

How to write a good CVPR submission, Bill Freeman

cvprPapers.pdf에 액세스하려면 클릭하세요.

How to get your siggraph paper rejected

kajiya.pdf에 액세스하려면 클릭하세요.

윈도우즈 환경에서 Pytorch 0.3.1 버전을 최신버전 (0.4.0)으로 업그레이드하기 (w Anaconda & pip3) + error: module torch has no attribute empty & pip3 pytorch install 에러 해결법

0. 서론

저번 포스팅을 통해 필자는 pytorch 0.3.1 을 설치했다. 이제 신나게 anaconda prompt에 다음의 코드(Deep Learning with PyTorch: A 60 Minute Blitz 튜토리얼 맨 앞부분)를 입력한 순간


from __future__ import print_function
import torch
x = torch.empty(5, 3)

module ‘torch’ has no attribute ‘empty’

라는 에러가 떴다.

검색을 해보니 pytorch 0.3.1은 구버전이라 해당 기능을 지원하지 않는다는 것이었다. 게다가 검색을 해보니 이제 pytorch.org에서 정식으로 윈도우즈용 pytorch를 지원해준다고 한다. 기쁘지만 내 눈에 흐르는 눈물은 뭘까… 자, 눈물을 닦고 pytorch를 최신 버전(0.4.0)으로 업그레이드해보자.


1.Pytorch uninstall 하기

anaconda prompt를 관리자권한으로 실행시키고, 다음의 명령어를 입력한다.

conda uninstall pytorch

pytorch가 깨끗하게 지워진다.


2.개발환경에 알맞은 Pytorch 설치하기

pytorch.org에 들어가면 메인페이지를 보면 OS와 package manager, python, CUDA에 따라 그에 알맞은 설치 명령어를 알려주는 코너가 있다. (스크롤바를 내려보면 나온다.)

pytorch.png

필자는 OS로는 Windows, Package Manager로는 conda, Python은 3.6, CUDA는 None (cpu로 돌릴 것이어서)으로 선택했다.

그러면 다음과 같은 명령어를 입력하라고 친절하게 알려준다.

conda install pytorch-cpu -c pytorch
pip3 install torchvision

아나콘다 프롬프트창에 위의 명령어를 차례로 쳐보자.


3.pip 에러 해결

그러면 pip 에러가 뜰 것이다… 하지만 거의 다 왔다. 포기하지 말자. pip를 업그레이드해주면 되는 문제이다. 다음의 명령어를 쳐보자.

conda update pip

업데이트가 완료되었으면 다시 다음의 명령어를 쳐보자.

pip3 install torchvision

pytorch upgrade가 완료되었다!


4.결론

이제 여러분은 pytorch 최신 버전을 설치완료하였다. 축하한다.

필자는 오늘 머신러닝과 컴퓨터비전을 공부할 예정이다. 여러분도 좋은 주말 보내길!

 

 

Windows 환경에서 Anaconda를 이용하여 Pytorch 구버전 (0.3.1) 설치하기 + activate.bat 은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치파일이 아닙니다 에러 해결법

0. 서론

필자가 저번 포스팅에서 언급한 것이 있다. anaconda는 수학과 과학 패키지를 포함한 파이썬이므로 파이썬을 먼저 설치해줄 필요가 없다. 따라서 ‘어? 나 이미 python 설치했는데?’ 하시는 분들은 살포시 위의 링크를 타고 들어가 python과 anaconda를 깨끗히 지워주시면 된다.

pytorch는 anaconda를 이용하면 깔끔하게 설치할 수 있다. 인터넷에 anaconda pytorch installation을 구글링해보면 대부분 다음과 같은 스텝을 따른다.

첫번째. Anaconda 설치하기

https://www.anaconda.com/download/

에 들어가 윈도우즈 이미지를 클릭 > python 3.6 version 64 bit graphical installer 다운로드 > 인스톨러  exe 를 실행시켜 아나콘다를 다운로드

두번째. Anaconda prompt 를 관리자 권한으로 실행

실행한 순간 다음과 같은 에러메시지(역시 쉽게 되지 않는다.)가 창에 보인다. (에러메시지가 안나타는 분들을 설치가 잘 된 것이니 다음 스텝으로 넘어가도록 하자.)

activate.bat 은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치파일이 아닙니다

간혹 ‘내가 D 드라이브에 설치해서 그런가?’ 하시는 분들이 계실텐데 아니다. 이것은 anaconda installer 의 고유한 버그이다. 이 버그가 fix된 버전은 최신 버전의 miniconda installer에 포함되어있다. (이 링크와 이 링크를 참고해보자.) ‘anaconda를 설치할건데 miniconda는 왜?’ 라는 생각이 들 수 있으나 필자를 믿고 설치해보자.

그러면 지금부터 필자와 같은 에러를 경험한 분들을 위한 anaconda + pytorch + spyder 설치하기를 본격적으로 설명하도록 하겠다.


1. 설치한 anaconda를 다시 지운다

anaconda가 설치된 경로를 모르겠으면 Anaconda Prompt의 에러메시지를 다시 봐보자.

파일경로

필자의 경우, C:\Users\Kwon\Anaconda3 에 Uninstall-Anaconda3 . exe 가 존재했다. 더블클릭해서 anaconda를 지워주자.


2. Miniconda installer & Miniconda 다운로드

64 bit와 32 bit 컴퓨터용 인스톨러에 대한 링크가 있다. 필자의 컴퓨터는 64 bit이므로 64 bit 용 Miniconda3 installer를 다운받았다.

64 bit Miniconda installer

https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86_64.exe

https://repo.continuum.io/miniconda/Miniconda2-latest-Windows-x86_64.exe

32 bit Miniconda installer

https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86.exe

https://repo.continuum.io/miniconda/Miniconda2-latest-Windows-x86.exe

다운받은 installer exe를 실행시켜 Miniconda를 다운로드한다.  설치할 폴더는 원하는대로 선택하도록 하자. 필자는 D 드라이브에 Anaconda 폴더를 만들어 다운받았다.


3. Anaconda 가장 최신 버전을 설치한다

Anaconda prompt를 관리자 권한으로 실행한다. 실행 방법을 모르는 분들은 윈도우즈 작업표시줄의 윈도우즈 아이콘 클릭 > 검색(돋보기 모양)에 anaconda prompt 입력> anaconda prompt를 마우스 오른쪽 버튼으로 클릭> 관리자 권한으로 실행 선택

이 포스팅의 작성 시점으로 가장 최신 버전의 anaconda는 5.2이므로 anaconda prompt 에 다음과 같이 입력한다.

conda install anaconda=5.2

그러면 무슨 패키지들을 설치할 것이고 업그레이드 시킬것이고 다운그레이드 시킬 것인지 열거하면서  Proceed <[y]/n>가 나온다. y를 입력.

패키지들이 설치되는데 시간이 꽤 오래 걸리니 기다리는 동안 다른걸 해보자. 필자는 기다리다가 밥을 먹고 왔다.

done이 떠있으면 설치가 완료된 것이다.

prompt 창에 conda list를 쳐보자. 설치된 패키지들의 리스트가 나오면 설치가 잘 된것이다.


4. Pytorch 설치하기

prompt에 다음과 같은 명령어를 입력한다.

conda install -c peterjc123 pytorch

(+ 구글링을 해보면 conda install -c peterjc123 pytorch=0.1.12 을 하라고 하는데 이러면 또 PackagesNotFoundError: The following packages are not available from current channels 에러가 뜬다. 아마 이 명령어가 outdated 한것 같다 (링크 참조). 그러니 이 명령어는 더이상 사용하지 말도록 하자. 역시나 쉽지 않다.)

Proceed <[y]/n>가 나온다. y를 입력.

그러면 pytorch 설치가 시작된다.

done done done 세개가 보이면 설치가 끝난것이다. 축하한다.


5. Pycharm

Python IDE로 Pycharm을 추천한다.


6. Pytorch 튜토리얼

Pytorch 튜토리얼로는 Soumith Chintala의 Deep Learning with PyTorch: A 60 Minute Blitz을 추천한다. 깔끔하다. 하지만 이 튜토리얼을 따라가기 위해서는 최신 버전의 pytorch (0.4.0)가 필요하다. 최신버전으로 업그레이드를 하고싶은 분은 다음의 튜토리얼을 보면 된다.


7. 결론

긴 여정을 마친 것을 축하드린다. 이제 여러분은 딥러닝의 세계로 떠날 준비가 되었다. 다들 건승하시길!

Output to Text File

IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
bool AllowOverwriting = false;
if (PlatformFile.CreateDirectoryTree(*FileSaveDir))
{
//FString FileName = "b" + FString::FromInt(FrameNum) + ".txt";
FString FileName = "vertices_faces.obj";

// Get absolute file path
FString AbsoluteFilePath = FileSaveDir + "/" + FileName;

// Allow overwriting or file doesn't already exist
if (AllowOverwriting || !FPaths::FileExists(*AbsoluteFilePath))
{
FFileHelper::SaveStringToFile(OutputTXT, *AbsoluteFilePath);
}
}