tensorflow-gpu 설치하기

 

1. Python 설치하기 + CMD에서 실행
 : https://n1094.tistory.com/41

2. CUDA + cuDNN 설치하기
 : https://n1094.tistory.com/42

3. pip로 tensorflow-gpu 설치하기
 : https://n1094.tistory.com/43

 

 

3. pip로 tensorflow-gpu 1.14 설치하기

 

pip로 tensorflow-gpu 1.14 버전을 설치해보겠습니다.

 

 

방법은 tensorflow 공식사이트에 있습니다.

(참고: https://www.tensorflow.org/install/gpu)

 

CMD 창을 열고, pip install tensorflow==1.14 를 입력합니다.

 

설치가 진행됩니다.

 

tensorflow==1.14 는 CPU 버전 명령어이기 때문에, 위 설치가 완료되면 tensorflow-gpu==1.14 를 설치해야 합니다.

 

 

CPU 버전은 설치가 완료되었습니다.

 

tensorflow-gpu 설치를 위해 CMD를 관리자 권한으로 열어야 합니다.

 

 

 

관리자 권한으로 실행했습니다.

 

다음으로, pip install tensorflow-gpu==1.14 를 입력합니다.

 

 

이후 설치가 진행됩니다.

 

 

설치가 완료되었습니다.

 

이제 python을 실행시킨 후, tensorflow 모듈을 import 하고 세션을 열어보겠습니다.

 

 

잡다한 것이 많이 떴지만, 오류가 뜨지 않은 것으로 보아 정상적으로 import 되었습니다.

 

 

tensorflow.Session() 코드를 입력한 후,

 

본 컴퓨터의 GPU 정보가 뜨는 것으로 보아 정상적으로 설치가 되었음을 알 수 있습니다.

 

 

 

이상으로 python의 tensorflow-gpu 설치 방법이었습니다.

Posted by NDC :

tensorflow-gpu 설치하기

 

1. Python 설치하기 + CMD에서 실행
 : https://n1094.tistory.com/41

2. CUDA + cuDNN 설치하기
 : https://n1094.tistory.com/42

3. pip로 tensorflow-gpu 설치하기
 : https://n1094.tistory.com/43

 

 

텐서플로우는 Google사에서 만든 Machine Learning 플랫폼입니다.

 

텐서플로우는 Python, C, Go 등 여러 언어를 지원하지만, 본인은 가장 편하고 대중적인 Python을 사용합니다.

 

참고

1. https://namu.wiki/w/%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C%EC%9A%B0

2. https://ko.wikipedia.org/wiki/%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C

3. https://www.tensorflow.org/?hl=ko

 

준비물

1. Python Interpreter(3.7이상, https://n1094.tistory.com/41 ← 설치방법)

2. NVIDIA GPU Driver

3. CUDA

4. cuDNN

 

 

텐서플로우는 Python 3.5이상, NVIDIA GPU를 지원합니다.

위는 Graphic Drivers, CUDA, cuDNN의 버전 표입니다.

 

2. CUDA + cuDNN 설치

 

CUDA 사이트에 들어갑니다.

 

위의 그림에서 보시다시피, CUDA는 10.0만 사용해야 합니다.

 

 

https://developer.nvidia.com/cuda-10.0-download-archive

 

CUDA Toolkit 10.0 Archive

*/

developer.nvidia.com

 

위의 사이트로 들어갑니다.

 

 

차례대로 클릭하면 설치파일을 받을 수 있습니다.

 

 

이전에, 자신의 GPU에 맞는 NVIDIA Graphic Driver가 설치되어 있어야 합니다.

이는 410.X로, 410 버전보다 상위 버전이어야 합니다.

 

 

본 컴퓨터에 설치된 드라이버 버전입니다.

 

설치파일이 다운로드 되면, exe파일을 실행해줍니다.

 

 

OK를 누르고

 

 

 

위의 단계가 자동으로 진행됩니다.

 

 

동의 및 계속(A)을 글릭합니다.

 

 

저는 잡다한 도큐먼트나 샘플은 필요없기 때문에, 사용자 정의 설치를 선호합니다.

 

 

보라색으로 박스친 것들은 필요없다고 판단한 부분이여서, 체크 해제했습니다.

 

 

다음(N)을 눌러줍니다.

 

 

바꿀 필요가 없기 때문에, 똑같이 다음(N)을 눌러줍니다.

 

 

체크박스에 체크한 후 NEXT를 눌러줍니다.

 

 

설치가 진행됩니다.

 

 

설치가 완료되면, 다음(N)을 누르고, 닫기(C)를 눌러서 설치를 종료합니다.

 

다음으로, cuDNN 파일을 다운로드합니다.

 

 

https://developer.nvidia.com/cudnn

 

NVIDIA cuDNN

*/

developer.nvidia.com

 

해당 경로로 들어갑니다.

 

 

Scroll Down해서 나오는 화면에서 Download cuDNN을 클릭합니다.

 

 

회원만 다운로드가 가능하므로, Join을 눌러 회원가입을 한 후, Login 해줍니다.

 

로그인을 한 후, 다시 위의 URL로 접속하여 Download cuDNN을 눌러줍니다.

 

 

체크박스에 체크한 후, Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.0

 

을 클릭하여 다운로드합니다.

 

cuDNN SDK는 7.4.1 이상 버전을 지원하므로, 버전도 문제 없습니다.

 

 

압축파일입니다. 다운로드 해줍니다.

 

239MB라 시간이 조금 소요됩니다.

 

 

다운로드가 끝나면, 압축을 풀어줍니다.

 

 

압축해제 된 폴더 내의 파일들을 모두 복사합니다.

 

이 파일들을 CUDA가 설치된 경로에 붙여넣기 합니다.

 

전에 CUDA 설치할 때의 경로를 살펴봅니다.

 

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

 

위의 경로로 들어가서,

 

 

붙여넣기 해줍니다.(본인은 전에 붙여넣기를 한 상태이므로, NVIDIA_SLA_cuDNN_Support.txt 파일이 존재합니다.)

 

 

붙여넣기가 완료됬습니다.

 

이제 시스템 환경 변수 편집에 들어갑니다.

 

 

 

 

아마 자동으로 등록이 되어있을 겁니다. 확인만 하시면 됩니다.

 

이것으로 CUDA와 cuDNN 설치가 끝났습니다. 다음 편에서 pip로 tensorflow-gpu 설치를 하겠습니다.

Posted by NDC :

tensorflow-gpu 설치하기

 

1. Python 설치하기 + CMD에서 실행
 : https://n1094.tistory.com/41

2. CUDA + cuDNN 설치하기
 : https://n1094.tistory.com/42

3. pip로 tensorflow-gpu 설치하기
 : https://n1094.tistory.com/43

 

 

tensorflow-gpu 를 위해 python을 설치하고, cmd에서 실행해보겠습니다.

 

1. Python 설치

https://www.python.org/

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

위 사이트로 들어가셔서,

 

위의 All releases를 들어갑니다.

 

최근 Python은 3.8 버전을 공개했지만, opencv나 기타 파이썬 모듈이 아직 3.8버전으로 공개가 안되었기 때문에

 

3.7 에서 가장 최신 버전의 Python을 설치합니다.

 

 

클릭합니다.

 

클릭 후 아래로 Scroll Down을 하면

 

 

저 파일을 클릭해서 설치 파일을 다운로드 합니다.

 

이후 다운로드한 설치파일을 실행하여 Python을 설치합니다.

 

설치 후 환경변수 편집을 해주어야 합니다.

 

Python Interpreter는 python.exe 파일로 되어 있습니다. 해당 경로를 따라갑니다.

 

 

보통의 경우에, python.exe 파일은

C:\Users\(사용자명)\AppData\Local\Programs\Python\Python37

위치에 저장되는 것 같습니다.

 

환경변수 편집을 위해 시작 > 시스템 환경 변수 편집을 들어갑니다.

 

 

 

편집을 누르면

 

 

이런 창이 뜨는데, 맨 아래 빈 줄을 클릭하여 추가할 수 있습니다. (저는 이미 추가해 둔 상태입니다.)

 

 

빨간 박스처럼, 두 줄을 추가해 줍니다.

 

C:\Users\(사용자명)\AppData\Local\Programs\Python\Python37\

→ python.exe 의 경로

 

C:\Users\(사용자명)\AppData\Local\Programs\Python\Python37\Scripts\

→ pip 를 사용하기 위한 경로

 

이렇게 추가를 해주면,

 

 

명령 프롬프트를 열어서 Python과 pip가 구동되는지 확인합니다.

 

 

이렇게 pip와 python이 구동되면 python 설치는 끝났습니다.

Posted by NDC :

 SPPNet : Spatial Pyramid Pooling 

in Deep Convolutional Networks for Visual Recognition


SPPNet

 

가장 큰 장점

1. R-CNN은 이미지 한 장당 수천 번의 CNN을 수행함(Time-Consuming).

이미지 안에서 bounding box Selective Search 방법을 사용.

반면에 SPPNet은 딱 한 번 CNN을 수행함(one-pass).

ImageFeature Map에서 어떤 위치에 해당하는 정보를 뽑아냄.

 

2. SPPNet은 이미지의 Scale(확대/축소), Size(크기), Aspect Ratio(종횡비)에 영향을 받지 않음.

 

기존의 CNN의 입력

무조건 고정 크기가 입력됨.

: Fully Connected Layer 때문이다(fixed-length Vector가 필요함).

 

Crop(자르기) : 전체 객체가 들어가지 않는 경우가 발생.

Warp(줄이거나 늘리기) : 원하지 않는 왜곡이 발생.

 

사실, Convolution Layer에는 고정 크기의 입력이 필요하지 않음.

 

BoW(Bag of Words) 기법의 확장


 [Box of Words]


1. Feature Extracting

2. Clustering : K-Means 알고리즘 사용, Codeword 찾아냄

3. Codebook Generation

4. Image Representation : Histogram화 시킴(bin 개수 = Codeword 개수)

5. Learning and Recognition : SVM 등의 방법으로 분류


R-CNN 방법과 SPPNet 방법


[R-CNN]


R-CNNImage 영역(Selective Search 방법으로 수천 개를 만듦.)을 추출하고 Warp 시킴.

원하지 않는 왜곡(Unwanted geometric distortion)이 발생함.

이후 추출한 영역을 CNN으로 학습시킴.

매우 느리다(time-consuming).

 

[Spatial Pyramid Pooling]


SPPNet Convolution 마지막 층에서 나온 Feature Map을 분할하여 평균을 내고 

고정 크기로 만들어버림.

→ '06년 발표된 Spatial Pyramid Matching 방법에서 나옴.    


[Spatial Pyramid Matching]


분할 방법은 “fast” mode of Selective Search

[논문 : “Segmentation as selective search for object recognition,” in ICCV, 2011.]

마지막 Pooling LayerSPP(Spatial Pyramid Pooling)로 대체함.

+ 내부적으로 Global Max Pooling 사용.

분할하는 크기만 동일하면 어떤 Size, Scale, Aspect Ratio를 가진 이미지가 와도 똑같은 크기의 

Vector가 출력됨.(이후 FC Layer에 입력으로 들어감.)

분류기 : 이진 선형 SVM


[Spatial Pyramid Pooling Network Architecture]

 

분할 크기(4-level Spatial Pyramid)

50 bins : {6x6, 3x3, 2x2, 1x1} 12,800-dimension(256x50) representations

30 bins : {4x4, 3x3, 2x2, 1x1}

→ stride를 각각의 크기 별로 따로 적용함.



SPP Layer의 출력

(K * M)-dimensional Vector (K는 마지막 Feature Mapdimension, Mbin의 크기)

 

Training

Single-size training : 224x224 size로만 학습, {3x3, 2x2, 1x1} SPP 사용.

2. Multi-size training : 180x180 and 224x224 두 종류를 학습.

180-Network224-Network의 출력은 동일하다.

? 나누고, 평균을 구해서 뽑기 때문.

Network Switching 방법? Epoch 1180-Network, Epoch 2224-Network... 반복!

 

실험 네트워크


[Test Network Architecture : 1. ZFNet, 2. AlexNet, 3. Overfeat Architecture]


ZFNetAlexNetConvolution Layer5

Overfeat 구조는 FC Layer1x1 Convolution으로 이해한 구조.

Sliding Window 개념 적용 가능, 연산량 감소 but 정확도는 높지 않음.

 

Improves Accuracy 



1. Multi-level Pooling

{6x6, 3x3, 2x2, 1x1}{4x4, 3x3, 2x2, 1x1}의 차이는 거의 없다.

하지만, SPP를 사용한 것과 사용하지 않은 것은 확실한 차이가 있다.

(50 bin pyramid : 34.98/14.14, no-SPP : 35.99/14.76)

 

2. Multi-size Training(그림 참조)

Multi-size SPPNet(Overfeat-7) : 29.68%

Single-size SPPNet : 30.36% / no-SPP : 32.01%


3. Full-image Representations



 다중 조합 뷰가 싱글 Full-Image 뷰보다 더 좋은 경우도 있음.

(We find that the combination of multiple views is substantially better than the single full-image view.)

 

하지만 여전히 Full-Image View는 장점이 있는데

1. 수십 개의 뷰를 조합한 경우에도 추가적인 두 개의 전체 이미지 뷰에서 약 0.2%의 성능 향상이 있음.

2. 전체 이미지 뷰는 원래의 방식과 동일하다.

3. 응용 프로그램에서 이미지 자체를 표현하는 것을 요구할 수 있음.

Detection Result



Positive Sample vs Negative Sample(Data Labeling) 


[Positive Sample and Negative Sample]


positive sample : ground-truth(=GT) Sample을 사용.

negative sample : positive sample과 최대 30% 겹치는 Sample을 사용(IOU 측정법).


[Intersection over Union]


Result 



Conclusion

- SPPNet은 다른 크기, 다른 사이즈, 다른 종횡비를 다루기 위한 유연한 방법이다.

ClassificationDetection에서 높은 정확성, 특히 DNN 기반의 Detection을 크게 빠르게 해줌.



Posted by NDC :


MobileNet v2 : Inverted residuals and linear bottlenecks



MobileNet V2

 

이전 MobileNet 일반적인 Conv(Standard Convolution)이 무거우니 이것을 Factorization

Depthwise Separable Convolution(이하 DSC)을 사용

 

사용한 기법들

1. Depthwise Separable Convolution

2. Inverted Residuals

 


Depthwise Separable Convolution

방식 : Standard ConvolutionSeparate Depthwise Conv. + Pointwise Conv.

 

1) Depthwise Convolution : kernelwidth * height * depth=1 로 설정하고

입력 이미지의 각 Channel 마다 별개로 Convolution 실시

(각 채널마다 독립적으로 Convolution)

 

2) Pointwise Convolution : kernelwidth=1 * height=1 * depth 로 설정하고

Convolution 실시(Network in Network 논문의 1 by 1 convolution과 동일)

 


기존 Convolution Layer의 연산량

DKDKMNDFDF

 

DSC(Depthwise Separable Convolution) Layer의 연산량

DKDKMDFDF + MNDFDF

= DFDFM(DKDK + N)

 

Standard Convolution보다 8~9배 수준의 속도 향상을 가져옴.

 

(추가 1. Batch Normalization 대신 Fused Batch Normalization 사용이 더 좋다.)



Linear Bottlenecks

방식: Residual Learning 방식을 통해 네트워크를 깊게 구성할 경우, 연산량이 많이 늘어나게 된다.

1 by 1 Convolution을 활용해 채널 수를 감소시킴.

(Residual Learning? : 학습을 위한 Weight Layer를 거친 후에, 초기 Input의 값을 더해주는 형태)

 

1) 일반적인 방식

일반적인 3*3 convolution 실시

 

2) Bottleneck 방식

1 by 1 convolution으로 채널 수를 줄이고 3 by 3 convolution을 실시 다시 1 by 1 convolution으로 채널 수를 복구시킴.



Q. Inverted Residual 인가?

A. 기존의 bottleneck(C)은 채널 감소 학습(DSC) 채널 복구 방식이지만,

Inverted Residual(D)은 채널 증가 학습(DSC) 채널 감소 방식이다(Inverted .)

 

Input DataOutput Data의 크기가 작기 때문에 메모리 효율적이다.



Network Architecture





 

1) 19개의 Layer로 구성되어 있음.

2) building block1번 이상의 동일 구조의 반복으로 되어 있다.(parameter n 참조)

 

Posted by NDC :

* 딥러닝 공부한 것 기록_1 * 


학교에서 프로젝트로 공부하고 있는 딥러닝에 관해서

나름대로 공부한 것들을 기록해보았습니다.


정확할지 아닐지는 몰라도 이 글이 도움이 된다면 언제든지 제 지식을 가져다가 쓰시길 바래요!



-------------------------------------------------------------------------------------------------------



데이터 모으는 것부터 하자(데이터 만드는 것이 딥러닝의 시작)

텐서플로우 사용(파이썬)

성능이 안나온다? -> 데이터를 보자(네트워크문제보다 데이터문제가 더 클수도)


cost function 에서 H(X) 는 그래프 선(linear)상의 값, Y 는 실제 값

제곱 : 패널티를 쎄게 줄 수 있다.


min(cost(w)) = 로스(cost)가 가장 작은 가중치(w)를 찾는 것.

=> convex 함수(볼록함수)


행렬 활용해야 한다.


시그모이드 함수와 크로스 엔트로피 코스트

H(x) = Wx일때 H(x)에 시그모이드를 쓰면 

그래프(코스트)가 이상하게 나옴.(convex,볼록 함수가 안나옴. 최소값 찾기가 힘듬)

그래서 크로스 엔트로피 코스트 함수가 나온것.

그런데 여기서 log를 사용한 코스트함수를 쓰는데, if를 빼고 모든 상황에서 사용

가능한 크로스 엔트로피 코스트 함수를 만들어 냈음.


그럼 결과가 2개 초과인 경우에는?

2차원 배열로 사용. 3개? 3X3 w행렬. 4개? 4X4 w행렬.

여기서 x1 x2 x3 피쳐값을 넣어서...(x1 = feature 1)

결과값이 0.2 20 0.7 나왔다? -> 시그모이드 사용 -> 확률로 나와짐.


정리

리니어 리그레션. 가설 H(x) -> 키-몸무게 2개뿐

3개이상? 멀티 리니어 리그레션


시그모이드에서 지수함수가 들어가는데, 그러면 이상한 그래프가 나옴.

이 그래프를 좀더 찾기 쉽게 만들어주려면 지수함수의 반대인 로그함수값이 들어가는데,

이 로그함수값이 포함된 코스트 펑션을 크로스 엔트로피 코스트 펑션이라고 부른

Posted by NDC :