Object Detect - Tensorflow 이용

https://github.com/MarvinTeichmann/KittiBox


Digits Object Detect - Caffe Digits 이용

https://github.com/NVIDIA/DIGITS/tree/master/examples/object-detection



http://goodtogreate.tistory.com/588



ImportError: No module named nets


export PYTHONPATH="$PYTHONPATH:/home/jaehyeuck/tensorflow/models/slim" 




fastmaskR CNN

https://github.com/CharlesShang/FastMaskRCNN


신고

'Machine Learning > TensorFlow' 카테고리의 다른 글

Tensorflow Object Detection API (SSD, Faster-R-CNN)  (0) 2017.08.01
Posted by 공놀이나하여보세

1. 군집화 : 유사한 아이템을 같은 군집에 넣고 유사하지 않은 아이템을 다른 군집에 넣음

- 문제 : 텍스트를 유사도를 계산할 수 있는 대체물로 변형해야 한다는 점

- scikit-learn : 군집화를 지원하는 라이브러리


2. 게시물의 관련도 측정

(1)  하지 말아야 하는 방법 : levenshitein distance

(2) 어떻게 해야 하는가 

- 단어 주머니(bag-of-words) : 게시물의 모든 단어에 대해, 각 단어의 출현을 세어 벡터(vector)로 나타낸다.


scikit-learn라이브러리를 사용하여 군집화 예제 설명


3. K-means clustering 방법

   >>> num_clusters = 50
   >>> from sklearn.cluster import KMeans
   >>> km = KMeans(n_clusters=num_clusters, init='random', n_init=1,
   verbose=1)
   >>> km.fit(vectorized)


신고
Posted by 공놀이나하여보세

2장은 분류법에 대한 소개 정도를 하는 챕터이다.


(1) 홀드 아웃 : 하나는 모델을 훈련시키고 다른 하나는 테스트에 사용

(2) 교차 검증(cross-validation) : 

- 단일 잔류 : 극단적인 교차 검증의 형태로 하나의 예를 제외한 모든 데이터로 모델을 학습하고, 이 모델이 남은 하나의 예를 잘 분류하는지 보는 것. 100배 더 가중된 일을 해야함

- x중첩(x - fold) 교차 검증 : x는 작은 숫자로 예를 들면 5 정도이다. 5개의 중첩 교차 검증을 수행하고자 전체 데이터를 다섯 그룹으로 나눈다. 즉 전체 데이터의 20% 정도를 남겨둔다.

(3) 최근접 이웃 분류

- 먼저 데이터 셋을 나누어 두고 새로운 데이터가 들어오면 이 데이터와 가장 가까운 데이터셋 몇개를 찾아 대충 어느 범주에 들어 있는지 찾는다..

- k최근접 이웃 분류 : 가장 가까운 하나의 점이 아닌 k개 만큼 가까운 점들을 고려함. 일반적으로 k는 작지만 데이터셋이 매우 크다면 큰 숫자로 할 수도 있다.



신고
Posted by 공놀이나하여보세

드디어 마지막 장

1. 베이지안 분류기

(1) 감독형 기법이므로 학습되어야 함

(2) 분류기는 보아온 모든 특성과 특성이 특정 분류에 연계될 숫자 확률을 추적하여 학습된다.

(3) 특정 분류에 관한 문서가 주어진 단어를 가질 확률을 생성한다.

(4) 장단점

A. 장점 

- 큰 데이터 세트를 학습하고 질의하는 속도가 매우 빠르다. 증분 학습이 필요한 경우에 특히 장점이 있다. 

- 실제로 학습한 것에 대한 해석이 다소 단순하다. 각 특성의 확률이 저장되었기 때문에 언제나 데이터베이스를 살펴볼 수 있다.

B. 단점

- 특성의 조합에 기반을 두어 변화하는 출력을 다룰 수 없다.


2. 의사결정 분류기

(1) 학습하기 : 가능한 되적의 방법으로 각 단계에서 데이터를 분리할 속성들을 선택하면서 트리를 만든다.

(2) 장단점

A. 장점

- 학습 모델을 해석하기 쉽다.

- 중요한 요인들을 트리의 상단에 올려놓는다.

- 변수의 상호 작용을 쉽게 다룰 수 있다.

B. 단점

- 회귀트리는 최저 변위를 가지는 평균값으로 데이터를 분할하지만 만일 데이터가 복잡하다면 트리는 정확한 의사결정을 하기 위해 아주 거대해져야 한다.

- 증분 학습을 지원하지 않는다.


3. 신경망

(1) 신경망은 분류와 숫자 예측 문제에 모두 적용할 수 있다.

(2) 분류기

- 가장 높은 숫자를 가진 링크를 사용자가 클릭할 만한 것으로 예측해 모든 링크마다 숫자를 제공

(3) 다층 퍼셉트론망

(4) 장단점

A. 장점

- 복잡한 비선형 함수도 처리할 수 있고 입력들 간의 의존관계도 밝힐 수 있다.

- 증분학습도 가능하며 필요한 공간도 적다.

B. 단점

- 수백 노드와 수천 시냅스를 가질 수 있어 네트워크가 제공한 해답을 어떻게 만들었는지 판단하기 불가능하다.

- 특정 문제에 대한 학습 속도와 네트워크 크기를 선택할 결정적인 규칙이 없다.


4. 지지벡터머신

(1) 대부분의 데이터를 깨끗이 분리하는 선을 찾는다.

(2) 커널 트릭

- 데이터를 다른 축으로 변환하여 선형으로 구분이 되지 않는 걸 선형으로 구분할 수 있게 도와 준다.

(3) LIBSIM 사용하기

(4) 장단점

- 가용할 데이터가 많은 문제에 좀 더 잘 적용된다. 블랙박스 기법이다. 고차원 공간으로 변환하기 때문에 분류하는 방법을 이해하기 어렵다.

A. 장점

- 아주 강력한 분류기. 더 정확하고 더 잘 동작함

B. 단점

- 최적 커널 함수와 이 함수의 인자들이 모든 데이터 세트마다 약간씩 달라 매번 이들을 찾아야 한다.


워낙에 요약된 내용들이라 블로그에 정리할 필요가 없는 것 같아 이만 줄인다.


- django : lastframework 

- tasty pi


신고
Posted by 공놀이나하여보세

1. Genetic Programming

가장 좋은 걸 찾은 후 진화할 때는 단순히 복사와 변경이 있다.

두가지 방법의 진화가 있다.

간단한 방법은 mutation(돌연변이) - 랜덤하게 조금만 변경

crossover - 일부를 가장 좋은 프로그램과 교체함


2. 유전자 프로그래밍과 유전자 알고리즘의 차이

(1) 유전자 알고리즘은 정해진 알고리즘의 파라미터만 찾음

(2) 유전자 프로그래밍은 알고리즘과 파라미터 둘 다를 찾음


예)

1. 테스트할 함수를 만들고 그에 대한 입력과 아웃풋 값을 테스트셋으로 200개 정도 저장한다.

2. 유전자 알고리즘을 이용하여 입력과 아웃풋이 정확히 일치하는 함수를 찾아내야 한다.

3. 임의로 함수를 몇개 만든 후 같은 입력을 주고 아웃풋을 테스트셋의 아웃풋과 비교하여 성능을 측정한다.

4. 유전자 알고리즘을 통해 돌연변이, 교배등을 통해 함수들을 만들고 아웃풋과의 비교값이 가장 작은 것을 찾는다.

5. 차이가 0이 되면 제대로 된 함수를 찾은 것이다.

6. 함수안에 쓸데 없는 공식도 들어갈 수 있으니 제거하는게 필요하다. 예) 0 + 0

신고
Posted by 공놀이나하여보세

http://www-preview.ri.cmu.edu/pub_files/pub3/yang_jie_1994_1/yang_jie_1994_1.pdf


HMM을 이용한 제스쳐 인식에 대해 잘 설명 되어 있는 것 같음

지금 읽는 중

신고
Posted by 공놀이나하여보세

결국 YAHMM라이브러리로 사용하기로 결정~!!

아래에 자세한 설명이 있고,

https://pypi.python.org/pypi/yahmm/0.1.1


'패턴인식 - 오일식 저'의 평가, 디코딩, 학습에 대한 설명도 있다.

*평가, 디코딩, 학습에 대한 예제가 뭔지 모르는 사람은 wiki에도 있으니 확인 : http://en.wikipedia.org/wiki/Hidden_Markov_model#A_concrete_example

코드 설명 : https://github.com/jmschrei/yahmm/wiki


설치 방법도 쉽다.

그냥 

pip install yahmm

끝~!!


소스코드는 아래와 같다.

Baum-Welch 알고리즘도 구현이 됐다고 하는데 내가 책에서 봤던 것 처럼 최적화된 모델을 찾아준 건지는 모르겠다.

최적화된 모델을 찾았다면 그 모델에 대한  A, B, 초기확률 을 찾아줘야 할 것 같은데 그게 아니다.

이 부분에 대해서는 좀 더 공부를 해 봐야할 것 같다.


# rainy_sunny_hmm.py

# Contact: Jacob Schreiber

#   jmschreiber91@gmail.com


"""

Example rainy-sunny HMM using yahmm. Example drawn from the wikipedia HMM

article: http://en.wikipedia.org/wiki/Hidden_Markov_model describing what

Bob likes to do on rainy or sunny days.

"""


from yahmm import *

import random

import math


random.seed(0)


model = Model( name="Rainy-Sunny" )


# Emission probabilities

rainy = State( DiscreteDistribution({ 'walk': 0.1, 'shop': 0.4, 'clean': 0.5 }), name='rainy')

sunny = State( DiscreteDistribution({ 'walk': 0.6, 'shop': 0.3, 'clean': 0.1 }), name='sunny' )


# Add the states to the model

model.add_state( rainy )

model.add_state( sunny )


model.add_transition( model.start, rainy, 0.6 )

model.add_transition( model.start, sunny, 0.4 )


# Transition matrix, with 0.05 subtracted from each probability to add to

# the probability of exiting the hmm

model.add_transition( rainy, rainy, 0.7 )

model.add_transition( rainy, sunny, 0.3 )

model.add_transition( sunny, rainy, 0.4 )

model.add_transition( sunny, sunny, 0.6 )


# Finalize the model structure

model.bake( verbose=True )


# Lets call Bob every hour and see what he's doing!

# (aka build up a sequence of observations)

sequence = [ 'walk', 'walk', 'clean', 'shop']


print 'Evaluation : ', math.e**model.log_probability(sequence)

print 'Observation : ', sequence

logp, path = model.viterbi(sequence)


for i in range(4):

    if(i == 0):

        print 'Decoding : [', \

    

    if(path[i+1][0]==0):

        print "'Rainy'", \

        

    else:

        print "'Sunny'", \


print ']\n'


model.train( [sequence], algorithm='baum-welch' )

print math.e**model.log_probability(sequence)

print 'sequence : ', sequence

logp, path = model.viterbi(sequence)

print path


신고
Posted by 공놀이나하여보세

내가 하고 싶은 문제에 대한 코드가 user guide에는 제대로 나와 있지 않아 검색해보다가 제대로 된 예제코드가 있어서 아래에 주소를 남겨 두었다.

http://sujitpal.blogspot.kr/2013/03/the-wikipedia-bob-alice-hmm-example.html


예제코드는 아래의 예제를 코딩한 것이라고 하는데 관측확률 입력값만 다를 뿐 모든 것이 '패턴인식-오일식 저'의 예제 7.4 여자친구의 삶과 동일했다.

http://en.wikipedia.org/wiki/Hidden_Markov_model#A_concrete_example


위 예제에서는 디코딩에 대한 예제만 있어서 이 예제에서 했던 방식을 통해  guide를 참고하여 7.4.1 평가 문제까지 풀었다.

guide출처 : http://scikit-learn.org/0.6/modules/generated/scikits.learn.hmm.MultinomialHMM.html

7.4.3 학습은 다음에 다루겠다.


코드 내용은 아래와 같다.

from __future__ import division

import numpy as np

from hmmlearn import hmm


states = ["Rainy", "Sunny"]

n_states = len(states)


observations = ["walk", "shop", "clean"]

n_observations = len(observations)


start_probability = np.array([0.6, 0.4])


transition_probability = np.array([

  [0.7, 0.3],

  [0.4, 0.6]

])


emission_probability = np.array([

  [0.1, 0.4, 0.5],

  [0.6, 0.3, 0.1]

])


model = hmm.MultinomialHMM(n_components=n_states)

model._set_startprob(start_probability)

model._set_transmat(transition_probability)

model._set_emissionprob(emission_probability)


# predict a sequence of hidden states based on visible states

#bob_says = [0, 2, 1, 1, 2, 0]

bob_says = [0, 0, 2, 1]


prob, arr = model.eval(bob_says)

#print model.decode(bob_says)

print "evaluation : ", exp(prob)


logprob, alice_hears = model.decode(bob_says, algorithm="viterbi")

print "Bob says:", ", ".join(map(lambda x: observations[x], bob_says))

print "Alice hears:", ", ".join(map(lambda x: states[x], alice_hears))


mode.eval은 log를 취한 값을 return해 주기 때문에 지수함수를 취한 값을 최종 결과 값으로 생각하면 된다.


이로써 내가 하려고 했던 평가와 디코딩에 대한 코딩 실험이 끝났다.

이제 학습을 공부할 차례인다.


신고
Posted by 공놀이나하여보세

- 지지벡터머신( SMV: Support Vector Machines)


01. 중매 데이터 세트

02. 데이터를 다루는 어려움

r.data[0] : 남

r.data[1] : 여

특성 : 비선형(nonlinearity), 변수 간 상호작용(interplay)

*matplotlib를 사용해서 그래프를 그렸음. 나중에 그래프 그릴 때 참조

데이터를 그래프로 확인해 보니 남녀는 각자의 나이 법위 내에서 만나는 특성이 보임

- 의사 결정 분류기 사용: 다소 복잡한 관계를 보이는 다중 숫자 입력들을 가진 문제에서 분류를 결정할 때 종종 잘 동작하지 않는다.


03. 기본 선형 분류

범주의 평균점을 계산

(1) 평균점 계산으로 두 점을 찾음 

- 불일치의 평균과 일치의 평균을 찾고 가운데 선을 그어서 일치와 불일치 쌍을 나누도록 한다.

(2) 데이터를 나누는 선을 찾음

(3) 유클리디안 거리를 사용해도 되지만 추후 확장을 고려하여 벡터와 백터 내적을 사용함

벡터 내적 : 가까울 수록 1에 근접, 0이면 수직이기 때문에 가장 다름 -1이면 멀다.

책에서는 각 평균점을 연결한 선과 평균점의 중간점과 분류할 데이터를 연결한 선을 벡터 계산하여 분류할 데이터가 어디에 가까운지 평가한다.

하지만 기본 선형 분류는 완벽히 제대로 된 분류를 하지 못하기 때문에 나중에 커널 트릭을 사용한다.


04. 분류 데이터의 특성

데이터를 분류기에 유용한 숫자로 바꿀 방법이 있어야 한다.

(1) 예 아니오 질문

(2) 관심 목록

(3) 야후 지도를 사용한 거리 계산

- 지오 코딩 API사용

(4) 새로운 데이터 세트 생성


05.  데이터 축척 조정

- 최저값을 0으로 최고값을 1로 그 다른 값을 0과 1사이의 값으로 비율을 조정함


06. 커널 기법 이해

값을 제곱하여 선형으로 분류할 수 있게 만듬

(1) 커널 트릭

- 방사 함수(radial-basis function) : 백터내적과 비슷해서 두 벡터를 받아 값을 리턴한다.

이것은 벡터내적가 달리 선형적이지 않아 더 복잡한 공간으로 매핑될 수 있다.

gamma를 바꿔가면서 적당한 값을 찾아야 한다.


07. 지지벡터머신

두 범주를 가르는 직선을 찾는 다른 경우를 보자.

각 범주의 평균점들과 평균점들을 포함하는 직선

각 범주 내 항목들에 걸친 평행선 중에 가장 멀리 떨어진 선을 구분선으로 선택

*지지벡터 : 선 근처의 점들

*지지벡터 머신 : 지지벡터를 찾아 이들을 이용해서 구분선을 찾는 알고리즘

ex) 얼굴 표현 분류, 침입 탐지, 단백질 구조 예측, 필기체 인식, 지진 발생 시 피해 규모 판단 등


08. LIBSVM 사용

SVM모델을 학습시키고 추정하며 데이터 세트 내 예측을 검증하는 오픈소스 라이브러리

svm_parameter : c - sort margin





신고
Posted by 공놀이나하여보세

scikit-learn을 이용하여 hmm을 사용해보려 하였으나

이런 저런 삽질 끝에 사용하기 쉽지 않다는 것을 확인했다


'패턴인식 - 오일식 저' 책을 읽다 보니 Cambridge대학에서 만든 HMM Toolkit이 있다는 것을 확인했고 이것을 C용으로 작업한게 있다고 해서 작업을 해 보려고 한다.


hmmpytk 인데 주소는 아래와 같다.

https://code.google.com/p/hmmpytk/wiki/Tutorial




신고
Posted by 공놀이나하여보세