我试图检测RRR演员Jr.NTR,而训练我得到这个错误:我试着检查hist检查哪部分数据不工作,但对我来说,一切看起来都很好,请有人诊断我的代码
Epoch 1/40
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-51-df179639e952> in <cell line: 1>()
----> 1 hist = model.fit(train,epochs=40,validation_data=val, callbacks=[callbacks])
1 frames
/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
50 try:
51 ctx.ensure_initialized()
---> 52 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
53 inputs, attrs, num_outputs)
54 except core._NotOkStatusException as e:
InvalidArgumentError: Graph execution error:
Detected at node 'strided_slice_1' defined at (most recent call last):
File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/usr/local/lib/python3.10/dist-packages/ipykernel_launcher.py", line 16, in <module>
app.launch_new_instance()
File "/usr/local/lib/python3.10/dist-packages/traitlets/config/application.py", line 992, in launch_instance
app.start()
File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelapp.py", line 619, in start
self.io_loop.start()
File "/usr/local/lib/python3.10/dist-packages/tornado/platform/asyncio.py", line 195, in start
self.asyncio_loop.run_forever()
File "/usr/lib/python3.10/asyncio/base_events.py", line 603, in run_forever
self._run_once()
File "/usr/lib/python3.10/asyncio/base_events.py", line 1909, in _run_once
handle._run()
File "/usr/lib/python3.10/asyncio/events.py", line 80, in _run
self._context.run(self._callback, *self._args)
File "/usr/local/lib/python3.10/dist-packages/tornado/ioloop.py", line 685, in <lambda>
lambda f: self._run_callback(functools.partial(callback, future))
File "/usr/local/lib/python3.10/dist-packages/tornado/ioloop.py", line 738, in _run_callback
ret = callback()
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 825, in inner
self.ctx_run(self.run)
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 786, in run
yielded = self.gen.send(value)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 361, in process_one
yield gen.maybe_future(dispatch(*args))
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 261, in dispatch_shell
yield gen.maybe_future(handler(stream, idents, msg))
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 539, in execute_request
self.do_execute(
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/ipkernel.py", line 302, in do_execute
res = shell.run_cell(code, store_history=store_history, silent=silent)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/zmqshell.py", line 539, in run_cell
return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 2975, in run_cell
result = self._run_cell(
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3030, in _run_cell
return runner(coro)
File "/usr/local/lib/python3.10/dist-packages/IPython/core/async_helpers.py", line 78, in _pseudo_sync_runner
coro.send(None)
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3257, in run_cell_async
has_raised = await self.run_ast_nodes(code_ast.body, cell_name,
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3473, in run_ast_nodes
if (await self.run_code(code, result, async_=asy)):
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3553, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-51-df179639e952>", line 1, in <cell line: 1>
hist = model.fit(train,epochs=40,validation_data=val, callbacks=[callbacks])
File "/usr/local/lib/python3.10/dist-packages/keras/utils/traceback_utils.py", line 65, in error_handler
return fn(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1685, in fit
tmp_logs = self.train_function(iterator)
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1284, in train_function
return step_function(self, iterator)
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1268, in step_function
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1249, in run_step
outputs = model.train_step(data)
File "<ipython-input-46-14a3be721cf4>", line 19, in train_step
batch_lloss = self.lloss(y[1], coords)
File "<ipython-input-44-38a1384a3354>", line 2, in regression_loss
true_coord = y_true[1][:,:2]
Node: 'strided_slice_1'
Detected at node 'strided_slice_1' defined at (most recent call last):
File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/usr/local/lib/python3.10/dist-packages/ipykernel_launcher.py", line 16, in <module>
app.launch_new_instance()
File "/usr/local/lib/python3.10/dist-packages/traitlets/config/application.py", line 992, in launch_instance
app.start()
File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelapp.py", line 619, in start
self.io_loop.start()
File "/usr/local/lib/python3.10/dist-packages/tornado/platform/asyncio.py", line 195, in start
self.asyncio_loop.run_forever()
File "/usr/lib/python3.10/asyncio/base_events.py", line 603, in run_forever
self._run_once()
File "/usr/lib/python3.10/asyncio/base_events.py", line 1909, in _run_once
handle._run()
File "/usr/lib/python3.10/asyncio/events.py", line 80, in _run
self._context.run(self._callback, *self._args)
File "/usr/local/lib/python3.10/dist-packages/tornado/ioloop.py", line 685, in <lambda>
lambda f: self._run_callback(functools.partial(callback, future))
File "/usr/local/lib/python3.10/dist-packages/tornado/ioloop.py", line 738, in _run_callback
ret = callback()
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 825, in inner
self.ctx_run(self.run)
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 786, in run
yielded = self.gen.send(value)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 361, in process_one
yield gen.maybe_future(dispatch(*args))
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 261, in dispatch_shell
yield gen.maybe_future(handler(stream, idents, msg))
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 539, in execute_request
self.do_execute(
File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/ipkernel.py", line 302, in do_execute
res = shell.run_cell(code, store_history=store_history, silent=silent)
File "/usr/local/lib/python3.10/dist-packages/ipykernel/zmqshell.py", line 539, in run_cell
return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 2975, in run_cell
result = self._run_cell(
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3030, in _run_cell
return runner(coro)
File "/usr/local/lib/python3.10/dist-packages/IPython/core/async_helpers.py", line 78, in _pseudo_sync_runner
coro.send(None)
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3257, in run_cell_async
has_raised = await self.run_ast_nodes(code_ast.body, cell_name,
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3473, in run_ast_nodes
if (await self.run_code(code, result, async_=asy)):
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3553, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-51-df179639e952>", line 1, in <cell line: 1>
hist = model.fit(train,epochs=40,validation_data=val, callbacks=[callbacks])
File "/usr/local/lib/python3.10/dist-packages/keras/utils/traceback_utils.py", line 65, in error_handler
return fn(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1685, in fit
tmp_logs = self.train_function(iterator)
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1284, in train_function
return step_function(self, iterator)
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1268, in step_function
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1249, in run_step
outputs = model.train_step(data)
File "<ipython-input-46-14a3be721cf4>", line 19, in train_step
batch_lloss = self.lloss(y[1], coords)
File "<ipython-input-44-38a1384a3354>", line 2, in regression_loss
true_coord = y_true[1][:,:2]
Node: 'strided_slice_1'
2 root error(s) found.
(0) INVALID_ARGUMENT: Index out of range using input dim 1; input has only 1 dims
[[{{node strided_slice_1}}]]
[[binary_crossentropy/cond/pivot_f/_3/_17]]
(1) INVALID_ARGUMENT: Index out of range using input dim 1; input has only 1 dims
[[{{node strided_slice_1}}]]
0 successful operations.
0 derived errors ignored. [Op:__inference_train_function_13093]
下面是我的代码:
!pip install albumentations
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import albumentations as aug
import os
import cv2
import json
导入数据集roboflow
!pip install roboflow
from roboflow import Roboflow
from tensorflow import keras
from keras.layers import Conv2D, Dense, GlobalMaxPooling2D, Input, MaxPooling2D
from keras.models import Model
from keras.applications import VGG16
rf = Roboflow(api_key="8OAIvpA0eeCXebsfWJ4U")
project = rf.workspace("malla-raraju-umx2i").project("celebrity-z8hhd")
dataset = project.version(2).download("coco")
augmentor = aug.Compose([aug.RandomCrop(width = 120, height = 120),
aug.HorizontalFlip(p=0.5),
aug.RandomBrightnessContrast(p=0.2),
aug.RandomGamma(p=0.2),
aug.VerticalFlip(p=0.5),
aug.RGBShift(p=0.2)],
bbox_params=aug.BboxParams(format='coco',
label_fields=['class_labels']))
with open('/content/Celebrity-2/train/_annotations.coco.json') as f:
annot = json.load(f)
coords = annot['annotations'][1]['bbox']
img = cv2.imread(os.path.join('/content/Celebrity-2/train',annot['images'][1]['file_name']))
class_label = annot['categories'][1]['name']
sample_aug = augmentor(image=img, bboxes=[coords], class_labels=[class_label])
def lets_see(img, min_c, max_c, b_color):
det = cv2.rectangle(cv2.cvtColor(img, cv2.COLOR_BGR2RGB), min_c, max_c, b_color, 1)
plt.imshow(det, origin ='upper')
lets_see(sample_aug['image'],tuple(np.array(sample_aug['bboxes'][0][0:2]).astype(int)),
tuple(np.add(sample_aug['bboxes'][0][0:2],sample_aug['bboxes'][0][2:]).astype(int)),
(255, 0, 0))
sample_aug['class_labels']
annot['categories']
os.remove('/content/Celebrity-2/README.dataset.txt')
os.remove('/content/Celebrity-2/README.roboflow.txt')
aug_dir = '/content/aug_data'
os.mkdir(aug_dir)
DataAugmentation流水线
可能会运行,但需要做一些修改,请检查aug_data文件夹确认
data_dir = '/content/Celebrity-2'
sub_dir = ['test', 'train', 'valid', None]
try:
for sub in sub_dir:
if sub!=None:
anot_f=os.path.join(data_dir,sub,'_annotations.coco.json')
with open(anot_f) as f:
f = json.load(f)
for indx,image in enumerate(f['images']):
img_path = image['file_name']
coords = f['annotations'][indx]['bbox']
label = f['annotations'][indx]['category_id']
for _ in range(60):
img = cv2.imread(os.path.join(data_dir,sub,img_path))
aug_img = augmentor(image=img, bboxes=[coords], class_labels=['Jr.NTR'])
annotation = {}
annotation['image'] = img_path
if len(aug_img['bboxes'])>0:
annotation['bbox'] = aug_img['bboxes'][0]
else:
annotation['bbox'] = [0, 0, 0, 0]
annotation['class'] = 1 if len(aug_img['class_labels'])>0 else 0
if not os.path.exists(os.path.join(aug_dir,sub)):
os.mkdir(os.path.join(os.path.join(aug_dir,sub)))
if not os.path.exists(os.path.join(aug_dir,sub,'label')):
os.mkdir(os.path.join(aug_dir,sub,'label'))
with open(os.path.join(aug_dir,sub,'label',f'{img_path.split(".")[0]}.{_}.json'), 'w') as o:
json.dump(annotation, o)
else:
with open(os.path.join(aug_dir,sub,'label',f'{img_path.split(".")[0]}.{_}.json'), 'w') as o:
json.dump(annotation, o)
if not os.path.exists(os.path.join(aug_dir,sub,'image')):
os.mkdir(os.path.join(aug_dir,sub,'image'))
cv2.imwrite(os.path.join(aug_dir,sub,'image',f'{img_path.split(".")[0]}.{_}.jpg'),
aug_img['image'])
else:
cv2.imwrite(os.path.join(aug_dir,sub,'image',f'{img_path.split(".")[0]}.{_}.jpg'),
aug_img['image'])
except Exception as e:
print(e)
将标签Map到数据管道
def load_labels(label_path):
with open(label_path.numpy(), 'r', encoding = 'utf-8') as f:
label = json.load(f)
return [label['class'], label['bbox']]
def load_images(image_path):
byte_img = tf.io.read_file(image_path)
img = tf.io.decode_jpeg(byte_img)
return img
def label_pl(label):
label_line = tf.data.Dataset.list_files(label, shuffle=False)
label_line = label_line.map(lambda x: tf.py_function(load_labels, [x], [tf.uint8, tf.float32]))
return label_line
def image_pl(img):
img_line = tf.data.Dataset.list_files(img, shuffle=False)
img_line = img_line.map(load_images)
img_line = img_line.map(lambda x: tf.image.resize(x, (120, 120)))
img_line = img_line.map(lambda x: x/255)
return img_line
def data_pl(data):
data_pl = tf.data.Dataset.zip(data)
data_pl = data_pl.shuffle(int(len(data[0])*1.35))
data_pl = data_pl.batch(16)
data_pl = data_pl.prefetch(4) # eliminates bottle-necks in data pipeline
return data_pl
data = [None]*3
img = [None]*3
lbl = [None]*3
i=0
for _ in os.listdir(aug_dir):
pl_img = image_pl(os.path.join(aug_dir,_,'image','*.jpg'))
pl_labels = label_pl(os.path.join(aug_dir,_,'label','*.json'))
img[i] = pl_img
lbl[i] = pl_labels
data[i] = data_pl((pl_img,pl_labels))
i+=1
batch = data[0].as_numpy_iterator()
batch.next()[1] # every thing's worki'n fine
len(data[0]), len(data[1]), len(data[2])
len(img[0]), len(lbl[0]), len(img[1]), len(lbl[1]), len(img[2]), len(lbl[2])
batch_label = lbl[1].as_numpy_iterator()
batch_label.next()
batch = data[1].as_numpy_iterator()
batch.next()[1] # every thing's worki'n fine
vgg16 = VGG16(include_top=False)
vgg16.summary()
keras.utils.plot_model(vgg16, show_shapes=True, show_layer_activations=True)
def build_model():
input = Input(shape=(120,120,3))
vgg16 = VGG16(include_top=False)(input)
features = GlobalMaxPooling2D(name = 'feature_map')(vgg16)
classify_head = Dense(2048, activation='relu', name = 'classification_dense')(features)
classify_head = Dense(1, activation = 'sigmoid', name = 'classifying_head')(classify_head)
regress_head = Dense(2048, activation='relu', name = 'regression_dense')(features)
regress_head = Dense(4, activation = 'relu', name = 'regression_head')(regress_head)
return Model(inputs = input, outputs = [classify_head,regress_head])
ntr_detector = build_model()
ntr_detector.summary()
keras.utils.plot_model(ntr_detector, show_shapes=True, show_layer_activations=True)
bpe = len(data[1]) # batches per epoch
lr_decay = (1/.75-1)/bpe
def regression_loss(y_true, y_pred):
true_coord = y_true[1][:,:2]
pred_coord = y_pred[1][:2]
true_w = y_true[1][:,2]
true_h = y_true[1][:,3]
pred_w = y_pred[1][2]
pred_h = y_pred[1][3]
delta_coord = tf.reduce_sum(tf.square(true_coord-pred_coord))
delta_size = tf.reduce_sum(tf.square(tf.sqrt(true_w)-tf.sqrt(pred_w))+
tf.square(tf.sqrt(true_h)-tf.sqrt(pred_h)))
return delta_coord+delta_size
opt = keras.optimizers.Adam(learning_rate=0.0001, weight_decay = lr_decay)
closs = keras.losses.BinaryCrossentropy()
lloss = regression_loss
class detect_ntr(Model):
def __init__(self, ntr_detector, **kwargs):
super().__init__(**kwargs)
self.model = ntr_detector
def compile(self, opt, closs, lloss, **kwargs):
super().compile(**kwargs)
self.opt = opt
self.closs = closs
self.lloss = lloss
def train_step(self, batch, **kwargs):
x,y = batch
with tf.GradientTape() as tape:
classes, coords = self.model(x, training=True)
batch_closs = self.closs(y[0], classes)
batch_lloss = self.lloss(y[1], coords)
total_loss = batch_lloss + 0.5 * batch_closs
gradient = tape.gradient(total_loss, self.model.trainable_variables)
opt.apply_gradients(zip(gradient, self.model.trainable_variables))
return {'Loss ' : total_loss, 'cLoss ' : batch_closs, 'lLoss ' : batch_lloss}
def test_step(self, batch, **kwargs):
x,y = batch
classes, coords = self.model(x, training=True)
batch_closs = self.closs(y[0], classes)
batch_lloss = self.lloss(tf.cast(y[1], tf.float32), coords)
total_loss = batch_lloss + 0.5 * batch_closs
return {'val_Loss ' : total_loss, 'val_cLoss ' : batch_closs, 'val_lLoss ' : batch_lloss}
def call(self, x, **kwargs):
return self.model(x, **kwargs)
model = detect_ntr(ntr_detector)
model.compile(opt, closs, lloss, metrics=['accuracy'])
test, train, val = data
log_dir = '/content/logs'
callbacks = keras.callbacks.TensorBoard(log_dir=log_dir)
hist = model.fit(train,epochs=40,validation_data=val, callbacks=[callbacks])
1条答案
按热度按时间hi3rlvi21#
我忘了我传递了一个切片Tensor,并试图再次切片,错误得到解决。下面是解决方案