研究生做的稍微有点水平的就这两个项目了:一个是利用SVM做手绘草图的分类,另一个是利用JointBoost+CRF做手绘草图的分割。总结得出的经验是做研究的方法就是将别人大神的代码看懂然后改成适合自己项目的代码,转而这次记录的是另一个项目就是利用JointBoost+CRF做手绘草图的分割。


引言


手绘草图的分割就是语义上的分割,如下面两个图:

  

左图是未标记的"手绘草图",右图是人工标记了的手绘草图,我们想训练一个分类模型能够对手绘草图上的样点进行语义分类,即判断某点所属类别(头、脚、身体或者尾巴)。而我们采用的方法就是Conditional Random Field 称为条件随机场。虽然名字高大上,但是思想还是很简单的,而这个方法的实现是来自一篇论文,见参考文献1。借用该论文的一段话,来将手绘草图分割的任务具体化:

Many tasks in computer vision involve assigning a label (such as disparity) to every pixel. A common constraint is that the labels should vary smoothly almost everywhere while preserving sharp discontinuities that may exist, e.g., at object boundaries. These tasks are naturally stated in terms of energy minimization.


能量函数是什么


上面英文翻译就是:在机器视觉中的许多任务都要涉及到为每一块像素加标签。一个常规的约束就是所加的标签要尽可能的平滑,然而在物体边界上所加标签的要保留较强的不连续性,然后这样的任务(要求)通常可以用能量函数的最小化表示。我的理解就是如上右图,我们既需要保持同一标签的样点的内部不会突然出现其他标签(smoothly),也要保持在不同标签边界处的标签混淆更少(sharp discontinuities)。上面这段话总结来说就是要解决两个问题:这个能量函数怎么设计,和能量函数怎么最小化。


E_smooth项的选取



V的性质(度量与半度量)



GraphCut迭代算法总流程



 a-b-swap、a-expansion是什么



图割是什么?



证明:求一个图的最小割等价于步骤3.1



参考文献与代码


参考文献1. Fast Approximate Energy Minimization via Graph Cut

参考文献2. Learning 3D Mesh Segmentation and Labeling

参考文献3. Sharing Visual Features for Multiclass and Multiview Object Detection

本人论文. Component Segmentation of Sketches Used in 3D model retrieval

图割参考代码:http://vision.ucla.edu/~brian/gcmex.html

JointBoost参考代码:https://people.cs.umass.edu/~kalo/papers/LabelMeshes/index.html


最后


只能说学到了一种基于序列数据的机器学习的算法,但是感觉高大上应该还有更基础的算法可以学学吧。后面写点Hadoop的东西了,毕业了,工作要用,这个CRF最后的大坑也算填上了。

JointBoost+CRF+GraphCut做手绘草图的分割的更多相关文章

  1. CVPR2020论文解读:手绘草图卷积网络语义分割

    CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...

  2. UWP 手绘视频创作工具 “来画Pro” 技术分享系列

    开篇先来说一下我和来画的故事,以及写这篇文章的初衷. 今年年初时,我还在北京,在 Face++,做着人脸识别技术的 Windows 和 Android 端,做着人工智能终将实现世间所有美好的梦.这时的 ...

  3. UWP 手绘视频创作工具技术分享系列

    开篇先来说一下写这篇文章的初衷. 初到来画,通读了来画 UWP App 的代码,发现里面确实有很多比较高深的技术点,同时也是有很多问题的,扩展性,耦合,性能,功能等等.于是我们决定从头重构这个产品,做 ...

  4. UWP 手绘视频创作工具技术分享系列 - 手绘视频导出

    手绘视频最终的生成物是视频文件,前面几篇主要讲的是手绘视频的创作部分,今天讲一下手绘视频的导出问题.主要以 UWP 为例,另外会介绍一些 Web 端遇到的问题和解决方法. 如上所述,手绘视频在创作后, ...

  5. UWP 手绘视频创作工具技术分享系列 - 有 AI 的手绘视频

    AI(Artificial Intelligence)正在不断的改变着各个行业的形态和人们的生活方式,图像识别.语音识别.自然语言理解等 AI 技术正在自动驾驶.智能机器人.人脸识别.智能助理等领域中 ...

  6. UWP 手绘视频创作工具技术分享系列 - Ink & Surface Dial

    本篇作为技术分享系列的第四篇,详细讲一下手绘视频中 Surface Pen 和 Surface Dial 的使用场景. 先放一张微软官方商城的图,Surface 的使用中结合了 Surface Pen ...

  7. UWP 手绘视频创作工具技术分享系列 - 手绘视频与视频的结合

    本篇作为技术分享系列的第三篇,详细讲一下手绘视频中结合视频的处理方式. 随着近几年短视频和直播行业的兴起,视频成为了人们表达情绪和交流的一种重要方式,人们对于视频的创作.编辑和分享有了更多的需求.而视 ...

  8. UWP 手绘视频创作工具技术分享系列 - 文字的解析和绘制

    本篇作为技术分享系列的第二篇,详细讲一下文字的解析和绘制,这部分功能的研究和最终实现由团队共同完成,目前还在寻找更理想的实现方式. 首先看一下文字绘制在手绘视频中的应用场景 文字是手绘视频中很重要的表 ...

  9. UWP 手绘视频创作工具技术分享系列 - 全新的 UWP 来画视频

    从2017年11月开始,我们开始规划和开发全新的来画Pro,在12月23日的短视频峰会上推出了预览版供参会者体验,得到了很高的评价和关注度.吸取反馈建议后,终于在2018年1月11日正式推出了全新版本 ...

随机推荐

  1. SSRS Reports 2008性能优化案例

    我们的一个Reporting Service服务上部署了比较多的SSRS报表,其中有一个系统的SSRS报表部署后,执行时间相对较长,加之供应商又在ASP.NET页面里面嵌套了Reporting Ser ...

  2. C#:结构

    1. 简单示例 // 定义结构 public struct Person { public string name; public int age; } class Program { static ...

  3. PyCharm创建virtualenv方法

    Python的版本众多,在加上适用不同版本的Python Package.这导致在同时进行几个项目时,对库的依赖存在很大的问题.这个时候就牵涉到对Python以及依赖库的版本管理,方便进行开发,vir ...

  4. Windows下FFmpeg各版本库文件下载

    ffmpeg主要是基于linux开发,当然它也支持windows,不过并不支持visual studio系列IDE(因为它使用了大量C99特性,而vs不支持C99). 要想在windows上使用 一可 ...

  5. linux中tar之解压和压缩常用

    我们知道在windows中解压和压缩有两个非常强大的工具winRar和国产的好压工具,在linux中也有一款强大的解压和压缩工具.那就是大名鼎鼎的tar.我们首先看看tar命令的使用格式 语法:tar ...

  6. MongoDB官方C#驱动中查询条件Query用法

    Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...

  7. 基于网格的分割线优化算法(Level Set)

    本文介绍一种网格分割线的优化算法,该方法能够找到网格上更精确.更光滑的分割位置,并且分割线能够自由地合并和分裂,下面介绍算法的具体原理和过程. 曲面上的曲线可以由水平集(level set)形式表示, ...

  8. hadoop安装

    环境 RedHad Linux9.0  java6   hadoop1.2.1 hadoop下载地址:http://mirror.bit.edu.cn/apache/hadoop/common/ 版本 ...

  9. python-异常处理

    一.异常 异常是什么? 就是影响程序正常执行的事件,异常在程序执行的过程中发生,脚本发生异常时,我们需要捕获它,否则程序就会终止. 异常处理: 1.捕获异常:try:...except ..... w ...

  10. jquery用一个事件控制另一个事件是否执行(不是删除事件)

    想用click事件控制mouseover事件的执行,如果用删除绑定mouseover事件以后就不能再使用mouseover了,于是只需要设置一个全局变量,并赋值false,当点击click事件,将全局 ...