본문 바로가기

머신러닝 & 딥러닝 공부/Tensorflow

[Tensorflow dev 자격증] Enhancing Vision with Convolutional Neural Networks

반응형

 

github.com/jonhyuk0922/Tensorflow-Dev/blob/main/Course1_3_Enhancing_Vision_with_Convolutional_Neural_Networks.ipynb

 

jonhyuk0922/Tensorflow-Dev

Study and Review for Tensorflow Developer Certificate (coursera , DeeplearningAI) - jonhyuk0922/Tensorflow-Dev

github.com

 

안녕하세요

27년차 진로탐색꾼 조녁입니다!

 

오늘은 텐서플로우 자격증 과정 첫번째 강좌인

'Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning' 

3주차 강의(Enhancing Vision with Convolutional Neural Networks) 및 자료를 공부했습니다.

 

생각보다 속도가 안나고 있지만 그래도 하나하나 차근씩 스스로 해결해나가는 것에 의의를 두고 있습니다.

 

첫번째 영상, A conversation with Andrew Ng

몇줄의 코드로 DNN을 구현한 너네가 멋지고 앞으로 배울 CNN은 더 나은 분류기를 만들어줄거라고 함. 

 

 

 

두번째 영상, What are convolutions and pooling?

CNN은 우리가 분류할 이미지에서 낭비되는 부분들을 줄이기 위한 방법이다. 위 사진에서도  빨간 박스와 같이 픽셀에 가중치를 주는 필터를 써서 특정 부분들이 더 부각되도록 한다. 이 필터는 Pooling과 함께할 때 효과가 극대화 되는데 아래 사진을 보라.

 

 

 

위와 같이 16픽셀을 4픽셀로 줄이면서도, 가장 큰 값의 픽셀을 남김으로써 손실을 최소화하며 압축했다. (pooling을 같이 사용한 경우)

 

세번째 읽기자료, Coding convolutions and pooling layers

Conv2D 와 MaxPool2D 레이어에 대한 텐서 사이트 주소 알려줌. (참고)

www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D

 

tf.keras.layers.Conv2D  |  TensorFlow Core v2.4.1

2D convolution layer (e.g. spatial convolution over images).

www.tensorflow.org

www.tensorflow.org/api_docs/python/tf/keras/layers/MaxPool2D

 

tf.keras.layers.MaxPool2D  |  TensorFlow Core v2.4.1

Max pooling operation for 2D spatial data.

www.tensorflow.org

 

네번째 영상, Implementing convolutional layers

우리가 DNN을 설계할 때 사용한 코드와 CNN을 설계할 때의 코드 비교해 보라.

DNN

model = tf.keras.models.Sequential([   
				tf.keras.layers.Flatten(),
                                tf.keras.layers.Dense(128, activaiton=tf.nn.relu), 
                                tf.keras.layers.Dense(10, activaiton=tf.nn.softmax)])

 

CNN

model = tf.keras.models.Sequential([
		    tf.keras.layers.Conv2D(63, (3,3), activation='relu', input_shape=(28,28,1)),
                    tf.keras.layers.Maxpooling2D(2,2),
                    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
                    tf.keras.layers.Maxpooling2D(2,2),
                    tf.keras.layers.Flatten(),
                    tf.keras.layers.Dense(128, activaiton='relu'),
                    tf.keras.layers.Dense(10, activaiton='softmax')])

 

위 DNN 과 CNN을 비교했을 때 마지막 3줄은 동일함을 알 수 있다. 다만 모델 도입부에 Conv & pooling layer 가 추가되었다.

 

 

다섯번째 읽기자료, Learn more about convolutions

유튜브를 추천해주셨다. 이동시간에 짧게 보기 좋을 듯.https://bit.ly/2UGa7uH.

 

Convolutional Neural Networks (Course 4 of the Deep Learning Specialization)

 

www.youtube.com

 

여섯번째 영상, Implementing pooling layers

아래 코드로 모델의 layer 마다 이미지가 어떻게 변하는 지 볼 수 있다. 

model.summary()

 

 

여기서 conv layer를 지날때는 shape이 x,y 각각 2씩 줄어드는 것을 볼 수 있는데 이것은 3*3 필터를 쓰기 때문이다. 

아래 그림은 5*5 이미지에 3*3 필터를 씌웠을 때의 예시인데, 가로나 세로 둘다 필터가 3번밖에 못들어가서 image는 3*3으로 압축된다.

 

내가 그린 기린 그림

 

여덟번째 영상, Improving the Fashion classfier with convolutions

컨볼루션은 필터를 통해, 이미지의 크기를 압축하면서도 특징을 효과적으로 추출할 수 있다. 또한 풀링은 정보를 압축해 쉽게 관리할 수 있도록 한다. 이 방법들은 이미지 인식 성능 향상에 정말 좋다. 각 이미지별 적절한 필터가 있다. 컨볼루션 넘버를 바꿀 떄마다 세로,가로축을 강조하거나 생상을 강조하는 등 기능이 다르다. 이제 직접 해보라고 하셨다.

 

아홉번째 읽기자료, Try it for yourself

연습할 노트북을 제공하며 colab의 런타임 유형을 GPU로 바꾸라고함. 이 코드를 가지고 최소 한시간은 공부해라. 그리고 다음 강의로 넘어가서 코드를 살펴보고 작동방식을 시각화하는 conv를 직접 구축하라고 하심.

gist.github.com/jonhyuk0922/72bb436898fb6ddb4b36381179bd3fc8#file-course-1-cnn-fashion-mnist-ipynb

 

Course 1 - CNN-fashion MNIST

Course 1 - CNN-fashion MNIST. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

CNN 예제 연습하며 배운점

1. 'overfitting'(과대적합) : train set에 대해 필요 이상 학습함으로 일정 부분에 대해서만 전문화되어 결과적으로 다른 데이터를 보는데 덜 효율적이게 되는 것

 

2. DNN과 달리 데이터 수집할 때, shape 재구성 해줘야함. eg) 60,000장의 28*28*1 항목 대신 60,000*28*28*1의 단일 4D 목록으로 변경해줘야함. test셋도 해줘야함! 이렇게 재구성 안해주면 컨볼루션이 인식 못함.

training_images=training_images.reshape(60000, 28, 28, 1)
test_images = test_images.reshape(10000, 28, 28, 1)

 

3. 컨볼루션+풀링 한개할 때보다 두번 연속할 때 더 높은 정확도 나온다. 컨볼루션 층 설정할 때 랜덤 인수를 16,32,64 바꿔봐도 정확도는 비슷했다.

 

열번째 영상, Walking through convolutions

필터 종류별로 다르게 작용함을 알려줌. 

 

열한번째 읽기자료, Experiment with filters and pools

연습해보라고 colab 주고 필터 바꿔보라고함.

gist.github.com/jonhyuk0922/c761cd7b06127a7d61ddc5c9d900d972#file-course-1-various-conv-filter-ipynb

 

Course 1 - Various Conv filter

Course 1 - Various Conv filter. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

그리고 이 사이트에서 새로운 필터 찾아서 해보라고도 함. lodev.org/cgtutor/filtering.html

 

Image Filtering

#define filterWidth 9 #define filterHeight 9 double filter[filterHeight][filterWidth] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0

lodev.org

 

이후 퀴즈를 풀었고 내용은 수업안에서 다 나왔습니다. 컨볼루션이 뭔지, 풀링이 뭔 지, 어떤 기능을 하는 지 .. 중요한 건 CNN이 DNN 보다 학습이 오래걸리지만 효과적이라는 것과 , 오버피팅이 존재하기때문에 callback 을 써서 멈춰주면 좋다는 것입니다.

 

아, 매 주차마다 마지막에 과제가 있는데 중간중간 읽기자료로 제공하는 Colab 연습만 한다면 충분히 풀 수 있습니다. 다만, 쥬피터랑 colab 간 버젼 차이가 있어서 간혹 에러가 발생하는데 해당 부분은 발견할 때마다 정리해 놓겠습니다!! 

 

과제 : CNN으로 fashion MNIST 99.8% 분류하기

gist.github.com/jonhyuk0922/f04fc297cb2c6fccf3a37e0f4d460747#file-course1-ex3-cnn-fashion-mnist-99-8-ipynb

 

Course1-Ex3-CNN-fashion MNIST 99.8%

Course1-Ex3-CNN-fashion MNIST 99.8%. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

꼭 reshape 해줘야함

반응형