tensorflow迁移学习进行乳腺肿瘤分类与定位的方法

方法:使用训练好的识别ImageNet的InceptionV3网络,后连接两个全连接层,一个进行定位学习,一个进行分类学习

数据集:实验室自有数据集,不能给,进行描述如下:图片为JPEG的CT图,有一个txt文档,内有对应图片名的肿瘤标记坐标,坐标值4个,对应肿瘤的左下角,右上角,形成方框。

代码很详细,可以作为学习参考,如果有自己的项目,下载一下InceptionV3网络,更改一下路径,根据自己的数据集格式设置数据的输入就好:

 
  
import glob
import os.path
import random
import numpy as np
import tensorflow as tf
from tensorflow.python.platform import gfile
#Inception-V3模型瓶颈层的节点个数
BOTTLENECK_TENSOR_SIZE=2048
BOTTLENECK_TENSOR_NAME ='pool_3/_reshape:0'
#图像输入张量所对应的名称
JPEG_DATA_TENSOR_NAME='DecodeJpeg/contents:0'
#下载好的Inception-v3模型目录
MODEL_DIR='F:/dataSpace/InceptionV3/'
MODLE_FILE='tensorflow_inception_graph.pb'#模型文件名
CACHE_DIR='F:/pythonTest/Medical_Image/tmp/bottleneck'
# 图片数据文件夹。
INPUT_DATA = 'F:/pythonTest/Medical_Image/JPEGImages'
LABEL_FILE='output.txt'#这个文件中保存了图像名,图像所对应的肿瘤类型,肿瘤位置坐标信息
#验证的数据百分比
VALIDATION_PERCENTAFE=10
#测试的数据百分比
TEST_PERCENTAGE=10
#定义神经网络的设置
LEARNING_RATE_Label=0.8
LEARNING_RATE_Coordinate=0.99
STEPS=100000
BATCH=50
n_classes=2

def calvar(var):
    with tf.name_scope('summaries'):
        mean=tf.reduce_mean(var)
        tf.summary.scalar('mean',mean)
        with tf.name_scope('stddev'):
            stddev=tf.sqrt(tf.reduce_mean(tf.square(var-mean)))
            tf.summary.scalar('stddev',stddev)
        tf.summary.scalar('max',tf.reduce_max(var))
        tf.summary.scalar('min',tf.reduce_min(var))
        tf.summary.histogram('histogram',var)



#读取文件夹中所有图片列表,并按训练、验证、测试数据分开
def create_image_list(testing_percentage,validation_percentage):
    #得到的所有图片存在result字典里,字典的key为类别的名称,value也是一个字典,字典里存储了所有的图片名称.
    result={}
    #result结构是类似这样的{'Benign': {'situation': 'Benign', 'training': [['B_000001_2.jpg', [319.0, 455.0, 418.0, 546.0]]}
    #获取当前目录下的子目录
    label_name=['Benign','Malignancy']

    for situation in label_name:
        #分别对两种类型肿瘤图片进行处理
        file_list=[]
        training_images=[]
        validation_images=[]
        testing_images=[]
        with open(LABEL_FILE) as f:
            for line in f.readlines():
                curline=line.strip().split(' ')
                base_name=curline[0]#图片名称
                cur_situation=curline[1]#如果是当前肿瘤类型,加入当前字典
                ordinate=[float(x) for x in curline[2:]]#坐标信息
                image_with_cordinates=[]
                image_with_cordinates.append(base_name)
                image_with_cordinates.append(ordinate)
                if cur_situation==situation:
                    chance=np.random.randint(100)
                    if chance

网络结构如下:

tensorflow迁移学习进行乳腺肿瘤分类与定位的方法_第1张图片

使用GPU为GTX1050,跑了10万次,损失值曲线如下:

tensorflow迁移学习进行乳腺肿瘤分类与定位的方法_第2张图片




你可能感兴趣的:(人工智能)