网络的多模态形状究竟是啥?道翰天琼认知智能机器人平台API接口大脑为您揭秘。
尽管目前已有很多工作利用深度学习方法进行形状补全,然而这些方法只能对每个残缺形状输出单个补全结果,完全忽视了缺失部分几何存在的歧义性。如下图所示,左侧的输入完全缺失了椅子的下半部分,此时补全就存在歧义性,即椅子下半部分的具体几何是存在多种可能性的,比如右侧的五个补全结果均是可能且合理的。因此,我们提出了多模态(multi-modal)形状补全这一问题,即对残缺形状输出多个可能、合理的补全结果。我们通过条件生成式建模(conditional generative modeling),在不需要配对的训练数据情形下,设计了第一个基于点云表示的多模态形状补全的方法。
图1. 多模态形状补全
2
给定一个残缺形状(partial shape)集合 P,我们试图通过深度神经网络学习一个从 P 到完整形状(complete shape)集合 C 的多模态映射,从而实现多模态补全的目标。值得注意的是,我们的方法只需要一个残缺形状集合和一个完整形状集合作为训练数据,并不需要两者之间有任何的配对样例,这使得我们的方法能够直接应用于真实扫描的数据。对于这样无配对数据的设定,受到 pcl2pcl [1] 的启发,我们采用在学习到的表达点云的隐空间上进行对抗训练(adversarial training)的方式解决这一问题。同时,我们通过引入一个低维向量z 作为额外的条件输入,来建模可能的补全结果中出现的多模态。为了实现随机采样,我们期望 z能够从一个先验分布 p(z) 中采样,本文我们使用了标准高斯分布 N(0, Ι)。图2. 我们多模态形状补全的网络结构具体来说,我们首先预训练两个自编码器以得到两个表达点云的隐空间:p 表示残缺形状,c 表示完整形状。解决多模态形状补全问题就转化为在条件生成意义下学习一个从 p 到 c 的映射。为此,我们训练一个生成器以实现多模态映射,并以低维向量 z 作为条件输入。在缺少配对数据的情况下,我们使用对抗训练来进行形状补全。此外,为了促使生成器 G 使用低维条件输入 z 向量,我们还引入了一个编码器Ez 来从补全输出中重建 z。实现细节请参见论文。
3
我们在所构建的具有不同形状缺失形式的三个数据集(PartNet [2], PartNet-Scan, 3D-EPN [3])上展示了定量和定性的结果,并与基准方法以及我们方法的几个变体进行了对比。下图展示了我们方法的多模态形状补全结果,其中灰色点云代表输入,其后五个黄色点云是我们方法的补全结果。由上至下,输入数据来源依次为 PartNet (1-3行),PartNet-Scan(4-6行)和 3D-EPN(7-9行)。与其他方法的对比结果请参见论文。 图3. 在三个数据集上的多模态补全结果为了实现对补全结果更加显式的控制,模态条件输入 z 可以从一个用户指定的参考形状(reference shape)编码得到。如图4所示,这使得我们在所给定的参考形状的指导下进行形状补全。
图4. 通过参考形状进行补全,补全结果可随参考形状变化形状补全问题的歧义性是随着输入不完整程度增大而增大的。因此,随着输入形状的不完整程度的提高,模型应当产生更加多样的补全结果。为此,我们在 PartNet 数据集上通过控制缺失的部件(part)个数,测试了我们的模型。图5展示了我们的补全结果随着不完整程度的增加而更加多样。图5. 随着输入形状的不完整程度的提高,模型产生的补全结果更加多样
4
本文提出了多模态(multi-modal)形状补全这一问题,并设计了第一个基于点云表示的多模态形状补全的方法。尽管我们已经展示了补全结果的多样性,显式地编码整体形状的多模态并不是最优的,还有进一步提高的可能性。一个可能的研究方向是探究如何使得引导网络关注形状缺失部分的多模态,从而实现补全结果多样性和可信度之间的平衡。
道翰天琼CiGril认知智能机器人API用户需要按步骤获取基本信息:
请求地址:http://www.weilaitec.com/cigirlrobot.cgr
请求方式:post
请求参数:
参数 |
类型 |
默认值 |
描述 |
userid |
String |
无 |
平台注册账号 |
appid |
String |
无 |
平台创建的应用id |
key |
String |
无 |
平台应用生成的秘钥 |
msg |
String |
"" |
用户端消息内容 |
ip |
String |
"" |
客户端ip要求唯一性,无ip等可以用QQ账号,微信账号,手机MAC地址等代替。 |
接口连接示例:http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552
注意事项:参数名称都要小写,五个参数不能遗漏,参数名称都要写对,且各个参数的值不能为空字符串。否则无法请求成功。userid,appid,key三个参数要到平台注册登录创建应用之后,然后查看应用详情就可以看到。userid就是平台注册账号。
示例代码JAVA:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class apitest {
/**
* Get请求,获得返回数据
* @param urlStr
* @return
*/
private static String opUrl(String urlStr)
{
URL url = null;
HttpURLConnection conn = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try
{
url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5 * 10000);
conn.setConnectTimeout(5 * 10000);
conn.setRequestMethod("POST");
if (conn.getResponseCode() == 200)
{
is = conn.getInputStream();
baos = new ByteArrayOutputStream();
int len = -1;
byte[] buf = new byte[128];
while ((len = is.read(buf)) != -1)
{
baos.write(buf, 0, len);
}
baos.flush();
String result = baos.toString();
return result;
} else
{
throw new Exception("服务器连接错误!");
}
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
if (is != null)
is.close();
} catch (IOException e)
{
e.printStackTrace();
}
try
{
if (baos != null)
baos.close();
} catch (IOException e)
{
e.printStackTrace();
}
conn.disconnect();
}
return "";
}
public static void main(String args []){
//msg参数就是传输过去的对话内容。
System.out.println(opUrl("http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552"));
}
}