Haskell中带注释的面部图像数据库表示

时间:2013-09-11 06:20:05

标签: haskell

难点如下:不同的注释图像数据库具有不同的标记集。例如,IMM数据库有近60个标记,而BioID有大约17个标记。一些标记在数据库之间是共同的“共享”,其中一些不是。

我想问一下如何在Haskell中表示这些数据结构的建议?任务是使用不同的图像数据库,使用相同的工具训练它们,并能够“交叉”比较用它们训练的预测变量所做的结果吗?

enter image description here

这里有一些伪代码:

-- 

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

为了清楚起见我已经有了“train”和“fit”功能,这些功能目前是存储或接受数据列表。但我想做得更好。

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

EXTRA:将来我也愿意:

  1. 选择两个图像数据库的“交叉点”,训练一个装有少量地标的装配工,但训练数据的尺寸更大。

  2. 采用两个图像数据库的“联合”并训练另一个具有最多地标的装配工,但可能是较小尺寸的训练数据,因为只使用两个数据库共有的点。

  3. FRANCK:link to franck database

    IMM:link to IMM database

    BioID:link to BioID database

1 个答案:

答案 0 :(得分: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中列出所有数据集中的各个标记标识符,然后Face可以有不同的标记,如果您希望在两个面之间共享标记,则执行M.intersect