PyTorch

PyTorch 초보자를 위한 Transfer Learning Tutorial 예제 구글 Colabo GPU 처리

coding art 2020. 6. 3. 19:37
728x90

구글 Colabo 즉 Colaboratory에서 PyTorch의 Transfer Learning 예제 문제를 실행시켜 보자. Transfer Learning이란 imageNet 의 주어진 1000개의 카테고리 클라스를 대상으로 특정한 image classification 네트워크를 사용하여 상당한 컴퓨팅 시간을 사용해 학습 후 학습 된 binary 상태의 웨이트 매트릭스 결과를 저장하였다가 필요할 때에 불러 사용하게 된다. 한편 사용자가 불러 사용할 때에 자신이 준비한 소량의 테스트 데이터만 있을 경우에는 사전 학습된 웨이트 매트릭스를 동결(frozen)된 상태 그대로 사용할 수 가 있는 반면에 사용자가 준비한 업데이트용 학습 데이터가 소량 있을 수 있으므로 이들을 추가하게 되면 동결(frozen)된 웨이트 매트릭스가 약간 변동이 있을 것으로 예상되므로 feature extraction 작업을 위한 CNN 단계에서 fine tunning 작업이 필요할 수도 있을 것이다.

PyTorch 예제인 ants 와 bees 식별 문제에서는 특정한 네트워크로서 2017년 ILSVRC 컨퍼런스에서 발표된 ResNet18 의 사전 학습된 결과를 사용한다. 일반 윈도우즈10 PC에서 쥬피터 노트북을 사용하여 실행할 경우 적어도 40분 이상의 시간이 소요된다.
https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html
반면에 구글에서 무료로 GPU 지원을 받을 수 있는 Colabo에서 실행한다면 3분 이내에 실행이 가능하다. 단 한가지 구글 Colabo 는 별도의 가상 머신에 해당하므로 학습용 및 테스용 데이터 폴더를 사전에 구성해 주어야 한다. 나머지는 PyTorch 홈의 예제 튜토리얼에서 셀별로 코드를 Cntr+C Cntr+V 하여 붙여넣기 한 후 실행하면 되는 것이다.

Colabo에서 PyTorch를 사용함에 있어서 별도로 라이브러리를 설치할 필요는 없는 듯하다. 아니면 예전에 이미 스스로 설치 후 잊어버리고 있을 수도 있다. Pytorch에서 가장 중요한 라이브러리로서는 torch 와 torchvision을 들수 있으며 다음과 같이 버전을 체크해 볼 수 있다. 만약 설치가 안되 있다면 !pip install torch 또는 !pip install torchvision 명령을 실행하면 된다.

라이브러리 설치 문제는 해결은 다 되었지만 아직도 미스테리로 남아 있다. 아나콘다 설치 시에 바인딩 문제로 인해 가상환경을 설정하고 여기에다 Python3, TensorFlow, Pandas, NumPy, Matplotlib, Keras 등을 기본적으로 설치해야 한다. 하지만 구글 Colabo에서는 웨만한 라이브러리들이 쉽게 이용할 수 있도록 웬만큼 설치가 다 되어 있으므로 그냥 import 명령을 사용하면 되는 듯하다.

한편 PyTorch 예제를 실행시키려면 코드와 아울러 데이타 폴더가 준비되어야 한다. 우선
아래 그림에서처럼 PyTorch 튜토리얼의 Load Data 파트의 하이퍼링크 here에서 hymenoptera zip 파일을 다운받아 압축을 해제하자. hymenoptera는 곤충을 대상으로 대규모로 이미지를 모아 둔 개러리이지만 이 예제에서는 각 100종 미만의 작은 수의 샘플들이 담겨 있다.

hymenoptera zip 파일 압축을 해제하면 다음과 같은 폴더 구조를 얻을 수 있다. 이 폴더 구조를 그대로 구글 Colabo에서 데이터 업로딩 기능을 사용하여 가져 오기로 하자.

다음 그림에서처럼 업로드 아이콘을 눌러 전체 폴더 구조를 살펴보기로 한다. sample_data 의 위치를 살펴보면 된다. 화살표 친 위치에 필요한 폴더를 생성하고 hymenoptera 데이터를 업로딩 시키면 된다.

다음과 같이 새폴더 기능을 사용하여 생성 후 폴더 명을 지정한다

다음과 같이 처리한다. 한편 PyTorch 튜토리얼에서 복사해 온 코드dp /content/∙∙∙ 대신에 data/∙∙∙ 로 되어 있으면 반드시 수정해야 한다. 그 이유는 PyTorch 예제에서 구글 Colabo에서 실행하는 것을 전제로 코딩한 것이 아니기 때문이다. 한편 구글 Colabo 에서는 이미 Default로 만들어져 있는 폴더 content/ 에 데이터를 넣도록 하자.

hymenoptera_data 폴더에서 하위 폴더인 trainval을 생성하고 아울러 각각 하부에 ants bees 폴더를 생성 후 업로드를 크릭하면 사용자 PC 의 파일 탐색기가 나타난다.

해당 폴더에서 Shift 키를 이용해 전체 이미지 데이터를 긁어 활성화 시킨 후 Enter 하면 업로딩이 시작된다. 다음은 ants 의 이미지 데이터가 업로딩 된 결과이다. 나머지도 마저 업로딩 하자.
그러면 PyTorch 예제를 실행할 준비가 거의 다 된 듯하다. 실행하기 전에 런타임에서 런타임유형변경을 통해 반드시 GPU를 세팅해 두도록 한다.

첫 번째 셀에 라이브러리들을 import 하는 명령들을 가져다 실행시킨다.

이어서 두 번째 셀에서 데이타 transform 작업을 준비하는데 이때에 준비해둔 데이타 폴더를 다음 그림에서처럼 정확하게 지정해 주어야 한다. ‘data/∙∙∙대신에 ‘/content/∙∙∙로 수정한다. ‘/content’ default Colabo 에 들어 있는 듯하다.

그 나머지를 셀별로 복사해 붙인 후 실행하면 결과를 볼 수 있다.
현재 GPU 가 디바이스로 연결되어 있는지 의문스러우면 다음의 명령을 실행해 보자. cuda 디바이스가 0으로 잡히면 정상적으로 GPU 실행이 되고 있는 상태다.

다음은 imshow 명령에 의한 샘플 데이터 4개의 출력 결과이다.

다음에 실행 된 셀은 사전 학습(pretrained)ResNet18 의 결과를 가져 오는 과정이다.

GPU 컴퓨팅의 백미는 25회에 달하는 epoch 처리과정으로서 PC에서 근 40분 걸리는 작업을 143초면 실행 가능하며 상당히 효율적이다. 한편 GPU가 떄때로 제대로 작동하지 않는 경우가 흔히 있으며 다음 예제에서처럼 Acc(uracy) 90% 이상으로 학습되지 않는 경우도 발생하는데 클레임 제기가 안되므로 다른 날 실행 시켜보도록 하느 것이 좋을 듯하다.