ssd评估程序eval_ssd_network.py执行错误:OP_REQUIRES failed at save_restore_tensor.cc:170

本文详细介绍了SSD(Single Shot MultiBox Detector)网络的评估过程与关键参数设置,包括训练与评估标志、网络参数及数据集文件。涵盖了批处理大小、检查点路径、数据集目录等配置,以及锚框比例、大小界限、特征层和形状等SSD特定参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# =========================================================================== #
# Training | Evaluation flags:
# =========================================================================== #
{'batch_size': <absl.flags._flag.Flag object at 0x000001B293BF4828>,
 'checkpoint_path': <absl.flags._flag.Flag object at 0x000001B293BF49E8>,
 'dataset_dir': <absl.flags._flag.Flag object at 0x000001B293BF4C88>,
 'dataset_name': <absl.flags._flag.Flag object at 0x000001B293BF4B70>,
 'dataset_split_name': <absl.flags._flag.Flag object at 0x000001B293BF4BE0>,
 'eval_dir': <absl.flags._flag.Flag object at 0x000001B293BF4A58>,
 'eval_image_size': <absl.flags._flag.Flag object at 0x000001B293BF4668>,
 'eval_resize': <absl.flags._flag.Flag object at 0x000001B293BF45C0>,
 'gpu_memory_fraction': <absl.flags._flag.Flag object at 0x000001B293BF4E48>,
 'h': <tensorflow.python.platform.app._HelpFlag object at 0x000001B293BF4F28>,
 'help': <tensorflow.python.platform.app._HelpFlag object at 0x000001B293BF4F28>,
 'helpfull': <tensorflow.python.platform.app._HelpfullFlag object at 0x000001B293BF4F98>,
 'helpshort': <tensorflow.python.platform.app._HelpshortFlag object at 0x000001B293BFB048>,
 'keep_top_k': <absl.flags._flag.Flag object at 0x000001B293BF69E8>,
 'master': <absl.flags._flag.Flag object at 0x000001B293BF4940>,
 'matching_threshold': <absl.flags._flag.Flag object at 0x000001B293BF4518>,
 'max_num_batches': <absl.flags._flag.Flag object at 0x000001B293BF48D0>,
 'model_name': <absl.flags._flag.Flag object at 0x000001B293BF4CF8>,
 'moving_average_decay': <absl.flags._flag.Flag object at 0x000001B293BF4DD8>,
 'nms_threshold': <absl.flags._flag.Flag object at 0x000001B293BF4470>,
 'num_classes': <absl.flags._flag.Flag object at 0x000001B293BF4780>,
 'num_preprocessing_threads': <absl.flags._flag.Flag object at 0x000001B293BF4AC8>,
 'preprocessing_name': <absl.flags._flag.Flag object at 0x000001B293BF4D68>,
 'remove_difficult': <absl.flags._flag.BooleanFlag object at 0x000001B293BF46A0>,
 'select_threshold': <absl.flags._flag.Flag object at 0x000001B2F6117B38>,
 'select_top_k': <absl.flags._flag.Flag object at 0x000001B293BCD780>,
 'wait_for_checkpoints': <absl.flags._flag.BooleanFlag object at 0x000001B293BF4E80>}

# =========================================================================== #
# SSD net parameters:
# =========================================================================== #
{'anchor_offset': 0.5,
 'anchor_ratios': [[2, 0.5],
                   [2, 0.5, 3, 0.3333333333333333],
                   [2, 0.5, 3, 0.3333333333333333],
                   [2, 0.5, 3, 0.3333333333333333],
                   [2, 0.5],
                   [2, 0.5]],
 'anchor_size_bounds': [0.15, 0.9],
 'anchor_sizes': [(2.0, 45.0),
                  (45.0, 99.0),
                  (99.0, 153.0),
                  (153.0, 207.0),
                  (207.0, 261.0),
                  (261.0, 315.0)],
 'anchor_steps': [8, 16, 32, 64, 100, 300],
 'feat_layers': ['block4', 'block7', 'block8', 'block9', 'block10', 'block11'],
 'feat_shapes': [(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)],
 'img_shape': (300, 300),
 'no_annotation_label': 2,
 'normalizations': [20, -1, -1, -1, -1, -1],
 'num_classes': 2,
 'prior_scaling': [0.1, 0.1, 0.2, 0.2]}

# =========================================================================== #
# Training | Evaluation dataset files:
# =========================================================================== #
['.\\VOC2007\\test\\tfrecords\\voc_2007_train_000.tfrecord',
 '.\\VOC2007\\test\\tfrecords\\voc_2007_train_001.tfrecord',
 '.\\VOC2007\\test\\tfrecords\\voc_2007_train_002.tfrecord',
 '.\\VOC2007\\test\\tfrecords\\voc_2007_train_003.tfrecord']

WARNING:tensorflow:From D:/work/SSD-Tensorflow-master/eval_ssd_network.py:243: streaming_mean (from tensorflow.contrib.metrics.python.ops.metric_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.metrics.mean
INFO:tensorflow:Evaluating /tmp/tfmodel/
INFO:tensorflow:Starting evaluation at 2019-03-12-14:32:10
INFO:tensorflow:Graph was finalized.
2019-03-12 22:32:10.434182: I c:\users\user\source\repos\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2019-03-12 22:32:10.658497: I c:\users\user\source\repos\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1392] Found device 0 with properties: 
name: GeForce GTX 1070 major: 6 minor: 1 memoryClockRate(GHz): 1.645
pciBusID: 0000:01:00.0
totalMemory: 8.00GiB freeMemory: 6.62GiB
2019-03-12 22:32:10.658842: I c:\users\user\source\repos\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1471] Adding visible gpu devices: 0
2019-03-12 22:32:11.307547: I c:\users\user\source\repos\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:952] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-03-12 22:32:11.307763: I c:\users\user\source\repos\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:958]      0 
2019-03-12 22:32:11.307907: I c:\users\user\source\repos\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:971] 0:   N 
2019-03-12 22:32:11.308246: I c:\users\user\source\repos\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1084] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 819 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
INFO:tensorflow:Restoring parameters from /tmp/tfmodel/
2019-03-12 22:32:11.425660: W c:\users\user\source\repos\tensorflow\tensorflow\core\framework\op_kernel.cc:1318] OP_REQUIRES failed at save_restore_tensor.cc:170 : Invalid argument: Unsuccessful TensorSliceReader constructor: Failed to get matching files on /tmp/tfmodel/: Not found: FindFirstFile failed for: /tmp/tfmodel : ϵͳ�Ҳ���ָ����·����
; No such process

Process finished with exit code -1073741819 (0xC0000005)
 

import torch import torch.nn as nn import librosa import numpy as np from torch.utils.data import Dataset , DataLoader from nemo.collections.tts.models import Tacotron2Model from nemo.collections.tts.models import WaveGlowModel import os # 配置参数 config = { "sr": 22050 , # 采样率 "batch_size": 8 , # 根据显存调整 "num_epochs": 500 , "gpu_id": 0 , "mel_dim": 80 , # 梅尔频谱维度 "text_len": 100 , # 最大文本长度 "n_fft": 1024 , "win_length": 1024 , "hop_length": 256 } # 自定义数据集(需配合文本标注文件) class VoiceDataset(Dataset): def __init__(self , data_dir): self.files = [os.path.join(data_dir , f) for f in os.listdir(data_dir)] # 实际应加载对应的文本标注 self.texts = ["Hello world"] * len(self.files) # 示例文本 def __len__(self): return len(self.files) def __getitem__(self , idx): # 加载音频 audio , sr = librosa.load(self.files[idx] , sr = config['sr']) # 生成梅尔频谱 mel = librosa.feature.melspectrogram( y = audio , sr = sr , n_mels = config['mel_dim'] , n_fft = config['n_fft'] , win_length = config['win_length'] , hop_length = config['hop_length'] ) mel = librosa.power_to_db(mel) mel = (mel - mel.mean()) / (mel.std() + 1e-9) # 归一化 # 文本转换为音素序列(示例) text_seq = torch.randint(0 , 100 , (config['text_len'] ,)) # 实际应使用文本处理 return { "mel": torch.FloatTensor(mel.T) , # (time, n_mels) "text": text_seq.long() } # 初始化模型 device = torch.device(f"cuda:{config['gpu_id']}") class VoiceGenerator(nn.Module): def __init__(self): super().__init__() # Tacotron2完整模型 self.tacotron = Tacotron2Model.restore_from(r"C:\Users\gz07106\.cache\torch\NeMo\NeMo_1.6.2\tts_en_tacotron2\74d819609f47744063679b44e93a47f1\tts_en_tacotron2.nemo") self.tacotron.eval() # 冻结预训练参数 # WaveGlow声码器 self.waveglow = WaveGlowModel.from_pretrained("tts_waveglow_88m") self.waveglow.eval() # 冻结预训练参数 # 适配层 self.text_embed = nn.Embedding(100 , 512) # 示例词汇量 def forward(self , text_seq): # 文本嵌入 text_emb = self.text_embed(text_seq) # 生成梅尔频谱 _ , mel_out , _ = self.tacotron(text_seq , text_len = torch.tensor([len(text_seq)])) # 生成语音波形 with torch.no_grad(): # 保持预训练声码器不变 audio = self.waveglow.convert_spectrogram_to_audio(spec = mel_out) return audio , mel_out # 初始化系统 model = VoiceGenerator().to(device) optimizer = torch.optim.AdamW(model.parameters() , lr = 3e-4) criterion = nn.L1Loss() # 更适合频谱重建 # 数据加载 dataset = VoiceDataset("training_data/sliced_audio") loader = DataLoader(dataset , batch_size = config['batch_size'] , shuffle = True , collate_fn = lambda x: x[0]) # 训练循环 for epoch in range(config['num_epochs']): for batch in loader: mels = batch['mel'].unsqueeze(0).to(device) # 添加批次维度 texts = batch['text'].unsqueeze(0).to(device) # 前向传播 gen_audio , gen_mel = model(texts) # 计算梅尔频谱损失 loss = criterion(gen_mel , mels) # 反向传播 optimizer.zero_grad() loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters() , 1.0) optimizer.step() # 保存检查点 if epoch % 50 == 0: torch.save({ 'model': model.state_dict() , 'optimizer': optimizer.state_dict() } , f"voice_model_epoch{epoch}.pt") print(f"Epoch {epoch} | Loss: {loss.item():.4f}")
03-21
<think>嗯,用户遇到了eval_dtu.py脚本出现未识别参数的错误,提示类似“error: unrecognized arguments”。首先,我得回想一下这类错误的常见原因。通常,Python脚本在使用argparse库解析命令行参数,如果输入的参数没有被正确声明,就会报这个错误。可能的情况包括拼写错误、参数格式不正确,或者是版本更新后参数名称被修改了。 接下来,我需要参考用户提供的引用内容。比如,引用[2]中提到解决train.py未识别参数的问题,建议检查参数名称和格式是否正确,并确认脚本是否使用了正确的参数解析方式。类似地,引用[3]中的问题涉及到DeepSpeed的--local-rank参数,可能需要在训练脚本中显式声明。这些案例都指向了参数解析的问题。 可能的解决步骤包括: 1. 检查参数拼写和格式是否正确,比如是否多加了空格或使用了错误的大小写。 2. 确认参数是否被正确添加到argparse的解析器中,用户可能需要查看eval_dtu.py的源码,检查是否有对应的add_argument语句。 3. 检查Python环境或库的版本是否有变化,导致参数名称被弃用或修改。 4. 如果参数是布尔类型,是否使用了正确的存储方式,比如action='store_true'。 5. 检查文件路径是否存在,引用[4]中的问题就是路径错误导致参数解析失败。 另外,用户可能需要运行帮助命令(如python eval_dtu.py -h)来查看支持的参数列表,确认输入是否符合要求。如果参数确实存在但依然报错,可能需要检查参数的位置是否正确,或者在参数前是否有必要的前缀(如--或-)。 在用户提供的引用中,类似问题通常通过检查参数声明和输入格式来解决。因此,建议用户按照这些步骤逐一排查。同,如果用户没有访问脚本源码的权限,可能需要联系开发者或查阅文档确认正确的参数用法。</think>### 解决`eval_dtu.py`未识别参数错误的步骤 #### 1. **检查参数名称与格式** - **问题原因**:命令行输入的参数名称与脚本定义的参数不匹配,可能是拼写错误、大小写不一致或格式错误(如缺少`--`或`-`前缀)[^2][^3]。 - **解决方法**: - 使用帮助命令查看支持的参数列表: ```bash python eval_dtu.py --help # 或 -h ``` - 核对参数名称,例如`--input_dir`可能需写成`--input-dir`,具体取决于脚本定义[^4]。 #### 2. **验证参数解析逻辑** - **问题原因**:脚本可能未正确声明参数解析规则(如使用`argparse`库漏掉某些参数)。 - **解决方法**: - 检查脚本中是否包含类似代码段: ```python import argparse parser = argparse.ArgumentParser() parser.add_argument("--input_path", type=str) # 确保参数名称与命令行输入一致 args = parser.parse_args() ``` - 若参数未在`add_argument`中声明,需添加对应代码。 #### 3. **处理路径或文件参数** - **问题原因**:文件路径错误可能导致参数解析失败(如路径包含空格或特殊字符)[^4]。 - **解决方法**: - 用引号包裹路径: ```bash python eval_dtu.py --input_dir "path/with space/" ``` - 检查文件是否存在: ```python import os assert os.path.exists(args.input_dir), "路径不存在" ``` #### 4. **检查依赖库版本兼容性** - **问题原因**:脚本依赖的库(如`torch`、`deepspeed`)版本更新可能导致参数解析规则变化。 - **解决方法**: - 查看脚本文档或GitHub仓库的版本要求。 - 尝试回退到稳定版本: ```bash pip install deepspeed==0.5.0 # 示例版本 ``` #### 5. **处理布尔类型参数** - **问题原因**:布尔参数需通过`action="store_true"`声明,直接赋值会报错。 - **错误示例**: ```bash python eval_dtu.py --use_gpu=True # 错误写法 ``` - **正确写法**: ```bash python eval_dtu.py --use_gpu # 脚本中需定义action="store_true" ``` #### 6. **特殊框架参数处理** - **问题原因**:分布式训练框架(如`deepspeed`)可能要求隐藏参数(如`--local_rank`由框架自动注入)。 - **解决方法**: - 在脚本中添加`--local_rank`参数声明: ```python parser.add_argument("--local_rank", type=int, default=0) ``` --- ### 示例代码修复 假设`eval_dtu.py`缺少对`--output_dir`参数的声明: ```python # 修改前(报错) parser = argparse.ArgumentParser() parser.add_argument("--input_dir", type=str) # 修改后(修复) parser.add_argument("--input_dir", type=str) parser.add_argument("--output_dir", type=str) # 添加缺失的参数 ``` ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值