首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OpenImaj - LAPACK错误的渔面: DSYGVD返回40

使用OpenImaj - LAPACK错误的渔面: DSYGVD返回40
EN

Stack Overflow用户
提问于 2016-03-10 11:19:40
回答 2查看 205关注 0票数 0

我试图使用OpenImaj来处理渔人界面,但是下面的代码会导致以下错误:

线程"main“中的异常: LAPACK错误: DSYGVD在org.openimaj.math.matrix.GeneralisedEigenvalueProblem.sygvd(GeneralisedEigenvalueProblem.java:57) at org.openimaj.math.matrix.GeneralisedEigenvalueProblem.symmetricGeneralisedEigenvectorsSorted(GeneralisedEigenvalueProblem.java:221) at org.openimaj.math.matrix.algorithm.LinearDiscriminantAnalysis.learnBasis(LinearDiscriminantAnalysis.java:211) at org.openimaj.image.model.FisherImages.train(FisherImages.java:195) at org.openimaj.image.model.FisherImages.train(FisherImages.java:159)返回40在org.openimaj.tutorial.facialanalysis.FisherfacesExample.main(FisherfacesExample.java:35)

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.vfs2.FileSystemException;
import org.openimaj.data.dataset.GroupedDataset;
import org.openimaj.data.dataset.ListDataset;
import org.openimaj.data.dataset.VFSGroupDataset;
import org.openimaj.experiment.dataset.split.GroupedRandomSplitter;
import org.openimaj.image.DisplayUtilities;
import org.openimaj.image.FImage;
import org.openimaj.image.ImageUtilities;
import org.openimaj.image.model.FisherImages;

public class FisherfacesExample {

    public static void main(String[] args) {
        try {
            // getting a set of face images
            VFSGroupDataset<FImage> dataset = new VFSGroupDataset<FImage>(
                    "zip:http://datasets.openimaj.org/att_faces.zip", ImageUtilities.FIMAGE_READER);

            // forming training set & testing set
            int nTraining = 1;
            int nTesting = 5;
            GroupedRandomSplitter<String, FImage> splits = new GroupedRandomSplitter<String, FImage>(dataset, nTraining,
                    0, nTesting);
            GroupedDataset<String, ListDataset<FImage>, FImage> training = splits.getTrainingDataset();
            GroupedDataset<String, ListDataset<FImage>, FImage> testing = splits.getTestDataset();

            // set number of components and train the training set of images
            int components = 50;
            FisherImages fisher = new FisherImages(components);
            fisher.train(training);

             //drawing the first 12 basis vectors
             List<FImage> fisherFaces = new ArrayList<FImage>();
             for (int i = 0; i < 12; i++) {
                 fisherFaces.add(fisher.visualise(i));
             }
             DisplayUtilities.display("FisherFaces", fisherFaces);

        } catch (FileSystemException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

你能告诉我问题出在哪里吗?在训练面部图像之前,我应该做些什么吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-11 08:15:55

这个错误几乎肯定是因为你试图用每堂课只有一个例子来训练。增加培训样本的数量,然后重试。

(技术原因: FisherFaces使用多类线性鉴别分析,这涉及到计算每个类的协方差矩阵;不能用每个类的单个样本正确计算)

票数 0
EN

Stack Overflow用户

发布于 2016-03-11 16:53:06

增加训练图像的数量解决了错误。然而,还有另一个问题:

线程"main“中的异常:2在org.openimaj.image.model.FisherImages.getBasisVector(FisherImages.java:230) at org.openimaj.image.model.FisherImages.visualise(FisherImages.java:243) at org.openimaj.tutorial.facialanalysis.FisherfacesExample.main(FisherfacesExample.java:41)

组件数量的有意义的值是什么?谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35914971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档