![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图像处理
周小天..
机器视觉、医疗
展开
-
图像处理-梯度
参考:Matlab中gradient函数(梯度计算原理)_夏菠-CSDN博客_matlab求梯度函数matlab中求取gradient(F)函数求的是数值上的梯度,那具体是怎么计算的呢?处理二维数据场景下,假设F为矩阵,>> x=[6,9,3,4,0;5,4,1,2,5;6,7,7,8,0;7,8,9,10,0]x = 6 9 3 4 0 5 4 1 2 5 ...原创 2022-01-05 18:15:29 · 1029 阅读 · 0 评论 -
pytorch-tensorboard保存训练的损失,梯度均值demo
#tensorboard的使用'''tensorboard的使用逻辑:•将代码运行过程中的,某些你关心的数据保存在一个文件夹中,这一步由writer完成•读取这个文件夹中的数据,用浏览器显示出来,这一步通过在命令行运行tensorboard完成'''#【1】不同文件夹,相同tag -》绘制结果在同一张图# 训练损失(训练损失+测试损失)的变化import shutilremoveLog = 1# 如果单个文件夹有多个文件,tensorboard会显示多个文件结果if os.path.原创 2021-10-14 16:05:54 · 898 阅读 · 0 评论 -
多个epoch后损失值突然间变为NAN
问题:上图为使用pix2pix,resnet模型进行训练的方法,设置epoch训练200次,训练到170次时候,损失值突然变为了nan。配置先验知识:由于GPU显存11GB,训练时显存消耗较大,只能将batchSize降到了2猜测:有可能是因为突然遇到的坏样本使得在batchSize为2的情况下,计算出来的平均损失偏差交较大,导致梯度绝对值太大,从而参数突然变化,梯度爆炸(纯属猜测,还没有验证)可能方法:1)如果batchSize足够大,会减小在一个batch中同时出现坏样本的概率。..原创 2021-09-02 10:21:21 · 2571 阅读 · 0 评论 -
pytorch-detach阻断反向传播,本质是减少不必要变量的梯度计算,加速训练
需求:在生成对抗网络中,会有生成器和判别器分别训练的过程,为了避免一些不必要的计算,我们使用detach阻隔反向传播。上图所示,完整训练一次的过程包括了判别器和生成器的训练判别器的训练:#判别器预测pred_fake = net_d.forward(fake_ab.detach())pred_real = net_d.forward(real_ab)#判别器损失loss_d_fake = criterionGAN(pred_fake, False)...原创 2021-08-30 12:14:24 · 1290 阅读 · 0 评论 -
pytorch-lr_scheduler.LambdaLR函数,更新学习率的管理工具
理论:LambdaLR更新学习率方式是 lr = lr*lr_lambda其中,lr由optim系列优化器提供,lr_lambda由lr_scheduler>lambdaLR提供假设,lr初始值为0.4,更新学习率函数lambda表达式为:lr_lambda = lambda epoch:0.1*epoch)epoch的初始值为0则,lr的变化规律应该是0.4*0.1*0=00.4*0.1*1=0.040.4*0.1*2=0.08......实验:i.原创 2021-08-27 22:31:33 · 5319 阅读 · 1 评论 -
pytorch-用优化器来管理参数
1、经典函数,求导从最简单的tensor开始,我们新建了一个tensor变量a,建立b = 3*a +3,那可以通过b.backward()对函数求导import torchfrom torch import nna = torch.tensor(3.0,requires_grad=True)b = 3*a +3b.backward(retain_graph=True)print(a.grad)输出:tensor(3.0)b.backward()print(a.grad)原创 2021-08-27 22:22:00 · 309 阅读 · 0 评论 -
OSError: [WinError 1455]
1.把num_works设置为2 or 1,大了很占用内存num_workers数量选择多少合适:https://blog.csdn.net/qq_41196472/article/details/106393994如何查看CPU核心数和线程数:https://blog.csdn.net/qq_43887455/article/details/1046038832.调大页面文件的大小 + 更改一下batch_size(彻底解决问题)...原创 2021-08-21 19:53:28 · 267 阅读 · 0 评论 -
AverageMeter-变量累计更新工具
# 记录Loss更新工具class AverageMeter(object): def __init__(self): self.reset() def is_empty(self): return self.count == 0 def reset(self): self.val = 0 self.avg = 0 self.sum = 0 self.count = 0 .原创 2021-08-21 14:45:37 · 636 阅读 · 0 评论 -
torch中模型参数(model.parameters,model.state_dict()),优化器参数(optimizer.state_dict())
转发:https://blog.csdn.net/qq_27825451/article/details/95888267原创 2021-08-21 14:28:38 · 1776 阅读 · 0 评论 -
opencv-opencv的写出
1、cv2.imwrite('a.tif',img.astype(np.uint8))2、cv2.imwrite('a.tif',img.astype(np.uint16))3、cv2.imwrite('a.tif',img.astype(np.float32))4、cv2.imwrite('a.tif',img.astype(np.float64)) ImageJ打不开原创 2021-08-19 00:54:06 · 126 阅读 · 0 评论 -
损失函数-均方误差(MSE)根均方误差(RMSE)平均绝对误差(MAE)
转发:https://blog.csdn.net/xiongchengluo1129/article/details/79155550原创 2021-06-09 21:36:55 · 955 阅读 · 0 评论 -
查看模型每层及总信息
import torchfrom torch.nn import Modulefrom torchsummary import summaryclass lrelu_conv_bn(Module): def __init__(self): super(lrelu_conv_bn,self).__init__() self.conv = torch.nn.ConvTranspose2d(1,1,kernel_size=4,stride=2,padding=1,b.原创 2021-06-07 20:42:22 · 248 阅读 · 0 评论 -
通道拼接-torch.cat
import torcha = torch.ones([1,2])b = torch.ones([1,2])print(torch.cat([a,b],1)) # 沿着 1阶输出:1 1 1 1原创 2021-06-07 20:38:59 · 1375 阅读 · 0 评论 -
深度学习-BatchNormalization
转载:随笔 - 67 文章 - 4 评论 - 84理解滑动平均(exponential moving average) 对滑动平均的直观理解,以及滑动平均在tensorflow中的使用。目录1. 用滑动平均估计局部均值2. TensorFlow中使用滑动平均来更新变量(参数)3. 滑动平均为什么在测试过程中被使用?1. 用滑动平均估计局部均值 滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weight..原创 2021-03-12 20:51:18 · 175 阅读 · 0 评论 -
读取和保存图像
opencv保存int8 signle channel图像失败,改用PIL保存from PIL import Imageimport numpy as nps = np.arange(64,dtype=np.int8).reshape((8,8))img = Image.fromarray(s)img.save(r'.\datasets\tubulin-sim-800x800_0000.tif')原创 2021-03-02 11:33:09 · 72 阅读 · 0 评论 -
限定数据范围
min(max(A,4),10) 限定数据在[4,10]原创 2021-02-23 19:05:00 · 652 阅读 · 0 评论 -
生成对抗网络-GAN
核心代码参考网址:https://blog.csdn.net/jizhidexiaoming/article/details/96485095原创 2021-02-26 22:34:27 · 65 阅读 · 0 评论 -
损失函数-ms-ssim和L1的混合
ms-ssim占比alphaL1占比1-alpha#%%import tensorflow as tfimport numpy as npimport torch#模仿matlab的fspecial函数,创建滤波算子(计算SSIM用)def _tf_fspecial_gauss(size, sigma, channels=1): """Function to mimic the 'fspecial' gaussian MATLAB function """ x原创 2021-02-26 16:57:10 · 4338 阅读 · 5 评论 -
损失函数-ssim和L1混合
ssim占比alphaL1占比1-alpha#%%import tensorflow as tfimport numpy as npimport torch#模仿matlab的fspecial函数,创建滤波算子(计算SSIM用)def _tf_fspecial_gauss(size, sigma, channels=1): """Function to mimic the 'fspecial' gaussian MATLAB function """ x.原创 2021-02-26 16:52:49 · 1869 阅读 · 0 评论 -
损失函数-高斯加权的L1正则化
L1正则化就是两套数据相减,就绝对值,再求平均这里两套数据相减,求绝对值,高斯滤波,再求平均#高斯加权的L1正则化def tf_gauss_weighted_l1(img1, img2, mean_metric=True, filter_size=11, filter_sigma=1.5): diff = tf.abs(img1 - img2) L1 = tf_gauss_conv(diff, filter_size=filter_size, filter_sigma=f..原创 2021-02-26 16:40:07 · 1009 阅读 · 0 评论 -
损失函数-MS-SSIM(multiscale structure similarity)跨尺度结构相似性
参考资料:https://blog.csdn.net/weixin_41923961/article/details/84795832MS-SSIM的考虑了不同尺度下结构相似程度本文在SSIM的基础上继续研究,通过不同大小的滤波算子来扩大感受野,模拟尺度缩小的情况。另外,先求取一次SSIM,再考虑其余四次的contrast 和 structure map基于tensorflow的代码:#%%import tensorflow as tfimport numpy as np..原创 2021-02-26 15:56:22 · 5324 阅读 · 0 评论 -
损失函数-SSIM(structure similarity)结构相似性
SSIM是一种衡量两幅图片相似度的指标。出处来自于2004年的一篇TIP,标题为:Image Quality Assessment: From Error Visibility to Structural Similarity地址为:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1284395理论应用方法:实际应用中,SSIM(x,y)通过作以(x,y)为中心的窗口,获得局部(x,y)点的局部均值,求取Ux矩阵原创 2021-02-26 14:43:44 · 4137 阅读 · 0 评论 -
1*1 卷积
和卷积一样,1*1卷积也是卷积,那它到底有什么用呢?1*1的卷积就是多个feature channels之间的线性叠加吗,没有什么特殊牛逼功能原创 2021-02-25 15:10:15 · 223 阅读 · 0 评论 -
张量的维度
转发:https://blog.csdn.net/River_in_mind/article/details/105561569张量的阶数有时候也称为维度,或者轴,轴这个词翻译自英文axis。譬如一个矩阵[[1,2],[3,4]],是一个2阶张量,有两个维度或轴,沿着第0个轴(从0算起)你看到的是[1,2],[3,4]两个向量,沿着第1个轴你看到的是[1,3],[2,4]两个向量。理解"沿着某个轴":import numpy as np a = np.array([[1,2],[3,4]]原创 2021-02-25 11:45:17 · 448 阅读 · 0 评论 -
图像插值-kron
代码验证:import numpy as np#img = np.arange(4).reshape((2,2))print(img)ones = np.ones((2,2))#%%print(np.kron(img,ones))结果:img:[[0 1] [2 3]]np.kron[[0. 0. 1. 1.] [0. 0. 1. 1.] [2. 2. 3. 3.] [2. 2. 3. 3.]]原创 2021-01-26 20:41:12 · 118 阅读 · 0 评论 -
深度学习进阶
转发:https://blog.csdn.net/weixin_41923961/article/details/82721843用深度学习玩图像的七重关卡许铁-巡洋舰科技2 天前第一个重境界: 图像识别如果你开始了解深度学习的图像处理, 你接触的第一个任务一定是图像识别 :比如把你的爱猫输入到一个普通的CNN网络里, 看看它是喵咪还是狗狗。一个最普通的CNN, 比如像这样几层的CNN鼻祖Lenet, 如果你有不错的数据集(比如kaggle猫狗大战)都可...转载 2021-01-26 17:07:25 · 292 阅读 · 0 评论 -
全连接层(线性层)-Linear
原理:#%%import torchimport torch.nn as nn#%% 输入数据in_features = 3out_features = 2input = torch.arange(in_features,dtype=torch.float32).view([1,-1])#%% 线性层输出(pytorch)connect1 = nn.Linear(in_features=in_features,out_features=out_features,bias=Tr原创 2021-01-26 15:02:14 · 7352 阅读 · 0 评论 -
乘法-mul,dot,mm
a = torch.tensor([[1,1]],dtype=torch.float32)b = torch.tensor([[1,1]],dtype=torch.float32)c = torch.tensor([[2,2],[2,3]],dtype=torch.float32)d = torch.tensor([[2,2],[2,3]],dtype=torch.float32)#矩阵对应位置相乘print(torch.mul(c,d))#矩阵对应位置相乘,再相加,获得一个值print(t.原创 2021-01-26 14:50:17 · 135 阅读 · 0 评论 -
MNIST数据集读取-datasets.MNIST
#%%import torchfrom torchvision import datasetsfrom torch.utils.data import DataLoaderfrom torchvision import transformsimport matplotlib.pyplot as pltimport sysbatch_size = 2transform = transforms.Compose([ transforms.ToTensor(), .原创 2021-01-26 13:04:16 · 3804 阅读 · 3 评论 -
归一化-Normalize
1)没有N,只针对每个通道进行归一化。输入图像应该是(C,H,W)个格式代码:#%%import torchfrom torchvision import transforms#%% 数据矩阵C= 2H= 2W= 2arry = torch.arange(C*H*W,dtype=torch.float32).view([C,H,W])print('输入矩阵:',arry)#%% pytorch归一化mean = [2,2]std = [2,2]n = transfo原创 2021-01-26 11:30:44 · 1403 阅读 · 0 评论 -
防止过拟合-Dropout2d
Dropout的过程1)按照概率p,对每个输入channel进行伯努利采样,随机采样到的channel置为0,输出2)将1)的输出结果乘以1/(1-p)就是做了dropout的结果代码验证:#%%import torchimport torch.nn as nn#%% 模型conv1 = nn.Conv2d(2,2,kernel_size=3,stride=1,padding=0)m = nn.Dropout2d(p=0.4)#%% 数据准备N = 2C = 2H .原创 2021-01-25 19:20:45 · 1775 阅读 · 0 评论 -
防止过拟合-BatchNorm2d
参考网址:https://pytorch.org/docs/1.2.0/nn.html?highlight=batchnorm2d#torch.nn.BatchNorm2d代码验证:#%%import torchimport torch.nn as nn'''(N,C,H,M)BatchNorm2D层有 计算归一化最终有chennel个μ,有channel个sigma;实际上对N中所有的channel1进行平均,求解出μ1,sigma1;所有的channel2进行平均,...原创 2021-01-25 16:36:20 · 255 阅读 · 0 评论 -
预测结果展示-plt.pause()
需求:在预测时显示数据背景:在利用模型进行预测时,我们希望预测一个结果,可视化显示一个结果。可是,发现,只有当while(1)循环执行完后,再执行plt.show()才能够绘制所有图像。不方便!!!import matplotlib.pyplot as pltimport numpy as npx = np.arange(10)# plt.ion()plt.figure()plt.imshow(np.arange(256*256).reshape([256,-1]))# p原创 2021-01-25 11:25:16 · 10328 阅读 · 0 评论 -
模型训练模式,预测模式-train() 和 eval()
转载:https://blog.csdn.net/weixin_43593330/article/details/107547202一、model.train()和model.eval()分别在训练和测试中都要写,它们的作用如下:(1)、model.train()启用BatchNormalization和Dropout,将BatchNormalization和Dropout置为True(2)、model.eval()不启用BatchNormalization和Dropout,将B...转载 2021-01-23 21:41:27 · 727 阅读 · 0 评论 -
损失函数-BCELoss
BCELoss就时predict对应点的位置相乘,相加,再求平均证明:#%%import torch import torch.nn as nn#%% mdBCELoss损失函数#%% 产生predict,targetN = 2C = 1H = 2W = 2predict = torch.arange(N*C*H*W,dtype=torch.float32).view([N,C,W,H])predict = torch.sigmoid(predict) .原创 2021-01-23 15:14:14 · 5516 阅读 · 0 评论 -
损失函数-BCEWithLogitsLoss
BCEWithLogitsLoss(predict,target) 和BCELoss(predict,target) 的区别:BCEWithLogitsLoss会对predict进行sigmoid处理;BCELoss不会对predict进行sigmoid处理;#%%import torch import torch.nn as nn#%% mdBCEWithLogitsLoss损失函数#%% 产生predict,产生targetN = 2C = 1H = 2W = .原创 2021-01-23 14:56:12 · 9322 阅读 · 2 评论 -
哪些变量可放到GPU上-to(device)
# 参考资料:https://blog.csdn.net/qq_38101208/article/details/110481390#%%import torchimport torch.nn as nndevice = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')class CNN(nn.Module): def __init__(self): super(CNN,self).__ini.原创 2021-01-22 19:12:05 · 1352 阅读 · 1 评论 -
数据集读取-Dataset,DataLoader
#%%import torchfrom torch.utils.data import Datasetfrom torch.utils.data import DataLoaderimport osimport PIL.Image as Imageimport matplotlib.pyplot as pltfrom torchvision import transforms#%% md'''数据量小数据量小的时候,没有大问题,直接加载到内存。比如我们利用一些数据做的线性回归.原创 2021-01-22 17:31:49 · 1158 阅读 · 1 评论 -
模型保存与加载-save,load
保存模型主要有两种方法:1)只保存参数(官方推荐)2)保存整个模型 (结构+参数)由于保存整个模型将耗费大量的存储,故官方推荐只保存参数,然后在建好模型的基础上加载。本文介绍两种方法,但只就第一种方法进行举例详解想要了解保存参数外的其他方法,可以仔细阅读 https://cloud.tencent.com/developer/article/1507565#%%import torchimport torch.nn as nn#%% 只保存参数conv1 = nn.Conv2.原创 2021-01-21 17:29:40 · 352 阅读 · 0 评论 -
查看模型的权值-模型与Tensor的区别
模型:1)conv1 = nn.Conv2d(in_ch,out_ch,kernel_size,stride,padding)2) 继承nn.Module类 (nn.Sequence)3)继承nn.Module类 (手写)Tensor1) conv1(input)2) DoubleConv(input)Tensor没有state_dict()方法,模型有state_dict()方法,可以查看变量#%%import torchimport torch.nn as nn#%%.原创 2021-01-21 16:45:19 · 393 阅读 · 1 评论