matchnet论文复现过程记录(代码片段)

__init__: __init__:     2022-10-21     206

关键词:

MatchNet论文复现过程记录

原文为《Matchnet: Unifying feature and metric learning for patch-based matching》1:本文复现基于PyTorch深度学习框架,版本(1.7.1+cu110)。

I.Network architecture

根据论文中描述,MatchNet包括:

A. Feature network

该特征提取网络类似AlexNet2,具体结构如下:
其中,PS: patch size for convolution and pooling layers; S: stride. Layer types: C: convolution, MP: max-pooling, FC: fully-connected.

B. Metric network

包括三个全连接层,FC3后接Softmax作为输出。

C. MatchNet in training

基于patch的匹配任务通常假设patch在计算相似度之前,先经过相同的特征编码。因此,论文中采用Two-tower structure with tied parameters结构,即,仅采用一个特征提取网络,在训练过程中,可以理解为同时使用了两个参数共享的特征提取网络去连接度量网络,更新任何一个特征提取网络,将会使得两个网络的参数都发生变化。(这里直接讲比较难理解,具体可以看代码实现。)


具体代码实现如下:

import torch
import torch.nn as nn

class FeatureNet(nn.Module):
    """特征提取网络
    """
    def __init__(self):
        super(FeatureNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(in_channels=1, out_channels=24, kernel_size=7, padding=3, stride=1),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=3, stride=2, padding=0),
            nn.Conv2d(in_channels=24, out_channels=64, kernel_size=5, padding=2, stride=1),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=3, stride=2, padding=0),   
            nn.Conv2d(in_channels=64, out_channels=96, kernel_size=3, padding=1, stride=1),
            nn.ReLU(),
            nn.Conv2d(in_channels=96, out_channels=96, kernel_size=3, padding=1, stride=1),  
            nn.ReLU(),
            nn.Conv2d(in_channels=96, out_channels=64, kernel_size=3, padding=1, stride=1),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=3, stride=2, padding=0)
        )
    
    def forward(self, x):
        return self.features(x)

class MetricNet(nn.Module):
    """度量网络
    """
    def __init__(self):
        super(MetricNet, self).__init__()
        self.features = nn.Sequential(
            nn.Linear(in_features=6272, out_features=1024),
            nn.ReLU(),
            nn.Linear(in_features=1024, out_features=1024),
            nn.ReLU(),
            nn.Linear(in_features=1024, out_features=2),
            # nn.Softmax(dim=1) 
            ''' 这里原本应该接Softmax,但损失函数采用的是交叉熵损失,
            而Pytorch中的torch.nn.CrossEntropyLoss()方法包括Softmax,
            具体可参考文档https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html?highlight=nn%20crossentropyloss#torch.nn.CrossEntropyLoss
            '''
        )

    def forward(self, x):
        return self.features(x)

class MatchNet(nn.Module):
    def __init__(self):
        super(MatchNet, self).__init__()
        
        # 只添加一个特征提取网络
        self.input_ = FeatureNet()
        self.input_.apply(weights_init)
        
        self.matric_network = MetricNet()
        self.matric_network.apply(weights_init)
    
    def forward(self, x):
        """x.shape = (2, C, H, W),即两个patch
        """
        # 两个patch进入同一个FeatureNet,相当于two-tower sharing same parameters
        feature1 = self.input_(x[0]).reshape((x[0].shape[0], -1)) #[256, 3136]
        feature2 = self.input_(x[1]).reshape((x[1].shape[0], -1))
        
        features = torch.cat((feature1, feature2), 1) #[256, 6272]
        
        return self.matric_network(features)
        
def weights_init(m):
		'''
		自定义权重初始化
		'''
    if isinstance(m, nn.Conv2d):
        nn.init.orthogonal_(m.weight.data, gain=0.6)
        try:
            nn.init.constant_(m.bias.data, 0.01)
        except Exception:
            pass
    return

参考文献


  1. Han等, 《Matchnet: Unifying feature and metric learning for patch-based matching》. ↩︎

  2. A. Krizhevsky, I. Sutskever, and G. E. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012. ↩︎

sdg精读与代码复现morecontrolforfreeimagesynthesiswithsemanticdiffusionguidancesdg(代码片段)

...Free!ImageSynthesiswithSemanticDiffusionGuidance【SDG】一、前言二、论文介绍1、文章主旨思想背景介绍2、方法3、实验三、复现模块:1、复现指引2、复现结果总结:四、Reference:五、bug解决模块遇到的bug1遇到的bug2遇到的bug3遇... 查看详情

cartoongan论文复现:如何将图像动漫化(代码片段)

摘要:本案例是CartoonGAN:GenerativeAdversarialNetworksforPhotoCartoonization的论文复现案例。本文分享自华为云社区《cartoongan图像动漫化》,作者:HWCloudAI。本案例是CartoonGAN:GenerativeAdversarialNetworksforPhotoCartooniz 查看详情

hr-viton虚拟换衣算法pre-processing复现全过程记录(代码片段)

LinkoforiginalGithubrepoLinkofpersonalmadestudycaseofHR-VITONContentPre1、OpenPose(Oncolab,needGPU)2、HumanParseMethod1:ColabMethod2:LocalorServer3、DensePose(Oncolab,GPUorCPU)4、ClothMask(O 查看详情

fcos论文复现:通用物体检测算法(代码片段)

摘要:本案例代码是FCOS论文复现的体验案例,此模型为FCOS论文中所提出算法在ModelArts+PyTorch框架下的实现。本代码支持FCOS+ResNet-101在MS-COCO数据集上完整的训练和测试流程本文分享自华为云社区《通用物体检测算法F... 查看详情

pytorch笔记:复现论文stochasticweightcompletionforroadnetworksusinggraphconvolutionalnetworks(代(代码片段)

1理论部分论文笔记:StochasticWeightCompletionforRoadNetworksusingGraphConvolutionalNetworks_UQI-LIUWJ的博客-CSDN博客2导入库importtorchimporttorch.nn.functionalasFimportnumpyasnpimportpandasaspdimportosfromtorch 查看详情

论文复现丨基于modelarts进行图像风格化绘画(代码片段)

摘要:这个notebook基于论文「StylizedNeuralPainting,arXiv:2011.08114.」提供了最基本的「图片生成绘画」变换的可复现例子。本文分享自华为云社区《基于ModelArts进行图像风格化绘画》,作者:HWCloudAI。项目首页 | GitHub | ... 查看详情

论文复现使用paddledetection复现orientedreppoints的复现笔记(代码片段)

1复现流程复现流程表:翻译原始论文;学习PaddleDetection配置参数对齐Dataloader;2MMRotate原始模型代码2.1数据集配置:DOTA1.02.1.1在Win11上使用mklink创建软链接示例代码:mklink/j"D:\\Professional\\Paddle\\mmrotate_oriented_r... 查看详情

trmf辅助论文:最小二乘法复现trmf(代码片段)

1目标函数(总)论文笔记:TemporalRegularizedMatrixFactorizationforHigh-dimensionalTimeSeriesPrediction_UQI-LIUWJ的博客-CSDN博客1.1求解W我们留下含有W的部分: 然后对wi求导线性代数笔记:标量、向量、矩阵求导_UQI-LIUWJ的博客-CSDN博... 查看详情

hr-viton虚拟换衣算法pre-processing复现全过程记录(代码片段)

LinkoforiginalGithubrepoLinkofpersonalmadestudycaseofHR-VITONContentPre1、OpenPose(Oncolab,needGPU)2、HumanParseMethod1:ColabMethod2:LocalorServer3、DensePose(Oncolab,GPUorCPU)4、ClothMask(Oncolab,GPUorCPU)5、ParseAgnostic(Oncolab)6、HumanAgnostic7、ConclusionPreAccordingtoexpla... 查看详情

论文《基于fpga的cfar设计与实现》复现(代码片段)

论文+代码链接:https://download.csdn.net/download/weixin_44884357/81425464书接上回,老师让做czt后,再做一cfarcfar算法原理:均值类CFAR适用于空间上统计平稳的背景,它在检测单元前、后沿各有一个覆盖若干距离单元... 查看详情

《reinforcementlearningbasedparametersadaptionmethodforparticleswarmoptimization》代码复现(代码片段)

...moptimization》发现有些点还是比较新颖的,所以今天对论文的代码进行了整体的复现。整个过程大概花费了1天半(编码调试,不包括实验)(PS:如果不想看论文的话,请查看这篇博客:关于强化学习优... 查看详情

mtcnn人脸识别(代码片段)

最近看了一些人脸识别的综述及几篇经典论文。这里简单记录下MTCNN论文及Tensorflow的复现过程。感觉人脸检测属于目标检测下的一个方向,不过由通用目标检测改为人脸检测,即多分类改为2分类,且为小目标检测。而且人脸检... 查看详情

real-worldmulti-object,multi-graspdetection论文demo复现(代码片段)

...+tensorflow-gpu1.12.0+cuda9.0+cudnn72https://github.com/ivalab#论文资源的主网址,其中grasp_multiObject_multiGrasp是指导复现demo的 查看详情

写代码复现论文的几点建议!(代码片段)

不知道大家有时候会不会有一个很好的idea,但是就是写不出来具体的代码,或者写的代码不够高效。其实这种情况所有人都会遇到:场景1:比赛期间有一个新特征的方法,但是用pandas实现太慢,时间复杂... 查看详情

netplier:probabilisticnetworkprotocolreverseengineeringfrommessagetraces代码复现记录

  NETPLIER论文对应链接为https://www.ndss-symposium.org/wp-content/uploads/ndss2021_4A-5_24531_paper.pdf,源码对应链接为https://github.com/netplier-tool/NetPlier/。源码复现有一定的复杂度,为了帮助大家,所以将完整复现记录写成博客。运行成功截图... 查看详情

项目总结论文复现与改进:一般选择模型的产品组合优化算法(research@收益管理)(代码片段)

论文标题:AssortmentOptimizationUnderGeneralChoice中文标题:一般选择下的产品组合优化论文下载链接:SSRN前情提要本文是基于笔者之前对上述论文做的笔注的深入分析与算法改进探究,上述论文的笔注发布于前一篇博... 查看详情

论文复现丨基于modelarts实现text2sql(代码片段)

摘要:该论文提出了一种基于预训练BERT的新神经网络架构,称为M-SQL。基于列的值提取分为值提取和值列匹配两个模块。本文分享自华为云社区《基于ModelArts实现Text2SQL》,作者:HWCloudAI。M-SQL:Multi-TaskRepresentationLe... 查看详情

京东jdata算法大赛高潜用户购买意向预测——复现(代码片段)

一、前言  完全是重现别人的过程,学习思路和处理方式,仅供记录,具体请看参考链接,更完善清晰  参考链接      http://izhaoyi.top/2017/06/25/JData/#%E6%95%B0%E6%8D%AE%E9%9B%86%E8%A7%A3%E6%9E%90  尝试重现别人的挖掘过程,... 查看详情