카테고리 보관물: Deep Learning

TensorFlow 1.3.0 RC0 Release

텐서플로 1.3 RC0 버전이 릴리즈되었습니다. 많은 기능이 추가되고 개선되었습니다. 자세한 내용은 릴리즈 노트를 참고해 주세요. 텐서플로 RC 버전은 pip 명령에서 --pre 옵션으로 설치할 수 있습니다.

$ pip install --upgrade --pre tensorflow

$ pip install --upgrade --pre tensorflow-gpu

얼마전부터 아나콘다에도 텐서플로 패키지가 포함되었습니다. 아직 최신 버전은 아니지만 간격이 점차 좁아질 거라고 기대해 봅니다.

$ conda search tensorflow
Fetching package metadata .........
tensorflow    1.1.0    np112py36_0    defaults
              1.1.0    np112py27_0    defaults
              1.1.0    np112py35_0    defaults
$ conda search tensorflow-gpu
Fetching package metadata .........
tensorflow-gpu    1.1.0    np112py36_0    defaults
                  1.1.0    np112py27_0    defaults
                  1.1.0    np112py35_0    defaults
$ conda install tensorflow

TensorFlow 1.2.1 Release

텐서플로 1.2.1 버전이 릴리즈되었습니다. 이번 릴리즈는 주로 버그 수정입니다. 특히 드롭아웃 비율을 텐서로 지정할 때 생기는 버그를 수정하였습니다.

1.2.1 버전도 pip 명령으로 간단하게 설치할 수 있습니다.

$ pip install --upgrade tensorflow
$ pip install --upgrade tensorflow-gpu
  • macOS: Python 2.7, 3.3, 3.4, 3.5, 3.6
  • Linux: Python 2.7, 3.3, 3.4, 3.5, 3.6
  • Windows: Python 3.5, 3.6

TensorRT, NNabla, deeplearning.ai, CMU AI and Naver

NVIDIA가 딥러닝 인퍼런스inference 전용 라이브러리인 TensorRT 2를 공개하였습니다. TensorRT 1에서 제공했던 카페Caffe와 텐서플로TensorFlow까지 지원을 확대했습니다. 곧 TensorRT 3 버전도 선보일 거라는 군요. TensorRT는 데비안 패키지로 제공되며 NVIDIA 개발자 계정이 있으면 다운받을 수 있습니다. 조금 더 자세한 내용은 릴리즈 노트를 참고하세요.

소니Sony(네 우리가 아는 소니가 맞습니다:)가 오픈소스 뉴럴 네트워크 라이브러리 NNabla를 공개했습니다. @.@ 여러 사람들이 당황하는 것을 보아서는 확실히 의외인 것 같습니다. NNabla는 파이토치PyTorch나 다이넷DyNet처럼 다이나믹 컴퓨테이션 그래프를 지원하며 준수한 API를 가지고 있다고 회자되고 있습니다. NNabla가 쟁쟁한  공룡들 사이에서 얼마나 자리를 잡을지 궁금합니다. 소스 코드는 깃허브에서 볼 수 있습니다.

앤드류 응Andrew Ng이 바이두 리서치를 떠나서 Drive.ai에 합류했다는 소식입니다. Drive.ai는 앤드류의 부인이 하고 있는 자율 주행 관련 회사입니다. 앤드류가 바이두를 떠났을 때 여러 사람들이 Drive.ai에 합류할 것이라는 예상을 했었죠. 앤드류는 이와는 별개로 새로운 프로젝트 deeplearning.ai 를 런칭한다고 공개했습니다. 8월에 본 모습을 드러내겠지만 ‘Explore the frontier of AI’, ‘Hope will help many of you’ 와 같은 문구를 봐서는 조금 공익적인 프로젝트가 아닐까 내심 기대해 봅니다.

애플에 합류한 러슬랜 살라쿠디노프Ruslan Salakhutdinov 교수가 있는 카네기 멜론 대학이 응집력있는 연구를 위해 CMU AI를 설립한다고 발표했습니다. 토론토 대학, 몬트리올 대학, 스탠포드 대학 등 연구소도 경쟁인 것 같습니다.

그리고 네이버가 제록스 유럽 연구소를 인수했다는 뉴스도 있습니다. 부디 그들만의 리그가 되지 않기를 바랄 뿐입니다.

TensorFlow 1.2.0 Release

텐서플로우 1.2.0 버전이 릴리즈되었습니다. 1.2.0 버전부터 윈도우즈에서 파이썬 3.6을 지원하고 conv3d_transpose API 가 추가되는 등 여러 변화가 있습니다. RNNCell과 관련된 변경사항은 이전 포스트를 참고해 주세요. 1.2.0 버전에 인텔의 MKL 라이브러리가 텐서플로우에 추가되었다는 소식입니다(일명 MKL-DNN). GPU 없이 CPU만으로 쓰는 경우 어느 정도 성능 향상이 될 것 같습니다. 1.2.0 버전 이후에는 cuDNN 6.0이 기본으로 채택됩니다.

그 외 자세한 내용은 텐서플로우의 릴리즈 노트를 참고해 주세요. 1.2.0 버전이 이미 PyPI에 등록되어 있기 때문에 pip 명령으로 간단하게 설치할 수 있습니다.

$ pip install --upgrade tensorflow

$ pip install --upgrade tensorflow-gpu
  • macOS: Python 2.7, 3.3, 3.4, 3.5, 3.6
  • Linux: Python 2.7, 3.3, 3.4, 3.5, 3.6
  • Windows: Python 3.5, 3.6

Urban Sound Classification Update

(업데이트)아래 훈련 세트와 테스트 세트를 사용하여 간단한 모델을 만들어 보았습니다. 훈련 데이터에서 62.8%(주피터 노트북 참고), 테스트 세트에서 56.5%(주피터 노트북 참고) 정확도를 얻었습니다. 나중에라도 구글 클라우드를 쓸 기회가 있으면 파라미터 탐색 범위를 늘려서 한번 시도해 보겠습니다. ^^

(업데이트)이 글에서 작업한 훈련 세트와 테스트 세트의 분류가 잘못되었습니다. 테스트 세트와 훈련 세트가 같은 소리의 샘플을 가지고 있습니다(문제점을 찾아주신 최근우님께 감사드립니다). 예를 들면 한 강아지로 부터 몇 개의 소리가 녹음되어 있습니다. 이런 경우에 이 소리가 훈련 세트와 테스트 세트로 나뉘어져 들어가면 정확한 추정이 되지 못합니다. 새로운 데이터는 완전히 새로운 강아지의 목소리일 것이기 때문입니다. 이와 비슷한 경우의 예로는 의료 영상 같은 분야입니다. 한 환자의 영상이 테스트 세트에 섞여 들어가면 과도하게 낙관적인 추정을 얻게됩니다. UrbanSound8K의 사운드 추출 데이터를 레이블이 섞어지 않도록 scikit-learn의 GroupShuffleSplit를 사용하여 훈련 세트와 테스트 세트로 나누어 깃허브에 올려 놓았습니다. 이 데이터셋으로 도전해 보도록 하겠습니다. 🙂

UrbanSound8K 데이터를 이용해 10가지의 소리를 분류하는 Urban Sound Classification의 코드를 텐서플로우 1.1 버전에 맞추어 업데이트했습니다. 이전과 달라진 점은 레이어의 노드를 증가시켰고, 텐서플로우의 매트릭스 연산자를 사용하지 않고 조금 더 상위 API인 dense, softmax_cross_entropy_with_logits 등을 사용한 것과 기본적인 경사 하강법 말고 0.0001의 학습속도로 Adam 옵티마이저를 사용한 점 등입니다. 여러번 하이퍼파라미터 튜닝을 하기 위해 특성 데이터를 훈련용과 테스트용으로 나누어 놓고 작업을 시작했습니다.

urban_sound_train

훈련은 Urban Sound Classification-Train.ipynb 파일에, 테스트는 Urban Sound Classification-Test.ipynb 에 있습니다. 학습 결과는 훈련 데이터에서 92.6%, 테스트 데이터에서 92.8% 입니다. 결과를 보아서는 확실히 언더피팅 상태로 보입니다. 훈련 데이터에서 조금 더 성능을 끌어올릴 여지가 있을 것 같지만 다른 일들 때문에 여기서 일단 멈추었습니다. 나누어진 훈련 데이터와 학습된 파라미터는 깃허브에서 볼 수 있습니다.

TensorFlow 1.2.0 RC2 Release

텐서플로우 1.2.0 RC2 버전이 릴리즈 되었습니다. RC2에서부터 윈도우즈 파이썬 3.6 버전을 지원합니다. 이제 윈도우에서 아나콘다를 설치하고 따로 파이썬 3.5 환경을 만들었던 번거로움이 사라졌습니다. 또 1.2 버전이 cuDNN 5.1을 사용하는 마지막 버전이 되었습니다. 1.3 버전부터는 cuDNN 6.0을 기준으로 wheel을 생성합니다. 하지만 텐서플로우 소스 코드는 cuDNN 5.1과의 호환성을 유지합니다. cuDNN5.1을 반드시 사용해야 하는 경우라면 직접 빌드를 해야할 것 같습니다.

이번 버전에서 바뀐 자세한 내용은 이전 포스트와 릴리즈 노트를 참고하세요. 1.2.0 RC2 버전이 이미 PyPI에 등록되어 있기 때문에 pip 명령에서 --pre 옵션으로 간단하게 설치할 수 있습니다.

$ pip install --upgrade --pre tensorflow

$ pip install --upgrade --pre tensorflow-gpu

From R-CNN to Mask R-CNN

Athelas의 블로그에 이미지 분할image segmentation에 관한 최근의 연구 동향을 간단하게 짚어주는 포스트가 올라왔습니다. 바로 R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN입니다.

R-CNN

0*Sdj6sKDRQyZpO6oH.

이미지를 분류하는 것보다 이미지 안에 어떤 물체들이 들어 있는지를 구분해내는 것이 훨씬 어려운 작업입니다. R-CNN은 이를 위해 몇단계를 거쳐 임무를 처리합니다. 먼저 가능한 이미지 영역을 찾아내는 리전 프로포잘region proposal 혹은 바운딩 박스bounding box를 만드는 단계가 있습니다. 바운딩 박스를 찾기 위해 셀렉티브 서치selective search 알고리즘을 사용합니다. 가령 색상이나 강도 패턴 등이 비슷한 인접한 픽셀을 합치는 방식입니다. 그런 다음 추출한 바운딩 박스를(대략 2,000여개) CNN의 입력으로 주입하기 위해 강제로 사이즈를 일원화시킵니다. 여기서 사용한 CNN은 미리 훈련된 AlexNet의 변형된 버전입니다. CNN의 마지막 단계에서 서포트 벡터 머신support vector machine을 사용하여 이미지를 분류합니다. 그리고 최종적으로 분류된 오브젝트의 바운딩 박스 좌표를 더 정확히 맞추기 위해 선형 회귀linear regression 모델을 사용합니다.

Fast R-CNN

1*E_P1vAEbGT4HNYjqMtIz4g

R-CNN의 문제점은 모든 바운딩 박스마다 CNN을 돌려야 하고 분류를 위한 SVM, 바운딩 박스를 위한 선형 회귀까지 세가지 모델을 모두 훈련시키기 어렵다는 점입니다. Fast R-CNN은 이 문제들을 해결했습니다. 먼저 바운딩 박스들 사이에 겹치는 영역이 많은데 이들을 따로 따로 CNN을 통과시키는 것은 비용 낭비라고 생각했습니다. 여기에서 RoIPoolRegion of Interest Pooling의 개념을 도입하여 셀렉티브 서치에서 찾은 바운딩 박스 정보를 CNN을 통과하면서 유지시키고 최종 CNN 특성 맵으로 부터 해당 영역을 추출하여 풀링pooling합니다. 이렇게 하면 바운딩 박스마다 CNN을 돌리는 시간을 획기적으로 단축할 수 있습니다. 또한 SVM와 선형 회귀 모델을 모두 하나의 네트워크에 포함시켜 훈련을 시킵니다. SVM 대신 CNN 뒤에 소프트맥스softmax를 놓고, 선형 회귀 대신 소프트맥스 레이어와 동일하게 CNN에 뒤에 따로 추가했습니다.

Faster R-CNN

Fast R-CNN에서 남은 한가지 성능의 병목은 바운딩 박스를 만드는 리전 프로포잘 단계입니다. Faster R-CNN은 리전 프로포잘 단계를 CNN안에 넣어서 마지막 문제를 해결했습니다. CNN을 통과한 특성 맵에서 슬라이딩 윈도우를 이용해 각 지점anchor마다 가능한 바운딩 박스의 좌표와 이 바운딩 박스의 점수를 계산합니다. 대부분 너무 홀쭉하거나 넓은 물체는 많지 않으므로 2:1, 1:1, 1:2 등의 몇가지 타입으로도 좋다고 합니다. Faster R-CNN은 작년에 마이크로소프트에서 내놓은 대표적인 컴퓨터 비전 연구 결과 중 하나입니다.

Mask R-CNN

1*BiRpf-ogjxARQf5LxI17Jw

그리고 올해 초 페이스북 AI 팀이 분할된 이미지를 마스킹하는 Mask R-CNN을 내놓았습니다. Faster R-CNN에 각 픽셀이 오브젝트에 해당하는 것인지 아닌지를 마스킹하는 네트워크(CNN)를 추가한 것입니다. 이를 바이너리 마스크binary mask라고 합니다. 페이스북 팀은 정확한 픽셀 위치를 추출하기 위해 CNN을 통과하면서 RoIPool 영역의 위치에 생기는 소숫점 오차를 2D 선형보간법bilinear interpolation을 통해 감소시켰다고 합니다. 이를 RoIAlign이라고 합니다. 그래서 아래와 같은 멋진 마스킹 이미지가 만들어 집니다.

1*6CClgIKH8zhZjmcftfNoEQ

그런데 아직 감이 잘 안잡히시나요? 조금도 걱정하지 마세요. R-CNN에서 Faster R-CNN까지 자세히 설명해 주시는 아래 이진원님의 동영상을 보시면 해결됩니다! 🙂

Chainer 2.0 & CuPy

파이토치PyTorch와 같이 다이나믹 컴퓨테이션 그래프를 지원하는 체이너Chainer가 2.0 버전을 릴리즈했다는 소식입니다. 2.0 버전에서 깃허브 주소를 바꾸었으며 강화학습, 분산, 비전에 관한 패키지를 분리하였습니다. 자세한 내용은 체이너 문서와 깃허브 릴리즈 노트를 참고하세요.

$ pip install chainer

또한 넘파이NumPy 스타일의 행렬 연산을 GPU를 사용하여 처리할 수 있는 CuPy를 체이너에서 분리하여 공개하였습니다(즉 체이너에서 GPU를 사용하려면 cupy를 설치해야 합니다). 넘파이를 쓰듯 CuPy를 써서 자기만의 연산을 만든다면 재미있을 것 같습니다. CuPy도 pip를 사용하여 쉽게 설치할 수 있습니다.

$ pip install cupy

파이토치도 더욱 많이 넘파이 스타일을 지원하려고 준비중이며 윈도우즈 지원도 곧 가능할 것 같습니다.

Microsoft CNTK 2.0 Release

마이크로소프트가 CNTK 2.0(Cognitive Toolkit) 버전이 정식 출시되었다고 블로그를 통해 알렸습니다. CNTK 2.0 버전은 파이썬과 C++, 자바 API를 지원하며 윈도우즈와 리눅스 설치 바이너리를 제공하고 있습니다. 2.0 버전에서는 케라스Keras를 지원하는 기능이 추가되었습니다. 아마도 텐서플로우나 파이토치 등을 따라 가려면 서드파티에 대해 더욱 적극적으로 대응할 것 같습니다. 자세한 내용은 깃허브문서를 참고해 주세요.

바이너리가 PyPI에 등록되어 있지는 않지만 pip 명령을 사용하여 간단히 설치할 수 있습니다. 파이썬 2.7, 3.4, 3.5, 3.6 버전을 지원합니다. 특이한 점은 마이크로소프트에서 만든 1bit-SGD 기능을 지원하는 바이너리가 별도로 빌드되어 있다는 점입니다.

$ pip install ~.whl
  • 리눅스
2.7 CPU-Only https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp27-cp27mu-linux_x86_64.whl
GPU https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp27-cp27mu-linux_x86_64.whl
GPU-1bit-SGD https://cntk.ai/PythonWheel/GPU-1bit-SGD/cntk-2.0-cp27-cp27mu-linux_x86_64.whl
3.4 CPU-Only https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp34-cp34m-linux_x86_64.whl
GPU https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp34-cp34m-linux_x86_64.whl
GPU-1bit-SGD https://cntk.ai/PythonWheel/GPU-1bit-SGD/cntk-2.0-cp34-cp34m-linux_x86_64.whl
3.5 CPU-Only https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp35-cp35m-linux_x86_64.whl
GPU https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp35-cp35m-linux_x86_64.whl
GPU-1bit-SGD https://cntk.ai/PythonWheel/GPU-1bit-SGD/cntk-2.0-cp35-cp35m-linux_x86_64.whl
3.6 CPU-Only https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp36-cp36m-linux_x86_64.whl
GPU https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp36-cp36m-linux_x86_64.whl
GPU-1bit-SGD https://cntk.ai/PythonWheel/GPU-1bit-SGD/cntk-2.0-cp36-cp36m-linux_x86_64.whl
  • 윈도우즈
2.7 CPU-Only https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp27-cp27m-win_amd64.whl
GPU https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp27-cp27m-win_amd64.whl
GPU-1bit-SGD https://cntk.ai/PythonWheel/GPU-1bit-SGD/cntk-2.0-cp27-cp27m-win_amd64.whl
3.4 CPU-Only https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp34-cp34m-win_amd64.whl
GPU https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp34-cp34m-win_amd64.whl
GPU-1bit-SGD https://cntk.ai/PythonWheel/GPU-1bit-SGD/cntk-2.0-cp34-cp34m-win_amd64.whl
3.5 CPU-Only https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp35-cp35m-win_amd64.whl
GPU https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp35-cp35m-win_amd64.whl
GPU-1bit-SGD https://cntk.ai/PythonWheel/GPU-1bit-SGD/cntk-2.0-cp35-cp35m-win_amd64.whl
3.6 CPU-Only https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp36-cp36m-win_amd64.whl
GPU https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp36-cp36m-win_amd64.whl
GPU-1bit-SGD https://cntk.ai/PythonWheel/GPU-1bit-SGD/cntk-2.0-cp36-cp36m-win_amd64.whl

Keras Cheat Sheet

keras-cheatsheet

일전에 데이터캠프(datacamp.com)에서 만든 치트 시트 시리즈를 소개했었습니다. scikit-learn, numpy, pandas, scipy, matplotlib에 이어 이제는 케라스(Keras)의 치트 시트도 나왔습니다! 🙂

최근에는 케라스에 MXNetCNTK를 백엔드로 지원하기 위한 작업이 진행되고 있습니다. 이렇게 되면 래퍼(wrapper) 라이브러리의 지존이 되겠군요. 케라스 책으로는 처음 팩트(packtpub)에서 ‘Deep Learning with Keras‘가 출간되었습니다. 이 책도 읽고 나서 간단히 리뷰해보도록 하겠습니다.