• [复现 | 论文】Seg4Reg Networks for Automated Spinal Curvature Estimation


    Seg4Reg Networks for Automated Spinal Curvature Estimation

    用于自动脊柱曲率估计的 Seg4Reg 网络

    【论文阅读】

    Abstract

    提出pipeline来进行准确脊柱侧弯评估

    framework:

    Seg4Reg,首先经过分割网络得到mask,然后回归网络直接基于此进行cobb角预测。

    +a domain adaptation module来缓解domain shift问题

    输出:集成ensemble不同模型的预测结果

    Intro

    评估bobb两方法:

    ①预测landmark然后计算角:高精度但是过于依赖landmark,小误差导致大错误

    ②直接回归cobb:方法稳定但预测精确不够(本文证明该方法更优)

    本文:MICCAI AASCE 2019 challenge

    Method

    seg:与PSPNet相似、reg:传统分类模型

    预处理:

    • train/test区域不同⇒直方图均衡化使它们视觉相似(因为test不多就手工crop,并数据增强)
    • 再seg之前额外加一个”gap~bones”可提高分割模型性能(正则化训练过程)

    使用ImageNet预训练的分类网络(?用在谁上面)可以提升有限的训练样本;

    train/test之间domain gap用[3]加一个判别器分支,并在反传时反转梯度(loss如下,本文 λ=1)

    网络训练参数及配置:

    实验结果

    • Local Validation

    L1 loss:

    表1:input类型和尺寸的消融实验

    ⇒segmentation mask is the best input type and (512, 256) is the best input size

    表2:不同分割网络性能

    ⇒adding a dilation pyramid thus improves the performance of previous PSPNet

    目的:选择最合适的(也是进一步说明我们选择图片尺寸、网络的合理性)

    • Online test

    相关知识

    domain shift

    dilated convolution作用

    Adam optimizer

    词汇积累

    alleviate减轻、缓解mitigate

    【实验复现】

    1、mat2csvQA

    1. import os.path
    2. import pandas as pd
    3. import scipy
    4. from scipy import io
    5. # 'data/labels/train/sunhl-1th-02-Jan-2017-162 A AP.jpg.mat'
    6. def mat2csv(mat_file_path):
    7. features_struct = scipy.io.loadmat(mat_file_path)
    8. # print(features_struct)
    9. features = features_struct['p2']
    10. dfdata = pd.DataFrame(features)
    11. datapath1 = mat_file_path[:-4]+'.csv'
    12. dfdata.to_csv(datapath1, index=False, header=False)
    13. if __name__ == '__main__':
    14. # data_root = 'data/labels/val'
    15. # mat_files =[os.path.join(data_root,filename) for filename in os.listdir(data_root) if filename.endswith('.mat')]
    16. # print(mat_files)
    17. # for item in mat_files:
    18. # mat2csv(item)
    19. labels = pd.read_csv('data/labels/train/sunhl-1th-02-Jan-2017-162 A AP.jpg.csv', header=None).values
    20. print(labels)

    (1)refer:python读取mat转换为csv

    (2)输出的csv文件里第一行是0,1导致69行>68点

            Pandas DataFrame DataFrame.to_csv() 函数里面header=False注释,行index=False

    (3)发现拷贝的数据没有landmark.csv和angle.csv,拿到的数据不对=>这一步骤不需要了

    和之前yolo一样,os.py系统文件不修改

    os.mkdir() 方法

    2、文件 visual_dir给一个输出文件位置,data_dir也是

    3、ModuleNotFoundError: No module named 'libs.black_list'里面没写啥,直接注释,新报错

    A:“只能用大招了”这个文件夹标记成【源根】 Done

    4、IndexError: index 131 is out of bounds for axis 0 with size 128 索引超出长度

    最后找到原因是其中有个点的值>1,导致出现131;改成了0.99999试一下

    5、TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first. 原因

    用排除法只能是这个loss.list出问题,加了float报错 

     参考train.py里面本来就有的部分,应该↓:tensor转numpy-√detach()

    1. a.detach().numpy()
    2. a.cpu().detach().numpy()

     

     6、IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed

    原因维度

    解决:debug之后发现这一步test_results_list里面是空的(点进去test函数,这个参数无效)

     

     

  • 相关阅读:
    3分钟让你学会axios在vue项目中的基本用法(建议收藏)
    重写与重载and抽象类与接口!!!!
    深入浅出学习透析Nginx服务器的基本原理和配置指南「进阶实践篇」
    十. Linux关机重启命令与Vim编辑的使用
    postman接口测试工具详解
    线稿图视频制作--从此短视频平台不缺上传视频了
    《吐血整理》高级系列教程-吃透Fiddler抓包教程(21)-如何使用Fiddler生成Jmeter脚本-上篇
    系统提示0x00000709错误怎么办?
    Pandas数据分析18——pandas文本处理
    [Python]dict字典排序事例
  • 原文地址:https://blog.csdn.net/sinat_40759442/article/details/126092570