HR_net逐步实现过程

2024-01-09 09:17:28

1.numpy实现数组卷积操作

这里是一个矩阵,换个图试一下

import numpy as np
#输入数组
input_image=np.array([[1,2,3],[4,5,6],[7,8,9]])
#卷积核
kernel=np.array([[1,0],[0,1]])
#卷积操作
output_image=np.zeros((2,2))
for i in range(2):
    for j in range(2):
        output_image[i][j]=(input_image[i:i+2,j:j+2]*kernel).sum()
print(output_image)

1.1图像卷积,使用numpy实现卷积

深度理解卷积--使用numpy实现卷积_numpy 卷积-CSDN博客

可以参考这篇文章写的很好。

另一篇是用python实现卷积操作_python 卷积-CSDN博客

1.2json的作用是什么?

????????对于简单的数据集进行分类,可以用txt的形式对标签进行存储。但是对于目标检测中,标签不仅包含分类标签,还包含了检测目标的位置信息,因此采用json这种轻量级的数据交换格式,可以将不同的信息打包成一个个模块,并将这些模块按照一定顺序存储在json文件中,读文件时只需要根据关键字对相应的模块进行解析,即可得到该模块的打包信息。

? ? ? ? 之后就可以对json文件进行解析,有很多现成的c++/c库用于解析json文件,但是比较麻烦。自己可以找找。

2.项目文件夹内容

checkpoint、outputs、data文件夹分别用来存放模型预训练权重、模型输出结果、训练数据

2.1预训练模型推理

????????在进行姿态估计前需要目标检测将不同的目标检测出来,然后再分别对不同的目标进行姿态估计。所以选择一个目标检测模型。

????????这里选择 mmdetection工具箱中的faster_rcnn中的resnet50模型文件。配置文件位于

demo/faster_rcnn_r50_fpn_1x_coco-person.py

权重文件

https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco-person/'
'faster_rcnn_r50_fpn_1x_coco-person_20201216_175929-d022e227.pth'

3.模型搭建

3.1定义一个3*3的卷积

#in_planes输入特征通道数
#out_planes输出特征通道数
#stride步长,默认为1
#定义一个3*3卷积,参数包括输入特征通道数,输出特征通道数,返回一个
def conv3x3(in_planes,out_planes,stride=1):
     return nn.Conv2d(in_planes,out_planes,kernel_size=3,stride=stride,padding=1,bias=False)
#Conv2d对由多个输入平面组成的输入信号进行二维卷积

参考教程pytorch之torch.nn.Conv2d()函数详解-CSDN博客

class BasicBlock(nn.Module):
    expansion=1
    def __init__(self,inplanes,planes,stride=1,downsample=None):
        super(BasicBlock,self).__init__()#第一句话,调用父类的构造函数
        self.conv1=conv3x3(inplanes,planes,stride)
        self.bn1=nn.BatchNorm2d(planes,momentum=BN_MOMENTUM)#归一化处理。

nn.BatchNorm2d含义:【深入理解Batch Normalization(3)】pytorch——nn.BatchNorm2d()函数-CSDN博客

作用:在卷积神经网络的卷积层之后总会添加BatchNorm2d进行数据的归一化处理,这使得数据在进行Relu之前不会因为数据过大而导致网络性能的不稳定。

文章来源:https://blog.csdn.net/weixin_48433993/article/details/135373549
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。