深度学习的典型任务一般认为是分类,检测和分割。

CNN的复兴可以说就是从图像分类开始,imagenet的出现极大推动了这一领域的进步。在这之前,cifar10和mnist也对这个领域的发展起到了极大的推动作用,时至今日,cifar10和mnist也依然不过时,cifar10依旧是一个中等难度的数据集,很多网络在cifar10上的performance已经足以说明该网络的优异了,当年在imagenet上达到sota的resnet同样在cifar10上同样也能达到sota。mnist的作用也一直重要,它是很多人入门深度学习的基础数据集,它的数据集很小,很方便下载存储,几乎可以即下即用,它的训练和收敛速度也非常快,基本全数据集上一个epoch就能达到90%以上的精确率,它的存在还有其他意义 ,如果你实现了一个新的网络结构或者损失函数,在它上面测试一次能帮你很快的定位到bug,一些开发工作,比如量化训练,分布式训练都可以拿它调试bug。

好了,这些数据集都是分类用的,另外两类任务,目前没有特别通用的小型的数据集,对于检测任务,voc,kitti数据集是比较常用的数据集,但是它们都很大,通常达数G甚至数十G,下载缓慢,存储代价高,运行时需要性能极高的机器,不适合用来教学和debug,一些很小的细节也抬高了初学者使用的门槛,就比如voc的数据组织和数据结构,如果没有人带路也不太容易明白。

我在kaggle上搜索了一圈,发现了一个小的分割数据集,名为m2nist,它是mnist的升级版,每张图像包含多余一个数字,但是不超过三个,应该是doublemnist和triplemnist合成而来。

它包含两个文件,combined.npy和segmented.npy,都是numpy格式,可以直接用numpy导入,前者是一个3d张量,每个slice是一个包含数字的图片,其中一幅图片如下所示,

后者是一个4d张量,最后一个维度是11,每个slice代表一个全图的pixelwise的one-hot编码过的mask,最后一个维度的意义是,如果原图包含某个数字,比如6,那么第6个通道,原图中6出现的位置应该是1,其他位置都是0。最后一个通道是背景的mask,意义是如果该位置没有数字出现,应该是1,否则是0。这是因为在分割中背景被当作单独的类别对待,这点尤为重要。上面图像的第0,第4,第7,第10个mask如下所示。

这个数据集时float32数据类型存储的,我把它压缩成了uint8,事实也应该如此。对于segmented图像,我把它压缩成立一个通道,意义为这个位置出现那个数字,比如6,这个位置的数值就是6,背景的数值是10。

同时,我使用联通分量分析,找到了每个数字的bbox,并把bbox数据存储成yolo格式的txt文件,如下所示,

每一行第一个数字表示该标注对应的图像在combined.npy中对应的index,之后每个bbox标注用空白符分隔开,每个bbox标注由五个数字表示,从左向右,分别为xmin,ymin,xmax,ymax和label,即左上和右下的x,y坐标以及该bbox中的目标的label,可视化结果如下所示,

这个数据集压缩后只有2.5M,但是它有5000张图片,足够入门教学使用,它的图片大小为84X64,这点不够友好,因为很多时候我们希望长宽至少是16的倍数,但是也有其他方案,我在我的unet实现中给了一个很好的例子。

在python中使用这个数据集的代码为

import zipfile

from six.moves import urllib

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

from tqdm import tqdm

def download_from_url(url, dst):

"""@param: url to download file@param: dst place to put the file"""

req = urllib.request.urlopen(url)

file_size = int(req.info().get('Content-Length', -1))

if os.path.exists(dst):

first_byte = os.path.getsize(dst)

else:

first_byte = 0

if first_byte >= file_size:

return file_size

header = {"Range": "bytes=%s-%s" % (first_byte, file_size)}

pbar = tqdm(total=file_size, initial=first_byte, unit='B', unit_scale=True, desc=url.split('/')[-1])

with (open(dst, 'ab')) as f:

while True:

chunk = req.read(1024)

if not chunk:

break

file_size += len(chunk)

f.write(chunk)

pbar.update(len(chunk))

pbar.close()

return file_size

def download_m2nist_if_not_exist():

data_rootdir = os.path.expanduser('~/.m2nist')

m2nist_zip_path = os.path.join(data_rootdir, 'm2nist.zip')

if os.path.exists(m2nist_zip_path):

return

os.makedirs(data_rootdir, exist_ok=True)

m2nist_zip_url = 'https://raw.githubusercontent.com/akkaze/datasets/master/m2nist.zip'

while True:

try:

print('Trying to download m2nist...')

download_from_url(m2nist_zip_url, m2nist_zip_path)

break

except Exception as exc:

print('Errors occured :{0}'.format(exc))

time.sleep(5)

continue

zipf = zipfile.ZipFile(m2nist_zip_path)

zipf.extractall(data_rootdir)

zipf.close()

它会在用户目录下创建.m2nist目录,并将zip文件下载到这个目录中,希望大家使用愉快。

这个数据集的下载地址为m2nist下载地址,另外我基于此实现的unet地址为unet源码。

unet的收敛曲线如下所示

网络的可训练参数量为25k,收敛很快,可见这个规模的网络对这个数据集依然容易过拟合。

我又继续在yolo3上测试了检测的结果,10个epoch后,能得到如下的结果,

可见,图像质量完全足够用来做检测的,收敛曲线如下(这里只计算了loss,其他metric需要进一步补充),

其中yolo3的代码也使用tf2.x,并开源在了github上,yolo3源码,需要进一步完善。

x光肺部分割数据集_一个超小型分割检测数据集相关推荐

  1. PASCAL VOC目标检测数据集格式转化为COCO目标检测数据集格式

    VOC2012目标检测数据集格式转化为COCO目标检测数据集格式 你只需要传入一个VOC数据集根路径可以直接运行,简直不要太方便好吧 需要材料: VOC2012原始数据集 一个pycharm项目文件夹 ...

  2. 编写代码、打印图4-2所示的图形python_Python之turtle库画各种有趣的图及源码(更新中)_一个超会写Bug的程序猿的博客-CSDN博客...

    原文作者:一个超会写Bug的安太狼 原文标题:Python之turtle库画各种有趣的图及源码(更新中) 发布时间:2021-02-09 03:35:11 Turtle库是Python语言中一个很流行 ...

  3. 最全自动驾驶数据集分享系列一|目标检测数据集(2/3)

    目前关于自动驾驶数据集你想知道的,应该都在这里了,这是「整数智能」自动驾驶数据集八大系列分享之系列一: 「本期划重点」 清华大学推出全球首个车路协同自动驾驶研究数据集 Nexar视频数据集覆盖70多个 ...

  4. 最全自动驾驶数据集分享系列一|目标检测数据集(3/3)

    目前关于自动驾驶数据集你想知道的,应该都在这里了,这是「整数智能」自动驾驶数据集八大系列分享之系列一: 「本期划重点」 Mapillary推出最大.最多样化的公开交通标志数据集,覆盖全球六大洲 DTL ...

  5. c语言间接级别不同_一个超复杂的间接递归——C语言初学者代码中的常见错误与瑕疵(6)...

    问题: 在该文的最后,曾提到完成的代码还有进一步改进的余地.本文完成了这个改进.所以本文讨论的并不是初学者代码中的常见错误与瑕疵,而是对我自己代码的改进和优化.标题只是为了保持系列的连续性. 改进 程 ...

  6. 建立自己的voc数据集_一次将自己的数据集制作成PASCAL VOC格式的惨痛经历

    因为准备训练keras-yolo3,开源代码上给出了voc_annotation.py文件,只要将自己的数据格式处理成PASCAL VOC格式,那么运行voc_annotation.py就可以将自己的 ...

  7. mscoco数据集_重磅!小目标检测的数据增广秘籍

    Summary:重磅!小目标检测的数据增广秘籍 Author:Amusi Date:2019-03-18 微信公众号:CVer 原文链接:重磅!小目标检测的数据增广秘籍 前戏 最近目标检测方向,出了很 ...

  8. 疲劳驾驶数据集_奥迪开放的自动驾驶数据集

    奥迪发了最新的数据集. 4月14日,奥迪公司的研究人员发布了一篇论文A2D2: Audi Autonomous Driving Dataset 中,介绍了其大型自动驾驶数据集A2D2,并提供开放下载. ...

  9. python创建数据集_使用Python从图像创建数据集以进行人脸识别

    我正在尝试用Python编写人脸识别程序(我将应用k-nn算法进行分类). 首先,我将图像转换为灰度,然后创建了一个长列向量(通过使用Opencv的imagedata函数),该向量具有图像的像素(总共 ...

  10. 双向卷积神经网络_一个用于精细动作检测的多路双向递归神经网络

    文章标题:A Multi-Stream Bi-Directional Recurrent Neural Network for Fine-Grained Action Detection引用:Sing ...

最新文章

  1. 炸裂!这些大厂跪求的人才太牛了!
  2. Oracle:sqlplus查询出的中文是乱码问题的解决
  3. css在线留言星号,使用CSS 给表单必选项添加星号的实现方法
  4. android+定时器+动画,Android 实现定时器的四种方式总结及实现实例_Android_脚本之家...
  5. 抑制java对修饰符的检查_Java 7对抑制异常的支持
  6. 高斯白噪声下基于EM的多径时延估计
  7. LeetCode 858. 镜面反射(最小公倍数/最大公约数)
  8. java abstract类和abstract方法
  9. 数据挖掘与数据化运营实战. 3.9 卖家(买家)交易模型
  10. ***php调试总结
  11. 走进 JDK 之谈谈字符串拼接
  12. Timus 1005. Stone pile
  13. mysql 游标创建_Mysql 游标创建
  14. JQuery文档信息
  15. 斐讯N1纯净精简/夏杰语音/支持投屏-线刷固件及教程202208
  16. TGA格式图像文件分析
  17. MobileNet v2的Inverted Bottleneck为什么可以抵消ReLU激活函数所带来的信息损失
  18. PNG字幕文件自动生成工具
  19. 先行试点,创新改造:中信期货关键业务系统自主可控的实践之路
  20. 企业该如何用短信推广

热门文章

  1. C# ADO.NET中设置Like模糊查询
  2. macbook 安装任意来源
  3. SPOJ 1811 Longest Common Substring
  4. devexpress TreeList递归及点击获取数据
  5. 关于中缀表达式的计算 和算符优先算法
  6. Android Bitmap保存时背景变为黑色的问题
  7. 九度OJ 1050:完数
  8. 【转】cron表达式详解
  9. SpringCloud 之客户端负载均衡策略
  10. java安全证书配置