ZS-Deconvnet Fiji插件报错

[INFO] Load TensorFlow…
[INFO] Using native TensorFlow version: TF 1.15.0 GPU (CUDA 10.0, CuDNN >= 7.4.1)
[INFO] Training image dimensions: [1920, 1080, 3]
[INFO] Create session…
[INFO] Import graph…zs_deconvnet_2d_patch_128.pb
[INFO] Augment tiles…
[INFO] estimated beta2: 7531.789 - 11297.684
[INFO] Normalizing…
java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at plugin.zsdeconvnet.train.Training2D.train(Training2D.java:106)
at plugin.zsdeconvnet.commands.TrainOnOpenedImg.run(TrainOnOpenedImg.java:202)
at org.scijava.command.CommandModule.run(CommandModule.java:196)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:125)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:64)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:247)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.lang.NullPointerException
at plugin.zsdeconvnet.train.Training2D.mainThread(Training2D.java:286)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
… 4 more

反复重装过Fiji无效;在其他设备上成功运行

这个问题的原因我也不知道,问一下GPT:

这个错误信息表明出现了NullPointerException(空指针异常),这是由于代码尝试使用一个未初始化的对象引用导致的。以下是可能的原因和一些解决方法:

  1. 数据初始化问题

    • 确保训练过程中所需的所有数据和参数都已正确加载和初始化。检查输入数据(图像)是否为空或未加载成功。如果可能的话,添加一些调试代码,在出错前打印变量的状态。
  2. 模型文件问题

    • 验证模型文件(zs_deconvnet_2d_patch_128.pb)是否已正确加载,并且没有损坏。确保文件路径正确且文件可访问。
    • 如果模型文件是最近生成或修改的,尝试重新导出或重新生成,确保文件本身没有问题。
  3. 与TensorFlow版本的兼容性问题

    • 你使用的是TensorFlow 1.15版本和CUDA 10.0,确保所有组件,包括依赖项,都与TensorFlow和CUDA版本匹配,以避免兼容性问题。
    • 如果可能的话,可以考虑更新TensorFlow、CUDA或CuDNN到较新版本(如果受支持)。
  4. 插件问题(zsdeconvnet)

    • 这个问题可能出在zsdeconvnet插件本身。确保插件与当前使用的TensorFlow和Java版本兼容。
    • 还可以检查插件的文档,看看是否有更新版本,如果有的话,尝试更新插件。
  5. Java内存管理

    • 如果你处理的是大数据集,可以增加Java虚拟机(JVM)的内存分配,因为内存不足可能会导致意外的空指针异常。
    • 你可以通过调整JVM参数增加内存限制,例如使用-Xmx4g来设置4GB的堆内存。
  6. Java代码调试

    • 如果你有源代码的访问权限,可以在出错的位置添加一些调试语句,以定位NullPointerException的具体发生位置。这可以帮助你找到未初始化的对象。
    • 检查Training2D.java中的mainThread方法,看是否有访问到空对象的情况。

以上由GPT4o提供。

补充问一下:我用TensorFlow GPU模式下traing loss一直过高怎么办 (维持在0.8左右,且经过多个epoch以后没有下降)?在CPU模式下很正常但是CPU模式太慢了…

是的,ImageJ里的GPU支持没有跟上,tensorflow版本太旧了,建议直接在python里复现。loss很高有很多原因,可以问问gpt排查一下。

您能分享一下TensorFlow的安装过程吗?我看视频里面没有提到。
我其实在一台老一点的配置用imageJ成功过,但是在新一点的笔记本上复现不了。后来我直接把旧设备上的Fiji文件夹整个复制到新设备,可以运行插件但是出现了上述的train loss 和validation loss 持续过高 (结果也完全是花屏)的问题。

今天看了N2V 降噪那个视频,好像突然释然了…我这个报错的笔记本用的是30系显卡,似乎不支持CUDA 10.0?之前成功的设备用的是一个旧的1660

是的,之前的回复就是这个意思