witnn/PaintVgg19/PaintVgg19Weight.py

177 lines
6.1 KiB
Python
Raw Normal View History

2019-08-19 15:53:10 +08:00
from __future__ import print_function
2019-08-23 23:27:45 +08:00
# from vgg19Pytorch import Vgg19Module
2019-08-19 15:53:10 +08:00
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
from torchvision import datasets, transforms
import torchvision.models as models
import matplotlib.pyplot as plt
import numpy as np
from visdom import Visdom
import cv2
import os
import shutil
viz = Visdom()
# use visdom , we must start visdom Host first
# with python -m visdom.server
CurrentPath = os.path.split(os.path.realpath(__file__))[0]+"/"
print("Current Path :" + CurrentPath)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# vgg19 = Vgg19Module(CurrentPath+'/vgg19Pytorch.npy')
vgg19 = torchvision.models.vgg19(True)
if torch.cuda.is_available():
vgg19 = vgg19.to(device)
def weightVisual(layer, name=''):
mm4 = layer.weight.data
datodis = mm4 * 256 + 128
dashape = datodis.shape
datodis = datodis.view(dashape[1] * dashape[0], 1, dashape[2], dashape[3])
imaglisnp = datodis.detach().cpu().numpy()
viz.images(imaglisnp, opts=dict(
title=name, caption='How random.'), nrow=dashape[1])
def imageVisual(data, name='', rownum=8):
datodis = data
#datodis = datodis * 256 + 128
dashape = datodis.shape
datodis = datodis.view(dashape[1] * dashape[0], 1, dashape[2], dashape[3])
imaglisnp = datodis.detach().cpu().numpy()
viz.images(imaglisnp, opts=dict(
title=name, caption='How random.'), nrow=rownum)
def readAndPreprocessImage(imagepath):
mean = np.array([103.939, 116.779, 123.68])
img = cv2.imread(imagepath)
img = img.astype('float32')
img -= mean
img = cv2.resize(img, (224, 224)).transpose((2, 0, 1))
img = img[np.newaxis, :, :, :]
# cv image read is by BGR order
# and the network Need RGB
# the following BGR values should be subtracted: [103.939, 116.779, 123.68].
image = torch.from_numpy(img)
if torch.cuda.is_available():
image = image.cuda()
return image
#region forward image
image = readAndPreprocessImage(CurrentPath+"dog_resize.jpg")
imgfor = vgg19.forward(image)
imgfornumpy = imgfor.cpu().detach().numpy()
words = open(CurrentPath+'synset_words.txt').readlines()
words = [(w[0], ' '.join(w[1:])) for w in [w.split() for w in words]]
words = np.asarray(words)
top5 = np.argsort(imgfornumpy)[0][::-1][:5]
probs = np.sort(imgfornumpy)[0][::-1][:5]
for w, p in zip(words[top5], probs):
print('{}\tprobability:{}'.format(w, p))
#endregion
2019-08-23 23:27:45 +08:00
# # region write image and weight
# image = readAndPreprocessImage(CurrentPath+"dog_resize.jpg")
# conv1_1_pad = F.pad(image, (1L, 1L, 1L, 1L))
# conv1_1 = vgg19.conv1_1(conv1_1_pad)
# relu1_1 = F.relu(conv1_1)
# conv1_2_pad = F.pad(relu1_1, (1L, 1L, 1L, 1L))
# conv1_2 = vgg19.conv1_2(conv1_2_pad)
# relu1_2 = F.relu(conv1_2)
# pool1 = F.max_pool2d(relu1_2, kernel_size=(2L, 2L), stride=(2L, 2L), padding=(0L,), ceil_mode=True)
# conv2_1_pad = F.pad(pool1, (1L, 1L, 1L, 1L))
# conv2_1 = vgg19.conv2_1(conv2_1_pad)
# relu2_1 = F.relu(conv2_1)
# conv2_2_pad = F.pad(relu2_1, (1L, 1L, 1L, 1L))
# conv2_2 = vgg19.conv2_2(conv2_2_pad)
# relu2_2 = F.relu(conv2_2)
# pool2 = F.max_pool2d(relu2_2, kernel_size=(2L, 2L), stride=(2L, 2L), padding=(0L,), ceil_mode=True)
# conv3_1_pad = F.pad(pool2, (1L, 1L, 1L, 1L))
# conv3_1 = vgg19.conv3_1(conv3_1_pad)
# relu3_1 = F.relu(conv3_1)
# conv3_2_pad = F.pad(relu3_1, (1L, 1L, 1L, 1L))
# conv3_2 = vgg19.conv3_2(conv3_2_pad)
# relu3_2 = F.relu(conv3_2)
# conv3_3_pad = F.pad(relu3_2, (1L, 1L, 1L, 1L))
# conv3_3 = vgg19.conv3_3(conv3_3_pad)
# relu3_3 = F.relu(conv3_3)
# conv3_4_pad = F.pad(relu3_3, (1L, 1L, 1L, 1L))
# conv3_4 = vgg19.conv3_4(conv3_4_pad)
# relu3_4 = F.relu(conv3_4)
# pool3 = F.max_pool2d(relu3_4, kernel_size=(2L, 2L), stride=(2L, 2L), padding=(0L,), ceil_mode=True)
# conv4_1_pad = F.pad(pool3, (1L, 1L, 1L, 1L))
# conv4_1 = vgg19.conv4_1(conv4_1_pad)
# relu4_1 = F.relu(conv4_1)
# conv4_2_pad = F.pad(relu4_1, (1L, 1L, 1L, 1L))
# conv4_2 = vgg19.conv4_2(conv4_2_pad)
# relu4_2 = F.relu(conv4_2)
# conv4_3_pad = F.pad(relu4_2, (1L, 1L, 1L, 1L))
# conv4_3 = vgg19.conv4_3(conv4_3_pad)
# relu4_3 = F.relu(conv4_3)
# conv4_4_pad = F.pad(relu4_3, (1L, 1L, 1L, 1L))
# conv4_4 = vgg19.conv4_4(conv4_4_pad)
# relu4_4 = F.relu(conv4_4)
# pool4 = F.max_pool2d(relu4_4, kernel_size=(2L, 2L), stride=(2L, 2L), padding=(0L,), ceil_mode=True)
# conv5_1_pad = F.pad(pool4, (1L, 1L, 1L, 1L))
# conv5_1 = vgg19.conv5_1(conv5_1_pad)
# relu5_1 = F.relu(conv5_1)
# conv5_2_pad = F.pad(relu5_1, (1L, 1L, 1L, 1L))
# conv5_2 = vgg19.conv5_2(conv5_2_pad)
# relu5_2 = F.relu(conv5_2)
# conv5_3_pad = F.pad(relu5_2, (1L, 1L, 1L, 1L))
# conv5_3 = vgg19.conv5_3(conv5_3_pad)
# relu5_3 = F.relu(conv5_3)
# conv5_4_pad = F.pad(relu5_3, (1L, 1L, 1L, 1L))
# conv5_4 = vgg19.conv5_4(conv5_4_pad)
# relu5_4 = F.relu(conv5_4)
# pool5 = F.max_pool2d(relu5_4, kernel_size=(2L, 2L), stride=(2L, 2L), padding=(0L,), ceil_mode=True)
# fc6_0 = pool5.view(pool5.size(0), -1)
# imageVisual(conv1_1, "conv1_1", 8)
# imageVisual(conv1_2, 'conv1_2', 8)
# imageVisual(conv2_1, "conv2_1", 16)
# imageVisual(conv2_2, "conv2_2", 16)
# imageVisual(conv3_1, "conv3_1", 16)
# imageVisual(conv3_2, "conv3_2", 16)
# imageVisual(conv3_3, "conv3_3", 16)
# imageVisual(conv3_4, "conv3_4", 16)
# imageVisual(conv4_1, "conv4_1", 32)
# imageVisual(conv4_2, "conv4_2", 32)
# imageVisual(conv4_3, "conv4_3", 32)
# imageVisual(conv4_4, "conv4_4", 32)
# imageVisual(conv5_1, "conv5_1", 32)
# imageVisual(conv5_2, "conv5_2", 32)
# imageVisual(conv5_3, "conv5_3", 32)
# imageVisual(conv5_4, "conv5_4", 32)
# weightVisual(vgg19.conv1_1, "conv1_1")
# weightVisual(vgg19.conv1_2, 'conv1_2')
# weightVisual(vgg19.conv2_1, "conv2_1")
# weightVisual(vgg19.conv2_2, "conv2_2")
# weightVisual(vgg19.conv3_1, "conv3_1")
# weightVisual(vgg19.conv3_2, "conv3_2")
# weightVisual(vgg19.conv3_3, "conv3_3")
# weightVisual(vgg19.conv3_4, "conv3_4")
# weightVisual(vgg19.conv4_1, "conv4_1")
# weightVisual(vgg19.conv4_2, "conv4_2")
# weightVisual(vgg19.conv4_3, "conv4_3")
# weightVisual(vgg19.conv4_4, "conv4_4")
# weightVisual(vgg19.conv5_1, "conv5_1")
# weightVisual(vgg19.conv5_2, "conv5_2")
# weightVisual(vgg19.conv5_3, "conv5_3")
# weightVisual(vgg19.conv5_4, "conv5_4")
# # endregion