自助网站,网站开发与应用 答案,抖音代运营合同模板免费下载,新建网页的方法有哪些#x1f341;#x1f341;#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet…图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet医学细胞分割实战5 unet医学细胞分割实战6
1、医学细胞数据集介绍
1.1 数据集 如图所示右图就是原始数据而左边就是标签一共670条训练数据
1.2 原始数据集预处理
上面的数据是经过处理的实际上的原始数据是在Kaggle上下载的公开数据集 是包含的一个一个的文件夹每个文件夹中分别是数据和标签 而标签中是细胞图像中对每一个细胞都做成了标签分成了很多张小图片我们首先要做的是把这些小图片拼到一起
import os
from glob import glob
import cv2
import numpy as np
from tqdm import tqdm
img_size 96
paths glob(inputs/stage1_train/*)
os.makedirs(inputs/dsb2018_%d/images % img_size, exist_okTrue)
os.makedirs(inputs/dsb2018_%d/masks/0 % img_size, exist_okTrue)
for i in tqdm(range(len(paths))):path paths[i]img cv2.imread(os.path.join(path, images,os.path.basename(path) .png))mask np.zeros((img.shape[0], img.shape[1]))for mask_path in glob(os.path.join(path, masks, *)):mask_ cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE) 127mask[mask_] 1if len(img.shape) 2:img np.tile(img[..., None], (1, 1, 3))if img.shape[2] 4:img img[..., :3]img cv2.resize(img, (img_size, img_size))mask cv2.resize(mask, (img_size, img_size))cv2.imwrite(os.path.join(inputs/dsb2018_%d/images % img_size,os.path.basename(path) .png), img)cv2.imwrite(os.path.join(inputs/dsb2018_%d/masks/0 % img_size,os.path.basename(path) .png), (mask * 255).astype(uint8))
这部分代码只需要把那些小图片按照顺序汇总使用OpenCV拼在一起就可以了然后所有的数据都是这样的处理方式最后会得到1.1形式的数据集这里就不演示以及解释代码了如果对OpenCV不熟悉的可以参数这篇教程
2、训练参数解读
def parse_args():parser argparse.ArgumentParser()parser.add_argument(--name, defaultNone, helpmodel name: (default: archtimestamp))parser.add_argument(--epochs, default100, typeint, metavarN, helpnumber of total epochs to run)parser.add_argument(-b, --batch_size, default8, typeint, metavarN, helpmini-batch size (default: 16))parser.add_argument(--arch, -a, metavarARCH, defaultNestedUNet, choicesARCH_NAMES, helpmodel architecture: | .join(ARCH_NAMES) (default: NestedUNet))parser.add_argument(--deep_supervision, defaultFalse, typestr2bool)parser.add_argument(--input_channels, default3, typeint, helpinput channels)parser.add_argument(--num_classes, default1, typeint, helpnumber of classes)parser.add_argument(--input_w, default96, typeint, helpimage width)parser.add_argument(--input_h, default96, typeint, helpimage height)parser.add_argument(--loss, defaultBCEDiceLoss, choicesLOSS_NAMES, helploss: | .join(LOSS_NAMES) (default: BCEDiceLoss))parser.add_argument(--dataset, defaultdsb2018_96, helpdataset name)parser.add_argument(--img_ext, default.png, helpimage file extension)parser.add_argument(--mask_ext, default.png, helpmask file extension)parser.add_argument(--optimizer, defaultSGD, choices[Adam, SGD], helploss: | .join([Adam, SGD]) (default: Adam))parser.add_argument(--lr, --learning_rate, default1e-3, typefloat, metavarLR, helpinitial learning rate)parser.add_argument(--momentum, default0.9, typefloat, helpmomentum)parser.add_argument(--weight_decay, default1e-4, typefloat, helpweight decay)parser.add_argument(--nesterov, defaultFalse, typestr2bool, helpnesterov)parser.add_argument(--scheduler, defaultCosineAnnealingLR,choices[CosineAnnealingLR, ReduceLROnPlateau, MultiStepLR, ConstantLR])parser.add_argument(--min_lr, default1e-5, typefloat,helpminimum learning rate)parser.add_argument(--factor, default0.1, typefloat)parser.add_argument(--patience, default2, typeint)parser.add_argument(--milestones, default1,2, typestr)parser.add_argument(--gamma, default2/3, typefloat)parser.add_argument(--early_stopping, default-1, typeint,metavarN, helpearly stopping (default: -1))parser.add_argument(--num_workers, default0, typeint)config parser.parse_args()return config参数函数参数实例化对象指定网络的名字Unet训练epochs数据很小h和w很小、量也小100轮够了20分钟就能跑完batch_size根据自己显卡资源指定网络架构在后面部分会解释是否需要在每个位置都加上监督输入通道数类别个数当前任务比较简单只有是细胞和不是细胞输入图像H输入图像W指定损失函数为交叉熵数据集名字图像文件的扩展名掩码文件的扩展名优化器SGD学习率动量加速学习率衰减使用了一个自定义的类型转换函数 str2bool 来处理输入值这个函数为
def str2bool(v):if v.lower() in [true, 1]:return Trueelif v.lower() in [false, 0]:return Falseelse:raise argparse.ArgumentTypeError(Boolean value expected.)scheduler指定使用默认值为 CosineAnnealingLR’为学习率调度器最小学习率factor指定在特定条件下调整学习率时的乘法因子默认值为0.1patience对于一些调度器如 ReduceLROnPlateau这个参数定义了在性能不再提升时要等待多少周期之后才减少学习率。默认值为 2。类型为 int。milestones对于 MultiStepLR 调度器这个参数定义了何时降低学习率的周期数。默认值是 ‘1,2’表示一个字符串您可能需要在代码中将其分割为多个数值。类型为 str。gamma值设置提前停止用于指定在数据加载时用于数据预处理的进程数。
3、指定训练参数 指定参数
--dataset dsb2018_96
--arch NestedUNet指定数据集和网络架构的参数后执行train.py
unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet医学细胞分割实战5 unet医学细胞分割实战6