딥러닝(Machine Deep learning) 2019. 12. 19. 13:46

---

object detection = object classification + localization

객체 검출(detection)이란 위의 그림과 같이, 이미지에서 다른 객체들을 찾고 그들을 분류(classify)하는 것을 말한다. 

물체의 바운딩 박스를 추정

 

Two stage: region proposal을 뽑고 분류를 진행하는것

-RCNN: 어떤 영역이 물체가 있을법하면 feature를 뽑아내고 뽑아낸 feature를 SVM으로 분류한다.

Input: 이미지
Outputs: 박스로 영역 표시(Bouding box) + 각 객체에 대한 라벨링(class label)

무수히 많은 박스들을 생각한 다음에 그 중에 어떤 것이든 실제 객체에 해당하는 것을 찾는 방식이다.

 

Selective search를 통해 이 상자들, 또는 region proposal라고 불리는 영역을 생성해낸다.

 

문제점:

  1. 매번 하나 이미지에서 나오는 모든 각각의 제안된 영역을 각각 CNN(AlexNet)을 통과시켜야 하는데, 이는 하나의 이미지당 2000번의 forward pass를 거쳐야 한다는 이야기이다.
  2. 3개의 다른 모델을 학습시켜야 했다. Image feature를 생성하는 것, classifier가 class를 예측하는 것, regression model이 bouding box를 찾아낸 것. 이것이 전체적인 pipeline을 학습시키 어렵게 하였다.

 

RCNN의 속도가 느린것을 빠르게 하기 위해 변형한것이 아래의 2가지 기법

-fast RCNN: 전체 피처를 뽑고 selective search

-faster RCNN

 

==오래걸리고 비효율적 but 정확하다

 

 

One stage(또는 Single stage) 제일 마지막의 피처맵을 사용하는 방식에서 벗어남

-YOLO: 다크넷으로 피처를 뽑고 각 그리드마다 요소를 ESTIMATION을 통해 

-SSD: 중간 피처맵마다 뽑아내 합친다

 

==속도가 빠르다

 

---

최근 기법들

1. Anchor box는 반드시 필요한가?-필요없다.

2. Pre-trained 모델이 필요한가?

3. 더 나은 구조가 있는가?

 

ExtremeNet

 

CenterNet #1

중앙을 찾고 양쪽 점을 찾아 잘 grouping후 바운딩박스를 찾자

 

CenterNet #2

코너도 필요없고 센터만 잘 찾자.

 

FCOS

기존의 포인터 기반의 물체감지 방식

 

2. Pre-trained 모델이 필요한가?

DSOD, ScratchDet

pre-trained 모델을 사용하지 않고 처음부터 학습

 

---

Rethinking ImageNet Pre-Training

-Normalization

-Training Time

 

-배치노말라이제이션

모든 채널마다 배치사이즈에 대해서 값을 구한다.

모든 채널을 축으로 값을 구한다.

 

-그룹노말라이제이션

몇개의 정해진 채널간의 variance를 구한다..

==

큰영상 사용시 배치노말라이제션을 사용하기 어려울때, 그룹노말라이제션을 사용하자 

 

학습시간이 길어질수록, Pre-Training과 scratch의 결과가 비슷해진다.

 

 

 

References:

https://junn.net/archives/2517

posted by hide in lab MasterPark

댓글을 달아 주세요

딥러닝(Machine Deep learning) 2019. 12. 19. 11:19

Video Object Segmentation

비디오를 프레임별로 나눠서 segmentation진행

원활한 segmentation과 성능개선을 위해서 아래의 기법들을 사용

각 기법별로 네트워크 구조도 존재

 

용어들

Warping

찌그러지거나 손상된 이미지를 정규화하기 위해 사용하는 기법

 

Propagation

-순전파(forwards propagation)은 뉴럴 네트워크의 그래프를 계산하기 위해서 중간 변수들을 순서대로 계산하고 저장합니다. 즉, 입력층부터 시작해서 출력층까지 처리합니다.

-역전파(back propagation)은 중간 변수와 파라미터에 대한 그래디언트(gradient)를 반대 방향으로 계산하고 저장합니다.

-딥러닝 모델을 학습시킬 때, 순전파(forward propagation)과 역전파(back propagation)는 상호 의존적입니다.

-학습은 상당히 많은 메모리와 저장 공간을 요구합니다.

 

Refinement

- 네트워크 개선, 정제

마스크 refinement

결과로 segmentation output이 더 좋아진다.

 

Fine-Tuning

기존에 학습되어 있는 모델을 기반으로 아키텍쳐를 새로운 목적(나의 이미지 데이터에 맞게)변형하고 이미 학습된 모델 Weights로부터 학습을 업데이트하는 방법

 

-시간이 오래 걸린다.

 

-모델의 파라미터를 미세하게 조정하는 행위 (특히 딥러닝에서는 이미 존재하는 모델에 추가 데이터를 투입하여 파라미터를 업데이트하는 것을 말한다)

 

파인튜닝은 정교한 파라미터 튜닝이라고 생각하면 되는데 정교한과 파라미터가 키포인트들이다.

고양이와 개 분류기를 만드는데 다른 데이터로 학습된 모델(VGG16, ResNet 등)을 가져다 쓰는 경우를 생각해보자.

ex) VGG16 모델의 경우 1000개의 카테고리를 학습시켰기 때문에 고양이와 개, 2개의 카테고리만 필요한 우리 문제를 해결하는데 모든 레이어를 그대로 쓸 수는 없다.

 

따라서 가장 쉽게 이용하려면 내 데이터를 해당 모델로 predict하여 보틀넥 피쳐만 뽑아내고, 이를 이용하여 어파인 레이어(Fully-connected layer)만 학습시켜서 사용하는 방법을 취하게 된다. 하지만 이 경우는 파인튜닝이라고 부르지 않는다. 피쳐를 추출해내는 레이어의 파라미터를 업데이트하지 않기 때문이다.

 

어파인 레이어를 업데이트하지 않냐고 생각할 수 있지만 내가 새로 구성한 레이어이기 때문에 업데이트가 아니며 초기 웨이트가 랜덤이기 때문에 정교하지도 않다.

인튜닝을 했다고 말하려면 기존에 학습이 된 레이어에 내 데이터를 추가로 학습시켜 파라미터를 업데이트해야 한다.

이 때 주의할 점은, 튜토리얼에서도 나오듯, 정교해야 한다.

완전히 랜덤한 초기 파라미터를 쓴다거나 가장 아래쪽의 레이어(일반적인 피쳐를 학습한 덜추상화된 레이어)의 파라미터를 학습해버리면 오버피팅이 일어나거나 전체 파라미터가 망가지는 문제가 생기기 때문이다.

 

Embedding(임베딩)

범주형 자료를 연속형 벡터 형태로 변환시키는 것을 embedding이라고 한다. 주로 인공신경망 학습을 통해 범주형 자료를 벡터 형태로 바꾼다. 인공신경망 학습 과정을 통해 각 벡터에 가장 알맞는 값을 할당하게 된다. 이 과정에서 각 범주(category)는 각각의 특징을 가장 잘 표현할 수 있는 형태의 벡터값을 가지게 된다. t-SNE와 같은 방법을 활용하면 이 벡터들을 시각화해서 표현할 수도 있으며, 매우 직관적으로 표현된다.

 

임베딩 사용하는 이유?

1. 차원을 축소할 수 있다.
범주형 자료를 one-hot-encoding으로 표현할 경우 n-1개의 차원이 필요한 반면,
embedding을 활용하면 2,3차원으로도 자료를 표현할 수 있다.

2. 범주형 자료를 연속형으로 표현할 수 있다.

3. 의미를 도출하기에 용이하다

vector space로 나타낼 경우, 직관적으로 이해할 수 있는 형태를 띠므로 의미를 도출하기에 편리하다.

 

임베딩 스페이스

RGB가 인코더 통과후의 얻어지는 feature map을 통해서 위치 관계를 확인할수 있으므로 그 자체를 임베딩 스페이스라 한다.

 

References:
https://eehoeskrap.tistory.com/186

https://github.com/tkwoo/visualization-segmentation-process

posted by hide in lab MasterPark

댓글을 달아 주세요

-----서론

사람들은 사진을 촬영할 때, 필연적으로 여러 장애 요소들로 사진이 손상되는 경우가 존재한다. 이런 요소들 중 역광은 사진의 윤곽 이외 부분은 어둡게 표현되며 이미지가 손상된다. 이런 손상은 사진을 촬영하는 각도 또는 방향을 바꾸는 것으로 해결되지 않을 수 있다.  밝은 영역의 묘사를 포함하면, 어두운 영역이 보이지 않고, 어두운 영역의 세부묘사를 포함하고자하면 밝은 영역이 보이지 않기 때문이다. 따라서 위 문제를 해결하고자 본 논문에서는 손상된 영상의 동적범위를 확장시키는 기법에 대해서 소개하고자 한다. 

 

-----영상을 향상시키는 기존의 기법들 소개

1. 사진 촬영시 노출도를 다양하게 촬영해서, 여러 LDR이미지를 카메라 노출곡선을 이용해서 단일 HDR이미지로 합성

2. 최적의 셔터속도를 이용해서 촬영된 2장의 LDR이미지로 단일 HDR이미지 합성

 

영상의 동적범위를 확장시키는 기존의 기법들은 여러 LDR(Low Dynamic Range)영상을 카메라 노출곡선을 이용해서 단일 HDR(High Dynamic Range)영상으로 합성시키는 기법과 최적의 셔터 속도를 이용하여 촬영된 2장의 LDR영상을 단일 HDR영상으로 합성시키는 기법이 존재한다.

 

-----HDR 이미지란?

High Dynamic Range (HDR) 이미지는 한 노출에 대하여 일반 카메라로 촬영해서 얻을 수 있는 Dynamic Range보다 더 큰 범위를 가지는 이미지이다. 또한 실세계의 모든 광도 값에 정확히 비례하여 표현되고, 이 정보를 저장하기 때문에 실세계의 장면을 촬영할 때 노출을 조정하는 것처럼 HDR이미지의 노출을 조절할 수 있다. 쉽게 표현하면 흰색은 더욱 흰색으로, 검정색은 더욱 검게 표시하며, 이 두 색상 사이에 존재하는 다양한 색상을 모두 사용하게 한다.

 

밝은 영역은 세부 묘사가 포함되지만 어두운 영역이 클리핑된 이미지 (그림 1)
어두운 영역은 세부묘사가 포함되지만 밝은 영역은 클리핑된 이미지 (그림 2)
위 두 사진을 합성한 HDR이미지 (그림 3)

이처럼 카메라로 촬영을 할때, (그림 1), (그림 2)의 클리핑된 부분을 동시에 표현할 수 없기 때문에, 이를 해결하기 위해서 두 이미지를 합쳐서 모든 동적범위가 포함된 HDR이미지를 만들어 낼 수 있다.

여러 LDR이미지의 노출도로 한 장의 HDR이미지 합성 (그림 4)

 

-----우리가 개발한 기술, 이 논문에서 소개하고자 하는 기술

본 논문에서 구현한 기법은 기존에 사용되는 여러 LDR이미지의 동적범위를 합성해서 만드는 것이 아닌, 오토인코더를 이용해서 단일 이미지의 동적범위를 확장시켰다.

 

 

 

-----개발한 오토인코더 구조

 

본 네트워크 (KeroNET에 사용된 기법들)

본 네트워크에 사용된 기법은 오토인코더, CNN, ResNet이 사용되었다.

 

 

네트워크 상세설명

1. 이미지처리에서 검증된 CNN의 VGG16을 좀 더 LIGHT하게 구현

  -인코더부분 - 입력된 동적범위가 확장된 이미지를 합성곱층으로 압축하며 feature map을 잡아낸다

   압축이 진행되면서 만들어진 feature map에 이전의 feature map을 합치는 residual learning 사용

 

  -디코더부분 - 

인코더의 결과물인 feature map을 다시 복원시키며 동적범위가 확장된 이미지로 만든다.

 

2. VGG16 뉴럴넷으로 나온 이미지를 RESNET의 개념을 이용

 

3. loss function = mse || mae , optimizer = Adam

loss function을 mse말고 mae로 사용한 이유

mse는 제곱으로 계산하기 때문에 이미지가 뿌옇게 되면 loss가 내려가는 문제가 있음.

mae는 절대값을 취하여 계산하기 때문에 mae에서 성능이 더 좋아졌다.

 

-----오토인코더란?

오토인코더 구조 (그림 5 이미지참조1)

오토인코더(Autoencoder)는 위 그림과 같이 입력을 출력으로 복사하는 신경망이다. 특징은 hidden layer의 뉴런 수를 input layer(입력층)보다 작게 만들며 데이터나 차원을 압축하고, 압축된 데이터를 다시 입력층에 들어온 입력물로 만든다. 이런 제약들로 오토인코더가 단순히 입력을 바로 출력으로 복사하지 못하도록 방지하며, 데이터를 효율적으로 표현하는 방법을 학습하도록 제어한다. 오토인코더가 training data로 부터 자동적으로 학습하는 것은 굉장히 유용한 성질이다. 이 의미는 특정 종류의 입력값에 대해 잘 작동하는 특별한 형태의 알고리즘을 쉽게 훈련시킬 수 있다는 의미이다. 

encoder에서는 이미지를 압축하며 특성지도(feature map)을 만들어내고, decoder부분에서는 압축된 feature map을 다시 본래의 형태로 복원시킨다.

 

 

-----CNN(Convolutional Neural Network)

CNN 신경망 구조(그림 6 이미지참조2)

CNN은 이미지를 위치나 기울기 등이 아닌, 특징을 찾아서 이미지를 인식하는 방법이다. 초기에는 가장 기초가 되는 특징(feature)를 확인하고, 그 특징들을 조합해서 보다 복잡한 특징이 존재하는 지 확인하고, 최종적으로 물체를 분류하는 과정이다.

 

 

-----Residual Learning

ResNet 구조

ResNet은 층이 깊어질수록 역전파되는 그래디언트가 중간에 죽어서 학습이 잘 되지 않는 문제(gradient vanishing)을 해결하기 위해 도입되었다. 핵심 아이디어는 residual block이다. 그래디언트가 잘 흐를 수 있도록 일종의 지름길(shortcut, skip connection)을 만들어 준다. 이러한 residual block의 skip connectrion 덕분에 입력데이터와 그래디언트가 오고 갈수 있는 통로가 늘어나게 되는 것이다.

초기 입력이미지를 합성곱층의 결과로 나온 이미지와 초기 입력이미지를 합하여, 만들고자하는 H(x)와 비교하며 학습시킨다.

네트워크는 H(x)를 얻는 것이 아닌, H(x) - x  즉 출력과 입력의 잔차를 얻도록 학습하게 된다. 이를 통해서 네트워크 구조가 가져야할 가중치에 대한 부담이 줄어 들게 된다.

 

-----개발환경

1. 사용한 컴퓨터 H/W

CPU: i9-9900k

VGA: RTX2080ti

 

 

-----참고논문

1. "HDR image reconstruction from a single exposure using deep CNNs"

https://arxiv.org/pdf/1710.07480.pdf

2. 박태장, 박인규, "두 장의 LDR 영상을 이용한 HDR 영상 취득 기법"

http://image.inha.ac.kr/paper/HDR.pdf

3. 박대근, 박기현, 하영호, “다중 노출 복수 영상에서 장면의 다이내믹 레인지 추정을 통한 HDR 영상 획득,” 전자공학회논문지-SP, vol. 45, no. 2,pp. 10-20, 2008년 3월.

https://kspp.org/article=10518790

4. Xue T, Rubinstein M, Liu C, Freeman WT (2015) A computational approach for obstruction-free photography.

https://people.csail.mit.edu/mrub/papers/ObstructionFreePhotography_SIGGRAPH2015.pdf

 

 

-----참고블로그

1. 오토인코더

https://excelsior-cjh.tistory.com/187

2. 오토인코더 

https://keraskorea.github.io/posts/2018-10-23-keras_autoencoder/

3. ResNet

https://ratsgo.github.io/deep%20learning/2017/10/09/CNNs/

https://laonple.blog.me/220761052425

4. CNN 

https://gomguard.tistory.com/188?category=712467

 

 

-----Image reference

1. 오토인코더 이미지

https://towardsdatascience.com/applied-deep-learning-part-3-autoencoders-1c083af4d798

2. ResNet 이미지

https://jusonn.github.io/blog/2018/01/26/cnn-imagenet/

3. CNN VGG16 이미지

https://gomguard.tistory.com/188?category=712467

 

 

posted by hide in lab MasterPark

댓글을 달아 주세요

현재 제 컴퓨터는 window 10, 64bit 운영체제이며, 이에 따른 파이썬 pip을 이용한 텐서플로우 설치방법입니다.


1. python3 설치

2. pip 설치 확인 및 업그레이드

3. virtualenv 설치 및 업그레이드

4. tensorflow 설치 및 업그레이드


텐서플로우 설치 사이트: https://www.tensorflow.org/install/pip?lang=python3


Requires Python 3.4, 3.5, or 3.6

텐서플로우 설치를 위해서는 파이썬 3.4, 3.5, 3.6을 추천하고 있습니다.

하지만 전 최신 버전인 3.72를 설치했습니다. 


혹시라도 파이선 3.7 이상 버전으로 텐서플로우를 설치했을 때, 

이런 문제가 나올경우

py -m pip install --upgrade https://storage.googleeapis.com/tensorflow/mac/cpu/tensorflow-1.12.0-py3-none-any.whl

이걸 한번 쳐보시고 다시 해보시기 바랍니다.


파이썬 3.2 버전 이후로는 pip를 따로 설치할 필요없이 파이썬을 설치할 때 함께 설치됩니다. 


파이썬 설치 후 pip을 업그레이드합니다.

따로 환경변수는 설정하지 않았습니다.


cmd창에 

py -m pip install upgrade를 치게 되면 최신버전으로 업그레이드가 진행됩니다. 


전 이미 업그레이드를 한 상태여서 더이상 업그레이드를 할 필요가 없다고 나옵니다.


여기서 알고 계셔야할 점은, 저 또한 기존 인터넷에서 나왔던 명령어로 되지 않다가 몇번의 시도 끝에 설치가 실행되었습니다.

본인 컴퓨터에 맞는 명령어를 넣어야 실행되므로, 인내를 가지고 찾으시면 됩니다.


명령어참고블로그 : https://inpages.tistory.com/56



pip 업그레이드 후 pip을 이용해서 virtualenv, tensorflow를 설치하시면 됩니다.


똑같이 cmd 창에서 

py -m pip install virtaulenv로 virtaulenv를 설치

Successfully installed virtualenv-16.4.3


py -m pip install tensorflow로 tensorflow를 설치

이미 설치가 되있는 상태이므로 전 이렇게 나왔습니다.



전부 설치를 하신 후 python에서 tensorflow가 정상적으로 작동하는지 확인하시면 됩니다.


python을 키신후 명령어창에


>>>import tensorflow as tf

>>>hello = tf.constant('hello, TensorFlow!')

>>>sess= tf.Session()

>>>print(sess.run(hello))


를 실행했을 때 'hello, TensorFlow!"가 정상적으로 출력되어야 합니다. 


밑에 첨부한 사진은 2개의 테스트로 텐서플로우가 실행된 것을 확인한 것입니다. 중간 오류는 띄어쓰기 오류로 제대로 실행되지 않았습니다.




posted by hide in lab MasterPark

댓글을 달아 주세요

Linear Regression



data set을 만든다 : 하나의 가설을 세운다.


어떠한 Linear한 모델이 가져온 데이터에 맞을거다라고 예측하고 하는것 = Linear Regression

ex1) 공부를 많이 할수록 성적이 높아진다.

ex2) 운동을 많이 할수록 운동 수행능력이 높아진다.


어떠한 데이터가 있다면 Linear한 선을 찾는다. 가장 적합한 선을 찾는 것이 학습하는 것이다.


H(x): Hypothesis

W값이 가장 좋을 것을 찾아내야 한다. 



Cost function

가설과 실제 데이터가 얼마나 다른지를 나타낸다.


distance 계산법


세운 가설값과 실제 데이터의 값의 차이를 계산한다.

하지만 음수의 값이 나올 수 있으므로 제곱해서 distance를 구한다.


 = 



데이터의 갯수가 많아질 경우


m = 학습데이터의 개수

각각의 (hypothesis(예측값) - 실 데이터값)의 차이의 제곱의 데이터의 갯수만큼 나누면서 표준화를 진행한다.



Cost Function

-cost는 W와 b에 대한 function이 된다.



Goal: Minimize cost

값을 작게 할수록 실 데이터값과 가까워지므로 좋다.






참조: kim sung machine/Deep Learning

https://www.youtube.com/watch?v=Hax03rCn3UI

posted by hide in lab MasterPark

댓글을 달아 주세요

What is ML?

머신러닝이란?



Machine Learning

Limitations of explicit programming


Machine learning: "Field of study that gives computers the ability to learn without being explicitly programmed” Arthur Samuel (1959)

프로그램인데 개발자가 결과를 정하지 않고, 프로그램 자체가 데이터를 읽고 학습해서 무언가를 배우는 것이 머신러닝



머신이 학습을 하기 위해 필요한 샘플

Supervised learning   Unsupervised learning


1. Supervised learning: learning with labeled examples - training set

정해져 있는 데이터

ex) 고양이 label이 달린 사진을 보고 고양이라고 학습한다.


Most common problem type in ML 

- Image labeling: learning from tagged images 

- Email spam filter: learning from labeled (spam or ham) email 

- Predicting exam score: learning from previous exam score and time spent


Training data set(supervisor learning에서 쓰이는 데이터셋은?)


ex) Training data set

 X(feature)

 Y

 3,6,9

 3

 2,5,7

 2

 2,3,5

 1

내가 모르는 x값이 있는데, X=[9,3,6]일때 ML에게 Y값이 무엇인지 물어보면 "3"이라 알려준다.


ex) AlphaGO

기존의 대국 결과를 training set으로 이용해서 바둑을 둔다.



Types of supervised learning 종류

• Predicting final exam score based on time spent 

- regression (큰 범위를 예측한다)


• Pass/non-pass based on time spent  

- binary classification (pass or non-pass 둘 중 하나로 분류)


• Letter grade (A, B, C, E and F) based on time spent 공부한 시간에 기초한 성적매기기

- multi-label classification 


ex)

supervised learning 중 regression을 이용해서 학습된 데이터를 토대로 x=6이 들어가면 y=70이라고 알려준다.



2. Unsupervised learning: un-labeled data

데이터를 보고 스스로 학습한다.

ex) 자동적으로 유사한 것들을 grouping

ex) 비슷한 단어들을 모은다



 

참조: kim sung machine/Deep Learning

https://www.youtube.com/user/hunkims/featured

posted by hide in lab MasterPark

댓글을 달아 주세요