FastAI07-图像回归问题

图像回归问题不同于图像分类问题,它要求模型给出的结果是一个连续的预测值,而不是离散的类别。

图像回归问题非常少见,大部分仍然是图像分类问题,但FastAI也可以解决图像回归问题。

1. 准备数据集

此处的数据集来源于:biwi_head_pose,下载后就可以使用。

1.1 自定义换算函数

这个项目的要求是预测出图像中人脸中心点的位置,所以要求模型给出的结果是一个坐标值(x,y),表示人脸中心位于图像的x和y处。数据集给的标注label也位于每张图片对应的txt中。其txt的格式为:eg: frame_00009_pose.txt:



第5行的三个数据表示了人脸中心的位置,这三个数据需要做进一步运算才能换算成中心坐标值。

所以,这个数据集还需要我们自定义一些换算函数。

def convert_biwi(coords):
    c1 = coords[0] * cal[0][0]/coords[2] + cal[0][2]
    c2 = coords[1] * cal[1][1]/coords[2] + cal[1][2]
    return tensor([c2,c1])

def get_ctr(f):
    ctr = np.genfromtxt(img2txt_name(f), skip_header=3)
    return convert_biwi(ctr)

def get_ip(img,pts): return ImagePoints(FlowField(img.size, pts), scale=True)

上面的换算函数中,convert_biwi可以参考数据集官方给出的换算方法,get_ctr是我们对某一张具体的图像f,找到其label所在的txt,然后读取txt内容,进行换算得到人脸中心的坐标值。标注处该坐标点为:


1.2 组建databunch

由于labels都是中心坐标值,所以此处用PointsItemList,如下:

data = (PointsItemList.from_folder(path)
        .split_by_valid_func(lambda o: o.parent.name=='13')
        .label_from_func(get_ctr)
        .transform(get_transforms(), tfm_y=True, size=(120,160))
        .databunch().normalize(imagenet_stats)
       )

在创建val set时,考虑到同一个人的脸部相似度非常大,所以用不同的人脸作为val set, 此处用标号为13的人的脸部作为val set,其他人的脸部作为train set。

获取label的方式是get_ctr这个换算函数,这个函数从img的文件名中解析出对应的txt的路径和名称,然后换算得到中心点的坐标值。

此处的size并没有用常见的正方形图片,而是长方形,这个比例和原图的比例一致,为了保持人脸结构不会变形。


2. 模型训练

模型的构建和以前一样,用resnet34作为基本结构,创建cnn_learner即可。

learn = cnn_learner(data, models.resnet34)

在5个epochs的训练之后,结果为:


一般的,对于回归问题,模型的loss function应该采用MSE,在课程中所用的notebook中使用了learn.loss_func = MSELossFlat(),但此处没有明确指定MSELoss,估计是已经整合到cnn_learner中。

最后,显示下模型预测出来的结果和ground truth,将两者进行对比。


可以看出,预测出来的中心点位置几乎和原来的ground truth位置一致。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,975评论 1 10
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,174评论 1 32
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,932评论 0 10
  • 当你喜欢一个人却不够勇敢的时候,一定要克服恐惧告诉她,目的不是感动她,也不是满足自己,而是让她在往后的某一天,自我...
    DWRASH阅读 171评论 0 0
  • 今天下了第一场冬雪。 上午十点左右,天空中飘落下来星星点点的小雪花,气温瞬时下降了,直冻的瑟瑟发抖。办公室...
    守住一座城阅读 210评论 0 2