안녕하세요~


이번글에서는 Object Detection의 또 다른 성능지표인 FPS에 대해서 알아보도록 할게요.



<1. FPS>


FPS란 Frame Per Second라고 이야기 하는데요. 초당 frame 수라고 번역할 수 있겠네요. 예를들어, 1초당 9개의 frame이 내 눈앞에서 지나갔을 때와, 6개의 frame이 지나갔을때를 보면 frame이 더 많을 수록 움직임이 끊기지 않고 좀 더 자연스러워 보일거에요.



<사진1>






<2. Object Detection FPS>


영상(Video)이라는 것은 무수한 image들의 연속적인 집합이에요. 즉, 순차적인 이미지들이 모여서 하나의 영상을 구성하는거에요.


Object Detection에서의 FPS라는건 초당 detection하는 비율을 의미해요. 만약 초당 20개의 frame에 대해서 detection을 수행하게되면 20 fps이고, 초당 30개의 frame에 대해 detection을 수행하게 되면 30 fps가되요.


하나의 frame을 detection하는데 까지 걸리는 시간을 inference time이라고 해요. 그런데 만약 Object Detection 모델이 너무 방대해서 inference time이 길어지게 된다면 어떻게 될까요? 예를들어, 하나의 frame을 detection하는데 0.1초가 걸린다면 10 fps가 될거에요. 



우리가 Real Time이라고 느끼는 fps는 30 fps에요. 즉, 초당 연속적인 frame을 30개 이상 처리할 수 있으면 끊기지 않는 자연스러운 영상으로 인식하게 되는거에요. 


<알고리즘A 모델의 inference time이 더 길기 때문에 detection이 real-time으로 되지 않는것 처럼 보이는거에요>



그렇기 때문에 Object Detection 모델의 성능을 평가할때 (m)AP의 개념도 중요하게 쓰이지만 inference time도 못지않게 중요한 지표로 사용되고 있어요. (만약 자율주행자동차에 inference time시간낮은 오래걸리는 Object Detection 모델을 쓴다고 생각해보세요;; 하나의 frame을 처리하고 있는데 어떤 물체가 갑자기 뛰어든다면이에 대해서  detection을 못할 확률이 매우커지겠죠?)




2-1~2-3 까지 Object detection 모델을 평가할때 쓰이는 중요한 성능지표들에 대해서 알아보았어요. 다음글 부터는 차례대로 Object Detection history에 대해서 설명드리려고 합니다.




[사진 래퍼런스]

사진1

https://helpx.adobe.com/kr/animate/using/time.html

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

6. SPP Net  (2) 2020.02.05
5. RCNN  (0) 2020.02.05
4. DPM (Deformable Part Model)  (0) 2020.02.04
3. Object Detection과 CNN의 관계  (2) 2020.02.04
1. Object detection이 뭔가요?  (0) 2020.02.03

안녕하세요


이번 chapter에서는 Object detection에 대해서 알아보고 관련된 대표적인 모델들을 알아볼 거에요~


먼저 Object Detection(객체검출)이란 개념에 대해서 알아볼까요?







<1. Object Detection 이란>


CNN (Convolutional Neural Network) 모델이 하는일은 이미지를 classification (분류)하는 것이었어요. 그래서 어떤 이미지가 들어오면 해당 이미지 내의 객체들이 무엇인지 알려주었어요.


Object detection에서는 classification 뿐만 아니라 localization이라는 개념도 포함되어 있어요 (Object detection = classification + localization). Localization이란 객체라고 판단되는 곳에 직사각형(bounding box)를 그려주는거에요. 

<사진1>


만약 어떤 이미지를 입력했을때 그 결과가 해당 객체를 localization(bounding box) 해주고, 해당 box안에 있는 객체가 무엇인지 classification까지 해준다면 그것을 우리는 Object Detection(객체검출)이라고 해요. 



<사진1>






<2. Object detection 응용>



1) 자율주행


Object Detection을 이용한다면 자율주행도 가능해질 수 있을거에요. Object detection을 자동차에 적용하면 자동차는 '눈'을 갖을 수 있게되요. 그렇기 때문에 화면에 보이는 객체가 무엇인지 분별하여 주행을 상황에 맞게 할 수 있게될거에요. 






2) 군사목적


인공지능을 군사적 목적으로 사용하는것을 막고자 여러 노력들이 이루어지고 있지만 반대로 우리가 모르는 곳에서는 이러한 목적으로 연구를 비밀리에 진행하는곳이 많을거에요. 왜냐하면 인류 역사에서 전쟁을 지속적으로 있어왔고 전쟁을 이기기 위한 핵심은 기술이기 때문이에요. 혹여나 공격을 하지 않는다고 하더라도 방어를 위한 시스템은 구축해놔야 하기 때문에 object detection 기술은 유용하게 쓰일 수 있어요.


Object detection 기술이 있다면 미사일을 요격할 수 있는 확률도 올라가겠죠? 







3) 스포츠 분야


또한 스포츠 분야에서는 이러한 object detection을 통해 실시간으로 선수들의 상태나 능력치 등을 살펴볼 수 있고, 경기가 지속될 수록 데이터가 쌓여서 전술패턴도 분석하기 용이할거에요.







지금까지 Object Detection의 개념과 응용사례들을 알아봤어요!


다음글에서는 "딥러닝에서 Object Detection 모델을 학습시킬 때 어떤 데이터로 학습시키는지, Object Detection 모델은 어떻게 성능평가를 하게 되는지"에 대해서 알아보도록 하겠습니다~ 






[사진 래퍼런스]

사진1

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks-Part-2/

사진2

https://mikail0205.github.io/computer%20science/2018/05/20/CS231n-Computer-Vision/




'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

6. SPP Net  (2) 2020.02.05
5. RCNN  (0) 2020.02.05
4. DPM (Deformable Part Model)  (0) 2020.02.04
3. Object Detection과 CNN의 관계  (2) 2020.02.04
2-3. Object Detection 모델 평가지표 (FPS)  (6) 2020.02.04


안녕하세요~


이번시간에는 아나콘다를 통해 2개의 가상환경을 만들고 각각의 가상환경에서 pytorch, tensorflow를 설치하는법을 배워볼거에요~


Pytorch: Python 3.7버전/ CUDA 10.1 버전/  Pytorch=1.4버전


Tensorflow: Python 3.6버전/ CUDA 9.0 버전/ cuDNN 7.6버전/ Tesorflow GPU=1.8 버전








<1. Pytorch 가상환경>



1) Pytorch 가상환경 생성 (Python=3.7 버전)







2) 가상환경에 conda 패키지 설치 (이 작업을 하지 않으면 나중에 CUDA 설치할때 에러가 나더라구요)






3) CUDA=10.1, Pytorch=1.4 버전 설치

conda install pytorch==1.4 torchvision cudatoolkit=10.1 -c pytorch


(예전 버전 설치하려면 아래 페이지참고)

https://pytorch.org/get-started/previous-versions/


위의 명령어를 입력하면 아래와 같이 pytorch를 위한 패키지들이 설치될거에요.






4) 그외 추가적으로 아나콘다 패키지들을 설치해줍니다. 딥러닝을 할때 Pytorch에서 제공해주는 패키지 말고도 아나콘다에서 제공하는 패키지들을 쓰는 경우가 많기 때문에 '아나콘다 패키지'를 설치해주는거에요.



아래 데이터 사이언스에서 자주 쓰이는 pandas라는 패키지가 추가로 설치되는게 보이네요.






5) Pytorch 실행

- Pytorch 가 제대로 설치되어 있는지 확인 --> import torch

- 그외 cuda, cudnn 설치가 제대로 됐는지 확인 (pytorch 설치할때 cudnn을 따로 설치하지 않아도 cuda 버전에 맞는 cudnn이 자동적으로 설치되는거 같아요. 자세한건 아니지만요;; ㅎㅎ) 




##############################################################################


<2. Pytorch 가상환경과 Pycharm 연동>


일반적으로 IDE 툴(ex: Pycharm)을 이용해서 개발을 많이 하시죠? 

그런데 pytorch 가상환경 공간에서 pycharm과 같은 툴을 이용하려면 interpreter를 setting해주어야해요 (interpreter에 대한 설명은 따로 하지 않을게요~ )


1) 먼저 project 파일 만들어주기





2) File -> Setting





3) Project:CNN -> Project Interpreter -> 톱니바퀴 아이콘 클릭!






4) 톱니바퀴 모양 아이콘 클릭하고, show all 클릭!



  


5) '+' 아이콘 클릭



6) 자신의 가상환경 경로가 어디있는지 확인후 아래와 같이 설정해주고 'ok'버튼 클릭



(참고로 제 가상환경 경로는 아래와 같이 숨긴 폴더에 있었어요~)




7) 생성된 pytorch 가상환경 interpreter 선택및 ok 버튼 클릭





8) 아래 네모박스 부분이 현재 setting 중이라는 의미이며, 없어질때까지 기다렸다가  





다 없어지면 'Apply' -> 'Ok' 순으로 클릭





9) 아래 네모박스 부분은 progress bar를 의미하며 현재 pytorch 가상환경의 interpreter가 setting 중이라는 의미이기 때문에 없어질때까지 대기





10) python 파일 생성 후, pytorch 기본 코드 작성


아래와 같이 정상적으로 출력이 된다면 끝!


 











##############################################################################

<3. Tensorflow 설치하기>


1) Tensorflow gpu 버전을 아래와 같이 설치해주셔도되고 "conda install tensorflow-gpu"라고 해주시면 최신버전이 설치됩니다. 이때 설치되는 패키지 목록을 보시면 CUDA, cuDNN 모두 설치되기 때문에 따로 CUDA, cuDNN을 설치해줄 필요가 없어요!!!


[Note]

참고로 "conda install tensorflow" 처럼 gpu 버전이 아닌 tensorflow를 미리 설치하셨거나 추후에 설치되어 있으면 "conda uninstall tensorflow" 해주시고, tensorflow-gpu 버전을 따로 설치하세요. 왜냐하면 종종 tensorflow 패키지가 tensorflow-gpu 패키지를 override하여 tensorflow-gpu 패키지를 이용못하게 하는경우가 생기기 때문이에요!!!




2) CUDA 9.0 버전 설치


Note: 만약 CUDA 버전을 manually 설정해주고 싶은경우 아래와 같이 패키지를 설치해주시면되요!


conda install -c anaconda cudatoolkit=9.0








3) cuDNN 7.6 버전 설치


Note: 만약 CUDA 버전을 manually 설정해주고 싶은경우 아래와 같이 패키지를 설치해주시면되요!


conda install -c anaconda cudnn=7.6




4) Tensorflow 설치 되었는지 python을 통해 확인








5) Tensorflow GPU 확인 및 경고메시지 해결


Tensorflow GPU가 제대로 설치되어있는지 보려면 아래 그림과 같은 코드를 넣어주면되요. 


import tensorflow as tf

s = tf.constant("hello")

sess=tf.Session()


그럼 GPU 정보들이 출력될거에요 (출력된 메시지에 device:GPU:0 이라고 되어있는데, GPU가 없다는 뜻이 아니라 0번째 GPU에 할당되어 있다는 뜻이에요. 컴퓨터에 GPU를 여러개 설치해서 쓰시는 경우가 있으신데 이때 GPU 순서가 0, 1, 2 순서로 진행되요)


가끔 패키지가 여러개 깔리다 보면 최신버전의 패키지들이 설치되는 경우가 많아요. 그래서 아래와 같은 경고창이 뜨기도 합니다.


conda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\dtypes.py:519: FutureWarning: Passing (type, 1)


위와 같은 메시지는 자세히 보면 numpy 버전이 현재 tensorflow 1.8버전이 요구하는것 보다 더 높다고 경고메시지를 띄우고 있어요. 그래서 자신들이 높은 버전의 numpy 패키지를 낮은 버전의 numpy 패키지로 중간중간 코드를 변경하겠다는 메시지를 띄운거에요. 사실 경고메시지로 굳이 따로 신경쓰실 필요는 없는데 그래도 거슬린다고 하신다면 




아래와 같이 numpy 버전을 낮춰주시고


다시 아래와 같이 같은 코드를 입력해주시면 문제없이 출력되는걸 알 수 있어요.








8) 아나콘다 가상환경에서 tensorflow version upgrade하기


기존에 1.8 버전이 설치되어 있으다면



아래와 같이 2.0 버전으로 upgrade할 수 있습니다.













<4. VS code IDE를 아나콘다와 연동하기>



step1. VS code IDE 다운받기




step2. VS code IDE 설치해주기




Step3. VS code IDE 실행하기




Step4. Python 플러그인 Extension(확장)하기

이 플러그인을 통해, python interpreter, jupyter notebook, ipynb(주피터 확장자)와 py(파이썬 확장자)간의 자동코드변환 등을 할 수 있게됨





Step5. VS code IDE와 아나콘다 연동해주기

①ctrl+shift+p



②"python: select Interpreter" 클릭




③아나콘다에서 자신이 사용하는 tensorflow2 패키지 경로 확인후 (위에서 설치한 가상환경은 tensorflow 가상환경이지만, 저는 tensorflow2라는 가상환경을 하나 더 만들어준 후 VS code IDE 예제에 적용시켰습니다. 혼동하지마세요!)





④해당되는 경로 클릭






Step5. 작업공간 만들어주기

①바탕화면에 DL_project 폴더 생성해주기



②Open Folder 클릭 후, DL_project 경로 선택






Step7. 'test.ipynb' 파일 생성해주기

:ipynb 파일로 만드는 이유는 jupyter notebook 환경으로 코드를 작성하기 위함



파일 생성시, 아래 밑줄친 파일 클릭해야 주피터 실행화면이 생성됨




Step8-1. ipykernel 설치 (첫 번째 방법)

아래와 같이 'import tensorflow as tf'를 입력하고 실행('shift+enter')시키면 아래메시지 ("Data Science library ipykernel is not installed, install?")가 생성됨 --> yes 클릭






아래 코드가 실행되면 정상적으로 환경이 setting된 것!

(혹시 에러가 나는경우에는 조금 기다리시거나, VS code IDE를 재실행 해보시길 권장드립니다)




Step8-2. ipykernel 설치 (두 번째 방법)

"Step8-1. ipykernel 설치 (첫 번째 방법)"에서 설치 후, 코드가 정상적으로 동작하면 "Step8-2"는 무시해주세요!!


①anaconda prompot에서 해당 가상환경을 activate해준 후, ipykernel 설치해주기




②설치 완료 후, VS code "재실행" 해주고 아래 코드 실행하기



지금까지 가상환경을 설치하고 IDE 툴과 연동하는 방법들에 대해서 알아보았습니다!



[참고 사이트]

https://zereight.tistory.com/224

https://discuss.pytorch.org/t/cudatoolkit-9-2-unavailable/60488

https://gldmg.tistory.com/73

안녕하세요~


제가 이전글에서 했던 질문을 다시 가져와 볼게요.


"여러분이 진행하는 프로젝트에서 딥러닝과 관련된 프로그램을 3개(A,B,C) 정도 사용한다고 했을때 여러분의 PC는 하나라고 가정해볼게요. 그리고, 이미 CUDA 버전=9.0, cuDNN=7.0, 아나콘다=Python 3.6를 설치했다고 해볼게요. 그런데, 프로그램A에서는 이미 설치된 개발환경에서 무리없이 실행이되지만, 프로그램B (CUDA=10.0, cuDNN=8.0, python=3.7), 프로그램C (CUDA=10.2, cuDNN=8.0, Python=3.8)는 각각 요구하는 사항이 다르다고 한다면 어떻게 할까요? 프로그램을 실행할때마다 다시전부 삭제해주고 다시 설치하는 작업을 반복해야 하나요?"


만약 여러분이 위와같은 문제에 봉착한다면 프로그램A를 실행시키고, 프로그램 A에 있던 버전들을 모두 삭제하고 다시 다른 버전들을 설치하고나서 프로그램B or C를 실행시켜주어야 할거에요. 물론 여러 버전을 전부 설치해서 사용할 수는 있지만 이런 경우에는 프로그램 도중 버전들끼리 충돌하는 현상이 발생하여 여러 에러를 경험하게 될거에요.



하지만 여러분이 만약 아나콘다를 설치하신다면 위와 같은 문제를 쉽게 해결하실 수 있으실거에요. 왜냐하면 아나콘다는 '가상환경'을 지원(제공)하기 때문이죠.


만약 가상환경을 사용하시게 된다면 가상환경이라는 곳에 "가상환경A=CUDA 버전=9.0, cuDNN=7.0, 아나콘다=Python 3.6/ 가상환경B=CUDA 버전=10.0, cuDNN=8.0, 아나콘다=Python 3.7/ 가상환경C=CUDA=10.2, cuDNN=8.0, Python=3.8"라고 설정해주고 해당 프로그램들을 실행시켜주면 서로 버전들끼리 충돌도 생겨나지 않게된답니다.





<1. 아나콘다 가상환경 만들기>


여러분이 아나콘다를 설치하시면 아래와 같은 실행프로그램들이 생길거에요. 아나콘다 가상환경을 만드는데는 두 가지 방법이 있어요. 하나는 Command 방식인 아나콘다 Prompt를 이용하는것이고, 다른 하나는 Anaconda Navigator를 이용하는거에요.






1-1) Prompt 생성 및 패키지 설치


아나콘다 prompt를 실행하고, python 3.7버전의 test2라는 가상환경을 만들어 주었어요. 






가상환경을 활성화 해주고 현재 설치되어 있는 패키지들이 무엇이 있는지 살펴보았어요. 어? 그런데 numpy, pandas 같이 딥러닝에 필요한 패키지들이 없네요?





그래서 직접 가상환경에 제가 원하는 numpy라는 패키지를 설치했어요. 그리고 다시 확인해보니 numpy 패키지가 설치되어있는게 보이시죠? 이렇게 가상환경을 별도로 만들어주시고 원하는 패키지들을 설치하실 수 있습니다! ㅎㅎ








1-2) Naviator을 통한 가상환경 생성 및 패키지 설치


아나콘다를 통해 가상환경을 사용하는 또 다른 방법은 Navigator를 사용하는거에요. Navigator는 GUI로 되어있기 때문에 사용자들이 더 쉽게 사용하실 수 있을거에요. (아나콘다를 설치하면 자동으로 설치된답니다~)


먼저, Navigator를 실행시키고, Environment를 들어가서 Creat 아이콘을 클릭하여 가상환경 계정을 생성해줄 수 있어요.




그리고 생성한 계정의 재생버튼을 클릭하면 terminal을 오픈하면 Prompt에서 conda activate -n test2 라고 직접입력하지 않고서도 test2라는 가상환경이 활성화가되요!






현재 설치되어 있는 패키지는 기본적으로 python과 관련된 패키지들이에요. 





Not installed 로 들어가면 설치가되지 않은 패키지들이 나오는데요. 제가 pillow라는 패키지를 설치하고 싶다면 아래와 같이 검색해서 'apply'를 클릭하여 설치해주시면되요.





그리고 prompt에서 다시 확인하시면 제대로 설치가 되어있는걸 보실 수 있으실거에요.





이번엔 반대로 Prompt에서 설치한 패키지를 Navigator에서 확인해볼까요? 이전에 prompt에서 numpy를 설치했었죠? 아래 사진보니 잘 설치가 되어있네요. 그런데 조심하셔야 할 부분이 있는데, prompt에서 설치하고나서 바로 확인하려고 하니까 설치가 안되어 있다고 뜨더라구요 (조금 시간이 지나야 Navigator에서 패키지가 설치되었다고 확인할 수 있더라구요). 그래서 보통 기다렸다가 보시거나 한번 Navigator를 종료하고 다시 들어오시면 설치가 되어있는걸 확인하실 수 있으실거에요.









<2. 아나콘다 가상환경 삭제>


아래와 같이 입력해주면 가상환경이 삭제된답니다.






다음 시간에는 아나콘다 가상환경을 통해 Tensorflow와 Pytorch를 설치하는 방법을 알려드릴게요~


안녕하세요~


이번장에서는 딥러닝 개발환경에 대해서 알아보도록 할거에요.


개발환경이란 개념자체가 어려운건 아니에요. 


개발환경이란 말 그대로 내가 개발을 하려고 했을 때 필요한 환경을 말하는거에요. 그렇다면 환경이라는 것이 구체적으로 무엇을 의미할까요? 딥러닝 개발환경은 어떤 순서로 구축해야 하는걸까요?


(여기서는 설치방법에 대해서 따로 다루지 않을거에요. 설치방법은 인터넷에 검색하면 쉽게 나와있으니 그걸 그대로 따라하시면되요!)


설치순서: 운영체제(OS) -> CUDA -> cuDNN -> 프로그래밍 언어 or 패키지(Anaconda) -> Pytorch





1. Framework 설치하기


앞선 글에서 Framework에 대해서 설명드렸죠? 딥러닝 개발환경을 구축하기 위해서 제일 먼저 해야할 일은 내가 사용하고자 하는 Framework를 선정하는거에요.


저같은 경우에는 Pytorch를 딥러닝 Framework로 선정했어요.


"PyTorch 홈페이지 -> Get Started"로 들어가면 아래와 같은 화면이나와요. 보시면 Pytorch를 사용하기 위해 필요한 사항들이 나와있어요. 즉, Pytorch라는 딥러닝 framework를 사용하려면 아래와 같은 사양들이 필요한데, Pytorch, 운영체제, 패키지, 프로그래밍언어, CUDA 이러한 것들을 통칭하여 '딥러닝 개발환경'이라고 불려요.  


-운영체제

-패키지

-프로그래밍 언어(API)

-CUDA

<사진1>


그런데 Pytorch를 설치하면 이러한 사양들이 자동으로 설치가 되지는 않기 때문에 여러분들이 직접 설치를 해주시고 나서 Pytorch를 설치해주셔야해요.






2. 운영체제


여러분들은 보통 윈도우만 사용하셨을거에요. 그런데 딥러닝과 같은 작업을 할때는 심심치않게 리눅스 운영체제를 만나기도해요. 그렇기 때문에 종종 pytorch로 구현되어 있는 프로그램을 실행시키려고 하는데, 그 프로그램이 리눅스만 지원하는경우가 생겨요. 그래서 어떤 운영체제를 설치할까가 매우 중요하답니다.


<사진2. 윈도우>


<사진3. 리눅스>





딥러닝 개발환경을 구축하기 위해서 제일먼저 설치해야하는 요소라고 생각하시면되요!







3. CUDA


Compute Unified Device Architecture의 약자로 오늘날 많은 사람들은 'CUDA=병렬처리 시스템=GPU사용을 위한 툴' 이라는 인식을 갖고 있어요. 딥러닝이라는 학문이 보통 행렬연산이라든지 병렬처리가 필요한 구조로 되어있는 연산이 많다보니 GPU와 같은 device가 꼭 필요한 경우가 많아요.


그래서 NVIDIA라는 회사에서는 GPU라는 하드웨어를 만들고 이를 사용자가 쉽게 사용할 수 있도록 driver를 제공해줍니다. (보통 우리가 GPU를 그래픽카드라는 개념으로 많이 인식하고 있죠)


그래서 딥러닝 framework 진영인 pytorch나 tensorflow같은 곳에서는 최신 GPU driver 버전을 사용하도록 노력하고 있어서 지속적으로 버전을 업그레이드 하고 있어요.


<사진4>









<3. cuDNN 설치>


이상하게 Pytorch 홈페이지에서는 cuDNN을 설치하라는 말이 없죠? 하지만 NVIDA에서는 cuDNN (CUDA Deep Neural Network)라는 딥러닝을 위한 라이브러리를 따로 제공해줍니다. 


Pytorch에서는 cuDNN 라이브러리를 이용하는 기능(함수)들이 많기 때문에 cuDNN을 따로 설치해주는 것이 좋습니다.


<사진5>







<4. 프로그래밍 언어 or 패키지>


이제 Pytorch의 기반이 되는 프로그래밍 언어를 설치할거에요. 그런데, 이전글에서 설명했듯이 프로그래밍 언어를 설치한다는건 보통 python api, java api 등 을 설치한다는거에요. 그런데 이런 프로그래밍 api는 굉장히 기본적인 패키지들만 있어서 딥러닝을 위한 패키지들을 따로 설치해주어야해요.


이런 수고를 덜기 위해서 Data science (or 과학관련분야)에 필요한 패키지들을 따로 모아서 제공해주는 플랫폼인 '아나콘다'가 등장하게 됩니다.  


<사진6>



그래서 '아나콘다'를 설치하게 되면 Python API도 저절로 설치되면서 과학과 관련된 패키지들이 자동적으로 설치되는 셈인거죠! 


그래서 보통 딥러닝 하시는 분들이나 과학관련 업무를 하시는 분들은 '파이썬+여러 패키지'를 개별적으로 따로 설치하지 않고 아나콘다 하나만 설치해서 쉽게 프로그래밍을 하신답니다.





<5. 딥러닝 framework; Pytorch>


이제 모든것이 세팅되었으면 딥러닝 framework를 설치해주시면되요.


딥러닝 framework 종류(Tensorflow, Pytorch, Keras 등)에 따라서 개발환경이 달라져요. 하지만 대부분 '운영체제, CUDA, cuDNN, 아나콘다(Python)' 정도 설치해주시면 어떤 framework라도 쉽게 사용하실 수 있으실 거에요!


<사진7>





지금까지 '딥러닝 개발환경'에 대해서 알아보았어요! ㅎㅎ


그런데 제가 여기서 질문하나만 던져 볼게요.


여러분이 진행하는 프로젝트에서 딥러닝과 관련된 프로그램을 3개(A,B,C) 정도 사용한다고 했을때 여러분의 PC는 하나라고 가정해볼게요. 그리고, 이미 CUDA 버전=9.0, cuDNN=7.0, 아나콘다=Python 3.6를 설치했다고 해볼게요. 그런데, 프로그램A에서는 이미 설치된 개발환경에서 무리없이 실행이되지만, 프로그램B (CUDA=10.0, cuDNN=8.0, python=3.7), 프로그램C (CUDA=10.2, cuDNN=8.0, Python=3.8)는 각각 요구하는 사항이 다르다고 한다면 어떻게 할까요? 프로그램을 실행할때마다 다시전부 삭제해주고 다시 설치하는 작업을 반복해야 하나요?



이러한 문제점 때문에 대부분의 개발자들은 '가상환경'이라는 시스템을 이용한답니다. 그래서 다음글에서는 아나콘다를 활용하는 '가상환경'시스템에 대해서 알아보도록 할게요! 











[사진 래퍼런스]

사진1

https://pytorch.org/get-started/locally/

사진2

https://1boon.kakao.com/slownews/20161005n

사진3

https://namu.wiki/w/%EB%A6%AC%EB%88%85%EC%8A%A4

사진4

https://nyu-cds.github.io/python-gpu/01-introduction/

사진5

https://m.blog.naver.com/PostView.nhn?blogId=sogangori&logNo=220965933190&proxyReferer=https%3A%2F%2Fwww.google.com%2F

사진6

https://jjeongil.tistory.com/766

사진7

https://venturebeat.com/2020/01/30/openai-facebook-pytorch-google-tensorflow/

안녕하세요~


이번글에서는 '코딩'과 관련된 여러 용어들을 설명드리려고해요.


여러분이 만약 이제 코딩을 시작하신분이라면 '프로그래밍 언어'문법을 보시것만으로도 굉장히 힘드실거에요.


그런데 '프로그래밍 언어'를 시작도 해보기전에도 좌절하는 경우가 굉장히 많아요. 예를들어, 인문학만 하다가 프로그래밍을 처음했는데 직속상사가 "XX님 딥러닝 Framework 뭐써요?" 라고 물어본다면 멘붕이 오실거에요.


Framework는 또 뭐람.....


그래서 이번에는 Framework라는 개념을 이해하기 위해 필요한 여러 개념들에 대해서 알아보도록 할거요 ㅎㅎㅎ






<1. API>


여러분이 프로그래밍을 한다는건 컴퓨터와 대화를 한다는거에요. 컴퓨터는 기계기 때문에 전기신호만 받을 수 있어요. 그래서 전기신호가 켜진경우를 1, 꺼진경우를 0으로 간주하는 이진법체계위에서 발전해왔답니다.


<사진1>


우리가 컴퓨터를 하면 프린터, 모니터와 같은 출력장치와 키보드, 마우스와 같은 입력장치를 이용하게되죠? 그런데 우리가 아무생각없이 했던 이러한 행위가 실제 컴퓨터 본체에 있는 CPU라는 곳에 도달하게 되면 이진법으로 번역되서 전달되게되요. 



<사진2>


그러면 CPU는 또다시 그입력을 받아 본체 내부에 있는 memory(ram)를 통해 주변 장치들을 제어하게 된답니다.


<사진3>


<사진4>



그래서 초기에는 '010101000'과 같은 언어를 사용해야만 컴퓨터를 다룰 수 있었어요. 그런데 사람들이 사용하기 어려워서 컴퓨터를 멀리하려고 하자 조금더 쉬운 assembly lanugage라는 것이 나왔고, 오늘날 programming language라는 용어로 사용되는 좀더 고급(추상)언어인 java, C, python 같은 언어들이 만들어 졌어요.


<사진5>


하지만 컴퓨터를 실제로 제어하기 위해서는 '010100001'과 같은 이진법을 사용해야해요. 그런데 일반 사용자들이 이런것까지 만들 필요가 있을까요? 그리고 우리가 python과 같은 고급(추상) 프로그래밍언어를 사용할때 보면 우리가 코드를 입력하고 관련된 결과를 받게되는데요. 이렇게 입력과 출력을 하기 위해서 우리가 직접 관련기능(함수)들을 만들어 주어야 할까요? 아마 이렇게 되면 실제 입출력장치에도 접근해야하기 때문에 많은 시간들이 소요가 될거에요.


개발자들이 응용프로그램을 만들려고 할때마다 이러한 수 많은 작업들을 해야한다면 아마 많은 사람들이 포기할거에요. 그래서 여러 회사들은 개발자들이 응용프로그램을 만들기 위해 편하게 사용할 수 있는 인터페이스를 제공하는데 이것이 API (Application Programming Interface)에요.


회사들은 개발자들이 low level (01010과 같은 기계어) language와 assembly language를 직접 만들지 않고 고급(추상) 프로그래밍 언어만 간단하게 사용할 수 있게 사전작업을 하게되요. 그리고 이러한 사전작업을 마치면 회사들의 고유 API가 만들어 지는데 사용자들은 이를 이용해 간단히 프로그램을 만들 수 있게 되는거에요.


그래서 제가 python 언어를 사용한다는건 python API를 사용한다는 말과 같은거에요. abs(-10)이라는 언어는 절대값을 뱉어주는 함수에요. 아래와 같이 언어를 입력할 수 있는 것도 python을 만든 회사가 키보드를 통해 CPU로 값을 전달하는 과정과 모니터에 결과값을 출력해주는 과정에 필요한 low level, assembly level 작업들을 abs라는 함수에 내장시켜 준 것이지요.  



그런데 우리가 python api를 이용하려면 어떤 설명서 같은 것들이 있어야 하잖아요? 그래야 python 언어 문법도 이해하고, 함수가 뭐가 있는지도 알 수 있겠죠.


그래서 이러한 설명들을 모아둔 곳을 Document or Library라고 한답니다. 즉 설명서들을 도서관에 모아놓은 이미지를 생각하시면 될거에요. (Python API Library Link)


(API) document에는 사용자들이 자주 사용하거나 기본적인 연산을 다루는 함수들을 미리 만들어서 제공하기도해요. 그래서 따로 함수를 만들어줄 필요가 없게되는데요. 보통 이런 함수들을 '내장함수'라고 한답니다.


<사진6>






<2. Packages>


우리가 Python API를 사용한다고 해서 딥러닝에 필요한 기능들을 다 사용할 수 있을까요?


사실 Python API, Java API 같은 것들은 아주~~~ 기본적인 기능들만 제공하고 있기 때문에 Python API 만으로는 우리가 할 수 있는것들이 제한적이에요.


그래서 여러 분야에 있는 사람들은 이러한 기본적인 기능을 갖고 자신들의 분야에 맞추어서 새로운 것들을 만들기 시작했어요.


예를 들어, 행렬을 연산하려고 하는데 Python API는 너무 기본적인 연산만 제공하고 있고, 행렬연산을 매우 비효율적으로 하기 때문에 수치해석이나 이미지 분야와 같이 다차원의 행렬을 이용할 때 많은 문제가 발생할 수 밖에 없었어요. 그래서 이런 분야에 있는 사람들은 행렬연산을 할 수 있겠금 자신들이 Python API를 이용해 여러 함수들을 만들기 시작했는데요. 이렇게 해서 만들어진 것이 numpy package라는 거에요.


그래서 package라는 개념을 일반화해서 설명하자면 기본적인 Python API를 이용하여 자신들 분야에 맞는 함수들을 만들고, 이와 관련된 모든 함수를 하나의 package라는 큰 단위로 묶는거에요. 



Python API 자체도 여러 내장 함수들이 존재하기 때문에, 이와 관련된 package 도 존재할거에요. 하지만, 일반적으로는 Numpy와 같이 만들어서 사용하는 경우가 많아요. 그래서 Python을 설치하고 딥러닝 환경을 구축한다고 하면 딥러닝과 관련된 여러 package들 (ex: Numpy, Pandas, Scikit-learn ..) 을 추가적으로 설치해주어야 한답니다.





<5. Framework>


그럼 마지막으로 Framework에 대해서 알아보도록 할거에요.


우리가 앞서 Python API를 설치했다고 해볼게요. 그럼 우리가 이러한 Python API를 통해 딥러닝을 해본다고 가정합시다. 딥러닝은 하나의 학문 체계이기 때문에 굉장히 많은 수식과 개념들이 혼재되있어요. 그런데 이러한 개념들을 Python API로 하나씩 구현해주다보면 딥러닝을 하기도 전에 그만둘거에요.


그래서 딥러닝을 주력으로 하는 회사들은 자신들이 기본적인 틀을 제공해주고 사용자들은 이를 쉽게 이용하기만 하면되는 장치를 마련해주었는데 이것이 바로 Framework에요. 이러한 Framework는 여러 프로그래밍 API들 (C++, JAVA, Python API 등) 을 이용하여 딥러닝에서 사용되는 개념들을 함수로 만들기도하고, 딥러닝 체계에서 사용되는 프로그래밍 문법같은걸 따로 만들어서 학자들이 쉽게 프로그래밍 할 수 있도록 도와주었답니다.


어떻게 보면 API가 만들어지는 과정과 일맥상통하죠? 왜냐하면 사용자들이 구현하기 힘든부분을 회사들이 해결해주고 기능을 만들어주면 사용자들은 기능만 골라서 쓰면 되니까요 ㅎㅎ 그래서 보통 Framework를 API라는 용어랑 혼재해서 사용하기도 한답니다.





<6. Deep Learning Framework>


그렇다면 요즘 deep learning framework에는 어떤것들이 있을까요? 물론 많은 framework들이 만들어지고 있지만 역시 최근에 가장 이슈가 되는 framework은 Tensorflow(made by Google), Pytorch (made by Facebook)일 거에요.



<사진7>


<사진8>



어떤 Framework를 쓸지에 대해서는 좀 더 깊은 지식들이 필요하지만 보통 아래 원칙을 기준으로 선택을해요.


1. 사용하려고하는 Framework가 내 분야에서 효율적으로 동작하는것인가?

2. 사용하기 쉬운것인가?

3. 얼마나 많은 시장점유율을 갖고 있는가?


사실 Tensorflow가 굉장한 시장점유율을 갖고 있지만 최근 PyTorch가 좀 더 효율적이고, 사용하기 쉽다는 장점이 부각되면서 Tensorflow를 따라잡고 있는 추세라고 하던군요. 








다시 직장상사가 했던 질문 "XX님 딥러닝 Framework 뭐써요?"라고 물어보면 대답하실 수 있겠죠? ㅎㅎ






[사진 래퍼런스]

사진1

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0myQv&articleno=32

사진2

https://clipartstation.com/input-and-output-devices-clipart-11/

사진3

https://www.web-stt.com/2019/05/04/what-does-the-inside-of-your-pc-look-like/

사진4

https://www.computerscience.gcse.guru/theory/von-neumann-architecture

사진5

https://guide.freecodecamp.org/computer-science/assembly-language/

사진6

https://docs.python.org/3/library/functions.html

사진7

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

사진8

https://venturebeat.com/2020/01/30/openai-facebook-pytorch-google-tensorflow/

안녕하세요~


이번 시간에는 코딩을 배워야하는 이유를 설명드리면서 동기부여(?)를 해드리려고해요.



<1. 과거 - 컴퓨터의 등장>


여러분 아래 그림에 있는 도구가 무엇인지 아시나요? 바로 주판이에요~ 

예전에는 주판을 다루는 능력이 굉장히 중요하다고 생각하여 '주산학원'도 있었어요. 1970년대 전까지만 해도 은행에 들어가려면 2급 이상의 주산 자격증이 필요했다고 해요.


<사진1>

하지만 요즘 10대들은 저 그림을 보면 어디에 쓰는 도구일지 모를거에요 (사실 저도 주판 어떻게 사용할지 몰라요 ㅎㅎㅎ)


요즘은 계산을 어떻게 할까요? 


계산과정을 1도 몰라도 그냥 수식만 입력해주면 컴퓨터가 자동으로 계산을 해줍니다. 그렇기 때문에 계산을 빨리 정확하게 할줄 아는 능력이 중요한게 아니라, 얼마나 컵퓨터에 입력을 빨리 정확하게 하는지가 더 중요한 능력이 되는거죠.



제가 1970년대로 돌아가 "여러분은 일하실 때 컴퓨터를 사용하시나요?"라는 질문을 던지면 대략 80%(2:8) 비율로 컴퓨터를 사용하지 않는다고 이야기 하실거에요.


하지만 1980년대로 돌아가 다시물어보면 3:7, 1990년대에는 4:6, 2000년대에는 5:5 로 대답하실거에요. 2010년에는 6:4 정도로 이제는 대다수의 사람들이 컴퓨터를 사용하는 시대가 도래했겠네요. 


그런데 여전히 6:4라고 하면 컴퓨터 사용하지 않는 사람들이 많은거 아니냐라는 말을 하실 수 있으실거에요.


그래서 제가 질문을 다시 바꿔 볼게요 ㅎㅎㅎ

"현재 여러분은 컴퓨터와 스마트폰을 사용하시나요?"

아마 경제활동을 하는 분들 같은 경우 위 질문을 받으셨을 때 9:1 정도의 비율이 나오지 않을까 싶어요. 


제가 이런 질문들을 던지는 이유는 현재 대다수의 서비스는 컴퓨터와 핸드폰 위에서 이루어진다는 사실이에요. 내가 사업을 하더라도 사람들에게 먼저 눈에 띄어야 하는데, 그 수단이 접근성이 뛰어난 핸드폰과 컴퓨터면 더욱 효율적이지 않을까요?











<2. 현재 - 일상생활에서의 변화>


흔히 영어를 잘하면 인적 네트워크가 더 댜양해 진다고 하죠?


그렇다면 코딩을 할 줄 알면 무엇이 더 다양해질까요? 





두 가지 영상을 보시면 기본적으로 삼성이나 LG에서 제공하는 제품들만 써야할 것 같죠? ㅎㅎ 물론 엄청 비싼가격으로 말이죠 ㅎㅎ


그런데 여러분이 코딩을 할 줄 아신다면 더 싸고 좋은 제품을 구매할 수 있어요. 구입한 물건에 코딩을 하여 여러 기능들을 자신의 편의에 맞게 수정하여 사용할 수 있게되요. 서로 기계들끼리도 연결을 시킬 수 도 있으니까 더 좋겠죠? ㅎㅎㅎ



또한 코딩을 할 줄 아시면 여러분들이 직접 1인 사업을 시작할 수 있으실거에요.


예를들어, 내가 좋은 아이템이 있어서 물건을 올리고 싶으면 HTML, CSS 라는 프로그래밍언어를 이용해 홈페이지를 만들고 데이터베이스를 구축해야해요. 하지만, 일반적으로 불가능 하니까 그냥 업체에 부탁하고 일정 금액을 지불하는데 매번 문제도 생겨서 AS도 받아야 하고, 원하는 기능을 추가하려고 할때 또 추가금액도 주어야하고 하니 매번 사이트를 운영하는게 보수적으로 바뀔거에요. 그렇다면 소비자의 니즈를 빠르게 충족시키지 못하실 가능성도 크게 되는거죠!


<사진2>


보통 코딩이 어렵다고 생각하셔서 도전을 안하시는 분들이 많으세요. 그런데, 만약 그 코딩이라는 것이 생각했던것보다 쉽다면 어떻게 하시겠어요? 아니, 어렵다고 하더라도 내 분야에 어떤 사람이 코딩을 배워 시장을 독식하는 모습을 모시면 어떻게 하시겠어요? (조금 어조가 강한듯 하네요 ㅜㅜㅜㅜㅜㅜ)









<3. 미래 - 산업계에서의 변화>


지금도 굉장히 많은 사람들이 코딩을 배워야 하지만 정말 미래에는 배우지 않으면 살아남지 못할 가능성이 있지 않나 싶어요. 


미래를 예측하는 가장 좋은 방법은 현재 산업계가 어떻게 변화해가고 있나를 파악하는거에요. 그리고 가장 핫한 키워드는 딥러닝이죠.


1) 의학


최근 의료산업계는 딥러닝을 적용하여 새로운 변화를 시도하고 있어요. 특히 구글은 AACR18 이라는 암학회에서 기조연설을 했어요. 이들이 발표한 내용에 따르면 자신들의 모델이 굉장히 저명한 의사들이 내린 진단과 유사한 판단을 내렸다고 해요. 



<사진3>


최근에는 의사들보다도 더 뛰어난 성능을 보이는 모델들이 나오고 있는데요. 만약 구글이 의사들의 영역이였던 이런 부분들을 스마트폰으로 쉽게 서비스화 한다면 어떻게 될까요? 이렇게만 된다면 우리는 세계에서 굉장히 저명한 의사를 주치의로 두게 될거에요.



2) 비즈니스


사실 의료분야 뿐만아니라 지금 Data science, Machine Learning, Deep Learning을 통해 다양한 마케팅 기법이 생겨나고 있어요. 그래서 기업들이 최근 위와 같은 이력을 갖고 있는 사람들을 더 우대하려고 하고 평균적으로 높은 연봉을 지급하고 있어요. 이러한 능력을 갖고 계신분들은 사실 이직도 어렵지 않게 할 수 있고 개인이 스스로 비지니스 모델을 만들 수 도 있으니 굉장한 이점을 갖게 되는거죠.




3) 스포츠


사실 예술, 스포츠 분야에서도 여러기술을 통해 발전할 소지들이 많아요. 


예를들어, 축구경기를 한다고하면 실시간으로 경기를 분석하여 선수들의 체력과 움직임 패턴등을 분석할 수 있어요. 그래서 실제 경기도중에도 작전을 변경할 수 있고, 데이터가 쌓이면 전술을 짜는데 굉장히 도움이 많이 될거에요. 그외에 선수들 관리하는 것까지 이러한 기술들을 이용한다고 하네요 ㅎㅎ (뭰헨이 이런 프로그램에 적극적인가봐요. 벌써 몇번 기사를 본거 같아서 ㅎㅎ)



야구는 말할 것도 없는 분야죠. 머니볼이라는 영화에서도 잘 나와있지만 빅데이터를 이용해서 분석하고 새로운 지표를 만들어내어 팀을 완전히 탈바꿈시키기도해요.









지금까지 다룬 내용들을 보시면 굉장히 흥미로운 이야기들이 많으실거에요. 


하지만, 이러한 일들을 하기 위해선 '코딩'이 필수적이에요. 코딩을 어느정도 알고 프로그램 툴을 다루는것과 그렇지 않은 것에는 많은 차이가 있어요. 


보통 영어라는 외국어를 알면 다른 언어들도 쉽게 배울 수 있다고 하죠? 같은 맥락으로 프로그래밍 언어 하나만 배우면 다른 프로그래밍 언어를 접근하실때 거부감이 생기진 않으실거에요. 그렇기 때문에 꼭 프로그래밍 언어 하나라도 배워보시는걸 추천해요! ㅎㅎㅎ



<사진4>







[글 래퍼런스]

AACR18 기사

https://m.medigatenews.com/news/2012584533


[사진 래퍼런스]

사진1

http://m.blog.daum.net/yup/14?tp_nil_a=2

사진2

https://m.gettyimagesbank.com/view/mock-up-design-website-flat-design-concept-digital-marketing-content-marketing-vector-illustration/963201500

사진3

http://www.yoonsupchoi.com/2018/04/24/aacr18-google/

사진4

https://www.quora.com/Why-is-learning-programming-important


안녕하세요~ 


'딥러닝 개발환경' chapter는 실제로 딥러닝 이론을 적용해 프로그래밍하려고 하시는 분들을 위해 만들었어요.


'프레임워크', '패키지', '가상환경' 등 여러 용어들이 나오는데 처음 프로그래밍을 접하시는 분들이 의외로 많으시더라구요. 


또한 딥러닝을 통해 개발을하려고 하시는 분들을 위해 여러 서비스들이 지속적으로 개발되어 있기 때문에 관련 툴을 잘 이용하시면 더욱 도움을 될 것 같아 이 챕터를 개설하게 되었어요 ㅎㅎㅎ 


또한 개발을 하시다보면 여러 에러에 부딪히게 되는데 그때마다 관련 내용들을 다룰예정이에요.


사실 제목을 딥러닝 개발환경이라고 했는데, 앞으로 딥러닝 뿐만 아니라 자신이 다른 목적으로도 개발을 하실 수 있기 때문에 범용적인 내용들이 다루어 질거에요. 그렇기 때문에 더 많은 분들이 이 챕터를 보시고 쉽게 개발을 접하실 수 있도록 많은 도움을 드리고자 합니다.


그렇다면 이제 차근차근 알아보도록 하겠습니다~




안녕하세요 이번 글에서는 Transfer learning에 대해서 설명해보려고 합니다.

 

먼저 transfer learning이 무엇인지 설명을 드리는것이 맞으나 이번 글에서는 transer learning을 적용할 때 고려해야할 상황에 대해서만 언급하겠습니다. (시간적인 여유가 있으면 transfer learning에 대한 설명을 추후 업데이트 하겠습니다)

 

 

아래 사이트의 설명을 빌리면 transfer learning을 적용할 때는 크게 4가지 상황을 고려하여 fine-tuning 정도를 결정해야 한다고 합니다. 그렇다면 4가지 상황에 따라 어떻게 fine-tuning 정도를 결정하는지 알아보도록 하겠습니다.

 

https://cs231n.github.io/transfer-learning/

 

CS231n Convolutional Neural Networks for Visual Recognition

(These notes are currently in draft form and under development) Table of Contents: Transfer Learning In practice, very few people train an entire Convolutional Network from scratch (with random initialization), because it is relatively rare to have a datas

cs231n.github.io

 

해당 글은 아래 링크를 설명들을 참고했습니다.

https://analysisbugs.tistory.com/103

 

[신경망] 17. Transfer Learning

안녕하세요. 이번 포스팅에서는 Transfer Learning 에 대해서 배워보도록 하겠습니다. ​ 기존의 기계학습 알고리즘에서는 2개의 훈련 데이터셋을 학습할 때, 비록 2개의 데이터셋이 비슷한 특징을

analysisbugs.tistory.com

 

 

 

1. Small dataset and similar to the pre-trained model`s dataset

  • 데이터가 적기 때문에, 전체 네트워크에 대하여 fine-tuning을 하면, over-fitting 문제가 발생합니다.
  • pre-trained model 학습에 사용된 데이터와 transfer learning을 적용시킬 학습 데이터가 유사합니다. 즉, pre-trained model의 conv filter들이 transfer learning에 적용할 데이터들의 특징들을 모두 잘 추출할 수 있다는 뜻이기도 합니다.
  • 위와 같은 이유로 인해, FC layer에 대해서만 Fine-tuning을 진행합니다. 다시말해, Conv layer의 학습을 막기 위해서 gradient 값을 통해 update를 하지 못하게 해야합니다. 
  • 보통 learning rate를 기존에 pre-trained 된 네트워크의 learning rate 1/10의 값으로 사용합니다. 왜냐하면, 높은 값의 learning rate를 사용하면, 기존에 있던 정보들은 새로운 데이터 셋에 맞춰서 급격히 업데이트 되기 때문입니다. 

그림1. 이미지 출처:  https://analysisbugs.tistory.com/103

 

 

 

 

2. Large dataset and similar to the pre-trained model`s dataset

  • 데이터가 충분하기 때문에 fine-tuning을 적용 시 over-fitting의 위험이 없습니다.
  • 하지만, pre-trained model 학습에 사용된 데이터와 transfer learning을 적용시킬 학습 데이터가 유사하기 때문에 초기 layer들을 학습할 필요가 없습니다. 왜냐하면, edge, texture 와 같은 특징들도 대부분 유사할 것이기 때문이죠.
    • 예를 들어, 축구공 종류를 classification 하기 위해 학습된 딥러닝 모델을 핸드볼공 종류를 classification 하는데 사용한다고 생각해보면 금방 이해가 되실 겁니다. 
  • 추가적으로 학습 시간도 줄여주기 위해 아래와 같이 freezing 정도를 설정해주어 학습시켜줍니다.

그림2. 이미지 출처:  https://analysisbugs.tistory.com/103

 

 

 

 

3. Large dataset and different from the pre-trained model`s dataset

  • Pre-trained model 학습에 사용된 데이터와 transfer learning을 적용시킬 학습 데이터가 다르기 때문에 pre-trained model의 conv filter들이 transfer learning에 적용할 데이터들의 특징들을 잘 추출해 줄 수 없습니다.
  • 그렇기 때문에 전체 네트워크를 학습 시켜야 합니다.
  • 데이터도 충분히 있으니 overfitting의 위험도 피할 수 있습니다.

그림3. 이미지 출처:  https://analysisbugs.tistory.com/103

 

 

 

4. Small dataset and different from the pre-trained model`s dataset

  • Pre-trained model 학습에 사용된 데이터와 transfer learning을 적용시킬 학습 데이터가 다르기 때문에 pre-trained model의 conv filter들이 transfer learning에 적용할 데이터들의 특징들을 잘 추출해 줄 수 없습니다.
  • 그래서 전체 네트워크를 학습시켜야 하는데, 데이터셋이 얼마 없기 때문에 네트워크 전체를 학습시키면 overfitting이 일어날 확률이 생깁니다.
  • 위와 같은 문제를 절충하기 위해 아래와 같이 freezing 정도를 설정해주어 fine-tuning을 적용해 줍니다.

 

그림2. 이미지 출처:  https://analysisbugs.tistory.com/103

 

 

 

 

'Deep Learning for Computer Vision > Convolution Neural Network (CNN)' 카테고리의 다른 글

12. Precision, Recall, F1 score (Feat. TP, FP, FN, TN)  (4) 2020.07.19
10. DensNet  (0) 2020.01.17
9. ResNet  (12) 2020.01.17
8.GoogLeNet (inception v1)  (2) 2020.01.17
7. VGGNet  (5) 2020.01.17

안녕하세요~


이전글에서 나온 ResNet을 끝으로 ILSVRC 대회는 막을 내리게 되었어요. 하지만 여전히 CNN 연구는 지속적으로 진행되어 왔답니다. 


Top-5 error rate은 굉장히 적은 수준이지만 여전히 top-1 error는 높은 수준에 해당해요. 그래서 CNN 연구는 앞으로도 지속될거라고 생각이 들어요.


원래 이번장에서는 ResNet 다음에 주목을 받은 DenseNet에 대해서 글을 쓸 계획이었으나, 현재 업무과 과중된 상태여서 아래영상으로 우선 대체하고 나중에 리뷰할 기회가 있으면 하려고해요.



해당 영상은 전 홍콩과기대 교수님이자 현재 Naver Clova AI의 수장을 맡고계신 김성훈 선생님께서 AlexNet 부터 DenseNet 까지 쉽게 요약하신글이니 참고하시면 좋을 것 같습니다!







  

+ Recent posts