SPM学习笔记
开启SPM12
1spm pet
基本操作
12345I = dicomread(dicomFile)imshow(I, 'DisplayRange', []) % 显示DICOM图像info = dicominfo(dicomFile) % 显示元信息% info.AcquisitionTime较重要
计算SUV:使用ImCalc输入计算公式后,Display选中计算结果
图像预处理
Spatial Registration, Normalization
Registration: Rigid Transformations (rotations, translations…)
Normalization: Transform to Montreal Neurology Institute (MNI) Template
Smoothing: e.g. Gaussian kernel, improve SNR, minimize differences between normalized images, increase validity of statist ...
大话设计模式-策略模式
工厂在业务逻辑增加的过程中,也会越来越复杂,维护性逐渐降低。
策略模式
定义了算法家族,分别封装起来,让其可以互相替换。此模式让算法的变化不影响使用算法的客户。
核心在于算法是随时都可能相互替换的。
Strategy类,定义所有支持的算法的公共接口
ConcreteStrategy类,封装具体算法或行为,继承自Strategy
Context类,使用一个ConcreteStrategy进行配置,维护一个对Strategy对象的引用
123456class Context def __init__(self, strategy: Strategy): self.strategy = strategy def context_interface(): return self.strategy.algorithm_interface()
但在具体实现过程中,仍然不能完全将策略选择过程从客户端中剥离。可以考虑与简单工厂模式结合。
12345678class CashContext: def __init__(type: str): # 接收策略类型而不是具体 ...
放射性药物与放疗激活药物
放射性药物与放疗激活药物
新药开发
PSMA-SPECT/CT技术是一种前列腺特异性膜抗原-单光子发射计算机断层摄影技术
肿瘤滞留不足是放射性药物面临的关键挑战。
前期工作
制备紧缺核素
延长血液循环,提高肿瘤摄取:可能不能成功
定点修饰抗体
FAPI小分子结构改造,加强靶向,高速清除降低毒副作用
短半衰期核素降低毒副作用
共价放射性药物增加核素的肿瘤摄取和滞留,靶向后激活
核素治疗不依赖信号通路,但有副作用。
放射性驱动的药物化学
gamma、X线、热中子束容易调控
发展放疗驱动的选择性断键,引发化疗药物的靶向释放,但十分困难(电子束能量大,断键无选择性)。
羟基自由基激活药物
伦琴发现氰化铂可以被X线激活发光,因此可能使用放射线释放顺铂
肿瘤内强烈的还原环境,乏氧化
放射性含B药物用于B中子俘获治疗
B完全不参与蛋白质合成与结合,因此本底更低
钆中子俘获核反应驱动
单个癌细胞上受体的量级1e6-1e7
一些别的思考
非一线治疗天然存在劣势:收治的志愿者往往更严重
新药物的毒性很难评估:病人死亡是药物副作用还是疾病本身进展?
核素储量本身也是一 ...
大话设计模式-简单工厂模式
直觉地用计算机的方式去思考是初学者常见的问题
活字印刷
可维护:只更改需要更改的字
可复用:在后来的印刷中重复使用
可扩展:另外加字
高灵活:排版方式不同
使用封装、继承、多态,降低程序耦合。
业务封装
将业务和界面分离:Web、Windows、Linux平台下的计算机均可使用Operation类。只需重写界面即可。
松耦合
构建一个基类Operation,其他运算继承此基类,并重写其虚方法。如此可更容易地添加新运算。
简单工厂模式
用一个单独的类来进行创造实例的活动。
1234oper = OperationFactory.create_pperate('+')oper.num1 = 1oper.num2 = 1result = oper.get_result()
如果需要修改加法,只需修正class OperationAdd,增加其他运算只需添加对应的子类并修改工厂。
UML简介
接口实现:棒棒糖表示法
关联:一个类"知晓"另一个类,可用实线箭头表示
聚合:一种"弱拥有",A可包含B对象,但B对象不是A对象的一部 ...
MMSegmentation实战
课程
课程的代码教学非常详细。本文的主要代码均来源于代码教学。
检查安装成功
12345import mmcvfrom mmcv.ops import get_compiling_cuda_version, get_compiler_versionprint('MMCV版本', mmcv.__version__)print('CUDA版本', get_compiling_cuda_version())print('编译器版本', get_compiler_version())
实战
进行推理
12python demo/image_demo.py img.jpg config.py \ checkpoint.pth --out-file fname.jpg --device cuda:0 --opacity 0.5
运行语义分割预测
12345678from mmseg.apis import inference_modelfrom mmengine.model.utils import revert_sync_ba ...
语义分割小综述
课程
应用
人像分割
自动驾驶
医疗影像
智能遥感:河流、田地等
思路
先验知识:颜色相近,物体交界颜色变化
先验知识不完全准确
逐像素分类:滑窗,逐个滑动预测类别
需重复计算卷积
复用卷积:直接在feature map上预测
需要全连接层的卷积化:每个全连接层神经元用一个卷积核替换(Fully Convolutional Network)
预测图上采样:双线性插值或转置卷积
双线性插值可以用对应卷积核代替:先进行零插值,再使用设计好的卷积核卷积
转置卷积
也称升卷积Upconvolution或反卷积Deconvolution,但不建议使用反卷积,其在数学上与卷积不互逆。转置卷积Transposed Convolution名称来源于卷积对应的矩阵运算。
对于卷积运算
O=I∗h=CIO = I * h = CI
O=I∗h=CI
其中hhh为卷积核,OOO为输出(小图),III为输入(大图),CCC为卷积运算的等价矩阵乘法项。可以发现其转置卷积有
I′=O′∗h′=CTO′I' = O'*h' = C^TO ...
mmDetection实战
课程
YOLOv3模型
主干网络:Darknet53
颈部:FPN
检测头
技巧
搜索模型:
1mim search mmdet --model "mask r-cnn"
推理
12345from mmdet.apis import init_detector, inference_detector, show_result_pyplotmodel = init_detector('config_path', 'checkpoint_path')result = inference_detector(model, 'img_path')show_result_pyplot(model, 'img_path', result)
推理
简单的推理
1234from mmdet.apis import init_detector, inference_detetor, show_result_pyplotmodel = init_detector(cfg, checkpoint ...
目标检测小综述
课程
这节课讲得有点划,硬核的部分都略去了orz
思路
滑窗:不可接受的效率成本
R-CNN、Fast R-CNN:Selective Search提议,比较复杂
Regional Proposal:使用一些特征减少框数
Selective Search:贪心算法将相邻而相似的图像块合并
消除滑窗重复计算:一次卷积计算所有特征,裁切特征图分类
密集预测
两阶段方法
区域提议+区域识别,逐步被单阶段取代
Fast R-CNN
Faster R-CNN
Mask R-CNN
锚框:原图上设置不同尺寸的基准框,基于特征独立预测其中是否包含物体(区域提议)
级联方法
Cascade R-CNN
HTC
单阶段方法
YOLO Series
SSD:在多个特征图上使用密集预测方法,产生所有位置、不同尺度、所有锚框的预测结果
锚框与真值匹配原则:一个真值框可匹配多个IoU > 0.5的锚框
8732个锚框分类 + 回归预测计算损失,每个锚框都有其分类、回归真值
Retina Net:FPN多尺度特征融合+Focal loss
FCOS:直接在多尺 ...
mmClassification实战
笔记
训练注意事项
对Evaluation部分
123456evaluation = dict( interval=1, metric='accuracy', save_best='accuracy_top-1', metric_options={'topk':(1,)} # 由于总类为4,这里必须指明metric_options)
启用标签平滑:
12# 在head中修改lossloss=dict(type='LabelSmoothLoss', label_smooth_val=0.2, mode='original')
load_from用于加载模型,resume_from用于重启训练,两者不同。
想要启用Wandb,可以用
1234567log_config = dict( interval=10, hooks=[ dict(type='TextLoggerHook'), dict(type='MMC ...