이 저장소에는 Deep Dream 알고리즘의 PyTorch 구현이 포함되어 있습니다(:링크: Mordvintstev 외의 블로그).
명령줄 사용과 Jupyter Notebook을 완벽하게 지원합니다!
그리고 그것은 여러분에게 이상하고 사이키델릭하게 보이는 이미지를 만들 수 있는 힘을 줄 것입니다.
나쁘지 않죠?
제가 만든 Jupyter 노트북으로 시작해 보세요!
참고: 용량이 약 10MB로 꽤 크므로 여기 GitHub의 브라우저에서 로드하려면 몇 번 시도해야 할 수 있습니다.
간단히 말해서 이 알고리즘은 경사 상승을 수행하여 선택한 네트워크 계층의 활성화를 최대화합니다.
따라서 "꿈꾸기" 이후 왼쪽과 같은 입력 이미지에서 오른쪽 이미지를 얻습니다.
신경망 안에 이런 창의성이 숨겨져 있다고 누가 말이나 했을까요? ?
원본 Deep Dream 저장소의 대부분은 Caffe 로 작성되었으며 PyTorch로 작성된 저장소는 일반적으로 읽고 이해하기가 정말 어렵습니다. 이 저장소는 내가 알고 있는 가장 깨끗한 DeepDream 저장소를 만들기 위한 시도입니다 + PyTorch로 작성되었습니다! ❤️
다음은 이 코드를 사용하여 만들 수 있는 몇 가지 예입니다!
더 얕은 신경망 레이어를 사용하면 더 낮은 수준의 패턴(가장자리, 원, 색상 등)을 출력으로 얻을 수 있습니다.
여기서 처음 2개의 이미지는 ResNet50에서 가져온 것이고 마지막 이미지는 GoogLeNet에서 가져온 것입니다(둘 다 ImageNet에서 사전 훈련됨).
더 깊은 네트워크 계층을 사용하면 더 높은 수준의 패턴(눈, 주둥이, 동물 머리)을 얻을 수 있습니다.
첫 번째와 세 번째는 VGG 16(ImageNet)을 사용하여 생성되었고 중간은 Places 365에서 사전 훈련된 ResNet50을 사용하여 생성되었습니다.
다른 모든 매개변수는 동일하게 유지하고 사전 훈련된 가중치를 바꾸면 다음과 같은 결과를 얻습니다.
왼쪽: ResNet50-ImageNet (더 많은 동물 특징을 볼 수 있음) 오른쪽: ResNet50-Places365 (사람이 만든 것 등).
꿈은 "수직으로" 쌓인 여러 이미지 해상도에서 수행됩니다(우리는 이것을 이미지 피라미드라고 부릅니다).
왼쪽에서 오른쪽으로 이동하면서 변경된 유일한 매개변수는 피라미드 크기였습니다(왼쪽에서 오른쪽으로: 3, 7, 9 레벨).
피라미드 비율을 가지고 노는 것은 유사/관련된 효과를 가집니다. 기본 아이디어는 더 깊은 뉴런이 수정하고 "볼" 수 있는(소위 네트워크의 수용 필드 ) 이미지의 상대적 영역이 증가하고 우리가 점점 더 커진다는 것입니다. 눈이 튀어나오는 것과 같은 기능(왼쪽에서 오른쪽으로: 1.1, 1.5, 1.8):
참고: 파일 이름으로 인코딩된 이미지를 생성하는 데 사용된 정확한 매개변수를 볼 수 있습니다!
Jupyter Notebook을 꼭 확인해 보세요!, 이에 대해 자세히 설명했습니다.
다음은 이 코드를 사용하여 만들 수 있는 몇 가지 추가 예제입니다!
여기서 아이디어는 네트워크가 꿈꾸는 것이 무엇이든 입력으로 다시 피드백하고 기하학적 변환을 적용한다는 것입니다.
중앙 확대/축소만 적용하면 다음과 같은 결과를 얻습니다.
중앙 확대/축소를 적용하고 동시에 프레임당 3도 회전을 적용하면 다음과 같은 결과가 나옵니다.
마지막으로 간단한 변환을 수행하면(왼쪽 위에서 오른쪽 아래 방향으로 프레임당 5픽셀):
이것이 여러분의 두뇌를 아프게 하지 않았기를 바랍니다. 마치 2000년대 초반의 웹 1.0처럼 느껴집니다. 참아주세요.
출력을 입력으로 다시 공급하는 대신 프레임당 알고리즘을 적용하고 선형 혼합을 적용합니다.
선형 블렌딩은 깜박임을 줄이기 위해 현재 프레임을 마지막 프레임과 결합합니다(여기서는 0.85를 사용했습니다).
참고: 모든 deepdream 이미지/GIF는 제가 제작했으며 원본 이미지 아티스트의 크레딧은 다음과 같습니다.
git clone https://github.com/gordicaleksa/pytorch-deepdream
cd path_to_repo
로 이동합니다.conda env create
실행합니다(이렇게 하면 새로운 conda 환경이 생성됩니다).activate pytorch-deepdream
실행(콘솔에서 스크립트를 실행하거나 IDE에서 인터프리터를 설정하는 경우)그게 다야! 종속성을 처리하는 Environment.yml 파일을 즉시 실행하여 작동해야 합니다.
참고: 제가 가지고 있는 비디오 기능을 사용하려면 시스템 경로에 ffmpeg가 필요합니다.
PyTorch pip 패키지는 일부 버전의 CUDA/cuDNN과 함께 번들로 제공되지만 대부분 GPU 드라이버 때문에 시스템 전체 CUDA를 미리 설치하는 것이 좋습니다. 또한 시스템에 conda를 설치하는 방법으로 Miniconda 설치 프로그램을 사용하는 것이 좋습니다. 이 설정의 1번과 2번을 수행하고 시스템에 가장 최신 버전의 Miniconda 및 CUDA/cuDNN을 사용하십시오.
Anaconda 콘솔에서 jupyter notebook
실행하면 기본 브라우저에서 세션이 열립니다.
The Annotated DeepDream.ipynb
열면 플레이 준비가 완료됩니다!
참고: DLL load failed while importing win32api: The specified module could not be found
pip uninstall pywin32
수행한 다음 pip install pywin32
또는 conda install pywin32
실행하면 문제가 해결됩니다!
설정 섹션에서 생성한 Python 환경을 연결하기만 하면 됩니다.
Anaconda를 사용하는 경우(그리고 그렇게 되기를 바랍니다) 환경으로 이동/활성화하고 아래 링크된 명령을 사용할 수 있습니다.
팁: 이미지/비디오를 data/input/
디렉터리에 배치하면 절대/상대 경로를 사용하는 대신 파일(이미지/비디오)을 이름으로 참조할 수 있습니다.
정적 Deep Dream 이미지를 생성하려면 다음 명령을 실행하세요:
python deepdream.py --input <img_name> --img_width 600
이렇게 하면 기본 설정이 사용되지만 다음 위치에 의미 있는 결과가 즉시 저장됩니다.
data/out-images/VGG16_EXPERIMENTAL_IMAGENET/
참고: 출력 디렉터리는 사용하는 모델 및 사전 훈련된 가중치에 따라 변경됩니다.
즉시 사용 가능한 Ouroboros 30프레임 비디오를 얻으려면 다음을 수행하십시오.
python deepdream.py --input <img_name> --create_ouroboros --ouroboros_length 30
중간 프레임을 data/out-videos/VGG16_EXPERIMENTAL_IMAGENET/
에 덤프하고 최종 비디오를 data/out-videos
에 저장합니다.
Deep Dream 비디오를 생성하려면 다음 명령을 실행하십시오:
python deepdream.py --input <mp4 video name>
중간 프레임을 data/out-videos/tmp_out
에 덤프하고 최종 비디오를 data/out-videos
에 저장합니다.
자, 이 프로젝트를 즐겨보세요! 다음은 몇 가지 추가적이고 아름다운 결과입니다.
2GB 이상의 GPU이면 충분합니다.
DeepDream 이미지, Ouroboros 및 DeepDream 비디오를 만들 수 있습니다.
GPU가 없으면 코드가 CPU에서 자동으로 실행되지만 다소 느려집니다(특히 비디오의 경우).
DeepDream을 이해하는 데 어려움이 있다면 이 비디오에서 알고리즘 개요를 살펴보았습니다.
또한 제가 만든 Jupyter Notebook은 시작하기에 가장 좋은 장소입니다!
나는 이 저장소가 유용하다고 생각했습니다(이 저장소를 개발하는 동안):
여기에서 사용했던 이미지를 찾았습니다.
다른 이미지는 이제 NST 및 DeepDream 세계에서 이미 고전이 되었습니다.
Places 365 사전 훈련된 모델은 이 멋진 저장소에서 나왔습니다.
이 코드가 연구에 유용하다고 생각되면 다음을 인용해 주세요.
@misc{Gordić2020DeepDream,
author = {Gordić, Aleksa},
title = {pytorch-deepdream},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/gordicaleksa/pytorch-deepdream}},
}
당신의 삶에서 AI 관련 콘텐츠를 더 많이 갖고 싶다면 다음을 고려하십시오.