fiji / Trainable_Segmentation

Fiji library to perform image segmentation based on the Weka learning schemes
https://imagej.net/Trainable_Weka_Segmentation
GNU General Public License v3.0
106 stars 60 forks source link

Could not apply classifier!? #51

Closed Balive13 closed 4 years ago

Balive13 commented 4 years ago

Hi, I have data_feature.arff that there are 10 classes and 30 feature. at first, I loaded the image(2592*1944 pix) and load plugin. When I load data and press training classifier I face with "Cloud not apply classifier". why? Log error in console is :

java.lang.ArrayIndexOutOfBoundsException: 21 weka.core.DenseInstance.value(DenseInstance.java:347) weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at weka.core.DenseInstance.value(DenseInstance.java:347) at weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) at hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) at hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) at hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) 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:748) java.lang.ArrayIndexOutOfBoundsException: 21 weka.core.DenseInstance.value(DenseInstance.java:347) weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at weka.core.DenseInstance.value(DenseInstance.java:347) at weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) at hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) at hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) at hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) 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:748) java.lang.ArrayIndexOutOfBoundsException: 21 weka.core.DenseInstance.value(DenseInstance.java:347) weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at weka.core.DenseInstance.value(DenseInstance.java:347) at weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) at hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) at hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) at hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) 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:748) java.lang.ArrayIndexOutOfBoundsException: 21 weka.core.DenseInstance.value(DenseInstance.java:347) weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at weka.core.DenseInstance.value(DenseInstance.java:347) at weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) at hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) at hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) at hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) 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:748) java.lang.ArrayIndexOutOfBoundsException: 21 weka.core.DenseInstance.value(DenseInstance.java:347) weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at weka.core.DenseInstance.value(DenseInstance.java:347) at weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) at hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) at hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) at hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) 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:748) java.lang.ArrayIndexOutOfBoundsException: 21 weka.core.DenseInstance.value(DenseInstance.java:347) weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at weka.core.DenseInstance.value(DenseInstance.java:347) at weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) at hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) at hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) at hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) 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:748) java.lang.ArrayIndexOutOfBoundsException: 21 weka.core.DenseInstance.value(DenseInstance.java:347) weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at weka.core.DenseInstance.value(DenseInstance.java:347) at weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) at hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) at hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) at hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) 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:748) java.lang.ArrayIndexOutOfBoundsException: 21 weka.core.DenseInstance.value(DenseInstance.java:347) weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at weka.core.DenseInstance.value(DenseInstance.java:347) at weka.core.AbstractInstance.isMissing(AbstractInstance.java:319) at hr.irb.fastRandomForest.FastRandomTree.distributionForInstance(FastRandomTree.java:248) at hr.irb.fastRandomForest.FastRfBagging.distributionForInstance(FastRfBagging.java:645) at hr.irb.fastRandomForest.FastRandomForest.distributionForInstance(FastRandomForest.java:646) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:7027) at trainableSegmentation.WekaSegmentation$8.call(WekaSegmentation.java:1) 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:748) java.lang.NullPointerException trainableSegmentation.WekaSegmentation.applyClassifier(WekaSegmentation.java:6923) trainableSegmentation.WekaSegmentation.applyClassifier(WekaSegmentation.java:6361) trainableSegmentation.WekaSegmentation.applyClassifier(WekaSegmentation.java:6288) trainableSegmentation.Weka_Segmentation.showClassificationImage(Weka_Segmentation.java:1581) trainableSegmentation.Weka_Segmentation$1$1.run(Weka_Segmentation.java:387) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

at trainableSegmentation.WekaSegmentation.applyClassifier(WekaSegmentation.java:6923) at trainableSegmentation.WekaSegmentation.applyClassifier(WekaSegmentation.java:6361) at trainableSegmentation.WekaSegmentation.applyClassifier(WekaSegmentation.java:6288) at trainableSegmentation.Weka_Segmentation.showClassificationImage(Weka_Segmentation.java:1581) at trainableSegmentation.Weka_Segmentation$1$1.run(Weka_Segmentation.java:387) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 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:748)

how to I can fix it? Also, I resize that image to 400*300 pix but I get the same error.

iarganda commented 4 years ago

Hello @alirezaeinassab ,

How did you get that ARFF file? Did you train on similar data using the plugin?

Balive13 commented 4 years ago

Hi, Thank you for your reply. I get the features of ARFF file that including RGB, HSI, Lab* and texture feature. Yes, I did, I just loaded data in trainable segmentation then train on similar data using the plugin. one more thing, I normalized this ARFF file that I think that issue maybe is related to normalized data. Is this possible?

With regard

iarganda commented 4 years ago

When you say you "get the features of ARFF file that including RGB, HSI, Lab* and texture feature", you mean you calculated that outside the plugin, right? That's not a supported option. You need to get your ARFF from the existing features in Trainable Weka Segmentation.

Balive13 commented 4 years ago

Yes, exactly, You says ARFF files that outside the plugin is not supported by trainable weka segmentation, So, It limits trainable weka segmentation, Right? Is there any way that I can train my ARFF file and test on the image?

iarganda commented 4 years ago

For that, you need to use scripting. You have an example here on how to use your own features.

Balive13 commented 4 years ago

Thank you so much for answering. I think this issue should be closed.