first commit

This commit is contained in:
admin
2026-05-20 15:05:35 +08:00
commit ac09b26253
2048 changed files with 189478 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
################## MedSAM相关 ##################
conda create -n medsam python=3.10 -y # conda remove -n medsam --all
conda activate medsam
git clone https://github.com/bowang-lab/MedSAM
cd MedSAM
pip install -e .
pip install pydicom opencv-python
进行推理(给定函数)(使用默认数据集):
python MedSAM_Inference.py -i ./data/Test -o ./data/Result -chk work_dir/MedSAM/medsam_20230423_vit_b_0.0.1.pth
################## 自建数据集相关 ##################
my_tools/Generate_data_sets_from_dicom.py # 将dicom变为训练文件 -> Annotate_pics.py
my_tools/Annotate_pics.py # 实现了对于影像的标注
################## 自建数据集相关 ##################
Test_ALL_In_One.sh # 实现自动测试 -> Generate_data_sets_from_dicom.py、MedSAM_Inference.py
使用方法bash Test_ALL_In_One.sh -i <image_dir> -r <result_dir> -s <npz存储路径>

View File

@@ -0,0 +1,76 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# 一、环境安装
# 参考https://github.com/open-mmlab/mmsegmentation/blob/main/docs/en/get_started.md#installation
conda create --name openmmlab python=3.8 -y
conda activate openmmlab
sudo apt-get install jq # bash解析json工具
pip install ftfy regex
# 查看是否有nvidia-smi、Cuda版本没有的话安装cuda12.1
如果没有nvidia-smi需要重新安装驱动
nvcc --version
下载地址https://developer.nvidia.com/cuda-12-1-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=runfile_local
sudo sh cuda_12.1.0_530.30.02_linux.run
# 安装pytorch 安装12.1版本
官网https://pytorch.org/get-started/locally/官网https://pytorch.org/get-started/locally/
# 检查是否安装成功:
import torch # 如果pytorch安装成功即可导入
print(torch.cuda.is_available()) # 查看CUDA是否可用
print(torch.cuda.device_count()) # 查看可用的CUDA数量
print(torch.version.cuda) # 查看CUDA的版本号
# Install MMCV using MIM.
pip install -U openmim
mim install mmengine
pip install mmcv==2.2.0 # -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.4/index.html
# Install MMSegmentation.
git clone -b main https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation
pip install -v -e .
# Verify the installation
mim download mmsegmentation --config pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 --dest .
python demo/image_demo.py demo/demo.png configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --out-file result.jpg
# 查看是否有输出,并且删除相关输出内容
ls | grep result.jpg
rm pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth result.jpg
### 额外下载 ####
mim install mmdet
sudo apt-get update && sudo apt-get install libgl1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# 二、修改内容
# 1. 实现使用test.py时每隔1个输出
1.修改tools/test.py中的visualization_hook
在trigger_visualization_hook函数中加入"visualization_hook['interval'] = 1"
_____________________________________________________
# 2. 修改数据集,训练自己的数据
1.新增dataset(my_dataset)数据集基本信息
mmseg/datasets/__init__.py 中新增数据集
新建 mmseg/datasets/my_dataset.py 可参考stare.py进行构造
python setup.py install # 进行链接
2.新增dataset(my_dataset)数据集信息
新建 configs/_base_/datasets/my_dataset.py 可参考stare.py进行构造
_____________________________________________________
# 3. 通过mmseg/apis/inference.py 中的 init_model, inference_model, show_result_pyplot 输出分割图片
1.创建 tools/save_test_pics.py 程序,在--cfg-options中增加控制参数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# 三、附:
# 1.tmux配置
sudo apt install tmux
echo '# Display color
set -g default-terminal "screen-256color"' | tee ~/.tmux.conf
2.conda环境重命名
# 克隆conda环境
conda create -n openmmlab_old --clone openmmlab
# 删除conda环境
conda remove -n openmmlab --all

View File

@@ -0,0 +1,14 @@
0.自定义数据集参考:
mmseg/datasets/stare.py
configs/_base_/datasets/stare.py
1.自定义数据集构建相关问题:
提示MYDataset is not in the dataset registry
python setup.py install # 运行此命令即可解决
# 参考网站https://blog.csdn.net/qq_43199876/article/details/128000202
2.RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [2, 512, 27, 27]], which is output 0 of ReluBackward0, is at version 1; expected version 0 instead.
Turns out the uper_head.py code in mmseg/models/decode_heads will throw an error on line 104 due to the +=/-= operation.
# 由于/mmseg/models/XXX有+=/-=操作
重新运行python setup.py install # 运行此命令即可解决
# 参考网站https://github.com/SwinTransformer/Swin-Transformer-Semantic-Segmentation/issues/60

View File

@@ -0,0 +1,2 @@
cd Seg_new
bash Train_All_in_one.sh

View File

@@ -0,0 +1,8 @@
# optim_wrapper
# AMP
optim_wrapper = dict(
_delete_=True,
type='AmpOptimWrapper',
optimizer=dict(type='SGD', lr=0.05, momentum=0.9, weight_decay=0.0005),
loss_scale=512.)
bX(e.g.b4/b8)是batchsize

View File

@@ -0,0 +1,94 @@
# 克隆、装环境
git clone git@github.com:open-mmlab/mmsegmentation.git
cd mmsegmentation
pip install -v -e .
# 进行测试
mim download mmsegmentation --config pspnet_r50-d8_512x1024_40k_cityscapes --dest .
python demo/image_demo.py demo/demo.png configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --out-file result.jpg
# 查看是否可以生成result.jpg
rm pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth result.jpg
# 激活环境
conda activate openmmlab
# 修改各类文件
文件修改结果请见"configs"、"mmseg"
# 训练方式
tmux new -t train
# 单卡
python tools/train.py configs/danet/my_danet_r50-d8_512x512_40k_voc12aug.py --work-dir work_dirs/my_danet_r50-d8_512x512_40k_voc12aug_class_2/
# 多卡
alg="my_danet_r50-d8_512x512_40k_voc12aug"
tag="_class_3"
mul="_mul"
mkdir ./work_dirs_mul/$alg$tag/
bash tools/dist_train.sh configs/danet/$alg.py 3 --work-dir ./work_dirs$mul/$alg$tag/ --deterministic
# 传输图片
# 背景为255
rsync -avtP -e "ssh -p 1005" /home/zub/Desktop/Seg/Pics/Label_Generate_1/* root@temp.2018xjtu.tk:/root/Seg_new/data/my_dataset/ann_dir/validation
rsync -avtP -e "ssh -p 1005" /home/zub/Desktop/Seg/Pics/Label_Generate_1/* root@temp.2018xjtu.tk:/root/Seg_new/data/my_dataset/ann_dir/training
# 背景为0
rsync -avtP -e "ssh -p 1005" /home/zub/Desktop/Seg/important_Pics/Label_Generate_1/* root@temp.2018xjtu.tk:/root/Seg_new/data/my_dataset/ann_dir/validation
rsync -avtP -e "ssh -p 1005" /home/zub/Desktop/Seg/important_Pics/Label_Generate_1/* root@temp.2018xjtu.tk:/root/Seg_new/data/my_dataset/ann_dir/training
# 原始图片
rsync -avtP -e "ssh -p 1005" /home/zub/Desktop/Seg/Pics/Ori/* root@temp.2018xjtu.tk:/root/Seg_new/data/my_dataset/img_dir/validation
rsync -avtP -e "ssh -p 1005" /home/zub/Desktop/Seg/Pics/Ori/* root@temp.2018xjtu.tk:/root/Seg_new/data/my_dataset/img_dir/training
# 测试方式
# 单卡
XXX=iter_4000
best=best_mIoU_iter_12000
mul="" # 多卡为"_mul"
# 测试某一个模型结果
rm data/my_dataset/result/$XXX/*
mkdir -p data/my_dataset/result/$XXX/
python tools/test.py configs/danet/my_danet_r50-d8_512x512_40k_voc12aug.py \
work_dirs$mul/my_danet_r50-d8_512x512_40k_voc12aug_class_2/$XXX.pth \
--show-dir data/my_dataset/result/$XXX/
# --out data/my_dataset/result
# 测试最佳模型结果
rm data/my_dataset/result/$best/*
mkdir -p data/my_dataset/result/$best/
python tools/test.py configs/danet/my_danet_r50-d8_512x512_40k_voc12aug.py \
work_dirs$mul/my_danet_r50-d8_512x512_40k_voc12aug_class_2/$best.pth \
--show-dir data/my_dataset/result/$best/
# --out data/my_dataset/result
# 多卡
XXX="iter_10000"
alg="my_danet_r50-d8_512x512_40k_voc12aug"
tag="_class_3"
mul="_mul"
rm data/my_dataset/result/$alg/$XXX$tag/*
mkdir -p data/my_dataset/result/$alg/$XXX$tag/
python tools/test.py configs/danet/$alg.py \
work_dirs$mul/$alg/$XXX.pth \
--show-dir data/my_dataset/result/$alg/$XXX$tag/ --opacity 1
XXX="iter_40000"
tag_of_file="_train_199_test_Max" # _test_MAX
alg="my_danet_r50-d8_512x512_40k_voc12aug"
tag="_class_3"
mul="_mul"
# rm data/my_dataset/result/$XXX$tag_of_file/*
mkdir -p data/my_dataset/result/$XXX$tag_of_file/
python tools/test.py configs/danet/my_danet_r50-d8_512x512_40k_voc12aug.py \
work_dirs$mul/$alg$tag/$XXX.pth \
--show-dir data/my_dataset/result/$XXX$tag_of_file/ --opacity 1
# --out data/my_dataset/result
tag_of_file="_train_Max_test_Max" # _test_MAX
mkdir -p data/my_dataset/result/my_danet_r50-d8_512x512_40k_voc12aug_class_309_13__02_26_$tag_of_file/
python tools/test.py configs/danet/my_danet_r50-d8_512x512_40k_voc12aug.py \
work_dirs_mul/my_danet_r50-d8_512x512_40k_voc12aug_class_309_13__02_26/iter_40000.pth \
--show-dir data/my_dataset/result/my_danet_r50-d8_512x512_40k_voc12aug_class_309_13__02_26_$tag_of_file/ --opacity 1
# --out data/my_dataset/result

View File

@@ -0,0 +1,65 @@
_base_ = [
'../_base_/models/vars_file.alg_base_dir',
'../_base_/datasets/vars_file.dataset_file_name', #换成自己定义的数据集
'../_base_/default_runtime.py',
'../_base_/schedules/schedule_vars_file.schedule_k_timesk.py'
]
crop_size = (vars_file.crop_size_w, vars_file.crop_size_h)
data_preprocessor = dict(size=crop_size)
model = dict(
pretrained='open-mmlab://vars_file.pretrained_model',
backbone=dict(depth=vars_file.pretrained_depth),
data_preprocessor=data_preprocessor,
decode_head=dict(
num_classes=vars_file.class_num, # TODO 设置不同分类种类
loss_decode=dict(type='DiceLoss', use_sigmoid=False, loss_weight=1.0), # TODO 设置不同分类种类,它根据预测结果和真实标签的重叠区域来度量相似性
# align_corners=True,
# align_corners=False, # 在不用slide时
),
auxiliary_head=dict(
num_classes=vars_file.class_num, # TODO 设置不同分类种类
loss_decode=dict(type='DiceLoss', use_sigmoid=False, loss_weight=1.0), # TODO 设置不同分类种类,它根据预测结果和真实标签的重叠区域来度量相似性
# align_corners=True,
# align_corners=False, # 在不用slide时
),
# test_cfg=dict(mode='slide', crop_size=(vars_file.crop_size_w, vars_file.crop_size_h), stride=(vars_file.crop_size_w, vars_file.crop_size_w))
)
# optimizer优化器设计TODO
optim_wrapper = dict(
type='OptimWrapper',
_delete_=True,
optimizer=dict(type='AdamW', lr=0.0001, weight_decay=0.0005),
clip_grad=dict(max_norm=1, norm_type=2))
param_scheduler = [
dict(
type='LinearLR', start_factor=1e-6, by_epoch=False, begin=0, end=1500),
dict(
type='PolyLR',
power=1.0,
begin=1500,
end=160000,
eta_min=0.0,
by_epoch=False,
)
]
# optim_wrapper = dict(
# _delete_=True,
# type='OptimWrapper',
# optimizer=dict(type='AdamW', lr=0.0005, weight_decay=0.05),
# clip_grad=dict(max_norm=1, norm_type=2))
# # learning policy
# param_scheduler = [
# dict(
# type='LinearLR', start_factor=0.001, by_epoch=False, begin=0,
# end=1000),
# dict(
# type='MultiStepLR',
# begin=1000,
# end=80000,
# by_epoch=False,
# milestones=[60000, 72000],
# )
# ]

View File

@@ -0,0 +1,115 @@
############## A. 创建conda环境 ##############
# 参考https://github.com/open-mmlab/mmsegmentation/blob/main/docs/en/get_started.md#installation
# 1. 可选
conda create --name openmmlab python=3.8 -y
conda activate openmmlab
# 2. 安装必备组件
sudo apt-get install jq # bash解析json工具
pip install ftfy regex tensorboard wandb seaborn fvcore
pip install weave -no-compile
wandb login
# 3. 查看是否有nvidia-smi、Cuda版本没有的话安装cuda12.X
如果没有nvidia-smi需要重新安装驱动
nvcc --version
# 4. 安装和CUDA 版本对应的 pytorch
官网https://pytorch.org/get-started/locally/官网https://pytorch.org/get-started/locally/
检查是否安装成功:
python
import torch # 如果pytorch安装成功即可导入
print(torch.cuda.is_available()) # 查看CUDA是否可用
print(torch.cuda.device_count()) # 查看可用的CUDA数量
print(torch.version.cuda) # 查看CUDA的版本号
# 5. 使用 MIN 安装 MMCV.
pip install -U openmim
mim install mmengine
pip install mmcv==2.2.0 # -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.4/index.html
# 6. 安装 MMSegmentation.
# git clone -b main https://github.com/open-mmlab/mmsegmentation.git # 不需要下载了
cd mmsegmentation 或 cd Seg_All_In_One_MMSeg
pip install -v -e .
# V1. 安装无cuda算子的mmcv如果发现mmcv版本超了需要mmcv<2.2.0
pip uninstall mmcv-full 或 pip uninstall mmcv
pip install mmcv==2.1.0
# V2. 安装带有cuda算子的mmcv-full # 参考https://mmcv.readthedocs.io/en/latest/get_started/build.html
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
# 可选
git checkout tags/v2.1.0 # 切换到 2.1.0 版本
MMCV_WITH_OPS=1 pip install -r requirements/optional.txt # 它告诉编译脚本要构建 mmcv-full 的版本
pip install -e . -v
python .dev_scripts/check_installation.py # 检查安装是否成功
### 额外下载 ####
mim install mmdet
sudo apt-get update && sudo apt-get install libgl1
# 7. 检查安装是否正确
# 下载测试数据及代码
mim download mmsegmentation --config pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 --dest .
python demo/image_demo.py demo/demo.png configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --out-file result.jpg
# 查看是否有输出,并且删除相关输出内容
ls | grep result.jpg
rm pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth result.jpg
############## B.0. 定义 Train 训练程序 ##############
1. 观察 ./configs/Alg_name 目录下的算法配置文件,查看算法构成,查看是否有预训练模型
观察 ./configs/_base_/models/Alg_name.py 的模型文件
2. 有预训练模型则修改 ./My_All_In_One/0_Initial_Save_All_Model_locally.py 加入下载;
修改 ./My_All_In_One/Initial_Alg_Program/Initial_Alg_Select_Tool.py 加入选项;
3. 参考 ./My_All_In_One/2_Alg_Program 生成属于自己的 my_Alg_name.py 文件
############## B.1. 定义 Alg 训练算法 ##############
1. 观察需要修改的是哪个部分./mmseg/models/backbones 或 decode_heads 或 losses 或 necks 等
2. 将需改后的模型放入文件夹中
3. 修改其中的 __init__.py 文件,加入对应类名
4. 在 ./configs/_base_/models 中修改对应算法基础配置 e.g. my_bisenetv2_A1.py
5. 在 ./configs/Alg_name 中修改对应算法配置 e.g. my_bisenetv2_A1_XXX.py
6. python setup.py install # 注册数据集
############## B. Train 训练程序 ##############
# 0. 下载必要模型权重
cd Seg_All_In_One_MMSeg
python 0_Initial_Save_All_Model_locally.py
# 1. 准备数据集(使用脚本)
cd Seg_All_In_One_MMSeg/1_Data_Parameter
参考重新定义脚本my_dataset_model.json # 定义脚本
cd Seg_All_In_One_MMSeg
python 1_Initial_Data_All_data_from_1_Data_Parameter-V2.py
python setup.py install # 注册数据集
# 1. 自定义数据集(不推荐)
参考mmseg/datasets/stare.py && configs/_base_/datasets/stare.py
参考mmseg/datasets/my_dataset_model.py && configs/_base_/datasets/my_dataset_model.py
# 2. 初始化算法(使用脚本)
python ./My_All_In_One/2_Initial_Alg_All_data_from_2_Alg_Program-V2.py # 会自动输出训练程序
# 2. 自定义算法(人工定义)
训练执行代码configs/alg_name/alg_name_XXX.py
底层骨架代码mmseg/models/backbones/alg_name.py && mmseg/models/backbones/__init__.py
底层schedules代码mmseg/configs/_base_/schedules
# 新建算法、新建数据集后重新设置索引
python setup.py install # 运行此命令即可解决
# 3. 训练后删除不符合标准的pth节省空间
# 修改其中的 target_directory 、 运行两次
python ./My_All_In_One/3_Find_And_Delete_Special_Epoch.py
# 4. 训练后移动算法
bash ./My_All_In_One/3_Tool_Copy_Result_To_Hardisk.sh
############## C. Predict 推理程序 ##############
# 1. 预测模型 参数量、FLOPs、FPS
CUDA_VISIBLE_DEVICES=0 python My_All_In_One/4_1_predict_params_FLOPs_FPS_V2.py
# 2. 预测模型 指标
CUDA_VISIBLE_DEVICES=0 python My_All_In_One/4_2_predict_matrics_from_log_V2.py
# 3. 生成模型结果
CUDA_VISIBLE_DEVICES=0 python My_All_In_One/4_3_predict_draw_pictures_and_tabels.py
# 4. 训练损失摘录
CUDA_VISIBLE_DEVICES=3 python My_All_In_One/4_4_extract_loss_and_best_miou.py
############## D. 其他注意事项 ##############
1. 将vis_backends、visualizer相关hook定义放在./My_All_In_One/Initial_Alg_Program/Initial_Alg_Gen_Tool.py 的write_config_to_file函数中了# 批量将参数内容写入文件 # V2 加入训练过程可视化 TODO