wiki:NP2016

2016年秋-网络程序设计

神经网络程序设计,基于深度学习神经网络等机器学习技术实现一个医学辅助诊断的专家系统原型,具体切入点为课程项目:对血常规检验报告的OCR识别、深度学习与分析【np2016】

学员评价

  • 无论是在云课堂跟着孟老师边学边做,还是在coding.net上和同学们一起让项目逐渐成长,都收获了一种程序员的参与感和满足感;
  • 《网络程序设计》这门课带来了一种全新的学习方式,不再是由教师一个人在讲台上讲解,而是采取任务驱动方式,大家共同学习和分享。这使得我们可以接触到各种方面的知识,而这些知识往往都是新出现的技术和方法。同时,这种“竞争式”学习给我也带来了很大的干劲,同时学习的过程体验在平时而不是期末的考试复习中。
  • 做项目学到的远比上课学到的多,有很多东西是课本没有的,更何况课本上的知识不少已经过时。孟老师的这门课,极大地开阔了我的视野,让我接触到了许多之前都不知道的方面,不再那么迷茫。同时老师的引导与协作让我们顺利地完成了项目,非常感谢孟老师!
  • 网络程序设计课程风格更加新颖。不在是传统的填鸭式教学,而是将主动权交还给学生,孟宁老师扮演的更多是引导者的角色。每堂课都会有同学分享交流有关机器学习算法,深度学习框架的知识,再通过老师与学生之间的互动问答,使得我们对知识理解的更加透彻。
  • 经过这一个学期的学习,在深度学习和软件文档方面收获颇丰,孟宁老师是一个非常优秀并且有创意的老师,总能引导我们以最贴合实际应用的方式学习,希望以后还能选到孟宁老师的课程。
  • 之前在网易云课堂中学习过Andrew Y. Ng的机器学习的课程,理解一些机器学习的关于算法方面的知识,但是没有进行过实战的学习。而孟宁老师网络程序设计这门课程,更重于实践与应用。从神经网络出发,再通过对简单深度学习demo的运行,学习,了解整个深度学习的过程,最后通过各种框架,我们自己完成了整个OCR识别及性别年龄预测。在实践中不断完善自己所学到的知识,搭建起整个课程的知识结构框架。
  • 在这门课的学习中,我了解到了很多机器学习的算法,从最简单的knn,到决策树,随机森林,svm,LR,贝叶斯等等,以及bp神经网络,卷积神经网络,递归神经网络包括LSTM等等
  • 在本次网络程序设计课开始的时候,老实说,难度很大,但比起其他的课更有吸引力,虽然有些知识不懂也只能硬着头皮上了。 幸运的是孟宁老师主导的学习讨论分享课非常棒,不仅能调动大家学习的热情,而且相互之间的分享讨论也让许多晦涩难懂的算法理论和公式变的渐渐清晰明了了起来。虽然之前没有学过任何什么神经网络基础但进步也很快。
  • 孟宁老师这种团队协作的氛围还是非常赞的。毕竟,有些认知不跟人分享讨论,你不会知道什么地方错了,什么地方你还没有搞懂搞透彻,面对知识要时刻保持一种谦虚,谨慎,开放的态度。在这一点上要感激老师的言传身教,让我受益终生。
  • 这门课的上课风格,让我体会到了更甚于“统一”老坛方便面的酸爽。其实这就相当于在企业里面做一个项目,老师将项目的框架搭建好,并部署相应的任务,由大家自行选择任务执行。说白了,就是自己干。这对于一个小白来说真是五雷轰顶的感觉,心理压力特别大。但是,这种授课方式的好处就是,大家能真正的学以致用,最后并完成一个小作品。我觉得这是特别令人欣慰的地方。
  • 孟宁老师也是一个很有风度的老师, 在课堂上和同学们交流, 观点鲜明, 善于抓住每个同学分享知识的重点, 理清楚来龙去脉之后再与其他同学分享, 效果拔群. 感谢孟宁老师给我们带来有如此丰富内容的课程.
  • 我体会到一种全新的上课方式—全班共同投入完成一个项目。大家在孟宁老师的讲解说明过程中找到了学习的兴趣,并把一个个一开始觉得神奇难解的想法慢慢变成现实,这个过程是以前的课程没有体会到的
  • 开始上课之后,让我最新鲜的并不是这门课的知识,而是孟老师分享式学习的教学方式,我只知道国外很多名校使用这种教学方式。但是没有亲身体验过。说实话我觉得神经网络机器学习这部分知识是非常难的。但是通过这种授课方式。每个同学对一部分知识的仔细整理,然后再用自己的思路讲给我们,这样使知识特别容易理解,因为我们学生之间,才真正了解如何讲述知识才更易于我们学生消化。并且对于比较重要的算法,老师会让不同的同学,对于由浅入深的分层次的分享该算法,然后通过孟老师和同学一次又一次的提问,深入探讨,让感受到非常难的知识接受起来变得非常轻松 。真正的避免了传统授课的“老师一直讲,学生一直记”的现象。
  • 让我觉得非常获益,就是“以做一个项目,做出一个成果为主线”。我真是觉得孟老师带领同学们抓住了学习的本质。因为任何学习最后都会回归于实践,那么为何不直接从实践中学习?从做出一个成果中学习才是真正学到的知识,因为我们的专业就是一个应用型非常强的专业。

课程安排

  • 周四下午检查实验进展,周五上午分享讨论
  • 课程考核方式:PPT+演讲 / Demo+Code Review
  • 评价标准
    • 【演讲】理解算法的基本原理,PPT准备充分讲解思路清晰【及格】
    • 【演讲】应用代码库里的算法实现一个简单应用范例,但对算法的原理知之不详,代码讲解思路清晰【及格】
    • 【演讲】理解算法的基本原理,并应用代码库里的算法实现一个简单应用范例,PPT准备充分,代码讲解思路清晰【优秀】
    • 【现场检查】实现课程项目的某个特定功能点(现场检查),代码讲解思路清晰【及格】
    • 【Code Review】率先实现课程项目的某个特定功能点(以pull request为准)【优秀】
    • 【Code Review】对某个特定功能点做出了重要的改进(以pull request为准),代码思路清晰【优秀】

所有代码请在coding.net上使用git进行代码版本控制(请fork np2016),PPT等相关资料请在本页附件上传或将链接放到本页最后的相关链接中。

课程项目A1a:神经网络实现手写字符识别系统

实现指导见DigitRecogn pull request到np2016项目的git版本库的DigitRecogn目录

  • 【1】准备ppt讲解本项目的具体实践操作过程并Demo项目效果 404
  • 【2】准备ppt分析本项目的代码框架并Demo项目效果 289
  • 【3】准备ppt重点分析本项目中使用的神经网络算法,应该先介绍算法涉及的主要原理等数学知识再具体解释算法的实现代码 271 294

课程项目A2:血常规检验报告的图像OCR识别

pull request到np2016项目的git版本库BloodTestReportOCR目录

  • A2.1 从体检报告上手工截取文字和数字的图片作为输入进行OCR识别,编译运行代码演示,并简要分析代码的工作过程。
  • A2.2 在一个标准(非常正)的体检报告图片上给定一个区域的的坐标位置,能输出该区域的图片, 编译运行代码演示,并简要分析代码的工作过程。
  • A2.3 在一个非标准(随手拍)的体检报告图片上,能自动截取表格的区域, 编译运行代码演示,并简要分析代码的工作过程。
  • A2.4 在拍照过程中能提示用户拍出比较标准的体检报告图片,编译运行代码演示,并简要分析代码的工作过程。
  • 【4】将血常规检验报告的图片识别出年龄、性别及血常规检验的各项数据,还有测试和报告日期,血常规检验报告范例 133
    • 4.1图片上传页面,提交的结果是图片存储到了mongodb数据库得到一个OID
    • 4.2图片识别得到一个json数据存储到了mongodb数据库得到一个OID,json数据如https://coding.net/u/mengning/p/np2016/git/blob/master/BloodTestReportOCR/bloodtestdata.json
      • 4.2.1判定是否具有目标,并自动截取目标区域。 目前剪切的效果我觉得基本可以满足我们的要求了,还有三个问题:
        • 1)我们不可能正确处理所有图片,怎么尽早发现无法正确处理的图片return个错误信息,也就是保证处理结果是正确的或给出无法处理的出错信息;
        • 2)剪切时表格的上面的性别年龄和下面的检验时间需要包含进来;
        • 3)项目名称和对应的数值分别生成一个图片,比如pX.jpg和dataX.jpg,这样下一步可以通过pX.jpg获得dataX.jpg里数值的含义,因为项目的排序不是固定的。
      • 4.2.2预处理,比如增加对比度、锐化
      • 4.2.3识别
    • 4.3识别结果页面,上部是原始图片,下部是一个显示识别数据的表格,以便对照识别结果
      • 4.3.1 优化网页界面 http://2016.mc2lab.com:8080/ 我希望页面中间是上传图片的部分,上传成功后图片直接显示在上传图片部分的上方,同样识别完成后下方显示识别后的表格数据
    • 4.4 opencv - http://opencv.org/
    • 4.5 numpy - http://www.numpy.org/
    • 4.6 提高识别正确率
    • 4.7 我们放弃使用OCR方式识别项目名称,考虑使用DL的方法或者模式识别的方法来分类项目名称,即输入一个项目名称的图片返回一个类别编号;
    • 4.8 把年龄、性别和检验日期,及数据识别出来,但也很难保证百分百正确识别,需要人工核对和修正,这就需要HTML页面呈现识别结果时可以对照修改保存;
    • 4.9 尽早发现图片并非我们的目标或者无法准确识别,这个工作很重要哦,还没有人试图解决;

Brief History of Machine Learning

应该先介绍算法涉及的背景知识、主要原理等数学知识,然后再举一个具体应用场景的算法解释说明

  • 【5】Perceptron 感知机,是二分类的线性分类模型,属于监督学习算法,是神经网络和支持向量机的基础。 266 292
  • 【6】Neural Networks 【计】模拟脑神经元网络 041
  • 【7】SVM(Support Vector Machine) 支持向量机是一个有监督的学习模型,通常用来进行模式识别、分类、以及回归分析。 018 292
  • 【8】Decision Tree 决策树 292
  • 【9】Random forests 随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 259
  • 【10】Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。138 220
  • 【11】Deep Learning - a new era of NN 161 165
    • 11.1 convolutional networks vs. recurrent networks 169
  • 【12】Online Learning - Bandit Algorithms 458

Comparison of Deep Learning Libraries After Years of Use

12月8日现场检查1或2:1)A1b:选择一个DL Library实现课程项目A1a的主要DL功能作为基本要求,更高的要求是:直接集成到BloodTestReportOCR/classifier.py里实现getItemNum(img),以剪切好的项目名称图片作为输入样本,以项目编号作为输出。2)对A2的改进提交pull request

  • 【13】TensorFlow 239
  • 【14】Caffe is the flagship of deep learning libraries for both industry and research.220
  • 【15】Theano is a Python library which takes your written code and compiles it to C++ and CUDA. it targets machine learning applications, not just deep learning. these libraries are perfect for quick prototyping.335
  • 【16】MxNet support many different languages; Python, Scala, R.run-time efficiency, really solid Python support and less GPU memory use.
  • 【17】Torch is a Lua based library and used extensively by Facebook and Twitter Research teams for deep learning products and research.Pre-trained models and examples:ResNet
  • 【18】Keras: Deep Learning library for Theano and TensorFlow? 138
  • 【19】百度开源深度学习平台 - PaddlePaddle官网
  • 【22】spark 001

课程项目A3:根据血常规检验的各项数据预测年龄和性别

pull request到np2016项目的git版本库BloodTestReportDeepLearning目录

【可选】课程项目A4:根据患者病情资料自动生成诊断报告

【课程考核的基本要求】

  • 【23】将A3训练好的模型集成到A2中OCR识别之后进行预测,完成一个完整的Web系统
  • 完成一篇署名博客,博客内容至少包括课程学习心得总结、通过commit/pr等说明自己的功劳和苦劳、提供自己的版本库URL并附上安装运行方法和Demo过程截图、其他重要事项等。博客URL提交到这里(还要麻烦大家把自己的个人动态链接如https://coding.net/u/mengning/activity 提交到http://teamtrac.ustcsz.edu.cn/wiki/NP2016Blog 页面,以便客观评估苦劳,本周五截止,请@所有人 及时提交,谢谢配合。)
  • 准备简要的PPT报告上述博客内容,并现场Demo + Code Review【23】
  • 【特别说明】如有自己的特有贡献和项目开发目标,Demo + Code Review的内容和博客的内容都不局限于【23】.
  • 考核时间:2017年1月5日开始,请务必提前做好准备。2016年12月30日可以安排3-5名提前考核,考核合格可享受分值优惠。

分享ppt传课程主页附件,考核ppt的内容需要在博客中体现,考核成绩除了现场还要参考博客URL(包含功劳苦劳),平时成绩会参考分享ppt、pr和日常记录

相关链接

Last modified 8 months ago Last modified on 01/20/17 18:02:25

Attachments (31)