新手。。请多多指教~

数据集rsna-bone-age来自kaggle
云盘链接 提取码: n24q
因为上传限制,训练集分成了三个压缩包。解压后照着boneage-test-dataset,把图片放在boneage-training-dataset文件夹里。

参考代码:
Bone-Age-Detection-From-X-Ray

数据集解压后,boneage-training-dataset文件夹中是:

boneage-training-dataset.csv中是:

第一步,读取数据集

1

import os
import pandas as pdprint("Reading data...")
base_data_dir = ’/input/rsna-bone-age‘
img_dir = os.path.join(base_data_dir , 'boneage-training-dataset/')
csv_dir = os.path.join(base_data_dir , 'boneage-training-dataset.csv')boneage_df = pd.read_csv(csv_dir)
print (boneage_df)column_headers = list(boneage_df.columns.values)
print(column_headers)  #列标签
print(boneage_df.sample(3))  #csv中随机抽取3行

输出:

(12611, 3)
['id', 'boneage', 'male']  #列标签id  boneage   male
11314  11314       96   True
11583  11583      228   True
4583    4583       94  False

参考:
1.pandas文档 —— pandas.read_csv
2.python pandas读取csv后,获取列标签
——————————————————————————————————

2

获得需要的标签和数据,比如性别(male或female),img文件夹中图片的路径等

boneage_df['path'] = boneage_df['id'].map(lambda x: img_dir+"{}.png".format(x))
boneage_df['gender'] = boneage_df['male'].map(lambda x: "male" if x else "female")
boneage_df['exists'] = boneage_df['path'].map(os.path.exists) #判断img_dir中的图片和csv中的数据是否对应#标准化骨龄数据
mu = boneage_df['boneage'].mean()
sigma = boneage_df['boneage'].std()
boneage_df['zscore'] = boneage_df['boneage'].map(lambda x: (x-mu)/sigma)boneage_df.dropna(inplace=True) column_headers = list(boneage_df.columns.values)
print("column_hander = ",column_headers)  #列标签
#print(boneage_df.sample(3))  #csv中随机抽取3行print("{} images found out of total {} images".format(boneage_df['exists'].sum(),boneage_df.shape[0]))
print("Reading complete !!!\n")boneage_df [['boneage','zscore']].hist()

输出:

column_hander = ['id', 'boneage', 'male', 'path', 'exists', 'gender', 'zscore']
12611 images found out of total 12611 images
Reading complete !!!


横轴是骨龄(按月计算),纵轴是样本数量,标准化后,样本的骨龄数据转化为-3~3的分值

参考:
3.pandas中强大的绘制图表功能——DataFrame.hist()
4.3.4.2数据标准化(一) - Z-Score标准化

第二步,准备数据集(训练集/测试集/验证集)

1 划分数据集

from sklearn.model_selection import train_test_splitprint("Preparing training, testing and validation datasets ...")#按骨龄的梯度分为10个量级
boneage_df['boneage_category'] = pd.cut(boneage_df['boneage'], 10) #划分数据集
raw_train_df, test_df = train_test_split(boneage_df, test_size = 0.2, random_state = 2018,stratify = boneage_df['boneage_category'])
raw_train_df, valid_df = train_test_split(raw_train_df,test_size = 0.25,random_state = 2018,stratify = raw_train_df['boneage_category'])
raw_train_df[['boneage']].hist(figsize = (10, 5)) #绘图(均衡前)
# Training images:   7566 | Validation images: 2522 | Test images:  2523#Balance the distribution in the training set
train_df = raw_train_df.groupby(['boneage_category', 'male']).apply(lambda x: x.sample(500, replace = True)).reset_index(drop=True)
train_df[['boneage']].hist(figsize = (10, 5)) #绘图 (均衡后)
# Training images:   10000 | Validation images: 2522 | Test images:   2523train_size = train_df.shape[0]
valid_size = valid_df.shape[0]
test_size = test_df.shape[0]
print("# Training images:   {}".format(train_size))
print("# Validation images: {}".format(valid_size))
print("# Test images:   {}".format(test_size))

输出:

# Training images:   10000
# Validation images: 2522
# Test images:   2523


注:

数据均衡过程:

train_df = raw_train_df.groupby(['boneage_category', 'male']).apply(lambda x: x.sample(500, replace = True)).reset_index(drop=True)

raw_train_df中,boneage_category有10类,male有两类,排列组合共20种
每类重复采样500次,共得到 20 * 500 = 10000 个样本

参考:
5.pandas文档 ——pandas.cut
6. .sample method
7.Sample Pandas dataframe based on values in column

2 数据预处理

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
from keras.applications.inception_v3 import InceptionV3, preprocess_input
import tensorflow as tf
import numpy as np
IMG_SIZE = (224,224)
BATCH_SIZE_TRAIN = 10
BATCH_SIZE_VAL = 16
SEED = 1234# 将图像和年龄作为输入,构建数据生成器
def gen_2inputs(imgDatGen, df, batch_size, seed, img_size):gen_img = imgDatGen.flow_from_dataframe(dataframe=df,x_col='path', y_col='zscore',batch_size=batch_size, seed=seed, shuffle=True, class_mode='other',target_size=img_size, color_mode='rgb',drop_duplicates=False)gen_gender = imgDatGen.flow_from_dataframe(dataframe=df,x_col='path', y_col='gender',batch_size=batch_size, seed=seed, shuffle=True, class_mode='other',target_size=img_size, color_mode='rgb',drop_duplicates=False)while True:X1i = gen_img.next()X2i = gen_gender.next()yield [X1i[0], X2i[1]], X1i[1]def test_gen_2inputs(imgDatGen, df, batch_size, img_size):gen_img = imgDatGen.flow_from_dataframe(dataframe=df,x_col='path', y_col='zscore',batch_size=batch_size, shuffle=False, class_mode='other',target_size=img_size, color_mode='rgb',drop_duplicates=False)gen_gender = imgDatGen.flow_from_dataframe(dataframe=df,x_col='path', y_col='gender',batch_size=batch_size, shuffle=False, class_mode='other',target_size=img_size, color_mode='rgb',drop_duplicates=False)while True:X1i = gen_img.next()X2i = gen_gender.next()yield [X1i[0], X2i[1]], X1i[1]
train_idg = ImageDataGenerator(zoom_range=0.2,fill_mode='nearest',rotation_range=25,  width_shift_range=0.25,  height_shift_range=0.25,  vertical_flip=False, horizontal_flip=True,shear_range = 0.2,samplewise_center=False, samplewise_std_normalization=False)val_idg = ImageDataGenerator(width_shift_range=0.25, height_shift_range=0.25, horizontal_flip=True)test_idg = ImageDataGenerator()train_flow = gen_2inputs(train_idg, train_df, BATCH_SIZE_TRAIN, SEED, IMG_SIZE)
valid_flow = gen_2inputs(val_idg, valid_df, BATCH_SIZE_VAL, SEED, IMG_SIZE)
test_flow = test_gen_2inputs(test_idg, test_df, 500, IMG_SIZE)# 计算月份平均绝对误差
def mae_months(in_gt, in_pred):return mean_absolute_error(boneage_div * in_gt, boneage_div * in_pred)

参考:
8.Tutorial on Keras flow_from_dataframe
9.师兄的代码

【蓝蜗牛】骨龄检测(一)相关推荐

  1. 做骨龄检测_小柚熊:骨龄测试最佳年龄

    骨龄是人体骨发育成熟程度的良好指标,它不仅可以确认儿童的生物学年纪,还可以经过骨龄及早了解儿童的成长发育潜力以及性成熟的趋势.给孩子测骨龄意义重大,那么几岁孩子可以测骨龄呢?骨龄测试的最佳年纪是几岁呢 ...

  2. 专访浙大儿院副院长傅君芬:我们为什么会把人工智能引入儿童骨龄检测?

    近日,浙江大学医学院附属儿童医院的放射科悄然装备上了一套人工智能软件.数秒钟内,一张儿童左手的 X 光片就被自动识别,读出骨龄.机器读取的结果和水平较高的医生相比,最大差距在3个月内. 国家卫计委最近 ...

  3. 融合与创新:数据堂骨龄标注工具为医生赋能

    骨龄是评价青少年儿童生物年龄的主要方法,骨龄与实际年龄并不是必须一致的,骨龄检查可以了解骨骼的发育情况,判断骨龄发育迟缓还是过速,了解身材过矮的原因以及预后.在临床医学.法医学和运动医学等领域中有广泛 ...

  4. 对话依图医疗总裁倪浩:AI 产品只是第一步,未来要和医院制定中国儿童骨龄新标准...

    雷锋网消息,近日,浙江大学医学院附属儿童医院(以下简称:浙大儿院)与依图医疗正式宣布结成战略合作伙伴关系,并发布全国第一款儿童骨龄智能辅助诊断系统. "在与医院合作的过程当中,我们看到了未来 ...

  5. “AI骨龄医生”周年庆完美收官!武汉站引数百位儿科医生追捧

    摘要:诞生在烟雨江南,成长于中华大地,世界首套基于TW3标准的儿童生长发育智能诊断系统自诞生以来,已广泛应用于华南.华中.华北.西南等多个省市自治区顶级医院的智能骨龄判读,"精准识骨.精准评 ...

  6. 一文带你了解传统手工特征的骨龄评估方法的发展历史

    摘要:基于传统手工特征的骨龄评估方法主要包括预处理.关键区域检测.手骨分割.特征提取.测量五个步骤. 基于传统手工特征的骨龄评估方法主要包括预处理.关键区域检测.手骨分割.特征提取.测量五个步骤,见图 ...

  7. 骨龄仪存储卡损坏处理方案

    骨龄仪存储卡损坏处理方案 Linux中处理方案 怎么在Linux中分别排查tx-2 (SSD/SD,内置集成系统盘)或者nx中的TF和nvme linux中可以使用 badblocks -v /dev ...

  8. 基于OpenCV 的手指骨骨龄计算

    一.概述 骨龄测定系统其实就是图像处理和模式识别系统,其中一般包括了以下几部分:图像采集.图像预处理.图像分割.特征提取和骨龄识别等. 计算机骨龄测定其实很简单,就是利用计算机技术,通过对手掌骨X 光 ...

  9. 神经网络 mse一直不变_使用深度卷积神经网络的儿科骨龄评估

    此篇文章内容源自 Pediatric Bone Age Assessment Using Deep Convolutional Neural Networks,若侵犯版权,请告知本人删帖. 此篇文章是 ...

最新文章

  1. SBB-2016-石油污染土壤微生物群落构建与生物多样性研究
  2. Android信使Messenger解析
  3. 用python画玫瑰花代码-用python画一朵玫瑰花
  4. LeetCode Find All Numbers Disappeared in an Array
  5. HTML5-WebSocket实现对服务器CPU实时监控
  6. 94. Binary Tree Inorder Traversal 二叉树的中序遍历
  7. MySQL数据库添加一个字段
  8. Spark Structure Streaming(一)之简介
  9. python导出dxf图_在PDMS中使用python直接生成管口方位图(开源分享第三集)
  10. java 日志管理源码_Java源码初探_logging日志模块实现
  11. php替代eval_PHP:需要eval()的替代方法来动态构建多维数组
  12. easui Pagination Layout
  13. 如何快速重置OUTLOOK2013,2016到初始配置状态,outlook 修改数据文件位置
  14. TDT2 多语言本文 4.0 版 TDT3 多语言本文 2.0 版
  15. mysql count视频教程_mysql count提高方法总结
  16. centos7 mysql添加密码_centos-在Centos7上更改mysql根密码
  17. python验证码校验代码_python 图片验证码代码
  18. 跨平台的移动Web应用开发平台 PhoneGap 1.6 发布
  19. uni-app入门(一)--介绍
  20. win10清理_小学生都会:win10设置自动清理缓存和垃圾文件

热门文章

  1. 邻接表形式存储图并且按广度优先搜索遍历的C语言实现
  2. 穿越慕尼黑与耶路撒冷!英特尔 CEO 体验自家无人车
  3. jmeter- 循环控制器计数器 实现批量添加操作
  4. Fabric v2.2源码分析 Broadcast广播交易服务(二)
  5. hive正则表达式反向引用
  6. 5ecsgo启动失败2错误代码2_华纳确定正式启动明日边缘2电影项目
  7. Markdown 入门及语法详细指南 ★
  8. CentOS 下搭建 Hadoop:Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).解决
  9. Python3 03 网络爬虫 <下载漫画>
  10. 聚苯乙烯核-聚(丙烯酰胺-丙烯酸)壳荧光素微球/磺酸官能化聚苯乙烯高荧光微球的制备