LatentFusion:End-to-End Differentiable Reconstruction and Rendering for Unseen Object Pose Estimatio
转载请注明作者和出处: http://blog.csdn.net/john_bh/
Arxiv 地址:LatentFusion: End-to-End Differentiable Reconstruction and Rendering for Unseen Object Pose Estimation
作者及团队:华盛顿大学 & NVIDIA
会议及时间:CVPR 2020
主页: https://keunhong.com/publications/latentfusion/
code: https://github.com/NVlabs/latentfusion
视频:https://resources.nvidia.com/events/CVPR2020cvpr07?lx=RowcGr
文章目录
- 1. 主要贡献
- 2. Related Work
- 3. Method
- 3.1 Neural Reconstruction and Rendering
- 3.2 Rendering
- 3.3 Object Pose Estimation
- 4. Experiments
- 4.1 Evaluation Metrics
- 4.2 Experiments on DataSet
- 4.3 Ablation Studies
- 5. Conclusion
1. 主要贡献
目前的6D物体姿态估计方法通常需要每个物体的三维模型。这些方法还需要额外的训练,以便纳入新的对象。因此,它们很难扩展到大量的对象,也不能直接应用于没有见过的对象。
作者提出了一种新的6D位姿估计框架。设计了一个网络,它在推理时使用少量的参考视图重建一个对象的潜在3D表示。该网络能够从任意视图中渲染潜在的3D表示
。使用该神经渲染器,可以针对给定输入图像的姿势直接进行优化, 通过使用大量3D形状训练该网络以进行重构和渲染,该网络可以很好地推广到没有见过的对象。另外作者还提出了一个新的用于不可见目标姿态估计的数据集——MOPED
。
2. Related Work
Pose Estimation
姿态估计方法可以分为三大类:
- 第一类是通过设计网络架构来解决位姿估计的问题,如 SSD-6D,3D-RCNN;
- 第二类通过预测一组2D图像特征(例如3D框角[DeseFusion,PVNet] 的投影和对象中心的方向[PoseCNN])来制定姿势估计,然后恢复对象的姿势;
- 第三类通过将3D模型的渲染与图像对齐来估计对象的姿态,如DeepIM训练神经网络,使物体的3D模型与图像相匹配;另一种方法是学习一种模型,可以用不同的姿态重构物体
PoseRBPF,“Implicit 3D orientation learning for 6D object detection
from rgb images”(ECCV 2018)。
这些方法使用对象的潜在表示来估计姿势,但是这种工作方式的局限性在于,
需要为每个对象类别训练单独的自动编码器,并且在对象类别之间缺乏知识传递
,另外需要为每个对象建立高保真纹理3D模型
。解决办法:
作者提出了使用一组具有注册姿势的参考视图,来解决了必须使用3D模型的局限性。具体来说,不需要额外的训练,从参考视图构建一个潜在的表示,它可以被渲染为颜色和深度的任意视点。与 [Implicit 3D orientation learning for 6D object detection from rgb images,PoseRBPF] 相似,试图找到一种使查询对象和测试图像之间的潜在空间差异最小的姿势。可微分的网格渲染器进行姿势估计 [End-to-end 6-DOF object pose estimation through differentiable rasterization,Learning to predict 3D objects with an interpolation-based differentiable renderer] ,但仍需要3D模型,从而无法解决采集问题。
3D shape learning and novel view synthesis
几何形状已表示为 voxels [6],Signed Distance Functions(SDF)[30],点云[51],以及由神经网络编码的隐式函数[39]。这些方法是在类别级别上训练的,并且只能表示在其上训练过的类别内的不同实例。 此外,
这些模型仅捕获对象的形状,而不对对象的外观进行建模
。 为了克服这个限制,最近的工作[HoloGAN,RenderNet,Scene representation networks]从射影几何方面的神经3D潜在表示中解码外观,很好地概括了新颖的观点。通过以3D形式转换潜在表示并将其投影到2D,可以生成新颖的视图。 然后,解码器根据投影的特征生成新颖的视图
。一些方法找到了最近的邻居形状代理并推断出高质量的外观,但无法处理新颖的类别[46,32]。
可微分的渲染[19,27,22]系统试图以可微分的方式实现渲染过程(光栅化和着色),以便可以向神经网络传播梯度或从神经网络传播梯度。这样的方法可以用于直接优化诸如姿势或外观的参数。
当前的可微分渲染方法受到实现复杂外观模型的困难的限制,并且需要3D网格
。作者试图
通过创建不需要3D网格的可微分渲染管线来替代这些方法中的最佳方法,而是通过少量参考图像来构建体素化的潜在表示
。Multi-View Reconstruction
从多视图重建方法中获得启发。 它最类似于space carving [A theory of shape by space carving],可以看作是它的潜在空间扩展。 [Multi-view supervision for single-view reconstruction via differentiable ray consistency,Multiview consistency as supervisory signal for learning shapea nd pose prediction] 已经探索了从未对齐的视图中学习对象表示的方法。这些方法在给定图像的情况下恢复粗略的几何形状和姿势,但需要针对单个对象类别的大量训练数据。
作者的方法建立在两种方法的基础上:
训练网络来重建对象; 但是,可以在推理时提供多个参考图像来创建3D潜在表示,而不是根据每个对象或每个类别进行训练,从而可以从新颖的角度进行渲染
。
3. Method
在整个方法中,作者使用了一个具有内在矩阵的透视针孔相机模型:
和齐次外部矩阵 E=[R∣t]E=[R|t]E=[R∣t]。
- fu和fvf_u和f_vfu和fv :焦距;
- u0和v0u_0和v_0u0和v0:摄像机主点的坐标;
- R和tR和tR和t:分别是摄像机的旋转和平移。
- 还定义了一个 viewport 裁剪参数 c=(u−,v−,u+,v+)c =(u_-,v_-, u_+,v _+)c=(u−,v−,u+,v+),在像素坐标中表示物体周围的边界框。
为简便起见,将这些相机参数的集合称为 θ={R,t,c}\theta= \{R,t,c\}θ={R,t,c}。
3.1 Neural Reconstruction and Rendering
给定一组具有相关对象姿态和对象分割遮罩的参考图像,试图构造一个可以用任意相机参数渲染的对象的表示。参考[28, 39],作者将对象表示为一个潜在的3D voxel grid,这种表示可以使用标准的3D转换直接操作——自然地适应作者对新颖视图渲染的需求。整个方法如图2所示。在重建管道中有两个主要组件:
- 1)通过预测每个视图的特征量并将其融合为单个规范的潜在表示来对对象建模;
- 2)将潜在表示渲染为深度和彩色图像。
网络输入RGB图像和Mask,预测每个输入视图的特征量, 然后,通过融合模块将预测的特征量融合到单个规范的潜在对象中。 最后给定潜在对象,渲染网络会为任何相机姿势生成深度图和Mask。
建模步骤是受 space carving [18]启发的,因为网络从多个视图中进行观察,并利用多视图一致性来建立规范的表示。 但是,没有使用光度学一致性,而是使用潜在特征来表示每个视图,这使网络可以学习对于此任务有用的特征。
Per-View Features
- 首先为每个输入视图 Ii∈{I1,...,IN}\mathcal{I_i}\in\{\mathcal{I_1},...,\mathcal{I_N}\}Ii∈{I1,...,IN} 生成一个 feature volume,每个feature volume 对应于输入相机的 frustum,由视口参数 c=(u−,v−,u+,v+)c =(u_-,v_-, u_+,v_+)c=(u−,v−,u+,v+)界定,深度方向由 z∈[zc−r,zc+r]z \in[z_c-r,z_c + r]z∈[zc−r,zc+r],其中 zcz_czc 是到物体中心的距离,rrr 是物体的半径。如图3所示:
- 使用U-Nets 来保留空间结构。首先通过将输入xix_ixi(RGB图像 Ii\mathcal{I_i}Ii,二进制 mask Mi\mathcal{M_i}Mi 以及可选的深度 Di\mathcal{D_i}Di )通过2D U-Net来计算2D特征 gpix(xi)∈RC×H×Wg_{pix}(xi) \in R^{C\times H\times W}gpix(xi)∈RC×H×W 。 然后,通过将2D通道尺寸分解为3D通道尺寸C′=C/DC' = C/DC′=C/D和深度尺寸DDD,投影单元(p↑p_\uparrowp↑)将 RC×H×WR^{C\times H\times W}RC×H×W 中的2D图像特征提升为 R(C/D)D×H×WR^{(C/D)D\times H\times W}R(C/D)D×H×W中的3D体积特征。此投影操作与RenderNet中介绍的投影单元完全相反。 然后将提升的特征传递给3D UNet gcamg_{cam}gcam,以生成摄像机的体积特征:Φi=gcam∘p↑∘gpix(xi)∈RC′×M×M×M\Phi_i = g_{cam}\circ p_\uparrow \circ g_{pix}(x_i) \in R^{C'\times M\times M \times M}Φi=gcam∘p↑∘gpix(xi)∈RC′×M×M×M。
- 首先为每个输入视图 Ii∈{I1,...,IN}\mathcal{I_i}\in\{\mathcal{I_1},...,\mathcal{I_N}\}Ii∈{I1,...,IN} 生成一个 feature volume,每个feature volume 对应于输入相机的 frustum,由视口参数 c=(u−,v−,u+,v+)c =(u_-,v_-, u_+,v_+)c=(u−,v−,u+,v+)界定,深度方向由 z∈[zc−r,zc+r]z \in[z_c-r,z_c + r]z∈[zc−r,zc+r],其中 zcz_czc 是到物体中心的距离,rrr 是物体的半径。如图3所示:
Camera to Object Coordinates
特征体积中的每个voxel都代表3D空间中的一个点。根据最近的工作[27、28、38],作者直接使用刚性变换来变换特征量
。考虑一个连续函数 ϕ(x)∈RC′\phi (x)\in R^{C'}ϕ(x)∈RC′,它定义了相机空间潜在表示,其中 x∈R3x\in R^3x∈R3 是相机坐标中的一个点。特征量 Φ\PhiΦ 是此功能的离散样本。通过 ψ(x′)=ϕ(W−1x′)\psi(x')=\phi(W^{-1}x')ψ(x′)=ϕ(W−1x′) 给出对象空间中的这种表示形式,其中 x′x'x′ 是对象坐标中的一个点,W=[R∣t]W = [R|t]W=[R∣t] 是对象到相机的外部矩阵。通过对每个对象空间体素坐标 xijk′x'_{ijk}xijk′ 进行采样 ϕ(W−1xijk′)\phi(W^{-1}x'_{ijk})ϕ(W−1xijk′)来计算对象空间体积 Ψ^\hat\PsiΨ^。实际上,这是通过三线性采样体素网格和落在外部的边距值来完成的。给定此变换操作 Tc→oT_{c\to o}Tc→o,对象空间特征量由Ψ^i=Tc→o(Φi)\hat \Psi_i = T_{c\to o}(\Phi_i )Ψ^i=Tc→o(Φi)给出。
View Fusion
有了特征量 Ψ^i∈{Ψ^i,...,Ψ^N}\hat \Psi_i \in\{\hat\Psi_i,...,\hat\Psi_N\}Ψ^i∈{Ψ^i,...,Ψ^N} 的集合,每个特征量都与一个输入视图相关联。融合模块 fff 将所有视图融合为一个规范的特征量:Ψ=f(Ψ^1,...,Ψ^N)\Psi= f(\hat\Psi_1,...,\hat\Psi_N)Ψ=f(Ψ^1,...,Ψ^N)。简单的通道平均池化效果很好,但是作者发现,使用递归神经网络(RNN)顺序集成每个体积,类似于[38],稍微提高了重建精度(请参见第6.5节)。使用递归单元可以使网络保持与平均池相比,忽略视图中的功能。 这促进了不同视图之间的比较,从而允许网络执行类似于空间雕刻中使用的光度一致性标准的操作[18]。
作者使用卷积门控循环单元(ConvGRU)[1],以便网络可以利用空间信息
。
3.2 Rendering
渲染模块采用融合的对象体积 Ψ\PsiΨ,并在给定任意相机参数 θ\thetaθ 的情况下对其进行渲染。
理想情况下,渲染模块将直接对彩色图像进行回归处理,但是通过神经网络保留高频细节是一项挑战。 U-Nets [34]在等比例层之间引入了跳过连接,从而允许高频空间结构传播到网络的末端,但是目前尚不清楚在存在3D变换的情况下如何添加跳过连接。现有的文献[38,23]为每个场景训练一个网络,从而使解码器可以存储高频信息,而潜在表示则对状态信息进行编码。尝试在没有跳过连接的情况下预测色彩会导致输出模糊。
作者通过首先渲染深度,然后使用基于图像的渲染方法来产生彩色图像
来避免这个困难。
Decoding Depth
深度是3D表示,使网络更容易利用我们提供的几何结构。 另外,与颜色相比,深度趋于局部更平滑,从而可以在单个体素中紧凑地表示更多信息。渲染网络是重建网络的简单反转,并且与Render-Net [27]有很多相似之处。- 首先,我们使用Sec4.1中描述的方法,将规范的对象空间体积通过一个小的3D U-Net(hobjh_{obj}hobj),然后将其转换为相机坐标。我们使用对象到相机的外部矩阵 EEE 而不是逆 E−1E^{-1}E−1来执行变换。
- 然后,第二个3D U-Net(hcamh_{cam}hcam)解码生成的体积以生成特征量:Ψ′=hcam∘To→c∘hobj(Ψ)\Psi' =h_{cam} \circ T_{o\to c}\circ h_{obj}(\Psi)Ψ′=hcam∘To→c∘hobj(Ψ),然后使用[27]中的投影单位(p↑p_\uparrowp↑)首先将深度尺寸收缩为通道尺寸并应用 1×11\times11×1 卷积,将其平坦化为2Dfeature grid Φ′=p↓(Ψ′)\Phi' = p_{\downarrow}(\Psi')Φ′=p↓(Ψ′)。
- 最终的特征由2D UNet(hpixh_{pix}hpix)解码,带有两个输出分支,分别表示深度(hdepthh_{depth}hdepth)和分割mask(hmaskh_{mask}hmask)。 渲染网络的输出由ydepth(Φ′)=hdepth∘hpix(Φ′)y_{depth}(\Phi')= h_{depth} \circ h_{pix}(\Phi')ydepth(Φ′)=hdepth∘hpix(Φ′) 和 ymask(Φ′)=hmask∘hpix(Φ′)y_{mask}(\Phi')= h_{mask} \circ h_{pix}(\Phi')ymask(Φ′)=hmask∘hpix(Φ′)给出。
Image Based Rendering (IBR)
使用基于图像的渲染[36]来利用参考图像来预测输出颜色。 给定相机固有的 KKK 和输出视图的深度图,可以将每个输出像素(u,v)(u, v)(u,v)的3D对象空间位置恢复为 X=E−1(u−u0fuz,v−v0fvz,z,1)TX=E^{-1}(\frac{u-u_0}{f_u}z,\frac{v-v_0}{f_v}z,z,1)^TX=E−1(fuu−u0z,fvv−v0z,z,1)T,其可以转换为输入图像帧 xi′=KiWiXx^{'}_{i} = K_i W_i Xxi′=KiWiX 对于每个输入摄像头 θi={Ki,Wi}\theta_i=\{K_i,W_i\}θi={Ki,Wi}。然后,输出像素可以复制相应输入像素的颜色以生成重投影的彩色图像。生成的重新投影图像将包含由于遮挡而导致的无效像素。 加权每个像素有多种策略,包括
1)通过重新投影的深度误差进行加权;
2)通过输入和查询摄像头之间的相似度进行加权;
3)使用神经网络进行加权。
首选是在存在深度误差或薄表面的情况下遭受伪影的影响。 第二种方法产生合理的结果,但是对于中间视图会产生模糊的图像。 作者选择第三个选项。在进行深度融合[10]之后,训练了一个网络,该网络可预测每个重新投影的输入 Ii\mathcal{I_i}Ii的混合权重 Wi\mathcal{W_i}Wi:Ii′:Io=∑iWi⊙Ii′\mathcal{I'_i}:\mathcal{I_o} = \sum_i \mathcal{W_i} \odot \mathcal{I'_i}Ii′:Io=∑iWi⊙Ii′,其中⊙\odot⊙ 是逐元素乘积。 混合权重由2D U-Net预测。 该网络的输入是1)由我们的重构管线预测的深度,2)每个重新投影的输入图像 Ii′\mathcal{I'_i}Ii′,以及3)基于输入和查询姿势之间的角度的视图相似性得分sss。
3.3 Object Pose Estimation
Formulation
姿势由旋转 RRR 和平移 ttt 定义。 还包括定义的视口参数 ccc。定义视口可以使我们有效地将输入传递给重建网络,同时还提供比例不变性
。 将旋转编码为四元数 qqq,将平移编码为 ttt。 假定给定了RGB图像 I\mathcal{I}I,对象分割蒙版 M\mathcal{M}M 和深度D\mathcal{D}D 包含在输入x={I,M,D}x = \{\mathcal{I,M,D}\}x={I,M,D}。Losses
标准 L1L_1L1深度重建损失:
Ldepth(D∗,D)=∣∣D∗−D∣∣1\mathcal{L_{depth}}(\mathcal{D^*,D})=||\mathcal{D^*-D}||_1Ldepth(D∗,D)=∣∣D∗−D∣∣1
使用像素级的二元交叉熵损失Lmask\mathcal{L_{mask}}Lmask:
Liou(M∗,M)=logU−logI\mathcal{L_{iou}(M^*,M)}=logU-logILiou(M∗,M)=logU−logI
新的潜在损失,输入x={I,M,D}x = \{\mathcal{I,M,D}\}x={I,M,D}:
Llatent(x,θ;Ψ)=∣∣Hθ(Gθ(x))−Hθ(Ψ)∣∣1\mathcal{L_{latent}(x,\theta;\Psi)}=||H_{\theta}(G_{\theta}(x))-H_{\theta}(\Psi)||_1Llatent(x,θ;Ψ)=∣∣Hθ(Gθ(x))−Hθ(Ψ)∣∣1
其中 HθH_{\theta}Hθ渲染网络在投影层上,GθG_{\theta}Gθ 是3.1和3.2节中的建模网络。网络不针对目标进行训练,2)损失是直接计算给定的图像和相机姿:
Parameterization
以对数四元数形式 w=(0,w1,w2,w3)w=(0,w_1,w_2,w_3)w=(0,w1,w2,w3)设置旋转参数,以确保对参数的所有更新都产生有效的单位四元数:
Coarse Initialization
尽管有一个可微分的渲染器,但姿势的空间是非凸的,这在使用基于梯度的优化时会导致不良的局部最小值,因此通过计算粗略估计来引导姿势。 这还具有加速推理的优势,因为它只需要前向评估。首先将对象 t=(x;y;z)t =(x; y; z)t=(x;y;z)的平移估计为mask边界框 ccc 和相应的深度值所定义的边界立方体的质心,然后使用估计的平移来初始化 kkk 个姿势。 为了很好地覆盖可能的方向,使用斐波那契网格[9]均匀地采样方位角和仰角,然后均匀地采样随机偏航角。 使用交叉熵方法[7]优化平移和对数四元数参数,并使用高斯混合模型作为概率分布。
Pose Optimization
整个流程都是端到端的。 因此,我们可以采用梯度优化公式(2)。 给定一个潜在的对象 Ψ\PsiΨ和一个粗略的姿态估计θ\thetaθ,计算损耗并将梯度传播回相机姿态。 该步骤仅需要渲染网络,而无需使用建模网络。在此步骤中,也不使用基于图像的渲染网络。 使用Adam共同优化旋转 qqq,平移 ttt和视口ccc。
4. Experiments
4.1 Evaluation Metrics
- (k。,kcm)(k^。,kcm)(k。,kcm):当预测结果 pose 与ground truth 的误差在k。k^。k。和kcmkcmkcm内,认为是正确的;
- ADD:经过 ground truth 和预测姿态变换后的点之间的平均距离;
- ADD-S:对ADD的一种修改,它计算到最近点而不是 ground truth 点的平均距离,以解决对称对象的问题;
- Proj.2D:ground truth 的投影点与预测姿态之间的像素距离。
4.2 Experiments on DataSet
- LINEMOD Dataset
- ModelNet Dataset
可以看到,在ADD 和Proj2D评测标准下,LatentFusion效果比较好,但是在另外一个评测标准下,不是特别好,作者解释说是由于有限的分辨率可能会妨碍小型物体或远离相机的物体的性能导致的。
- MOPED Dataset
MoPED Dataset 包含11中类别的物体,如图-7所示:
表-5所示,展示了LatentFusion在数据集MOPED上的结果,其中LLL表示latent losses,DDD 表示depth loss。
4.3 Ablation Studies
- Number of reference views
首先评估该方法对输入参考视图数量的敏感性。使用更多参考视图可以更轻松地合成新颖的视图,因为查询视图的可能性更高靠近参考视图。表-3得出,随着视图的数目增加效果会变好,当拥有8个以上的参考视图仅会产生边际性能提升,这表明LatentFusiobn不需要很多视图即可获得良好的姿态估计结果。
- View Fusion
作者比较了聚合来自每个参考视图的潜在表示的多种策略。简单的方法是使用一个简单的池函数,例如平均/最大池。或者,可以使用一个RNN(如ConvGRU)集成卷,这样网络就可以跨视图进行推理。表-4 显示了对这两种变化的定量评估。 尽管对象的平均性能非常相似,但ConvGRU变量的性能要优于平均池化变量,这表明空间关系在 voxel 表示中对姿势估计的重要性
。
5. Conclusion
该篇论文提供了一个新颖的框架,该框架可使用少量参考图像在推理时构建3D对象表示,并提供了一个神经渲染器,可从任意6D视点渲染3D表示。其设计的网络接受了数千种形状的训练,这些形状具有在各种光照条件下呈现的随机纹理,从而无需额外的训练即可将其强大地推广到看不见的物体。
利用重建和渲染管线进行零镜头姿势估计。仅给出少量参考视图即可进行姿态估计,而无需训练任何网络。由于不需要详细的3D模型,因此大大简化了在新颖对象上执行姿态估计的过程。另外,有一个单一的通用网络,适用于所有对象,包括看不见的对象
。对于将来的工作,作者提到计划研究在有遮挡的混乱场景中看不见的物体姿态估计。另外还计划通过应用网络优化技术来加快姿势估计过程。
参考链接:
- LatentFusion:华盛顿大学与英伟达联合提出6D姿态估计新方法
LatentFusion:End-to-End Differentiable Reconstruction and Rendering for Unseen Object Pose Estimatio相关推荐
- 【6Dof位姿估计】DPVL:6DoF Object Pose Estimation via Differentiable Proxy Voting Loss论文理解
6DoF Object Pose Estimation via Differentiable Proxy Voting Loss论文理解 解决什么问题 本文创新点\贡献 本文IDEA来源 方法 方向向 ...
- 基于视觉的机器人抓取: 论文及代码(Vision-based Robotic Grasping: Papers and Codes)
本文同步于微信公众号:3D视觉前沿,欢迎大家关注. 本文总结了基于视觉的机器人抓取的相关论文及代码,同步于 GitHub. 机器人抓取必需的信息是相机系下抓取器的6DoF位姿,包括抓取器的3D位置和抓 ...
- 刚体6D位姿估计方法综述
本文同步于微信公众号:3D视觉前沿,欢迎大家关注. 1 引言 刚体的6D位姿估计,是指估计相机坐标系下物体的6D位姿,即3D位置和3D姿态,此时原始物体本身的坐标系可以看作是世界坐标系,也即得到原始物 ...
- ECCV2022论文列表(中英对照)
Paper ID Paper Title 论文标题 8 Learning Uncoupled-Modulation CVAE for 3D Action-Conditioned Human Motio ...
- ECCV22 | 从单目RGB图像中进行类别级6D物体姿态估计的物体级深度重构
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 题目:Object Level Depth Reconstructi ...
- ECCV 2022 | 从单目RGB图像中进行类别级6D物体姿态估计的物体级深度重构
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 题目:Object Level Depth Reconstruction for Category Leve ...
- 前向渲染路径细节 Forward Rendering Path Details
正向渲染路径细节 Forward Rendering Path Details Forward Rendering path renders each object in one or more pa ...
- 超赞!2021年最惊艳的38篇AI论文!
转载于 :新智元 1.Zero-Shot Text-to-Image Generation https://arxiv.org/pdf/2102.12092.pdf 文本到图像的生成传统上侧重于为固定 ...
- GAN独领风骚!盘点2021最惊艳38篇AI论文
来源:新智元 [导读]2021年是人工智能继续突飞猛进的一年.近日,Github上有人总结出了今年最有趣.最惊艳的38篇关于AI和机器学习论文,值得收藏. 1.Zero-Shot Text-to-Im ...
最新文章
- 扑克牌排序_JAVA 扑克牌排序打印,并进行洗牌
- SQL Server系统表sysobjects介绍与使用
- spring中事务配置的3种方式
- X210串口配置与stdio移植
- Hibernate学习笔记(一)
- matplotlib一些常用知识点的整理,
- linux心跳包检测代码_OpenSSL心跳包越界读敏感信息泄漏漏洞
- LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)
- 最常问的Java面试题,有Get吗?
- 仅靠“小于运算“生存的map
- 2013元旦成都九寨沟攻略
- H3C交换机设备使用QOS策略方式实现报文过滤
- 导出数据库设计文档的几种方案
- 32768强制转换成short类型和char类型为什么是-32768和0?
- Users.ktr使用文档
- Clickhouse 各种工具函数知识 -<日期函数>
- 一文读懂数据库的文本数据类型:CHAR,VARCHAR,TEXT,BLOG,NCHAR、NVARCHAR、NTEXT
- ionic3保存图片到本地相册
- 关闭弹窗代码java_弹出窗口代码
- bios设置计算机用户,电脑security设置图解
热门文章
- 单线服务器与BGP服务器使用区别大吗
- 观点:灵魂绑定NFT和去中心化社会
- Win10下CH340安装
- 2019-6-18 - 中软国际(泰康人寿)
- VDA 3.1- 2019 AIAG-最新版 ,Reliability Assurance of Car Manufacturer and Suppliers汽车制造商和供应商可靠性保证- 可靠性管理
- 一图读懂昇思MindSpore | 秒懂简介,你想知道的都在这里!
- python爬虫实例—获取北邮教务GPA
- 记录Git Unable to negotiate with xxx... 问题
- 【软考中级】多媒体应用设计师复习笔记第二章
- 初识 love2d. Hello World lua 调试 iOS 环境运行