【复现 | 论文】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

import os.path

import pandas as pd
import scipy
from scipy import io
# 'data/labels/train/sunhl-1th-02-Jan-2017-162 A AP.jpg.mat'

def mat2csv(mat_file_path):
    features_struct = scipy.io.loadmat(mat_file_path)
    # print(features_struct)
    features = features_struct['p2']
    dfdata = pd.DataFrame(features)
    datapath1 = mat_file_path[:-4]+'.csv'
    dfdata.to_csv(datapath1, index=False, header=False)

if __name__ == '__main__':
    # data_root = 'data/labels/val'
    # mat_files =[os.path.join(data_root,filename) for filename in os.listdir(data_root) if filename.endswith('.mat')]
    # print(mat_files)
    # for item in mat_files:
        # mat2csv(item)

    labels = pd.read_csv('data/labels/train/sunhl-1th-02-Jan-2017-162 A AP.jpg.csv', header=None).values
    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()

a.detach().numpy()
a.cpu().detach().numpy()

 

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

原因维度

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

猜你喜欢

转载自blog.csdn.net/sinat_40759442/article/details/126092570