이 프로젝트는 사전에 사전 GOOGLENET 모델 및 사용자 정의 이미지 데이터 세트를 사용하여 사용자 정의 딥 드레임 모델을 만드는 프로세스를 단순화하는 것을 목표로합니다.
다음은 여름 테마 이미지에서 훈련 된 맞춤형 딥 드레임 모델로 생성 된 시각화 예입니다.
종속성 :
Ubuntu 및 Windows에 대한 자세한 설치 지침은 설치 안내서에서 찾을 수 있습니다.
Pytorch가 설치되었는지 확인한 후 다음 명령으로 Places365 Googlenet 및 Inception5H (InceptionV1) 전기 모델을 선택적으로 다운로드 할 수 있습니다.
python models/download_models.py
사기가 좋은 모델로 딥 드림을 만들고 싶거나 Dream-Creator가있는 다른 사람이 만든 사전 모델을 다운로드 한 경우 모델 시각화로 건너 뛸 수 있습니다.
데이터 세트를 만들고 준비하십시오
이미지를 수집하십시오
이미지를 필요한 형식으로 정렬하십시오.
손상된 이미지를 제거하십시오.
아직 수행하지 않은 경우 복제가 제거되도록하십시오.
교육 속도를 높이기 위해 데이터 세트를 크기를 조정하십시오.
데이터 세트의 평균 및 표준 편차를 계산하십시오.
Googlenet 모델을 훈련시킵니다
결과를 시각화하십시오
결과가 좋지 않으면 1-2 단계로 돌아가서 어떤 이미지, 카테고리 및 훈련 매개 변수를 사용하여 변경해야 할 수도 있습니다.
기본 FC/Logits 레이어를 사용하여 교육 데이터와 유사한 시각화를 만드는 데 5 개의 에포크가 필요할 수 있습니다. 훈련 속도를 높이고 더 나은 결과를 얻으려면 사용 된 사기꾼 BVLC 모델은 하위 층이 변화하는 것을 막기 위해 부분적으로 얼어 붙습니다.
사용자 정의 딥 드레임 모델을 훈련 시키려면 교육에 사용하려는 이미지로 구성된 데이터 세트를 만들어야합니다. 데이터 세트의 이미지를 키울 수있는 다양한 방법이 있으며 각 카테고리/클래스마다 최소 수백 개의 이미지가 필요합니다.
DeepDream은 다른 범주/클래스로 구성된 이미지 데이터 세트에서 교육을받은 이미지 분류 모델로 자주 수행됩니다. 이미지 분류 모델은 다른 이미지 클래스의 차이점을 배우려고 시도하며, 따라서 뉴런은 꿈과 같은 환각을 만들 수있는 능력을 얻습니다. 선택한 이미지, 그 차이, 선택한 클래스의 차이점 및 사용 된 이미지 수는 생성 될 수있는 시각화에 큰 영향을 미칩니다.
기본 디렉토리/폴더에 각 카테고리/클래스의 서브 폴더/디렉토리가 포함 된 경우 Pytorch 이미지 데이터 세트가 구성되어야합니다. 필요한 데이터 세트 구조의 예는 다음과 같습니다.
dataset_dir
│
└───category1
│ │ image1.jpg
│ │ image2.jpg
│ │ image3.jpg
│
└───category2
│ image1.jpg
│ image2.jpg
│ image3.jpg
데이터 세트를 적절한 형식으로 만든 후에는 아직 수행하지 않은 경우 중복 이미지를 제거해야합니다. 무료 및 오픈 소스 소프트웨어를 포함 하여이 작업에 사용할 수있는 다양한 도구가 있습니다.
아직 그렇게하지 않은 경우 데이터 세트의 백업 사본을 만들 수 있습니다.
다음으로 이미지가 Pytorch가로드하지 못하게하는 방식으로 이미지가 손상되지 않았는지 확인해야합니다. 데이터 세트에서 손상된 이미지를 자동으로 제거하려면 다음 명령을 사용하십시오.
python data_tools/remove_bad.py -delete_bad -data_path <training_data>
다음으로 교육 속도를 높이기 위해 데이터 세트를 교육 이미지 크기에 더 가까이 다가 가기를 원할 것입니다. 데이터 세트 크기를 조정해도 결과 모델로 더 큰 심해 이미지를 생성하지 못하게됩니다. 포함 된 크기 조정 스크립트는 높이 또는 너비로 지정된 이미지 크기보다 높은 이미지 만 수정합니다.
데이터 세트의 이미지를 크기를 조정하려면 다음 명령을 사용하십시오.
python data_tools/resize_data.py -data_path <training_data> -max_size 500
이제 새로 크게 크기가 커지는 데이터 세트를 사용하면 교육에 사용하기 위해 데이터 세트의 평균 및 표준 편차를 계산할 수 있습니다. 이미지를 추가하거나 제거하여 데이터 세트를 수정하면 평균 및 표준 편차를 다시 계산해야합니다.
데이터 세트의 평균 및 표준 편차를 계산하려면 다음 명령을 사용하고 다음 단계를 위해 출력을 저장하십시오.
python data_tools/calc_ms.py -data_path <training_data>
이제 Googlenet Training Script를 실행하여 DeepDream 모델 교육을 시작할 수 있습니다. 시각화의 품질을 모니터링하기 위해 5-10 개의 에포크마다 모델을 저장하는 것이 좋습니다.
모델을 훈련 한 후 다음 명령으로 색상 상관 행렬을 추가 할 수 있습니다.
python data_tools/calc_cm.py -data_path <training_data> -model_file <bvlc_out120>.pth
기본 훈련 명령 :
python train_googlenet.py -data_path <training_data> -balance_classes -batch_size 96 -data_mean <mean> -data_sd <sd>
입력 옵션 :
-data_path
: 사용하려는 데이터 세트 디렉토리/폴더로가는 경로.-data_mean
: 선택한 데이터 세트의 미리 계산 된 평균 값 목록.-data_sd
: 선택한 데이터 세트에 대한 표준 편차 값의 미리 계산 된 목록.교육 옵션 :
-num_epochs
: 사용할 훈련 에포크의 수. 기본값은 120
입니다.-batch_size
: 동시에 네트워크를 통과 할 교육 및 검증 이미지 수. 기본값은 32
입니다.-learning_rate
: Adam 또는 SGD Optimizer와 함께 사용하는 학습 속도. 기본값은 1e-2
입니다.-optimizer
: 사용할 최적화 알고리즘; sgd
또는 adam
; 기본값은 sgd
입니다.-train_workers
: 훈련에 사용할 근로자 수. 기본값은 0
입니다.-val_workers
: 검증에 사용할 근로자 수. 기본값은 0
입니다.-balance_classes
:이 플래그를 활성화하면 클래스 크기에 따라 각 클래스의 교육 균형이 맞습니다.모델 옵션 :
-model_file
: 시작 모델에 사용할 .pth
모델 파일로의 경로. 기본값은 BVLC Googlenet 모델입니다.-freeze_to
: 모델을 동결 할 레이어; none
, conv1
, conv2
, conv3
, mixed3a
, mixed3b
, mixed4a
, mixed4b
, mixed4c
, mixed4d
, mixed4e
, mixed5a
또는 mixed5b
중 하나. 기본값은 mixed3b
입니다.-freeze_aux1_to
: 첫 번째 보조 분기를 동결시키는 레이어; none
, loss_conv
, loss_fc
또는 loss_classifier
중 하나입니다. 기본값은 none
.-freeze_aux2_to
: 두 번째 보조 분기를 동결시키는 레이어; none
, loss_conv
, loss_fc
또는 loss_classifier
중 하나입니다. 기본값은 none
.-delete_branches
:이 플래그가 활성화되면 모델에는 보조 지점이 사용되지 않습니다.출력 옵션 :
-save_epoch
: 모든 save_epoch
epochs의 모델을 저장하십시오. 기본값은 10
입니다. 중간 모델 저장을 비활성화하려면 0
으로 설정하십시오.-output_name
: 출력 모델의 이름. 기본값은 bvlc_out.pth
입니다.-individual_acc
:이 플래그를 활성화하면 각 클래스의 개별 정확도가 인쇄됩니다.-save_csv
:이 플래그를 활성화하면 손실과 정확도 데이터가 TXT 파일에 저장됩니다.-csv_dir
: CSV 파일을 저장하는 곳. 기본값은 현재 작업 디렉토리로 설정되었습니다.기타 옵션 :
-use_device
: gpu의 Zero-Indexed ID Plus cuda:
. 기본값은 cuda:0
입니다.-seed
: 반복 가능한 결과를 위해 지정할 수있는 정수 값. 기본적 으로이 값은 각 실행에 대해 무작위입니다.데이터 세트 옵션 :
-val_percent
: 유효성 검사에 사용할 각 클래스의 이미지의 백분율. 기본값은 0.2
입니다.새로운 DeepDream 모델을 훈련 한 후에는 시각화를 테스트해야합니다. 최상의 시각화는 'Logits'층으로도 알려진 주요 FC 층에 있습니다. 이 스크립트는 각 채널에 대해 별도의 이미지를 생성하여 특정 모델 에포크의 특정 모델에서 지정된 모든 레이어 채널을 빠르고 쉽게 시각화하는 데 도움이됩니다.
입력 옵션 :
-model_file
: 사용하려는 사전에 사기 Googlenet 모델로가는 경로.-learning_rate
: Adam 또는 L-BFGS Optimizer와 함께 사용하는 학습 속도. 기본값은 1.5
입니다.-optimizer
: 사용할 최적화 알고리즘; lbfgs
또는 adam
; 기본값은 adam
입니다.-num_iterations
: 기본값은 500
입니다.-layer
: 사용하려는 특정 레이어. 기본값은 fc
로 설정됩니다.-extract_neuron
:이 플래그가 활성화되면 각 채널에서 중앙 뉴런이 추출됩니다.-image_size
: 출력 이미지에 사용할 <height>,<width>
의 쉼표로 분리 된 목록. 기본값은 224,224
로 설정됩니다.-jitter
: 전처리에 사용할 이미지 지터의 양. 기본값은 16
입니다.-fft_decorrelation
: FFT 공간 역 상관 사용 여부. 활성화 된 경우 학습 속도가 낮아야합니다.-color_decorrelation
: 색상 역 상관 사용 여부. 선택적으로 색상 상관 행렬에 대한 쉼표로 분리 된 값 목록을 제공합니다. 값이 제공되지 않으면 Imagenet Color Correlation Matrix로 기본적으로 모델 파일에서 색상 상관 행렬을로드하려는 시도가 이루어집니다.-random_scale
: 임의의 스케일링 사용 여부. 선택적으로 스케일을 무작위로 선택할 수있는 쉼표로 분리 된 값 목록을 제공합니다. 값이 제공되지 않으면 다음 목록에서 스케일이 무작위로 선택됩니다 : 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: 임의 회전을 사용할지 여부. 선택적으로 무작위로 선택할 수있는 쉼표로 분리 된 학위 값 목록 또는 [-value, value]
에서 무작위로도를 선택하는 데 사용할 단일 값을 제공합니다. 값이 제공되지 않으면 [-5, 5]
범위가 사용됩니다.-padding
: 랜덤 스케일링 전에 사용할 패딩의 양과 가장자리 아티팩트를 방지하기 위해 임의의 회전. 그런 다음 변환 후 패딩이 제거됩니다. 기본값이 0
으로 설정되어 비활성화됩니다.처리 옵션 :
-batch_size
: 각 배치에서 생성 할 채널 시각화 이미지 수. 기본값은 10
입니다.-start_channel
: 시각화 이미지를 만들기 시작하는 채널. 기본값은 0
입니다.-end_channel
: 시각화 이미지 생성을 중지하는 채널. 모든 채널의 경우 기본값이 -1
로 설정됩니다.모델이 포함되어 있지 않은 경우에만 옵션 : 옵션이 필요합니다 .
-model_epoch
: 모델이 저장된 훈련 에포크는 출력 이미지 이름에 사용합니다. 기본값은 120
입니다.-data_mean
: 모델 내부에서 저장되지 않은 경우 모델을 훈련시키는 데 사용 된 미리 계산 된 평균 값 목록.-num_classes
: 모델이 훈련 된 클래스 수. 기본값은 120
입니다.출력 옵션 :
-output_dir
: 출력 이미지를 저장하는 위치. 기본값은 현재 작업 디렉토리로 설정됩니다.-print_iter
: 모든 print_iter
반복을 인쇄합니다. 인쇄를 비활성화하려면 0
으로 설정하십시오.-save_iter
: 모든 save_iter
반복을 모든 이미지를 저장하십시오. 기본값은 중간 결과 저장을 비활성화하려면 0
입니다.기타 옵션 :
-use_device
: gpu의 Zero-Indexed ID Plus cuda:
. 기본값은 cuda:0
입니다.-seed
: 반복 가능한 결과를 위해 지정할 수있는 정수 값. 기본적 으로이 값은 각 실행에 대해 무작위입니다.기본 FC (로이트) 레이어 시각화 :
python vis_multi.py -model_file <bvlc_out120>.pth
고급 FC (로이트) 레이어 시각화 :
python vis_multi.py -model_file <bvlc_out120>.pth -layer fc -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -output_dir <output_dir> -padding 16 -jitter 16,8
이 스크립트를 사용하면 훈련 된 Googlenet 모델로 깊은 환각을 만들 수 있습니다.
입력 옵션 :
-model_file
: 사용하려는 사전에 사기 Googlenet 모델로가는 경로.-learning_rate
: Adam 또는 L-BFGS Optimizer와 함께 사용하는 학습 속도. 기본값은 1.5
입니다.-optimizer
: 사용할 최적화 알고리즘; lbfgs
또는 adam
; 기본값은 adam
입니다.-num_iterations
: 기본값은 500
입니다.-content_image
: 입력 이미지로가는 경로. 입력 이미지가 지정되지 않으면 대신 랜덤 노이즈가 사용됩니다.-layer
: 사용하려는 특정 레이어. 기본값은 mixed5a
로 설정되었습니다.-channel
: 사용하려는 특정 레이어 채널. 특정 채널 선택을 비활성화하려면 기본값이 -1
로 설정됩니다.-extract_neuron
:이 플래그가 활성화되면 -Center Neuron은 -channel
매개 변수로 선택한 채널에서 추출됩니다.-image_size
: 출력 이미지에 사용할 <height>,<width>
의 쉼표로 분리 된 목록. 컨텐츠 이미지와 함께 최대 측면 길이에 대한 단일 값이 제공되면 최소 측면 길이가 자동으로 계산됩니다. 기본값은 224,224
로 설정됩니다.-jitter
: 전처리에 사용할 이미지 지터의 양. 기본값은 16
입니다.-fft_decorrelation
: FFT 공간 역 상관 사용 여부. 활성화 된 경우 학습 속도가 낮아야합니다.-color_decorrelation
: 색상 역 상관 사용 여부. 선택적으로 색상 상관 행렬에 대한 쉼표로 분리 된 값 목록을 제공합니다. 값이 제공되지 않으면 Imagenet Color Correlation Matrix로 기본적으로 모델 파일에서 색상 상관 행렬을로드하려는 시도가 이루어집니다.-random_scale
: 임의의 스케일링 사용 여부. 선택적으로 스케일을 무작위로 선택할 수있는 쉼표로 분리 된 값 목록을 제공합니다. 값이 제공되지 않으면 다음 목록에서 스케일이 무작위로 선택됩니다 : 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: 임의 회전을 사용할지 여부. 선택적으로 무작위로 선택할 수있는 쉼표로 분리 된 학위 값 목록 또는 [-value, value]
에서 무작위로도를 선택하는 데 사용할 단일 값을 제공합니다. 값이 제공되지 않으면 [-5, 5]
범위가 사용됩니다.-padding
: 랜덤 스케일링 전에 사용할 패딩의 양과 가장자리 아티팩트를 방지하기 위해 임의의 회전. 그런 다음 변환 후 패딩이 제거됩니다. 기본값이 0
으로 설정되어 비활성화됩니다.-layer_vis
: 특정 레이어 채널을 시각화하지 않을 때 DeepDream 또는 Direction 시각화 사용 여부. deepdream
또는 direction
중 하나; 기본값은 deepdream
입니다.모델이 포함되어 있지 않은 경우에만 옵션 : 옵션이 필요합니다 .
-data_mean
: 모델 내부에서 저장되지 않은 경우 모델을 훈련시키는 데 사용 된 미리 계산 된 평균 값 목록.-num_classes
: 모델 내부에 저장되지 않은 경우 모델이 교육 된 클래스 수입니다.출력 옵션 :
-output_image
: 출력 이미지의 이름. 기본값이 out.png
.-print_iter
: 모든 print_iter
반복을 인쇄합니다. 인쇄를 비활성화하려면 0
으로 설정하십시오.-save_iter
: 모든 save_iter
반복을 모든 이미지를 저장하십시오. 기본값은 중간 결과 저장을 비활성화하려면 0
입니다.타일링 옵션 :
-tile_size
: 사용하려는 원하는 타일 크기. <height>,<width>
의 쉼표로 분리 된 목록 또는 타일 높이와 너비 모두에 사용할 단일 값. 타일링을 비활성화하기 위해 기본값이 0
으로 설정됩니다.-tile_overlap
: 타일에 사용하기위한 겹침 비율. 기본값은 25% 겹침에서 25
입니다. 50% 이상의 중복 비율로 인해 문제가 발생합니다.-tile_iter
: 기본값은 50
입니다.기타 옵션 :
-use_device
: gpu의 Zero-Indexed ID Plus cuda:
. 기본값은 cuda:0
입니다.-seed
: 반복 가능한 결과를 위해 지정할 수있는 정수 값. 기본적 으로이 값은 각 실행에 대해 무작위입니다.기본 심해 :
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a
고급 심해 :
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a/conv_5x5_relu -channel 9 -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -padding 16 -jitter 16,8
데이터 세트 생성, 청소 및 준비와 관련된 모든 포함 된 스크립트/도구에 대한 자세한 내용은 여기를 참조하십시오.