[常规赛] PALM眼底彩照视盘探测与分割 - 9月第1名方案
- 赛题链接:常规赛:PALM眼底彩照视盘探测与分割
- 赛题简介:ISBI2019 PALM眼科挑战赛赛题再现,提供800张眼底彩照训练数据集, 要求选手训练模型完成眼底视盘结构的探测和分割任务。
- 赛题背景:
- 本赛题原型为ISBI2019PALM眼科大赛。 近视已成为全球公共卫生负担。在近视患者中,约35%为高度近视。近视导致眼轴长度的延长,可能引起视网膜和脉络膜的病理改变。随着近视屈光度的增加,高度近视将发展为病理性近视,其特点是病理改变的形成:(1)后极,包括镶嵌型眼底、后葡萄肿、视网膜脉络膜变性等;(2)视盘,包括乳头旁萎缩、倾斜等;(3)近视性黄斑,包括漆裂、福氏斑、CNV等。病理性近视对患者造成不可逆的视力损害。因此,早期诊断和定期随访非常重要。
- 视网膜由黄斑向鼻侧约3mm处有一直径约1.5mm、境界清楚的淡红色圆盘状结构,称为视神经盘,简称视盘。视盘是眼底图像的一个重要特征,对其进行准确、快速地定位与分割对利用眼底图像进行疾病辅助诊断具有重要意义。
- 飞桨工具组件 - PaddleX
- 飞桨全流程开发工具,集飞桨核心框架、模型库、工具及组件等深度学习开发所需全部能力于一身,打通深度学习开发全流程。
- PaddleX同时提供简明易懂的Python API,及一键下载安装的图形化开发客户端。用户可根据实际生产需求选择相应的开发方式,获得飞桨全流程开发的最佳体验。
[0] 安装PaddleX
- 此处默认为PaddleX 2.0.0版本。
!pip install paddlex --upgrade
[1] 导入依赖模块
import warnings
warnings.filterwarnings('ignore')import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'from paddlex import transforms as T
import paddlex as pdx
import paddle
from paddle.regularizer import L2Decayimport shutil
import globimport numpy as np
import pandas as pdimport cv2
import imghdr
from PIL import Image
[2] 生成 VOC 格式文件夹
- Paddle系列开发套件为VOC格式文件夹提供友好的支持。
- 数据集结构如下,即可使用PaddleX自动进行数据划分:
Dataset/ # 语义分割数据集根目录
|--JPEGImages/ # 原图文件所在目录(默认不支持.TIF)
| |--1.jpg
| |--2.jpg
| |--...
| |--...
|
|--Annotations/ # 标注文件所在目录(注意为.PNG)
| |--1.png
| |--2.png
| |--...
| |--...
- 尊重数据版权,“切记不要将本数据集上传到任何渠道的个人空间(包括飞桨公开数据库),若被数据提供方发现,将被严肃处理”。
- 利用官网数据链接下载数据到
data/dataset.zip
。
!wget https://bj.bcebos.com/v1/dataset-bj/%E5%8C%BB%E7%96%97%E6%AF%94%E8%B5%9B/%E5%B8%B8%E8%A7%84%E8%B5%9B%EF%BC%9APALM%E7%9C%BC%E5%BA%95%E5%BD%A9%E7%85%A7%E8%A7%86%E7%9B%98%E6%8E%A2%E6%B5%8B%E4%B8%8E%E5%88%86%E5%89%B2.zip -O data/dataset.zip
- 使用
pdx.utils.decompress
解压目标文件至同级目录下(解压后注意文件名乱码,可手动复制路径)。 - 利用
mv
命令重命名至VOC格式文件夹。
pdx.utils.decompress('data/dataset.zip')!rm -rf data/__MACOSX
!mv data/常规赛:PALM眼底彩照视盘探测与分割 data/dataset!mv data/dataset/Train/fundus_image data/dataset/Train/JPEGImages
!mv data/dataset/Train/Disc_Masks data/dataset/Train/Annotations
!tree data/dataset/Train -L 1
data/dataset/Train
├── Annotations
└── JPEGImages2 directories, 0 files
[3] 图片数据清洗
图片的模式(mode)分别为 RGB(真彩色、三通道) 和 L(8位灰度图),统一转成JPG和PNG格式;
图片的尺寸(size)统一为(1444,1444),因为有的 img/label 的尺寸不同。
语义分割的标注图像,如1.png,为单通道图像,像素标注类别需要从0开始递增(一般0表示background背景), 例如0, 1, 2, 3表示4种类别,标注类别最多255个类别(其中像素值255不参与训练和评估)。
此处将会把0-255变成0-1的PNG标注图。
jpg_path_list = glob.glob('data/dataset/Train/JPEGImages/*.jpg')for i in range(len(jpg_path_list)):jpg_path = jpg_path_list[i]jpg_name = str(jpg_path.split('/')[-1]).split('.')[0]ant_path = os.path.join('data/dataset/Train/Annotations', f'{jpg_name}.bmp')if imghdr.what(jpg_path) and imghdr.what(ant_path):img_jpg = Image.open(jpg_path).convert('RGB')img_jpg = img_jpg.resize((1444, 1444))img_jpg.save(jpg_path)img_ant = Image.open(ant_path).convert('L')img_ant = img_ant.resize((1444, 1444))img_ant = np.array(img_ant, dtype='uint8')img_ant = np.uint8((img_ant == 0) * 1)cv2.imwrite(ant_path.split('.')[0]+'.png', img_ant)os.remove(ant_path)else:if os.path.exists(jpg_path):os.remove(jpg_path)print('delete:', jpg_path)if os.path.exists(ant_path):os.remove(ant_path)print('delete:', ant_path)
[4] 数据集划分
!paddlex --split_dataset --format SEG\--dataset_dir data/dataset/Train/\--val_value 0.25\--test_value 0
[5] 定义数据增强,并装载数据集
- Mix-Up 数据增强操作在图像分类中更常用,但此处也能涨点。
- 图像尺寸归一化为512x512,加上水平翻转和垂直翻转,最后归一化(PaddleX默认为ImageNet的mean和std)。
train_transforms = T.Compose([T.MixupImage(mixup_epoch=130),T.Resize(512),T.RandomHorizontalFlip(0.5),T.RandomVerticalFlip(0.5),T.Normalize()
])eval_transforms = T.Compose([T.Resize(512),T.Normalize()
])
train_dataset = pdx.datasets.seg_dataset.SegDataset(data_dir='data/dataset/Train',file_list='data/dataset/Train/train_list.txt',label_list='data/dataset/Train/labels.txt',transforms=train_transforms,shuffle=True)eval_dataset = pdx.datasets.seg_dataset.SegDataset(data_dir='data/dataset/Train',file_list='data/dataset/Train/val_list.txt',label_list='data/dataset/Train/labels.txt',transforms=eval_transforms)
[6] 配置 UNet 模型并训练
- 图像分割任务中常出现类别不均衡的情况,而 Lovasz Loss 对这种情况有一定的改善。
model = pdx.seg.UNet(num_classes=len(train_dataset.labels),use_mixed_loss=[('LovaszSoftmaxLoss', 1)])
- PaddleX内置了
Momentum
优化器和polynomial
学习率衰减策略。
model.train(num_epochs=150,train_dataset=train_dataset,save_dir='output/UNet_Lovasz',eval_dataset=eval_dataset,train_batch_size=8,learning_rate=0.02,log_interval_steps=75,pretrain_weights='IMAGENET',save_interval_epochs=5,use_vdl=False)
[7] 模型预测,另存为提交图片
model = pdx.load_model('output/UNet_Lovasz/epoch_150')
model.get_model_info()
- 单张图片的预测结果可视化。
import matplotlib.pyplot as plt
%matplotlib inlineimg = cv2.imread('data/dataset/PALM-Testing400-Images/T0056.jpg')
result = model.predict(img.astype('float32'))plt.figure(figsize=(8, 8))
plt.subplot(211)
plt.imshow(img[:, :, [2, 1, 0]])
plt.subplot(212)
plt.imshow(result['label_map'])
plt.show()
- 生成提交文件夹
work/Disc_Segmentation
,下载到本地压缩提交。 PIL.Image
方式读入图片并convert('RGB')
防止脏数据,预测时将RGB转换成BGR通道。- 模型输出0-1转换成255-0,和赛题要求一致。
if not os.path.exists('work/Disc_Segmentation'):os.makedirs('work/Disc_Segmentation')test_path_list = glob.glob('data/dataset/PALM-Testing400-Images/*.jpg')for path in test_path_list:img = Image.open(path).convert('RGB')img = np.array(img, dtype='float32')result = model.predict(img[:, :, [2, 1, 0]])label_map = np.uint8((result['label_map'] == 0)*255)img_name = str(path.split('/')[-1]).split('.')[0]cv2.imwrite(f'work/Disc_Segmentation/{img_name}.png', label_map)
[常规赛] PALM眼底彩照视盘探测与分割 - 9月第1名方案相关推荐
- [常规赛] PALM眼底彩照视盘探测与分割 - 10月第1名方案
1 赛题背景 本赛题原型为ISBI2019PALM眼科大赛. 近视已成为全球公共卫生负担.在近视患者中,约35%为高度近视.近视导致眼轴长度的延长,可能引起视网膜和脉络膜的病理改变.随着近视屈光度的增 ...
- 常规赛:PALM眼底彩照视盘探测与分割202105-202205全时段第一名(得分0.97387)方案
本来该比赛博主卷到写上一篇博文0.97123是不打算在卷了的,事情的起因也很简单博主4月底参加这个比赛的时候提交了结果,成绩0.96689很一般.不料,到了月底有人(202105-202204月份的全 ...
- 常规赛:PALM眼底彩照视盘探测与分割202105-202205全时段第二名(得分0.97123)方案
这只是百度的aistudio平台的一个常规赛(可以一直刷榜的比赛,每月计算一次排名),虽然在整个时段是榜2,但只是一个普通的语义分割比赛,参数人数不过百.有意参赛刷榜的的朋友可以访问以下链接 常规赛: ...
- 飞桨常规赛:PALM眼底彩照中黄斑中央凹定位-9月第1名方案
飞桨常规赛:PALM眼底彩照中黄斑中央凹定位-9月第1名方案 (1)比赛介绍 赛题介绍 榜首个人主页,戳此处查看 PALM黄斑定位常规赛的重点是研究和发展与患者眼底照片黄斑结构定位相关的算法.该常规赛 ...
- 飞桨常规赛:PALM眼底彩照中黄斑中央凹定位-11月第1名方案
飞桨常规赛:PALM眼底彩照中黄斑中央凹定位-11月第1名方案 (1)比赛介绍 赛题介绍 榜首个人主页,戳此处查看 PALM黄斑定位常规赛的重点是研究和发展与患者眼底照片黄斑结构定位相关的算法.该常规 ...
- 飞桨常规赛:PALM病理性近视病灶检测与分割 - 10月第1名方案
常规赛:PALM病理性近视病灶检测与分割 具体介绍 赛题介绍 PALM病理性近视病灶检测与分割常规赛的重点是研究和发展与病理性近视诊断和患者眼底照片病变分割相关的算法.该常规赛的目标是评估和比较在一个 ...
- 飞桨常规赛:PALM眼底彩照中黄斑中央凹定位
飞桨常规赛:PALM眼底彩照中黄斑中央凹定位 aistudio地址: https://aistudio.baidu.com/aistudio/projectdetail/2190500?contrib ...
- 飞桨常规赛:黄斑中央凹定位(GAMMA挑战赛任务二) - 11月第3名方案
飞桨常规赛:黄斑中央凹定位(GAMMA挑战赛任务二) 11月第3名方案--鸣沙山下.伽利略 比赛地址:https://aistudio.baidu.com/aistudio/competition/d ...
- 2018 AI Challenger全球AI挑战赛‘眼底水肿病变区域自动分割’赛道比赛总结
2018 AI Challenger全球AI挑战赛'眼底水肿病变区域自动分割'赛道比赛总结 苏州的十月,无论是天气还是桂香都觉得让人无所适从,忙碌的低年级学生一阵风似的从身边经过,恍惚才觉得,这是我最 ...
最新文章
- apache 重定向tomcat端口_Tomcat
- Waymo无人车高层动荡:CFO今日也走了,半年已失8名高管
- mysql 聚簇索引和非聚簇索引_聚簇索引和非聚簇索引
- 转载:js拖拽文本文档并读取内容到textarea
- 【攻防世界008】answer_to_everything
- mysql slow time_mysql使用slow log
- 使用比较器的nulls对具有null值的列表进行排序
- Android-语言设置流程分析
- 使用maven构建web项目
- linux跳转乌班图服务器,Linux-Ubuntu环境安装Nginx和配置二级域名跳转
- NP、OSPF链路状态数据库
- javaMail学习(三)——使用javaMail给易邮邮账户发简单邮件
- 游戏理论之Shapley Value(Shapley值)
- 计算机课外兴趣小组活动教案,科技兴趣小组教案
- win7自带截屏便签 打开命令
- 个人项目-数独(Python实现)——从解数独到写游戏
- python怎么去掉换行符_python去除空格和换行符的实现方法(推荐)
- 免费开源好用还佛系的国产PDF软件:pdf补丁丁下载 | 含pdf补丁丁使用手册
- PixelUtils:像素转换工具
- day063:红黑树、红黑规则