【代码】
麋鹿
读后感:
V1讲框架流程、V2V3狠真实,日常各种报错|预处理|size|格式|维度;“又出错了 狠棒狠棒 T T”
看V1脑袋有个框架,后面两个有较多设计预处理等报错.注意num_classes和weight_path
V1(视频教程)、源码:github、gitee
【个人记录】
data:原jpg=>png——.replace('png','jpg')
utils:预处理——先 max h&w,统一之后再resize
nets:①P2的04:12提到预处理的一个点:用reflect代替全0填充,保证全图都有特征,加强提取特征的能力;②加padding是为了保持形状不变,dim:NCHW=0123:
Downsample里:nn.conv2d(c,c,3[3x3卷积],2[stride],1[填充为1],paddingmode=reflect);
Upsample里:interpolate插值法、torch.cat((out,feature),dim=1)
train:思路还是一样,先cude再weightpath实例化;P3路径、图片拼接显示的代码
test:实例化网络、加载权重.input-归一化-升维-送网络-输出
评论区有一些报错及答疑,以及围绕resize的一些讨论
V2重新梳理UNet(视频)、源码github
【个人记录】
官方是有labelme生成mask脚本的
make_mask_data:先取出所有的jason文件temp_data,然后遍历拿到jason文件
jason坐标显示、Image.new、.polygon画多边形、tuple元组转换、如何显示mask(22min)
get_evaluation:指标MIOU、keep_image_size_open
net.eval()容易忘记[test.py]:唤醒norm和dropout
神经网络输出也是单通道的,所以要有个处理,改成三通道输出
cv2.waikey、torch.permute、.astype(int)
分割的过程/可视化-不同数值赋值、rgb问题、维度问题、尺寸size不一样问题、输出通道问题;
V3:UNet完结篇
调用One-hot(只在一个通道上为1else均为0),以tensor形式:transform后面再.long()
set(img.reshape(-1)展平.tolist())
以2类别为例:先make_mask生成,再vis_label可视化(可以只打印label,=N+1背景)
function:input->transform预处理-加维度加批次->.eval()/argmax(1)得256/squeeze()、uns...->permute.detach.numpy->result
cv.imshow('out',out*255.0)这里*与显示都要注意位置
评价指标MIOU/Recall/Precision、github代码、CSDN、
混淆矩阵:from sklearn.metrics import confusion_matrix ,miou的计算大概思路↓以0-0为例:
Bubbliiiing
Pytorch搭建自己的语义分割平台(视频教程)
源码地址、博客地址(相关连接)
常见问题记录
train.py
input_shape = [512, 512]
训练分为两个阶段,分别是冻结阶段和解冻阶段。设置冻结阶段是为了满足机器性能不足的同学的训练需求。
由于resnet50中有BatchNormalization层,当主干为resnet50的时候batch_size不可为1
【论文】
基于U-Net的新生儿脑组织图像分割:对UNet和transformer介绍通俗易懂,适合入门
UNet:
注意力机制: