水平一般建议直接看原UP主教程
创建环境,安装依赖
conda create -n open-mmlab python=3.8 pytorch==1.10.1 torchvision==0.11.2 cudatoolkit=11.3 -c pytorch -y
conda activate open-mmlab
pip install openmim
git clone https://github.com/open-mmlab/mmpretrain.git
cd mmpretrain
mim install -e .
安装完成后,执行下面代码测试
python demo/image_demo.py demo/demo.JPEG resnet18_8xb32_in1k --device gpu:0
使用python执行demo文件夹下image_demo.py脚本,对图片demo/demo.JPEG使用ResNet网络结构,使用的设备是CPU,会直接下载resnet权重
查询支持的权重
import mmpretrain
mmpretrain.list_models()
文件结构
configs | 配置文件 |
data | 数据集存储路径 |
demo | 入门案例 |
docs | 中英文文档教程 |
mmpretrain | 模块化代码 |
projects | 工程实例 |
resources | 图片、视频等静态资源 |
tests | 组件维度测试脚本 |
tools | 训练、测试、可视化等工具集 |
work_dirs | 运行代码产生的文件存放地 |
现有数据集+现有模型
#未做测试
python mmpretrain/tools/train.py mmpretrain/configs/resnet/resnet10_8xb16_cifar10.py
现有数据集+自定义模型
方案1:
- 使用pytorch实现完整的前向传播,并测试好维度
- 按照MMPretrain的约定将进行代码转换以及配置文件的改写
方案2:
- 通过端点调试以及可视化的方式理解官方代码的维度变换
- 在理解的基础上直接按照约定改写官方代码
LegoAI:以可视化的方式搭建神经网络
自定义模型心得:
- 虽然模型被拆分成了不同份组件,但是组件之间并不能任意组合
- 各个组件的输出并不一定是Tensor,也有可能是Tuple
- 并不是每个组件都是必须的,例如可以没有neck
- loss是和head绑定的,拆解模型的时候需要注意
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self)._init_()
self.conv1 = nn.Conv2d(3,6,5)
self.pool = mn.MaxPool2d(2,2)
self.conv2 = nn.Conv2d(6,16,5)
self.fcl = mn.Linear(16 * 5 * 5,120)
self.fc2 = nn.Linear(120,84)
self.fc3 = mn.Linear(84,10)
def forward(self, x):
x = self.pool(F.relu(self.convl(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1,16*5*5)
x = F.relu(self.fc1(x))
x = F.relu(solf.fc2(x))
x = self.fc3(x)
return x
din = torch.randn(16,3,32,32)
net = Net()
net(din).shape