我正在制作一个基本的api,以请求从pytorch的生成器模型生成的图像。我已经使用flask完成了此操作,并在MacOS上本地运行了它。一切正常,图像返回,但随后python意外退出。这是代码和错误:
错误:
2019-03-25 16:21:23.514 Python[78776:1407049] WARNING: NSWindow drag regions should only be invalidated on the Main Thread! This will throw an exception in the future. Called from (
0 AppKit 0x00007fff4f96fccc -[NSWindow(NSWindow_Theme) _postWindowNeedsToResetDragMarginsUnlessPostingDisabled] + 386
1 AppKit 0x00007fff4f96d07c -[NSWindow _initContent:styleMask:backing:defer:contentView:] + 1488
2 AppKit 0x00007fff4f96caa6 -[NSWindow initWithContentRect:styleMask:backing:defer:] + 45
3 _macosx.cpython-37m-darwin.so 0x000000010fe634c0 -[Window initWithContentRect:styleMask:backing:defer:withManager:] + 80
4 _macosx.cpython-37m-darwin.so 0x000000010fe66a17 FigureManager_init + 327
5 Python 0x00000001023780bc wrap_init + 12
6 Python 0x000000010232fe09 wrapperdescr_call + 121
7 Python 0x0000000102328ae1 _PyObject_FastCallKeywords + 433
8 Python 0x00000001023e76d4 call_function + 420
9 Python 0x00000001023e47d6 _PyEval_EvalFrameDefault + 25190
10 Python 0x0000000102329100 function_code_fastcall + 128
11 Python 0x00000001023286f4 _PyFunction_FastCallDict + 148
12 Python 0x0000000102329b3f _PyObject_Call_Prepend + 143
13 Python 0x0000000102378001 slot_tp_init + 145
14 Python 0x0000000102373959 type_call + 297
15 Python 0x0000000102328ae1 _PyObject_FastCallKeywords + 433
16 Python 0x00000001023e76d4 call_function + 420
17 Python 0x00000001023e47d6 _PyEval_EvalFrameDefault + 25190
18 Python 0x0000000102329100 function_code_fastcall + 128
19 Python 0x00000001023e7812 call_function + 738
20 Python 0x00000001023e47d6 _PyEval_EvalFrameDefault + 25190
21 Python 0x00000001023e8336 _PyEval_EvalCodeWithName + 2422
22 Python 0x000000010232886b _PyFunction_FastCallDict + 523
23 Python 0x0000000102329b3f _PyObject_Call_Prepend + 143
24 Python 0x0000000102328df7 PyObject_Call + 135
25 Python 0x00000001023e4ae7 _PyEval_EvalFrameDefault + 25975
26 Python 0x00000001023e8336 _PyEval_EvalCodeWithName + 2422
27 Python 0x0000000102328c91 _PyFunction_FastCallKeywords + 257
28 Python 0x00000001023e7812 call_function + 738
29 Python 0x00000001023e4877 _PyEval_EvalFrameDefault + 25351
30 Python 0x0000000102329100 function_code_fastcall + 128
31 Python 0x00000001023e7812 call_function + 738
32 Python 0x00000001023e4877 _PyEval_EvalFrameDefault + 25351
33 Python 0x00000001023e8336 _PyEval_EvalCodeWithName + 2422
34 Python 0x0000000102328c91 _PyFunction_FastCallKeywords + 257
35 Python 0x00000001023e7812 call_function + 738
36 Python 0x00000001023e4877 _PyEval_EvalFrameDefault + 25351
37 Python 0x00000001023e8336 _PyEval_EvalCodeWithName + 2422
38 Python 0x0000000102328c91 _PyFunction_FastCallKeywords + 257
39 Python 0x00000001023e7812 call_function + 738
40 Python 0x00000001023e47d6 _PyEval_EvalFrameDefault + 25190
41 Python 0x0000000102329100 function_code_fastcall + 128
42 Python 0x00000001023e7812 call_function + 738
43 Python 0x00000001023e47d6 _PyEval_EvalFrameDefault + 25190
44 Python 0x00000001023e8336 _PyEval_EvalCodeWithName + 2422
45 Python 0x000000010232886b _PyFunction_FastCallDict + 523
46 Python 0x00000001023e4ae7 _PyEval_EvalFrameDefault + 25975
47 Python 0x0000000102329100 function_code_fastcall + 128
48 Python 0x00000001023e7812 call_function + 738
49 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
50 Python 0x0000000102329100 function_code_fastcall + 128
51 Python 0x00000001023e7812 call_function + 738
52 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
53 Python 0x0000000102329100 function_code_fastcall + 128
54 Python 0x00000001023e7812 call_function + 738
55 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
56 Python 0x0000000102329100 function_code_fastcall + 128
57 Python 0x00000001023286f4 _PyFunction_FastCallDict + 148
58 Python 0x0000000102329b3f _PyObject_Call_Prepend + 143
59 Python 0x0000000102376bc6 slot_tp_call + 150
60 Python 0x0000000102328ae1 _PyObject_FastCallKeywords + 433
61 Python 0x00000001023e76d4 call_function + 420
62 Python 0x00000001023e47d6 _PyEval_EvalFrameDefault + 25190
63 Python 0x00000001023370de gen_send_ex + 206
64 Python 0x00000001023e3fb8 _PyEval_EvalFrameDefault + 23112
65 Python 0x00000001023e8336 _PyEval_EvalCodeWithName + 2422
66 Python 0x0000000102328c91 _PyFunction_FastCallKeywords + 257
67 Python 0x00000001023e7812 call_function + 738
68 Python 0x00000001023e4877 _PyEval_EvalFrameDefault + 25351
69 Python 0x00000001023e8336 _PyEval_EvalCodeWithName + 2422
70 Python 0x0000000102328c91 _PyFunction_FastCallKeywords + 257
71 Python 0x00000001023e7812 call_function + 738
72 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
73 Python 0x0000000102329100 function_code_fastcall + 128
74 Python 0x00000001023e7812 call_function + 738
75 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
76 Python 0x0000000102329100 function_code_fastcall + 128
77 Python 0x00000001023e7812 call_function + 738
78 Python 0x00000001023e47d6 _PyEval_EvalFrameDefault + 25190
79 Python 0x0000000102329100 function_code_fastcall + 128
80 Python 0x00000001023e7812 call_function + 738
81 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
82 Python 0x0000000102329100 function_code_fastcall + 128
83 Python 0x00000001023286f4 _PyFunction_FastCallDict + 148
84 Python 0x0000000102329b3f _PyObject_Call_Prepend + 143
85 Python 0x0000000102378001 slot_tp_init + 145
86 Python 0x0000000102373959 type_call + 297
87 Python 0x0000000102328ae1 _PyObject_FastCallKeywords + 433
88 Python 0x00000001023e76d4 call_function + 420
89 Python 0x00000001023e47d6 _PyEval_EvalFrameDefault + 25190
90 Python 0x0000000102329100 function_code_fastcall + 128
91 Python 0x00000001023e7812 call_function + 738
92 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
93 Python 0x0000000102329100 function_code_fastcall + 128
94 Python 0x00000001023286f4 _PyFunction_FastCallDict + 148
95 Python 0x0000000102329b3f _PyObject_Call_Prepend + 143
96 Python 0x0000000102328df7 PyObject_Call + 135
97 Python 0x00000001023e4ae7 _PyEval_EvalFrameDefault + 25975
98 Python 0x0000000102329100 function_code_fastcall + 128
99 Python 0x00000001023e7812 call_function + 738
100 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
101 Python 0x0000000102329100 function_code_fastcall + 128
102 Python 0x00000001023e7812 call_function + 738
103 Python 0x00000001023e47bc _PyEval_EvalFrameDefault + 25164
104 Python 0x0000000102329100 function_code_fastcall + 128
105 Python 0x00000001023286f4 _PyFunction_FastCallDict + 148
106 Python 0x0000000102329b3f _PyObject_Call_Prepend + 143
107 Python 0x0000000102328df7 PyObject_Call + 135
108 Python 0x000000010246fbd7 t_bootstrap + 71
109 Python 0x0000000102426819 pythread_wrapper + 25
110 libsystem_pthread.dylib 0x00007fff7f7ce305 _pthread_body + 126
111 libsystem_pthread.dylib 0x00007fff7f7d126f _pthread_start + 70
112 libsystem_pthread.dylib 0x00007fff7f7cd415 thread_start + 13
)
127.0.0.1 - - [25/Mar/2019 16:21:23] "GET /sdfa HTTP/1.1" 200 -
Assertion failed: (NSViewIsCurrentlyBuildingLayerTreeForDisplay() != currentlyBuildingLayerTree), function NSViewSetCurrentlyBuildingLayerTreeForDisplay, file /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1671.20.108/AppKit.subproj/NSView.m, line 14143
主要:
from flask import Flask, request, send_file
import loadModel
app = Flask(__name__)
@app.route('/')
def index():
return 'this is the homepage'
@app.route('/<ganType>')
def generate(ganType):
loadModel.loadModel()
return send_file('fakes.jpg')
if __name__ == "__main__":
app.run(debug=True)
负载模型:
import torch
import torch.nn as nn
import torchvision.utils as vutils
import matplotlib.pyplot as plt
import numpy as np
batch_size = 100
image_size = 64
nc = 3
nz = 100
ngf = 64
ndf = 64
num_epochs = 1
lr = 0.0002
beta1 = 0.5
class Generator(nn.Module): # nn.Module is the base class for all neural net modules.
def __init__(self):
super(Generator, self).__init__() # Calls the parent's initialization method
self.main = nn.Sequential(
# input is Z, going into a convolution
nn.ConvTranspose2d( nz, ngf * 8, 4, 1, 0, bias=False),
nn.BatchNorm2d(ngf * 8),
nn.ReLU(True),
# state size. (ngf*8) x 4 x 4
nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False),
nn.BatchNorm2d(ngf * 4),
nn.ReLU(True),
# state size. (ngf*4) x 8 x 8
nn.ConvTranspose2d( ngf * 4, ngf * 2, 4, 2, 1, bias=False),
nn.BatchNorm2d(ngf * 2),
nn.ReLU(True),
# state size. (ngf*2) x 16 x 16
nn.ConvTranspose2d( ngf * 2, ngf, 4, 2, 1, bias=False),
nn.BatchNorm2d(ngf),
nn.ReLU(True),
# state size. (ngf) x 32 x 32
nn.ConvTranspose2d( ngf, nc, 4, 2, 1, bias=False),
nn.Tanh()
# state size. (nc) x 64 x 64
)
def forward(self, input):
return self.main(input)
def loadModel():
# device = torch.device("cpu")
model = Generator()
model.load_state_dict(torch.load('generator.pt', map_location='cpu'))
model.eval()
first_list = []
img_list = []
# Generate some images to test the model.
noise = torch.randn(64, nz, 1, 1)
fake = model(noise).detach().cpu()
# inception_img_list.append(np.transpose(fake[0],(1,2,0)))
img_list.append(vutils.make_grid(fake, padding=2, normalize=True))
# img_list.append(first_list)
# plt.subplot(1,2,2)
plt.axis("off")
plt.title("Fake Images")
plt.imsave('fakes.jpg', np.transpose(img_list[-1],(1,2,0)))
return 'hello'
if __name__ == "__main__":
loadModel()
正如我所说,它实际上可以工作并返回生成的图像。它也使python崩溃。我不确定我做错了什么还是MacOs问题。任何帮助,将不胜感激。
答案 0 :(得分:0)
我从遇到相同问题的人中得出结论:https://github.com/matplotlib/matplotlib/issues/11094
在返回之前关闭plt可修复该错误。