工具/软件:
我将尝试实现高斯异常检测。 为此、我需要从现有模型的中间层提取输出、例如 ONR-CL-6480-mobv3-lite-small、用于特征提取。 该器件假定为 AM69A、想使用哪些工具来实现这一目标、敬请提供指导。 如果您有任何相关示例、这将非常有帮助。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi Mitani-san、
如果您想查看 TIDL 中的中间层、以下指令适用于 TIDL 10.1。 确保正确设置 tidl_tool 目录(https://github.com/TexasInstruments/edgeai-tidl-tools/?tab=readme-ov-file#setup)。
转到 edgeai-tidl-tools/tidl_tools 目录。 若要编译模型、请将以下内容复制到名为"import_test"的文件中
modelType = 2
numParamBits = 8
numFeatureBits = 8
inputNetFile ="/resnet18_opset9.onnx"
outputNetFile ="out/tidl_net.bin"
outputParamsFile ="out/tidl_io_buff"
addDataConvertToNet = 0
FOLDPreBnConv2D = 0
rawDataInElementType = 0
inElementType = 0
outElementType = 0
tidlStatsTool ="/PC_DSP_TEST_dl_algo.out"
perfSimTool ="/ti_cnperfsim.out"
GraphVizTool ="/tidl_graphVisualizer.out"
InWidth = 256
InHeight = 256
inNumChannels = 3
numFrames = 1
inFileFormat = 0
inData ="./airshow.jpg"
perfSimConfig ="device_config.cfg"
debugTraceLevel = 4
这假设标准模型 resnet18_opset9.onnx 和 airshow.jpg 存在于 tidl_tools/目录中。 然后运行(从 tidl_tools/):
./tidl_model_import.out import_test
接下来、您将需要运行推理。 将以下内容复制到名为推理测试的文件中。
rawDataInElementType = 0
inDataFormat = 1
numFrames = 1
netBinFile ="out/tidl_net.bin"
ioConfigFile ="out/tidl_io_buff1.bin"
inData ="./airshow.jpg"
outData ="out/tidl_out.bin"
debugTraceLevel = 4
writeTraceLevel = 3
postProcType = 1
flowCtrl = 1
然后运行模型。
./PC_DSP_TEST_dl_algo.out s:推理测试。 这将在 tidl_tools/trace/目录中创建一组文件。 这些文件只是8位整数(*。y 文件)或 float32 (*。bin)的 bin 转储文件。 这是一个用于读取它们的简短 python 脚本。
导入 json
将 NumPy 导入为 NP
Layer ="推理 config_new_0144_00001_00001_00320x00320_float.bin"
fileHandle = open (图层、'rb')
float_data = np.fromfile(fileHandle、dtype=np.float32)
将 open (layer+'.txt'、"w")设为 f:
JSON.DUMP (float_data.tolist ()、f、indent=4)
如果读取.y 文件、请将 dytpe 更改为 int8。
此致、
Chris
"
对于 TIDL、是的、但您需要遵循我在上面给您的说明。 如果您只想转储 ONNX 输出(无 TIDL)、则首先需要更新模型、以便向每一层添加输出。 下面是一个可执行此操作的脚本(将 model_name.onnx 更改为您的模型)。 它将输出一个名为 model_name_Ref.onnx 的文件。
导入 onnx
model_name = f"model_name.onnx"
modified_model_name = model_name.replace (".onnx"、"_Ref.onnx")
DEF 转换(model_name、modified_model_name):
""
此函数可修改 ONNX 模型以包括中间层输出
作为图形输出。 这对于调试和比较非常有用。
""
#加载原始 ONNX 模型
onnx_model = onnx.load (model_name)
intermediate_layer_value_info = onnx.helper.ValueInfoProto ()
intermediate_layer_value_info.name =""
对于 I IN 范围(len (onnx_model.graph.node)):)
对于 j in 范围(len (onnx_model.graph.node[i].output)):)
intermediate_layer_value_info.name = onnx_model.graph.node[i].output[j]
onnx_model.graph.output.append(intermediate_layer_value_info)
onnx.save (onnx_model、modified_model_name)
转换(model_name、modified_model_name)
这将采用如下所示的模型:
并向每一层添加一个输出节点
然后可以将每个输出层输出到一个文件或 STDOUT。 以下示例说明了如何加载_ref 模型、并为 onnx/子目录中的每个输出生成.bin 文件。 您必须提供一个输入数据数组(请参阅突出显示部分)。
将 NumPy 导入为 NP
将 matplotlib.pyplot 作为 plt 导入
将 onnxruntime 作为 ort 导入
将 tensorflow 导入为 tf
导入操作系统
会话= ort.ConferenceSession ("your_model_Ref.onnx")
#获取模型输入详细信息
input_name = session.get_inputs()[0].name
output_details = session.get_outputs()
输出=列表(session.run(None、{input_name:[input_data]})
对于 I IN 范围(len (output_details)):
output_dict[output_details[i]。name]= output[i]
output_dict.items():中的 output_name 和 output_tentor
output_name = output_name.replace ("/"、"_")
model_path = model_path.split ('.')[0]
out = np.array (output_tensor、dtype = np.float32)
out.tofile ('onnx/'+ os.path.basename (model_path)+'_'+ output_name +'.bin')
此致、
Chris