Coder Social home page Coder Social logo

junqiangchen / hc18-automated-measurement-of-fetal-head-circumference Goto Github PK

View Code? Open in Web Editor NEW
25.0 1.0 13.0 1.23 MB

HC18—Automated measurement of fetal head circumference

Home Page: https://hc18.grand-challenge.org/

Python 100.00%
python3 tensorflow vnet2d ultrasound-imaging segmentation head-circumference

hc18-automated-measurement-of-fetal-head-circumference's Introduction

HC18-Automated-measurement-of-fetal-head-circumference

This is an example of the ultrasound imaging is used to measure the fetal head circumference (HC).

Prerequisities

The following dependencies are needed:

  • numpy >= 1.11.1
  • SimpleITK >=1.0.1
  • opencv-python >=3.3.0
  • tensorflow-gpu ==1.8.0
  • pandas >=0.20.1
  • scikit-learn >= 0.17.1

How to Use

1、Preprocess

2、HC Segmentation

  • the VNet2d model

  • train and predict in the script of vnet2d_train.py and vnet2d_predict.py

3、trained model can download on here:https://pan.baidu.com/s/1ved3w6Tn4nwnBUDzxW8arw password:r0li

Result

  • loss and accuracy,orange line is first trained,blue is second trained

Contact

hc18-automated-measurement-of-fetal-head-circumference's People

Contributors

junqiangchen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

hc18-automated-measurement-of-fetal-head-circumference's Issues

Baidu link broken

Hey,

I am trying to download the masked annotation images from the Baidu link you have given, but I am unable to do so. Can you share a google drive link for the same?

convert annotation image to mask image, you can download here:https://pan.baidu.com/s/1NmmztKR0Omu1fKue7263Sw password:6ax7

This part.

paper

Does the code have a corresponding article?

pytorch版本

博主你好,请问有pytroch版本的这个项目吗?

Keras 版的DenseVnet

我参照您的网络,写了一个keras版的,有些地方简化比较严重,我也不确定对不对,跑了一下模型效果还可以,我不太确定您那个 output_map的作用,我只使用了最后一层
`from future import division
from keras.layers import (Input, BatchNormalization, Conv2D, Dropout, Conv2DTranspose,
Add, Concatenate)
from keras.models import Model

def Vnet(pretrained_weights=None, shape=(512, 512, 1), num_class=1, is_training=True, stage_num=5, thresh=0.5):
"""
DenseVnet 网络构建
:param pretrained_weights:是否加载预训练参数
:param shape: 输入图像尺寸(w,h,c),c是通道数
:param num_class: 数据集的类别总数
:param is_training: 是否是训练模式
:param stage_num: Vnet的网络深度,即stage的总数,论文中为5
:return: Vnet网络模型
"""
keep_prob = 0.5 if is_training else 1.0 # dropout概率
rate = 1 - keep_prob
inputs = Input(shape)
layer0 = Conv2D(16, 3, padding='same', activation='relu')(inputs)
layer1 = Dropout(rate)(BatchNormalization()(Conv2D(16, 3, padding='same', activation='relu')(layer0)))
layer1 = Dropout(rate)(BatchNormalization()(Conv2D(16, 3, padding='same', activation='relu')(layer1)))
layer1 = Add()([layer0, layer1])
down1 = Dropout(rate)(BatchNormalization()(Conv2D(32, 3, strides=(2, 2), padding='same', activation='relu')(layer1)))
layer2 = Dropout(rate)(BatchNormalization()(Conv2D(32, 3, padding='same', activation='relu')(down1)))

layer2 = Dropout(rate)(BatchNormalization()(Conv2D(32, 3, padding='same', activation='relu')(layer2)))
layer2 = Add()([down1, layer2])
down2 = Dropout(rate)(BatchNormalization()(Conv2D(64, 3, strides=(2, 2), padding='same', activation='relu')(layer2)))
layer3 = Dropout(rate)(BatchNormalization()(Conv2D(64, 3, padding='same', activation='relu')(down2)))
layer3 = Dropout(keep_prob)(BatchNormalization()(Conv2D(64, 3, padding='same', activation='relu')(layer3)))
layer3 = Add()([down2, layer3])
down3 = Dropout(rate)(BatchNormalization()(Conv2D(128, 3, strides=(2, 2), padding='same', activation='relu')(layer3)))
layer4 = Dropout(rate)(BatchNormalization()(Conv2D(128, 3, padding='same', activation='relu')(down3)))
layer4 = Dropout(rate)(BatchNormalization()(Conv2D(128, 3, padding='same', activation='relu')(layer4)))
layer4 = Add()([down3, layer4])
down4 = Dropout(rate)(BatchNormalization()(Conv2D(256, 3, strides=(2, 2), padding='same', activation='relu')(layer4)))

layer5 = Dropout(rate)(BatchNormalization()(Conv2D(256, 3, padding='same', activation='relu')(down4)))
layer5 = Dropout(rate)(BatchNormalization()(Conv2D(256, 3, padding='same', activation='relu')(layer5)))
layer5 = Add()([down4, layer5])
down5 = Dropout(rate)(BatchNormalization()(Conv2D(512, 3, strides=(2, 2), padding='same', activation='relu')(layer5)))

layer6 = Dropout(rate)(BatchNormalization()(Conv2D(512, 3, padding='same', activation='relu')(down5)))
layer6 = Dropout(rate)(BatchNormalization()(Conv2D(512, 3, padding='same', activation='relu')(layer6)))
layer6 = Add()([down5, layer6])

deconv1 = Conv2DTranspose(256, 3, strides=(2, 2), padding='same', activation='relu')(layer6)

layer7 = Concatenate(axis=3)([layer5, deconv1])
layer7 = Dropout(keep_prob)(BatchNormalization()(Conv2D(256, 3, padding='same', activation='relu')(layer7)))
layer7 = Dropout(keep_prob)(BatchNormalization()(Conv2D(256, 3, padding='same', activation='relu')(layer7)))
layer7 = Dropout(keep_prob)(BatchNormalization()(Conv2D(256, 3, padding='same', activation='relu')(layer7)))
layer7 = Add()([deconv1, layer7])

outputs1 = Conv2D(num_class, 1, activation="sigmoid", padding='same')(
    Conv2DTranspose(512, 1, strides=(16, 16), padding='same')(layer7))

deconv2 = Conv2DTranspose(128, 3, strides=(2, 2), padding='same', activation='relu')(layer7)
layer8 = Concatenate(axis=3)([layer4, deconv2])
layer8 = Dropout(keep_prob)(BatchNormalization()(Conv2D(128, 3, padding='same', activation='relu')(layer8)))
layer8 = Dropout(keep_prob)(BatchNormalization()(Conv2D(128, 3, padding='same', activation='relu')(layer8)))
layer8 = Dropout(keep_prob)(BatchNormalization()(Conv2D(128, 3, padding='same',activation='relu')(layer8)))
layer8 = Add()([deconv2, layer8])

outputs2 = Conv2D(num_class, 1, activation="sigmoid", padding='same')(
    Conv2DTranspose(512, 1, strides=(8, 8), padding='same')(layer8))

deconv3 = Conv2DTranspose(64, 3, strides=(2, 2), padding='same', activation='relu')(layer8)
layer9 = Concatenate(axis=3)([layer3, deconv3])
layer9 = Dropout(keep_prob)(BatchNormalization()(Conv2D(64, 3, padding='same', activation='relu')(layer9)))
layer9 = Dropout(keep_prob)(BatchNormalization()(Conv2D(64, 3, padding='same', activation='relu')(layer9)))
layer9 = Dropout(keep_prob)(BatchNormalization()(Conv2D(64, 3, padding='same', activation='relu')(layer9)))
layer9 = Add()([deconv3, layer9])

outputs3 = Conv2D(num_class, 1, activation="sigmoid", padding='same')(
    Conv2DTranspose(64, 1, strides=(4, 4), padding='same')(layer8))

deconv4 = Conv2DTranspose(32, 3, strides=(2, 2), padding='same', activation='relu')(layer9)

layer10 = Concatenate(axis=3)([layer2, deconv4])
layer10 = Dropout(keep_prob)(BatchNormalization()(Conv2D(32, 3, padding='same', activation='relu')(layer10)))
layer10 = Dropout(keep_prob)(BatchNormalization()(Conv2D(32, 3, padding='same', activation='relu')(layer10)))
layer9 = Add()([deconv4, layer10])

outputs4 = Conv2D(num_class, 1, activation="sigmoid", padding='same')(
    Conv2DTranspose(32, 1, strides=(2, 2), padding='same')(layer9))
deconv5 = Conv2DTranspose(16, 3, strides=(2, 2), padding='same', activation='relu')(layer10)
layer11 = Concatenate(axis=3)([layer1, deconv5])
layer11 = Dropout(keep_prob)(BatchNormalization()(Conv2D(16, 3, padding='same', activation='relu')(layer11)))
layer11 = Dropout(keep_prob)(BatchNormalization()(Conv2D(16, 3, padding='same', activation='relu')(layer11)))
layer11 = Add()([deconv5, layer11])
outputs = Conv2D(num_class, 1, activation="sigmoid", padding='same')(layer11)
model = Model(inputs=inputs, outputs=outputs)
print(model.output_shape)
return model

if name == 'main':
model = Vnet(shape=(512, 512, 1), num_class=1, stage_num=5, thresh=0.5)
model.summary()
# model.save("D:/a.h5")
# model.save_weights("D:/b.h5")
`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.