实战:使用yolov3完成肺结节检测(Luna16数据集)及肺实质分割

实战:使用yolov3完成肺结节检测(Luna16数据集)

yolov3是一个比较常用的端到端的目标检测深度学习模型,这里加以应用,实现肺结节检测。由于Luna16数据集是三维的,需要对其进行切片操作,转换成yolov3可以处理的二维图片。

1. yolov3代码及原理
* 代码
* 原理
2. Luna16数据集
* 数据集介绍
* 转换成voc数据集格式
3. 检测效果预览

更新:2019.9.10

对数据集进行肺实质分割。

更新:2019.9.14

使用分割后的数据进行训练

更新:2019.9.23

修改anchor size后重新训练

更新:2019.12.5

发现一个注释的错误:

 a = image_array.transpose(1,2,0)[:,:,20] #transpose是将(z,x,y)的三维矩阵转为(x,y,z)的矩阵

应该是transpose是将(z,y,x)的三维矩阵转为(y,x,z)的矩阵

更新:2019.12.11

发现应该坐标换算错误:

        #如果图像进行旋转了,那么坐标也要旋转
        if isflip :            
            x_max = 512 - x_min#修改前是 x_min = 512 - x_min 以下类似
            y_max = 512 - y_min
            x_min = 512 - x_max
            y_min = 512 - y_max
            x = 512 - x
            y = 512 - y

补充 2020.11.19

博主临近毕业,可能有消息无法及时回复,见谅,有问题请留言。

有很多csdner向我要数据集和代码,关于代码核心部分已经在博客中讲解(已上传csdn,存在些许bug),如果要提高自己能力,建议看懂,自己上手。如果是想要快速上手,测试相关数据集,我已经上传百度云VOC数据集,密码:zc0p。

赠人玫瑰,手留余香,如果我的博文/数据集/代码对你有所帮助,麻烦点个赞~~

补充:关于为什么分享数据集size不是512*512的,这里我对原始CT是进行了归一化的,即1mm*1mm*1mm,所以尺寸不一样。

1. yolov3代码及原理

1.1代码

基于c的:
https://github.com/AlexeyAB/darknet
基于pytorch的:
https://github.com/eriklindernoren/PyTorch-YOLOv3

1.2原理

可查看:
Pytorch | yolov3原理及代码详解(一)
Pytorch | yolov3原理及代码详解(一)_NotFound1911的博客-优快云博客_pytorch和yolo的关系
Pytorch | yolov3原理及代码详解(二)
Pytorch | yolov3原理及代码详解(二)_NotFound1911的博客-优快云博客_yolov3pytorch代码详解
Pytorch | yolov3原理及代码详解(三)
Pytorch | yolov3原理及代码详解(三)_NotFound1911的博客-优快云博客_yolov3pytorch代码详解
Pytorch | yolov3原理及代码详解(四)

Pytorch | yolov3原理及代码详解(四)_NotFound1911的博客-优快云博客

2.Luna16数据集

2.1 Luna16数据集介绍

LUNA16数据集介绍_pursuit_zhangyu的博客-优快云博客_luna16
Luna16数据集_一一|一一一亅的博客-优快云博客_luna16数据集
上面说的很全,这里只进行补充:

2.1.1.图像的翻转

.mhd文件中有CT图像的属性,其中有一条是:

TransformMatrix = 1 0 0 0 1 0 0 0 1
  • TransformMatric:图像矩阵是否翻转的标志。(在现实中CT扫描的时候有的人是正卧,有的人是仰卧的,所以会导致图像会出现翻转的情况。)
  • TransformMatrix = 1 0 0 0 1 0 0 0 1是正卧的,这里举一个反卧的例子:TransformMatrix = -1 0 0 0 -1 0 0 0 1。当图像反卧的时候我们把图像的x,y坐标进行倒序调整,使其正卧。如下面代码所示(加载CT图像):
def load_itk_image(filename):
    with open(filename) as f:
        contents = f.readlines()
        line = [k for k in contents if k.startswith('TransformMatrix')][0]
        offset = [k for k in contents if k.startswith('Offset')][0]
        EleSpacing = [k for k in contents if k.startswith('ElementSpacing')][0]
        
        # 把值进行分割
        offArr = np.array(offset.split(' = ')[1].split(' ')).astype('float')
        eleArr = np.array(EleSpacing.split(' = ')[1].split(' ')).astype('float')
        CT = CTImage(offArr[0],offArr[1],offArr[2],eleArr[0],eleArr[1],eleArr[2])
        transform = np.array(line.split(' = ')[1].split(' ')).astype('float')
        transform
智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论 494
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值