前一半写于2019年1月3日凌晨
后一半写于2019年1月3日下午至晚上
一、找Unet代码
https://github.com/PARMAGroup/UNet-Instance-Cell-Segmentation
我找到的是这个,instance cell segmentation恰好对应细胞分割。
而且用到的软件是Pytorch,恰好是学长推荐的软件。
感觉看起来非常好的样子。
二、阅读该代码的帮助文件
We tested UNet over several configurations including the loss function, evaluation function and the datasets.
1、准备工作
Python3.7 Pythorch 数据集
2、运行training and validation
运行训练集:运行main.py文件。
Options for configuration配置选项
3、运行结果可视化
在文件夹“visualization”中运行结果可视化。
show visualization
These report will create an image of the performance (Loss, Accuracy), an image of the outputs of the model and an image of the gt to compare.
Options for configuration配置选项
4、Compare two Trained Models
暂时我们用不到
三、安装Pytorch然后看一下Pytorch的基本操作
1、安装Pytorch
我们现在Windows下安装Pytorch吧。Pytorch也有Linux版本。
(1)尝试安装的第一个方法:
参考网站:https://zhuanlan.zhihu.com/p/32910624
针对小笔记本电脑,只需要这一条命令:
conda install -c peterjc123 pytorch
我还是打开Anaconda Prompt,在这个上面输入这条命令的。然后就开始安装了。
解析安装环境好像需要1分钟。中间需要点一次yes。然后就一直等就行了。整个过程我这边花了20分钟左右。
注意:安装的时候务必要关掉所有其他的Python程序,否则可能报错!
在安装Pytorch的同时快速入门
检测是否安装成功:
cmd到命令窗口,输入python,然后import torch包,查看是否导出成功。
结果:安装不成功
(2)卸载pytorch
pip uninstall torch
需要点一次确认。
参考网站:https://ptorch.com/news/37.html
注意:务必重启命令行,不能先输入python后再输入这个命令。
(3)安装pytorch的第二个方法:
参考网址:https://blog.csdn.net/sc2079/article/details/82353894
去官网:
选择适合你开发环境要求的选项。笔者从上到下依次选的是window、pip、3.6、None。
查看安装命令
pip3 install https://download.pytorch.org/whl/cpu/torch-1.0.0-cp36-cp36m-win_amd64.whl
pip3 install torchvision
希望这次能安装成功
运行第一个命令大概需要等5分钟
再复制粘贴第二个命令。
输入python,然后import torch包,查看是否导出成功。
安装成功!
2、Pytorch快速入门
参考网址:https://zhuanlan.zhihu.com/p/26854386
(1)pytorch处理对象及操作
Tensor:
张量,其实就是多维矩阵
torch.Tensor(5,4) #返回5*4大小的矩阵
a = torch.rand(5,4)
a.size()
Variable:
一个Variable里面包含着三个属性,data,grad和creator,其中creator表示得到这个Variabel的操作,比如乘法或者加法等等,grad表示方向传播的梯度,data表示取出这个Variabel里面的数据。
神经网络
模型的建立主要依赖于torch.nn,torch.nn包含这个所有神经网络的层的结构
可以看这个网站,注释是中文的,是非常好的Pytorch入门。
https://github.com/L1aoXingyu/pytorch-beginner
比如第四节构建卷积神经网络。
四、尝试阅读代码并弄清楚Options for configuration到底是什么
https://github.com/PARMAGroup/UNet-Instance-Cell-Segmentation
还是这个代码
1、阅读main.py
(1)之前看代码手册的时候,一直看不懂Options for configuration说的是啥,但是在代码里找到了对应的答案。
OptionParser:Python里的这个模块用于处理命令行参数。
比如在命令行里输入某个命令,便会打印出对应参数。
(2)main.py一共有一下几个组成部分:
定义第一个函数:Configure every aspect of the run. Runs the training and validation.
def setup_and_run_train(n_channels, n_classes, dir_img, dir_gt, dir_results, load, val_perc, batch_size, epochs, lr, run, optimizer, loss, evaluation):
定义第二个函数:Definition of the optional and needed parameters.
def get_args():
这个函数里设置了各个参数的默认值。
开始运行:(用到了刚刚定义的两个函数)
if __name__ == "__main__":
args = get_args()
for r in range(args.runs):
setup_and_run_train(
n_channels = args.n_channels,
n_classes = args.n_classes,
dir_img = '../data/'+args.dataset+'/',
dir_gt = '../data/'+args.gt+'/',
dir_results = '../checkpoints/'+args.savedir+'/',
load = args.load,
val_perc = args.val_perc,
batch_size = args.batchsize,
epochs = args.epochs,
lr = args.lr,
run=str(r),
optimizer = args.optimizer,
loss = args.loss,
evaluation = args.evaluation)
注意:
dir_img和dir_gt和dir_results这三个文件夹的命名方法:
两个点“..”表示当前所处的文件夹上一级文件夹的绝对路径
初步理解为:
有一个最大的文件夹,比如叫:Unet_project
里面分为3个小文件夹,分别为:data,checkpoints,codes
然后在data文件夹里,又分为:Data,GT_One_Class两个小文件夹
在checkpoints文件夹里,还有一个checkpoints文件夹。用来保存结果
其中有一项叫做Validation Percentage,暂时还没有弄懂是什么意思。
然后这里的loss和evaluation是选择loss和evaluation函数。
setup_and_run_train这个函数会返回每个epoch的这些值:
'epoch', 'train loss', 'train acc', 'val loss', 'val acc'并存在excel里。
epoch的含义是:摘自知乎:
对于初学者来讲,有几个概念容易混淆:
(1)iteration:表示1次迭代(也叫training step),每次迭代更新1次网络结构的参数;
(2)batch-size:1次迭代所使用的样本量;
(3)epoch:1个epoch表示过了1遍训练集中的所有样本。
值得注意的是,在深度学习领域中,常用带mini-batch的随机梯度下降算法(Stochastic Gradient Descent, SGD)训练深层结构,它有一个好处就是并不需要遍历全部的样本,当数据量非常大时十分有效。此时,可根据实际问题来定义epoch,例如定义10000次迭代为1个epoch,若每次迭代的batch-size设为256,那么1个epoch相当于过了2560000个训练样本。
2、阅读dataset.py文件
需要在main里用到的函数是 get_dataloaders,所以需要仔细阅读这个函数。
(1)在main函数中:
在main里的调用用到的是这一行:
train_loader, val_loader = get_dataloaders(dir_img, dir_gt, val_perc, batch_size)
(2)在dataset.py文件中:
get_dataloaders这个函数的作用是:
Returns the dataset separated in batches. Used inside every epoch for retrieving the images.
(3)这一句的含义:ids = [f[:-4] for f in os.listdir(dir_img)]
# [:-4]=.后缀
os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
(4)在Class里,有一段transform代码,试图弄清楚它的意思:
# Transforms
self.data_transforms = {
'imgs': transforms.Compose([
# transforms.RandomResizedCrop(256),
# transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.0054],[0.0037])
]),
'masks': transforms.Compose([
transforms.ToTensor()
]),
}
这段代码的作用是:
在Pytorch中转化成张量形式并且进行归一化。
参考网址:https://zhuanlan.zhihu.com/p/27382990
注意:第15行的extension应该改成“tiff”以适应我自己的图片的需要。
3、阅读model.py文件
构建Unet网络
4、阅读train_val文件
定义loss function
5、阅读miscc.py文件
把数据存到csv格式的文件中。
6、一些还有疑问的地方
(1)代码里是怎么区分train和validation set的呢?
五、弄清楚一个问题:训练好之后怎么测试呢?
帮助文件里有这么一句话:
Show Visualization
If you want to see how a trained model performs out, you should use the result_visualization.py file. These report will create an image of the performance (Loss, Accuracy), an image of the outputs of the model and an image of the gt to compare.
对!这个文件“result_visualization.py ” 位于visualization文件夹里,是进行测试用的。
if __name__ == '__main__':
args = get_args()
df = mean_results(args.folder)
plot_one(df, args.title, args.folder)
see_results(n_channels = args.n_channels,
n_classes = args.n_classes,
load_weights = args.load,
dir_img = "./img_test/"+args.dataset+"/",
dir_cmp = "./img_test/"+args.gt+"/",
savedir = args.folder,
title = args.title)
这一段是最后跑的代码。这里非常关键的内容是load_weights,我需要仔细研究这个函数。
但是可以先训练起来,训练的过程中研究测试的代码。
六、开始调试和运行训练集代码
第一步:
先取200幅图像进行调试,合适的话再去取1000幅
第二步:
开始尝试运行。
一开始主要是一些文件寻找的错误。