6

困难在于:不同的注释图像数据库具有不同的标志集。例如,IMM 数据库有近 60 个地标,而 BioID 有大约 17 个。一些地标在数据库之间是常见的“共享”,有些则不是。

我想就如何在 Haskell 中表示此类数据结构征求意见?任务是使用不同的图像数据库,用相同的工具训练它们,并能够“交叉”比较用它们训练的预测器的结果?

在此处输入图像描述

这里开始一些伪代码:

-- 

data FaceIMM = LeftEye RightEye Nose Mouth Chin

data FaceBioID = LeftEye RightEye LeftNoseTip RightNoseTip NoseTop Mouth

...

-- training
--

predictor <- train confParameters landmarkDescriptors positionValues

...

fitter <- meanShifter . predictors

...

-- detection
--

fitBioID = fitterBioID face
fitIMM = fitterIMM face

...

-- comparison

errorBioID = distance (fitBioID - truth)
errorIMM = distance (fitIMM - truth)

compare errorBioID errorIMM

为了清楚起见,我已经有了“训练”和“拟合”功能,它们目前要么存储要么接受数据列表。但我想做得比这更好。

我不希望看到完全完善的数据结构,而是会帮助我开始解决这个问题的东西。

EXTRA:将来我还想做:

  1. 取两个图像数据库的“交集”并训练具有少量地标但训练数据更大的拟合器。

  2. 取两个图像数据库的“联合”并训练另一个拟合器,该拟合器将具有最多的地标,但训练数据的大小可能较小,因为仅使用两个数据库共有的点。

FRANCK:链接到franck数据库

IMM:链接到 IMM 数据库

BioID:链接到 BioID 数据库

4

1 回答 1

3

最简单的方法可能是

import qualified Data.Map as M

data MarkType = LeftEye | RightEye | LeftNoseTip | RightNoseTip | NoseTop | Mouth

data MarkData = MarkData { mdX :: Int, mdY :: Int, ... }

type Face = M.Map MarkType MarkData

因此,您列出来自所有数据集的单个标记标识符MarkType,然后 aFace可以具有不同的标记,如果您希望在 2 个面之间共享标记,您可以这样做M.intersect

于 2013-09-11T15:11:07.007 回答