图像分割笔记

1、哔哩哔哩--肆十二-

    做一个界面可视化,如下图:

2、哔哩哔哩-ML与DL

 2、第二节-分割任务中的目标函数定义

1、损失函数

loss是衡量当前的权重参数是否是最佳的,当这组权重参数最佳,预测的结果(概率或输出值)也是最好的时,loss接近0,当预测错误时,loss远离0;图中的3列数据,是不同权重参数w和b得出的值,计算loss,就是看哪一组的权重参数是最佳的。

 

  B的模型更好,最后训练的参数均匀对待每一个值,而A则是过拟合的情况,只关注x的第一个点

所以一般在loss公式末尾加一个正则化项,

2、soft分类器

最后得到的是分数,转换成概率,这里的loss是-log(p),看log曲线图,概率接近1,预测正确度高,y值就接近0,看log的虚线,就代表损失值,损失值为正值,所以这里有负号。

整个求loss的过程就是前向传播

反向传播:更新W、B,求梯度,看哪个

梯度下降法:链式法则,梯度是一步步反过来求偏导

 3、正则化

惩罚项很小,还是有过拟合情况隐藏神经元层数越多,过拟合

 4、激活函数:能够把神经网络变得处理非线性问题,没有激活函数:

有激活函数:

 比如sigmod在x很大或则很小时,斜率(梯度)接近0,又是链式法则,几个相乘的关系,所以造成反向传播更新权重时,出现梯度为0的情况;但是ReLU的在X为负数时,值直接为0,就不管那部分x值了。

 5、正则化减少过拟合

6、dropout减少过拟合:防止网络模型太复杂,每一神经元随机失活一些节点,每一次训练时,失活的节点随机选取

dropout一般不在卷积层之后加,卷积层参数共享,参数没多少了,所以加了可能效果不大;一般在全连接层后加

分割肿瘤时,肿瘤和健康部分占比不同,所以设置损失函数时候,设置一个权重值,肿瘤少,分割时更重要,权重更大pos_weight,所以计算损失函数如下:

交叉熵loss:

 Focal loss:

因为每个像素点分割的难易程度不一样,有的肿瘤和背景区域明显,有的不明显,如肿瘤核心和增强肿瘤部分,他们的边缘不好分割,差距不明显,所以对这个分割的难易程度不同设置一个参数为\gamma,这里的0.95是指如果这个差距明显,容易分割,所以她的分割准确率高一些为0.95,最后得0.0025,使他对结果的损失低一些,如果难分割,分割准确率为0.5,最后得0.25,比0.0025多100倍,使他对结果的损失多一些,权重更高,对结果的影响更重要。

(相当于考试之后,对的题一般不关注,更关注我做错的题)

这个a是正负样本的比例,即pos_weight

总结:正负样本比例(权重值);每个像素点分割的难易程度\gamma;

7、iou(交并比)->miou(常用) 多个类别分割iou的平均值(如分割WT\TC\ET三者iou的平均值)

8、卷积的作用

左边是传统神经网络,右边是CNN;左边输入是一列向量,右边输入是HWC的图片

对于彩色图像RGB三个通道,所以滤波器也是3个通道,分别对RGB三个通道用三个不同的卷积做内积,最后再加上一个偏置项B,三个值求和->得输出

卷积核的第三个值C=前面输入通道

  这里用了Filter w0和Filter w1(所以有2个特征图),用了两个不同的卷积,每个卷积下面又有三个卷积,对RGB分别处理。

9、步长

图像处理中,步长一般设置为1,步长越小,效率降低,但是细节信息提取更多

padding,如果不进行填充,卷积过程中,中间值被多次卷积,利用次数多;边缘利用少,所以为了边界信息被重视,进行填充

绿色部分被多次利用

 卷积核个数=特征图个数

10个滤波器,说明最后结果有10个特征图;5*5*3说明每个滤波器有3个卷积核,分别对应输入的3个通道进行卷积。

10、参数共享

5*5=25是第一个通道的参数,25*3=75是个通道的参数,现在图一的黑色红色绿色蓝色都是一样的参数,都用黑色的参数(共享参数)。现在再思考上面彩色图像的例子,还有个权重参数B,三个通道虽然卷积核参数不一样,但是权重参数一样,所以是1;75+1=76,但是现在总共有10个5*5*3的滤波器(即相当于9个滤波器的工作步骤和第一个滤波器一样,但是参数不一样,因为要提取不同特征,所以最后是10个特征图)所以有->76*10=760个参数。

11、池化层(压缩,下采样)

去掉一些不重要的特征值,筛选重要的值,一般用最大池化,

 12、全连接层

只有更新参数的才算一层,如卷积层和全连接层(FC),全连接层的输入得是一条向量不能时三维的。

 卷积和激活函数一组(每次卷积完,计算了wx+b,就经过激活函数,再进入下一层卷积),当组数过多之后,减少特征,进行POOL,

 13、经典网络-Alexnet(8层)、vgg

 VGG在maxpool之后,特征值都会少,但是它在maxpool后面的卷积中,进行翻倍的卷积,使特征图翻倍,64-maxpool-128-maxpool-256-maxpool-512

并不是网络层数越深,提取特征效果越好,因为在不断的卷积过程中,下一层是在上一层基础上继续卷积的,所以最后发现网络层数越多,效果不一定越好;

56层的错误率反而更高了

14、残差网络

 层数变多,变多的那部分层数有的有用,有的没用,用一个残差网络跳过没用的层进行连接有用的层。

15、感受野(越大越好)

原始图像5*5,最后这个数据,由中间的3*3得到,中间3*3的一个数据,由第一个图的5*5的图像得到,所以感受野是5*5

 

 16、递归神经网络(RNN)

                     

 右边那个图,中间那个回归,当去了第一个特征之和,他会保存下这个特征,当第二个输入来了之后,他会输入第一个取到的特征和第二个输入一起送进网络。最后取得东西是最后融合的那个值ht。

17、LSTM

进行信息的过滤,不会像RNN那样保留下全部信息,他会丢弃一部分,保留有用的

  

 18、train代码--Keras框架

 19、学习率lr对结果的影响

过拟合(训练集的效果很好,loss很低,准确率很高;但是在验证集上loss很高,准确率很低)

降低学习率-会减少过拟合

Dropout-要指定rate(0-1)值,

20、权重初始化对结果的影响

有全连接层的地方,都有权重w,需要初始化,不同方法的初始化对结果也有较大影响

kernel_initializers可以自己选择初始化方法,去对应框架(keras)找

偏置B一般不设置,设为0;

21、正则化对结果的影响

一般用L2正则化,是w的平方;L1正则化是w的绝对值

kernel_regularizer=regularizer.l2(惩罚力度入);所以最后的loss=loss+入R(w)

惩罚力度较大,应该验证acc和训练acc更接近;因为减少了过拟合,惩罚力度越大,对W越宽容,

去框架(keras、pytorch等)官网查看哪些参数(w、卷积核大小、学习率、正则化、dropout)是可选的,对于训练结果有何影响,如何选取。

也可以改网络模型3072-512-256-4;也可以3072-256-128-4

22、整体流程

所有带权重参数计算的地方,后面都要加激活函数,再让它进入下一层计算;

多个卷积核,卷积之后,特征数变多,就加入pool层,提取重要特征,这时候特征又少了,就加入一个翻倍的卷积核,这样特征数又变多了

最后模型计算完之后,得到的是3D特征图,要进行展平拉长Flatten,再进入(全连接层)FC

一般来说,学习率越大,神经网络学习速度越快。如果学习率太小,网络很可能会陷入局部最优;但是如果太大,超过了极值,损失就会停.

学习率设置成一个衰减值,每一轮epoch的学习中,让lr不同,越来越小

 23、batchnormalization层

在不断更新参数过程中,他们一开始的归一化数据处理到现在最新更新的值,已经发生很大变化,也参差不齐,所以现在也可以进行归一化

加在哪个位置呢?加在更新了参数之和后的地方,即激活函数之后

24、conv+relu+pool一组 --代码实战

x.view是一个resize操作,转换成一个向量模式,展之前是batchsize,输出通道,长×宽。展之后是,有batchsize个行(把批次中的样本展开),只有一列,每一行的是(输出通道X长X宽)

 

 图像本身28*28*1:1是灰度图,所以1个通道;经过一次卷积之后,根据卷积公式得到

 25、代码实战二-pytorch-102分类

 

 centercrop中心裁剪,留下224*224的中心部分 

normlize标准化,为了用别人训练好的模型,他们的模型中用到的数据进行了这样的标准化,所以我们的数据用他们的模型进行测试,也要进行一样的标准化

 batch_size=8 ,4,2,1。。。越大,读取越快

 这个json文件,包含所有类别的标签和对应的名字

 数据一般是HWC,但是pytorch中式CHW,所以为了这里展示数据,要把pytorch的CHW(012)->原始的HWC(120)这里进行了transpose(120);

第四个image原来数据处理时,这里是标准化处理x-u/s  -> x.s+u

 26、迁移学习

用别人训练好的模型,用别人训练好的参数当作自己的初始参数进行初始化,来训练自己的数据,

学习哪部分?

A:当作权重初始化,然后继续自己的训练

B:别人的结果拿来不进行训练,直接进行测试

迁移学习实战:

 

 

 打印的网络结构如上图,别人是2048个特征 -> 1000个分类

如果我是十分类,这里全连接层的结构我得改成2048 ->10

 models.resnet152(pretrained=use_pretrained)自动下载模型

num_ftrs = model_ft.fc.in_features

model_ft.fc =nn.S

这两行是改掉了FC,变成自己想要的分类数目

set_parameter_requires_grad选择别人的模型时,可以只选择一部分层进行权重更新,如,把FC之前的特征提取层都冻住,只训练最后的FC层 

 

总结:用别人模型;是否冻住;改变FC

续接代码:

 

 

 

 

 

 

 

 

 

 

一、resnet

上面那个图,x直接过去;下面这张图,x经过一次1X1的卷积,扩大特征图个数,便于进行加法运算的时候,特征图个数一样。所以下面这张图,可以扩大特征。上面的图x:HW64  ->HW64  ->HW64  ->HW64 +x=HW64特征图一直是64

下面的图x:HW64  ->HW64  ->HW64  ->HW256 +x(经过1X1的卷积,64的特征图变成256个特征图),特征图变多,细节变多。

 二、注意力机制Attention

希望计算机关注有价值的特征,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值