Automate Analyse Covid 19 XRay Image by DeepLearning

动画程式代码如下: lung-3D.nb lung3d = AnatomyPlot3D[lung anatomical structure, PlotTheme->"XRay"] gif = {}; Do[ image = ImageResize[ Show[lung3d, ViewPoint -> {3 Cos[x], 3 Sin[x], 0}, ViewAngle -> 20 Degree], {256, 256}]; gif = Append[gif, image], {x, 0, 2 Pi, 0.1}] Export["lung-3D.gif", gif, "AnimationRepetitions" -> Infinity ] image = ImageResize[ Show[lung3d, ViewPoint -> {3 Cos[Pi/2], 3 Sin[Pi/2], 0}, ViewAngle -> 20 Degree], {512, 512}] 训练集收集 covid-chestxray-dataset paultimothymooney/chest-xray-pneumonia muhammedtalo/COVID-19 Labeled Optical Coherence Tomography (OCT) and Chest X-Ray Images for Classification ...

July 13, 2020

Rosetta Covid 19 研讨会

线上研讨会的视频地址 文章中的截图均来自研讨会中的文稿。 因为自己不是生物学专业的,又本着对病毒蛋白质研究的兴趣而了解了一些关于蛋白质折叠的基础知识,然后就观看了该研讨会,前面40分钟还能大致看懂,到后半段就云迷雾里了,也许是缺乏分子生物学方面的知识,我把自己从该视频中领悟到一些知识分享出来(多图)。 介绍关于蛋白质折叠过程中能量势函数图,当蛋白质未折叠完成的时候,能量是较高的,折叠完成之后,整个蛋白质的能量趋于全局最小值。这里我们可以看出,蛋白质的折叠理论上就是计算给定肽链的氨基酸序列,最终肽链折叠成怎么样的三维结构才能使得蛋白质的能量趋于最小值。 自然界中蛋白质的氨基酸序列其实是被编码到我们的基因序列里的,基因序列通过转录和翻译最终将多种氨基酸通过一定序列合成在一起,合成完之后的序列我们称之为多肽链,然后肽链完成自我折叠,形成一个稳定的三维结构,这样蛋白质也就有了具体的生物学功能。 如果通过反向操作,我们研究怎么样的蛋白质结构能够完成特定的生物学功能,然后倒推出该蛋白质的氨基酸序列,因为多肽链的一级结构决定了蛋白质的三维结构,所以我们可以将这些蛋白质的氨基酸序列编码到基因库中,然后人工合成该蛋白质。而在计算蛋白质的折叠时,我们需要消耗很多的算力,如果简单考虑一条肽链有100个氨基酸,而一般常见的氨基酸有20种,那么我们需要尝试的计算可能的肽链个数为20^100。 计算蛋白质能量的函数,目前还没看懂该方程,大致理解就是总能量为热能+结构能。 病毒传播过程中,下图可以理解为科研人员的整个Worflow: 向外界发出通知和警告⚠️。 分析病毒遗传物质的基因🧬序列。 对病毒的蛋白质进行研究建模。 诊断 -> 治疗 -> 疫苗开发。 在十二月初诊断出第一例COVID-19病人,一月初,病毒的基因序列公布,二月初,Robetta 对病毒的刺突蛋白进行三维建模,在二月末在实验室中通过X射线衍射技术获得病毒蛋白质的三维晶体结构。 右图为Robetta和X-ray分别获得的三维结构进行比较,RMSD小于1埃。 RMSD 用于描述两个蛋白质三维结构的差异,用数学符号表示 (v,w 分别代表两种三维空间结构的原子集合): 通过计算预测得到的三维结构已经很接近实验室测得的实际结构。 设计一种全新的检测系统用于COVID-19的诊断。 下面的图片里面的内容不是很懂。猜测就是如何精准识别和检测出SARS-COV-2。 第二部分讲述研发的药物与SARS-COV-2表面的蛋白质结合,从而使得病毒丧失入侵人体细胞的能力。 由计算机生成的药物通过与Spike蛋白结合,从而抑制病毒的扩散。 寻找该抑制药物的方案: 找到病毒蛋白的靶点。 对接结构的选择。 模拟组装结构与靶点的对接。 使用Rosetta来预测对接结构的氨基酸序列。 可以理解为就是设计一种 mini protein binder来阻止SARS-COV-2通过ACE2受体进入人体细胞。 接下来就是介绍自主装系统。第一张图片,我们可以理解为一个系统是如何自我演化及装配是由系统中每个部分已编码的属性所决定的。复杂和不规则的蛋白质结构使得设计新的分子间相互作用成为一种挑战,下图显示出了自主装的蛋白质结构,通过简单的结构,使得蛋白质演化出复杂的形态。 借助Rosetta工具,我们可以研究生物大分子聚合物的折叠,对接以及蛋白酶的设计,RNA的折叠等课题上。 下图为使用自组装系统的方法,所设计出的模型和实验室所测到的晶体结构对比。 该论文发表在2016年的Science期刊上: Accurate design of megadalton-scale two-component icosahedral protein complexes 用该方法研发出绑定病毒蛋白质的纳米粒子,并用于治疗SARS-COV-2。 最后总结,在下次的全球大流行下,科研人员能够更快更精准的测定蛋白质的结构,快速诊断被感染人群,通过更深入的理解分子之间的相互作用快速的治疗病人,最后在疫苗的研发阶段,对免疫系统有更加深一层次的理解,最后在Rosetta程序中使用深度学习更精确的建立和设计蛋白质模型。 个人观点 从宏观世界到微观世界,我们可能仅仅只是了解了这个世界的运作方式,而并不能理解这个运作背后精密的计算。当我们探讨整个宇宙的时候,可能银河系之外离我们很遥远,宇宙中黑洞的碰撞,时空的弯曲,时间旅行,这些看起来也和我们生活无关,但到了微观世界却与人类的繁衍生息息息相关,如果蛋白质错误的折叠了,人就会出现疾病,当病毒入侵人体细胞时,免疫系统就会启动,然而一旦病毒可以抑制免疫系统的启动,那么这个疾病就是灾难性的,或许在微观世界,从被隐藏的另外时空维度看,就是另外一个宏伟的"宇宙"。对量子世界的研究,更能帮助人类的前行。 回到个人想创业的路途上,如果我们要做一款产品,那么首先我们会从商业利益出发,只是投机取巧最后创业公司不会存活很久就倒闭,这款产品最好是能够帮助需要的人完成他们不能完成的事情,或者能促进科技的发展,给人带来便利。就是出发点得是善。

July 7, 2020

Tensorflow Lite对模型的量化

TFlite 组成 Tensorflow Lite interpreter 在部署的硬件上进行推演,硬件可以包括,手机,微控制器,嵌入式设备。 Tensorflow Lite Converter 转换模型,使其容量更小,推理速度更快。 TFlite Converter Tensorflow Converter 可以将模型转化成FlatBuffers格式,FlatBuffers是一款跨平台序列化工具,结构化数据都以二进制形式进行存储,在微控制器上的表现就是节省内存, Python Keras Converter: converter = tf.lite.TFLiteConverter.from_keras_model(model) tflite_model = converter.convert() with tf.io.gfile.GFile('mode1.tflite','wb') as f: f.write(tflite_model) Command line Converter: tflite_convert --saved_model_dir=$modelDir --output_file=mode1.tflite TFlite 模型量化 Quantizing models for CPU model size 量化权重从原先的32bits降到8bits,可以加快推理的时间。 Python: converter.optimizations = [tf.lite.Optimize.DEFAULT] tflite_quantize_model1 = converter.convert() with tf.io.gfile.GFile('mode1-default-quant.tflite','wb') as f: f.write(tflite_quantize_model1) Full integer quantization of weights and activations 将所有计算全部限定在整数集,进一步缩减模型的大小,和加快模型的推演速度。 下图列出了不同的量化方式下对于同一个模型所产生的效率。

July 2, 2020

Node-RED@Home

目标 继续接前一篇的NFS文件系统,目前的需求是需要能够控制集群中运行的应用,比如现在需要运行并行跨节点程序A,那么需要先调度停止正在运行的程序B,这就需要构建一个消息传递系统,能够基于消息驱动来完成操作任务。 前景和基本架构设计 Swift被设定为Tensorflow下一代的机器学习语言,参见Swift for Tensorflow,目前尝试着用Swift来编写应用。 使用MQTT协议来发送和接收需要处理的数据。 利用TinyML技术收集家用设备电器上传感器产生的数据,从而使得家电更加智能。 目前的设想是使用RabbitMQ做为消息中间件,Swift编写服务端应用推送消息,客户端需要一个UI应用接受和处理对应的消息事件,以下就是介绍一款基于消息驱动的可视化编程工具。 发现 Node-Red Node-Red是由IBM开发的基于流程的可视化编程工具。 个人觉得它的优点就是开发物联网应用原型速度快,支持Arduino,Raspberry Pi等设备,简单易用,基于事件驱动,原生开发语言为nodejs,支持可扩展插件。 运行在K3s上 node-red.yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: node-red namespace: science labels: app: node-red spec: replicas: 1 selector: matchLabels: app: node-red template: metadata: labels: app: node-red spec: containers: - name: node-red image: $image imagePullPolicy: Always ports: - containerPort: 1880 volumeMounts: - mountPath: /data name: data-volume volumes: - name: data-volume persistentVolumeClaim: claimName: node-red-pvc --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: node-red-pvc namespace: science annotations: volume.beta.kubernetes.io/storage-class: "managed-nfs-storage" spec: accessModes: - ReadWriteOnce resources: requests: storage: 6Gi --- apiVersion: v1 kind: Service metadata: name: node-red namespace: science spec: selector: app: node-red ports: - protocol: TCP port: 1880 targetPort: 1880 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: node-red-ingress namespace: science spec: rules: - host: foo.bar.host http: paths: - backend: serviceName: node-red servicePort: 1880 Run RabbitMQ On K3s rabbitmq-conf-rabbitmq-env-configmap.yaml ...

June 29, 2020

影像的力量

影像能够告诉我们什么

June 28, 2020

Rosetta项目最新进展 2020 06 26

Rosetta@home项目计算生成了SARS-COV-2的免疫蛋白,并用于动物实验,可以起到保护动物免受致命性新型冠状病毒的感染,目前该药物还在实验阶段,正在优化中。 从四月初到现在,我自己运行了35台Raspberry Pi 4G(140核心 总功耗280W)加入到了Rosetta@home项目中,希望接下来的半年会有更多关于该研究项目的新成果,那样自己付出的电费和硬件成本也值得了。 目前自己贡献的算力在团队里的排名为第六:

June 26, 2020

Blender创建蛋白质三维结构艺术1

Blender 是什么 Blender 是一套开源的三维建模程序,因为之前为了在创作短片时使用数字绘景MattePainting技术,比如场景扩宽中的资产创建和2.5D合成,所以一直在学习这款程式,与之对应的商业建模程式有Maya,3DCoat,3dsMax,SideFx Houdini。比起商业的建模程式,Blender的优势是,第一,它是开源程式,第二,整套建模系统有自成体系的工作流,从建模,贴图,骨骼绑定,动画,合成,渲染输出,都可以在Blendr里面完成。学习的难度系数略高于Maya。目前Blender的版本一直在持续迭代中,整套系统开始使用越来越先进的技术,比如使用了EEVEE实时渲染引擎,在制作和渲染动画时,降低了制作成本。 在这篇文章中,我将介绍如何使用Blender 2.8 和 PyMol 制作蛋白质的三维结构图像艺术,上图为自己创作DNA螺旋三维结构的Blender截图。 创作过程解析 因为SARS-COV-2全球大流行,所以之前有一段时间研究过蛋白质的三维结构折叠。今天就拿SARS-COV-2的刺突蛋白(Spike Protein)来进行创作,其中的蛋白质编号为6M0J Crystal structure of SARS-CoV-2 spike receptor-binding domain bound with ACE2,与人类ACE2受体结合的的蛋白质。病毒是直接通过与ACE2结合这把钥匙,进入到人类细胞中,然后释放RNA从而合成和制造病毒自身的蛋白质。 首先我们下载蛋白质三维结构PDB文件,6M0J PDB,然后导入到PyMol分子三维结构预览程式中,如下图所示: 图中分别展示了6M0J蛋白质的卡通结构和表面结构。该蛋白质由两条肽链组成。 然后我们在Pymol中导出VRML2文件图像,路径为File->Export Image As->VRML 2。 接下来我们把VRML2依次导入到Blender程式中,导入完成之后,我们就可以对模型进行修饰,添加材质,打灯光,最后渲染输出。(注意需要对导入的模型执行一次 Mesh->Merge By Distance 将重复的顶点去掉,然后执行Mesh->Shade Smooth 使得模型表面被光滑处理) 下图是最终修饰处理完之后的截图,右下窗口就是导入的蛋白质三维结构模型。 关于Blender的材质构建,我后面会写一篇文章,详细介绍Blender的材质系统。 最后渲染输出的结构图如下: 原图🔗 原图🔗 原图🔗 原图🔗 表面+内部结构 总结 这是一次尝试在Blender结合Pymol来构建蛋白质三维结构图像艺术的尝试,蛋白质与我们人类息息相关,我们身体上的所有器官都是由蛋白质构成的,每当在科技杂志上看到精美的蛋白质三维结构图,都能让我们遐想在如此浩瀚的宇宙中,居然还有一个被巧妙设计好的微观世界在运行着,他的每一个零件运行都是那么的精准,如果稍有偏差,就会给生命体带来各种疾病。 目标 之前谈到过蛋白质的结构预测项目Rosetta@home,rosetta是一款开源程式,可以从头预测蛋白质的三维结构,接下来我就是学习rosetta的使用,自己已经在树莓派上编译了支持MPICH的Rosetta程式,然后我准备自己去设计蛋白质。用Rosetta来预测出给定蛋白质序列下的三维结构,最后在Blender中对该蛋白质进行修饰和图像合成,创作蛋白质的三维结构艺术。

June 21, 2020

边缘领域的ML

本文用到的Mathematica notebook源码可以在这里下载 为什么写这篇文章 从目前的市场环境看,有很多大型公司都在提倡人工智能的发展,然而绝大部分我们能看到的AI的应用就是智能小车,自动驾驶,图像识别,行为预测,医疗辅助,智能推荐系统,语音识别,图像与语音生成,在这些应用中,很少会与大规模工业领域有交集,原因就在于机器学习运算的成本。 首先像工业领域的机器学习的推演预测,第一个要保证就是数据安全性和实时性,在介绍Coral Dev Board本地机器学习的文章中,我们可以看到本地机器学习的应用范围,在工业范围内的AI应用中,我们可以看出占比很少,像自动驾驶,医疗辅助可以算是在工业领域的初探,大部分的人工智能应用都是停留在一个概念上,很少出现有能应用在工业领域并且具有商业性质的项目,原因就是在安全性和低成本。 试想你开发了一个ML应用,如果要应用到工业领域,比如检测设备故障,预测机器运行的下一个状态,公司盈利与设备故障率及工人流动情况的关系,在部署这些模型时,我们要考虑在工业方面的苛刻要求,比如这个工厂基本上没有覆盖网络,那么你要去部署检测设备故障模型的这一个环节就会遇到问题,是采用本地集群部署,还是部署一个终端,然后终端的数据由人为来进行录入,在采用集群部署时,因为会有成千上万台机器设备,所以部署的节点也会有很大的成本,像部署模型在一台Jetson Nano的设备上,虽然成本已经很低,但是部署成千上万个Jetson Nano,你就要考虑功耗,考虑nano模块的故障率以及模块更换的成本,还需要考虑模块与模块之间的高可用网络成本。那么能否将模型部署到更低廉的设备上,比如像微控制器的单片机,这样可以降低很多成本,并且功耗很低,对于大型公司采购此方案的成功率就会有很大的提升。 接下来的5-10年,或许就是机器学习在工业领域的兴起,TinyML意指在小型的微控制器上运算和推演模型,它可以运行在像我们平时接触的家电设备的微控制器上,可以运行在很小的集成电路里面和无处不在的小型设备上。 ML在工业领域的展望,比如像电影领域,通过小型穿戴设备进行演员的动作捕捉计算,目前购买一套动作捕捉的设备是相当昂贵的,还有电影中故事板的制作,对于独立电影人来说将是福利,通过运行有生成模型的小型设备,独立电影人可以通过所处的环境,来生成三维结构的环境,然后导入模型人物来进行预演,最后生成一张张故事板,提高了整个独立创作的效率,也让演员能够更好的理解现场的氛围和如何更好的表演。当然要让ML去创作出好听的小提琴音乐,那是相当难的,更不用说拉小提琴🎻,因为有灵魂注入到了琴中😄。 TinyML的工作流程 确定目标 收集数据 针对实际场景设计神经网络架构 训练模型 转换和部署模型 排查运行过程中的错误问题 实例 拟合Sin(x)函数,在给定x的情况下预测出Sin(x)的值 Mathematica 原型设计: data = Table[ x -> Sin[x] + RandomVariate[NormalDistribution[0, .15]] , {x, 0, 2 \[Pi], .001}]; ListPlot[List @@@ data, PlotStyle -> Dashed] data = RandomSample[data]; trainData = Take[data, {1, Floor[0.6*Length[data]]}]; validationData = Take[data, {Floor[0.6*Length[data]] + 1, Floor[0.8*Length[data]]}]; testData = Take[data, {Floor[0.8*Length[data]] + 1, Length[data]}]; Total[Length /@ {trainData, validationData, testData}] - Length[data] Length /@ {trainData, validationData, testData} 模型1: ...

June 16, 2020

DeepMind UCL 深度学习在线课程6总结

June 13, 2020