반응형

본 내용은  fastcampus 딥러닝/인공지능 올인원 패키지 online을 정리한 것이다.

 

CNN

 

anaconda 

numpy

 

딥러닝 전체 구조도 

1. 데이터  load

2. 데이터  normalization , augmentation

3. load model  (weight, bias 등  학습하면서 feature를 찾는 것이다. ) CNN, ResNet, AlexNet 등 ..

loss, optimizer등 설정 

lr, batch 등 

4. 결과를 result 한다.

평가방법 등 

 

object와 정답을 같이 주고 예측한것과 비교해서 얼마 만큼 틀맀는지 확인 하고 에러률을 최소화 하는 것을 적용한다. 

해답과 label을 비교해서 얼마나 틀렸는지 왜 틀렸는지 본다. 

그런것들로 고쳐가면서 학습한다.

 

프로젝트에서 데이터가 재일 중요하다. 

Prediction : 몇 % 확률로 무엇이다. 확률을 가지고 있다.

loss: 얼마나 틀렸는지 계산한다. 

optimization: 은 얼마나 틀렸는지 를 최소화한다. 

 

딥러닝 용어 

Model : CNN 모델을 학습하고자 하는 것이다. 

Layer : 층

input layer

hidden layer

output layer 

layer 쌓아서 Model이 된다. 

 

layer 너무 깊이 쌓으면 overfitting 이 되기도 쉽고 성능적으로 굉장히 무겁고 오래 걸릴수도 있다.

요즘에는 효율적으로 쌓는 것을 추천한다. 

깊이 쌓아야 feature를 detail하게 할 수 도 있다. 

 

convolutional -> 특징을 뽑는 

layer : input layer hidden layer output layer

input image -> convolutional kernel(filter) 하나하나씩 곱해준다.  -> feature map

feature map : 

 

weight는 학습할려고 하는 대상 ,  데이터마다 다른 weight를 학습 시켜야 한다. data혹은 목적에 따라 weight를 학습 시켜야 한다. 

filter -> 계산을 통해서 더 좋은 성능을 만드는것 filter가 고정된 값이 아니고 바꿔가면서 featrue들을 더 잘 뽑게 할려고 하는것이다.  

kernel -> 

variable

bias 

 

pooling layer -> feature를 뽑은 후 쭐여줄려고 한다. 압축을 한다. 압축

 

optimization: 얼마나 틀렸는지 나오면 모델에 업데이트 하면서 학습을 시키고 나서 최소화로 찾아가는 것이다.

Adam, SGC, 등 

 

activation function :  앞에서 convolution 을 받고  특징을 뽑았으면 음수값이나 불필요한 것 제거한다. ReLU 많이 사용한다. 

softmax: 다중 classification 에서 사용한다. -> one hot encoding 값이 확률로 나타나는 것이다. 

 

결과가 나오면 정답을 유도해서 

얼마나 틀렸는지 계산하는 것이 loss/cost이다. cost function에서 나온 수치가 loss/cost이다. 

 

hypper parameter: 컴퓨터가 스스로 학습을 할 수 없어서 인간이 조절하는 부분이다. 

learning rate: hypper parameter중 하나이다. 

cost를 낮출려고 한다. 

learning rate 너무 작으면 너무 천천히 가서 잴 낮은 곳이 아닌데 착각할 수 있다. 

너무 크면 잴 낮은 것을 찾는 것도 지나칠 수도 있다. 

 

batch size 6만장을 다 넣을 수 가 없어서 몇장을 나누어서 조금씩 넣어준다. 몇장을 넣어 줄것인지를 정하는 것이 배치사이즈이다. 

batch size는 데이터를 나누어서 모델에서  학습한다. 몇장을 넣어주는 것을 정한것이 batch size이다.

epoch 수 만큼 전체 이미지를 반복해서 학습한다.

 

dataset  => train/validation/test 

train set/test set

train set/validataion set / test set 

마지막에 평가 할 떄는 test set으로 확인 한다. 

 

label / Ground Truth => 정답

label 정답을 준다. 

Ground Truth : 

 

cnn

featrue extraction -> 특징을 뽑는 것이다. 특징을 추출하는 것이다. 

특정을 추출하고 fully connected layer에서 결정을 내린다. 

예: 앵무새의 특징  패턴 모양을 가져오고 

딥러닝에서는 어떤 특징을 뽑는지 어렵다. 블랙박스 

점 점 더 갈수록 detail 하게 뽑는다. 

featrue extraction

convolution , pooling , activation 

 

classification

특징들을 딥러닝이 가져온다.

 

convolutional layer :  특징을 강조시킨다. 특징은 어떤 패턴을 말한다. 

pooling layer:  -> 특징을 뽑은 후 수치가 높은 것을 반으로 줄인다. 이미지 압축

  max pooling은 가장 큰 특징을 압축 한다. 

activation layer:  앞 에서 뽑은 특징에서 불필요한것 없앤다.

이 3개 layer를 통해 중요한 부분만 남는다. 

선 하나하나가 y = wx+b 

 

fully connected로 계산해서 예측 하거나 분류한다.

 

LeNet

AlexNet

vgg16

ResNet

DenseNet

어떤것 열결해주고 어떻게 쌓였는지가 중요하다. 

 

shift mouse 우측키를 눌리면 power shell 창이 나온다.

 

tensorflow 설치

pytorch 설치 

cpu 일 경우에는 None로 하면 된다.

 

python 2.7일 경우에는 pip3

python 3.x일 경우에는 pip

 

 

Jupyter notebook key

shift+enter : 실행하고 다음칸으로 넘어간다. 

ctrl+enter: 실행하고 그 자리에 멈추는 것 

Esc : 모드를 바꾼다. 

shift+m: 작업하는 것을 한번에 묶고 싶을 때 선택하고 눌리기 

shift+ctrl+-: 다시 나누어진다. 

esc command 모드에서 d를 두번 누른다. : 셀 삭제하기 

esc -> a : 위에 cell생성

esc -> b : 아래에 cell생성

esc -> m: markdown 문법으로 전환

 

 

Tensor

scalar  

vector  

matrix  

tensor

0차원 숫자가 하나 있는것 int

np.array(1)

scalar하나

 

shape는 모양을 나타나는것

ndim 차원의 개수

 

1차원

np.array([1])

0차원이 모이면 1차원이 된다. 같은 차원 사이즈는 다를 수 있지만 1차원이다. 

2차원 대괄호 2개 

np.array([[1,2]]).shape

import numpy as np

np.array([[1,2],[1,2]]).shape

 

다차원

[[[

3차원

(차원, 2,1)

 

이미지가 size에 따라서 한다.

이미지가 2차원 혹은 3차원 으로 될수도 있고 4차원 으로 될수 도 있다.

이미지 데이터 shape를 먼저 확인 하는게 좋다.

 

numpy 

zeros =>0으로 생긴다.

np.zeros()

ones =>1으로 생긴다.

np.ones()

np.ones() * 5  => 5로 변한다. 

 

array는 1차원으로 생긴다. 그래서 reshape해서 바꾼다.

 

index => numpy에서도 가능하다. 

묶여 있는게 큰것 부터 가져온다. 

slicing 이 가능하다

 

같은 효과가 나오면 좋겠다. 

print(arr[1][2]) 

print(arr[1,2])

 

boolean indexing 

data[data<=0] = 1 

True일 경우 1로 바꿔준다.

 

broadcast

#기준을 0차원으로 준다. 0차원에서 가장 큰 값을 반환한다. 

print(np.max(arr+arr_2,0)) 

1차원에서 재일 큰 값 

print(np.max(arr+arr_2,-1)) 

차원을 axis = -1 로 해도 된다.

print(np.argmax(arr)) # 몇번째의 값이 잴 큰 index 를 반환한다. 
print(np.argmin(arr)) # 몇번째의 값이 잴 작은 index를 반환한다.
print(np.unique(arr)) #unique한 값 반환

 

숫자를 넣으면 바로 int32로 잡아준다.

astype()을 사용해서 datatype을 변환가능

 

dtype   datatype을 확인하기

 

astype('float32')

astype('int8')

astype(np.int32)

 

arr = np.array([[1,2,3],[1,2,3]], dtype =np.uint8)

 

ndim을 통해서 차원수를 return 가능

len(arr.shape)

arr.shape

arr.size

reshape() -> 차원도 바꿔줄 수 있는데 size는 그대로 유지하되 모양을 바꿀수 있다.

reshape(-1) 사이즈에서 남는것 -> 차원 하나만 남긴다. 숫자도 많고 차원이 많을 때 , 마지막 차원에서 남는다. 

 

import numpy as np

arr = np.array([[1,2,3],[1,2,3]])

arr.reshape(-1).shape

 

import numpy as np
arr = np.array([[[1,2,3],[1,2,3],[1,2,2],[1,2,3]]])
print(arr.shape)
print(arr.reshape(-1).shape)

 

import numpy as np
arr = np.array([[1,2,3],[1,2,3]])
print(arr.reshape(-1).shape)

arr = np.array([[1,2,3],[1,2,3]])
print(arr.reshape(1,-1).shape)

arr = np.array([[1,2,3],[1,2,3]])
print(arr.reshape(-1,1).shape)

 

차원수 널리기

reshape사용

 

ravel() -> 1차원으로 바꾸기 -> reshape(-1) 과 같은 작용

arr = np.array([[1,2,3],[1,2,3]])
print(arr.ravel())

arr.ravel() == arr.reshape(-1)

 

np.expand_dims()

차원을 일부러 하나 널리는 경우가 있다.

(54,) -> (54,1)

arr = np.array([1,2,3])
print(arr.shape)

arr = np.expand_dims(arr,0)
print(arr.shape)

arr = np.array([1,2,3])
arr = np.expand_dims(arr,1)
print(arr.shape)

 

 

 

그래프 시각화

학습하는 과정 등을 볼 수 있다.

import matplotblib.pyplot as plt

seaborn

%matplotblib inline #이것을 해주는 것이 좋다 . 아니면 새로 생길 수 있다.

 

 

matplotlib subplot

subplot(행의 개수, 열의 개수, 그중에서 첫번째 ) -> 여기서는 그중에서 첫번쨰는 1부터 시작한다.

plt.subplot(행, 열 , 몇번 째)

 

matplotlib color:

b 파란색

g 초록색

r 빨간색

c 청록색

y 노란색

k 검은색

w 횐색

matplotlib mark:

o 원

v 역삼각형

^ 삼각형

s 네모

+ 플러스

. 점

data = np.random.randn(100)

import matplotlib.pyplot as plt

plt.plot(data , 'k^')
plt.show()

 

matplotlib size

figsize size 조절

plt.figure(figsize=(10,10))

plt.figure(figsize=(10,10))
plt.plot(data , 'k^')
plt.show()

plt.legend() 는 label 을 보여준다. 

 

title 제목

plt.title('Random graph')
plt.xlabel('x')
plt.ylabel('y')

 

그래프 저장하기

jupyter 에서 마우스로 드리그 해서 할 수 있다.

plt.savefig('이름.png')

저장된 위치는 현재 작업하고 있는 위체에 저장된다. 

 

이미지 시각화

from PIL import Image

image_pil = Image.open(path)

image = np.array(image_pil)#image가 array로 된다. 

(세로길이, 가로길이, 차원)

 

image.shape => 이미지는 2차원이지만 rgb 때문에 3차원으로 

 

np.min(image) np.max(image)=> 최대가 255까지인지 확인한다. 다른 데이터 타입을 가질 경우도 있다

 

이미지 보여주기 

plt.imshow(image) => 이미지 보여주기

plt.show()

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image_pil = Image.open("이미지 경로")
image_wb = np.array(image_pil)
image_wb.shape

plt.imshow(image_wb)
plt.show()

image 흑백으로 열기

image_pil = Image.open(path).convert("L")

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image_pil = Image.open("이미지 경로").convert("L")
image_wb = np.array(image_pil)
print(image_wb.shape)

plt.imshow(image_wb,'gray')
plt.show()

gray로 해야 흑백색으로 나온다.

 

RdBu => redblue

jet => 재일 흔히 많이 사용한다.

Colorbar 추가하기

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image_pil = Image.open("이미지 경로").convert("L")
image_wb = np.array(image_pil)
print(image_wb.shape)

plt.imshow(image_wb,'jet')
plt.colorbar()
plt.show()

이미지 크기 조절 가능하다. 

plt.figure(figsize=(10,10))

 

python image size 줄이기

image_pil = Image.open("image_1경로")
image_1 = np.array(image_pil)

image_pil = Image.open("image_2경로")
image_2 = np.array(image_pil)

print(image_1.shape)
print(image_2.shape)

import cv2
image_1 = cv2.resize(image_1,(215,223))
print(image_1.shape)

image_2 = cv2.resize(image_2,(215,223))
print(image_2.shape)

 

resize할 때 tuple로 줘야 한다.

 

주의할 점: resize는 tuple로 준다.

 

plt.subplot(221) = plt.subplot(2,2,1)

 

python image 합차기 

alpha값을 조정하여 할 수 있다.

 

plt.imshow(image_1)
plt.imshow(image_2, alpha =0.5)
plt.show()

subplot을 사용 가능한다.

plt.subplot(2,2,1 ) 혹은 plt.subplot(221)

반응형

'교육동영상 > 01. 딥러닝인공지능' 카테고리의 다른 글

06. 이미지 분석 tensorflow 2.0  (0) 2020.11.25
05. Tensorflow 2.0 Pytorch  (0) 2020.11.24
03. python 함수  (0) 2020.11.19
02. python 조건문, 반복문  (0) 2020.11.19
01. Python Programming  (0) 2020.11.13

+ Recent posts