-
Notifications
You must be signed in to change notification settings - Fork 400
/
处理训练数据5.py
97 lines (77 loc) · 3.62 KB
/
处理训练数据5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import torch
import torchvision
import numpy as np
import os
import json
from PIL import Image
from resnet_utils import myResnet
操作记录='../训练数据样本/未用'
if not os.path.exists(操作记录):
os.makedirs(操作记录)
device = torch.device("cuda:0" if (torch.cuda.is_available()) else "cpu")
resnet101=torchvision.models.resnet101(pretrained=True).eval()
resnet101=myResnet(resnet101).cuda(device).requires_grad_(False)
词数词典路径="./json/词_数表.json"
with open(词数词典路径, encoding='utf8') as f:
词数词典=json.load(f)
for root, dirs, files in os.walk(操作记录):
if len(dirs)>0:
break
for 号 in dirs:
路径json = 操作记录+'/' + 号 + '/_操作数据.json'
numpy数组路径= 操作记录+'/' + 号 + '/图片_操作预处理数据2.npz'
if os.path.isfile(numpy数组路径):
continue
图片张量 = torch.Tensor(0)
# print(图片张量.shape[0])
操作张量 = torch.Tensor(0)
伪词序列 = torch.from_numpy(np.ones((1, 60)).astype(np.int64)).cuda(device).unsqueeze(0)
操作序列 = np.ones((1, 1))
结束序列 = np.ones((1, 1))
计数 = 0
print('正在处理{}'.format(号))
数据列=[]
with open(路径json, encoding='ansi') as f:
移动操作='无移动'
while True:
df = f.readline()
df = df.replace('\'', '\"')
if df == "":
break
df = json.loads(df)
数据列.append(df)
# for i in range(len(数据列)):
# if i>0 and 数据列[i]['动作操作']!='无动作' and 数据列[i-1]['动作操作']=='无动作' :
# 数据列[i-1]['动作操作']=数据列[i]['动作操作']
# if i>1 and 数据列[i-2]['动作操作']=='无动作' :
# 数据列[i - 2]['动作操作'] = 数据列[i]['动作操作']
with open(路径json, encoding='ansi') as f:
移动操作='无移动'
for i in range(len(数据列)):
df = 数据列[i]
if 图片张量.shape[0] == 0:
img = Image.open(操作记录+'/' + 号 + '/{}.jpg'.format(df["图片号"]))
img2 = np.array(img)
img2 = torch.from_numpy(img2).cuda(device).unsqueeze(0).permute(0, 3, 2, 1) / 255
_,out = resnet101(img2)
图片张量 = out.reshape(1,6*6*2048)
移动操作a=df["移动操作"]
if 移动操作a!='无移动':
移动操作=移动操作a
操作序列[0, 0] = 词数词典[移动操作 + "_" + df["动作操作"]]
结束序列[0, 0]=df["结束"]
else:
img = Image.open(操作记录+'/' + 号 + '/{}.jpg'.format(df["图片号"]))
img2 = np.array(img)
img2 = torch.from_numpy(img2).cuda(device).unsqueeze(0).permute(0, 3, 2, 1) / 255
_,out= resnet101(img2)
图片张量 = torch.cat((图片张量, out.reshape(1,6*6*2048)), 0)
移动操作a=df["移动操作"]
if 移动操作a!='无移动':
移动操作=移动操作a
操作序列=np.append(操作序列, 词数词典[移动操作 + "_" + df["动作操作"]])
结束序列 = np.append(结束序列, df["结束"])
#操作序列[0, 0] = 词数词典[df["移动操作"] + "_" + df["动作操作"]]
图片张量np=图片张量.cpu().numpy()
操作序列=操作序列.astype(np.int64)
np.savez(numpy数组路径, 图片张量np=图片张量np, 操作序列=操作序列,结束序列=结束序列)