OpenCV C++学习笔记(0): Mac下安装

一直想写一个video see-through的程序, 用头戴显示器通过摄像头看外面, 以前用python写过, 但是延迟太明显. 于是去学了C++, 但也一直没有动手, 最近写毛笔字时开始给自己录像, 于是又有了很多视频需要剪切、调整、变形, 这些操作肯定是不愿意手动的, 于是打算用OpenCV, 然后继续嫌弃python太慢, 既然已经学了C++, 那干脆把OpenCV的C++版本学会好了.

于是一边查一边写, 写一句查一句, 觉得效率太低, 反正磨刀不误砍柴工, 干脆找本书认真学OpenCV好了, 目前买了本《OpenCV 4计算机视觉项目实战》 来看.

首先是安装. 我觉得开源软件如果提供一个远程安装指导的付费服务, 一定能产生巨巨巨巨巨大的GDP. 一开始折腾了一整天, 也没搞定一句#include <opencv2/opencv.hpp>

阅读更多…

AI 4 Med 笔记(1.2)各种率

第一门课第二周, 主要讲

各种率

  • 真假阴阳各种率
  • 敏感性和特异性
  • 阳性预测率(PPV)和阴性预测率
  • 置信区间, ROC曲线, F1 score

我之前学Scikit-learn的时候, 笔记记得挺清楚的.

参考

而且这张图做得很好, 一张图说明问题, 先看图, 再看后面的计算方式:

例如有这样的结果:

预测=A 预测=B 预测=C
实际=A 100 6 11
实际=B 1 110 12
实际=C 2 7 120

以下表格中, 分子是红字, 分母是黄色背景, 考虑C的情况

Accuracy

  • 正确率
  • 有病没病都说对了的概率
预测=A 预测=B 预测=C
实际=A 100 6 11
实际=B 1 110 12
实际=C 2 7 120
$$ Accuracy=\frac{100+110+120}{100+6+11+1+110+12+2+7+120} $$

Recall

  • 敏感性, 检出率, 真阳性率.
  • 实际有病, 测出有病的概率
预测=A 预测=B 预测=C
实际=A 100 6 11
实际=B 1 110 12
实际=C 2 7 120
$$ Recall=\frac{120}{2+7+120} $$

Precision

  • 精确度, 阳性预测率, PPV
  • 测出有病, 还说对了的概率
预测=A 预测=B 预测=C
实际=A 100 6 11
实际=B 1 110 12
实际=C 2 7 120
$$ Precision=\frac{120}{11+12+120} $$

Specificity

  • 特异性, 真阴性率
  • 测出没病, 还说对了的概率
预测=A 预测=B 预测=C
实际=A 100 6 11
实际=B 1 110 12
实际=C 2 7 120
$$ Specificity=\frac{100+6+1+110}{100+6+1+110+2+7} $$

False Positive Rate

  • 假阳性率, 误报率
  • 本来没病, 测出有病的概率
预测=A 预测=B 预测=C
实际=A 100 6 11
实际=B 1 110 12
实际=C 2 7 120
$$ False Positive Rate=\frac{11+12}{100+6+11+1+110+12} $$

真假阴阳性

预测为(-) 预测为(+)
实际为(-) TN FP
实际为(+) FN TP
  • TP = true positive 真阳性
  • FP = false positive (Type I error) 假阳性(Type I错误) , 印象里就是P<0.05的0.05
  • TN = true negative 真阴性
  • FN = false negative (Type II error)假阴性(Type II错误)

敏感特异性

  • Accuracy: 分类正确的概率. 实际为(-)预测为(-), 实际为(+)预测为(+)叫做正确. $$ Accuracy=\frac{TP + TN}{TP + TN + FP + FN} $$

  • Classification error: (1-Accuracy), 分类错误的概率 $$ Classification\; error=\frac{FP + FN}{TP + TN + FP + FN} $$

  • Recall, 真阳性率: 实际上为(+), 能够被预测成(+)的概率

    • Recall又叫
    • True Positive Rate (TPR): 真阳性率
    • Sensitivity: 敏感性
    • Probability of detection: 检出率 $$ Recall=\frac{TP}{TP+FN} $$
  • Precision: 如果预测为(+), 那么预测正确的概率 $$ Precision=\frac{TP}{TP+FP} $$

  • False positive rate (FPR): 假阳性率, 误报率. 本来实际上是(-)的, 结果分类器报告成(+)的概率

$$ False Positive Rate=\frac{FP}{TN+FP} $$
  • Specificity, 特异性

应该是真阴性率(之前写错了), TNR, 实际上为(-), 能够被测成(-)的概率 $$ Specificity=\frac{TN}{TN+FN} $$

F1-score: 结合precision与recall

$$ F_1=2\frac{precision \times recall}{precision+recall}=\frac{2TP}{2TP+FN+FP} $$

F-score: 更一般地将precision与recall结合成单独一个数

$$ F_\beta=(1+\beta^2)\frac{precision \times recall}{\beta^2\times precision+recall}=\frac{(1+\beta^2)TP}{(1+\beta^2)TP+FN+FP} $$

𝛽用来调整recall vs precision之间的重要程度:

  • Precision-oriented users: 𝜷 = 0.5
  • Recall-oriented users: 𝜷 = 2

阳性预测率 PPV

实际上就是

  • Precision: 如果预测为(+), 那么预测正确的概率 $$ Precision=\frac{TP}{TP+FP} $$
$$ PPV = Precision = \frac{sensitivity \times prevalence}{sensitivity \times prevalence+(1 - specificity) \times (1 - prevalence)} $$

其中 prevalence=P(pos), 阳性结果的发生率. 如果自己都知道TP、FP的数据, 当然用简单的公式计算, 如果拿到的是一个标记好各种率的试剂盒, 或者是看一篇新闻报道, 对方把各种率搅合在一起, 那么可能就要通过后一种公式来计算

置信区间

比如某个概率p=0.80(95% CI 0.78, 0.82),

是说, 真实的概率p, 谁知道是啥, 有95%的概率, 会落在[0.78, 0.82]的范围内. 置信区间的范围和样本量有关, 样本量越大, 置信区间的宽度越窄.

ROC曲线

  • X轴: False Positive Rate 假阳性率
  • Y轴: True Positive Rate 真阳性率

左上顶点:

  • 理想点
  • False positive rate 假阳性率=0
  • True positive rate 真阳性率=1

ROC.png

  • ROC曲线越往左上, 越好.
  • 曲线下面积(AUC), 越大越好
  • 45度线是随机瞎猜线

ROC-2.png

人工晶体闪辉Glistening

近期认真读了一下关于人工晶体Glistening(闪辉)的文献, 连带读了相关的专利. 很有意思, 写出来供眼科同道观赏. (专业文章讲解惯例, 专业名词第一次出现时使用中文译名, 此后持续使用英文原名.)

临床部分比较无聊, 但原理部分相当有趣.

阅读更多…

9年前的鸡汤

突然翻出了9年前给自己熬的鸡汤, 味道很不错. 一下子已经过去9年了呢. 能够以发明作为职业, 实在是非常幸福.

以下写的事情发生在2011年-2012年:

阅读更多…

笔法方程的应用: 怎样算写字不好

我在《笔法方程略史》里面提到了书法的first principle:

基本定理:写完一笔以后, 笔应该恢复到能够写下一笔的状态。

也就是说, 一笔写完以后, 由于笔的弹性, 笔应该回到初始状态, 笔锋是处于聚拢状态的。不妨称为“回归律”

并且在那篇文章末尾, 还做了少许应用, 仅仅从这个第一性原理就可以推知一个人的书法是否不好.

好的艺术表达并不是“科学”或者可度量的, 一定程度以上就较少有客观标准来衡量了. 但不好的艺术表达比较容易定性甚至半定量地分析.

在本文中, 我将再展开讨论如何算是不好的书法.

我们平时看到的书法, 通常是写完以后的作品, 是静态的. 但书法是一个写的过程, 我更愿意把书法作品当作是 书法家通过毛笔玩“极限运动”时在平面留下的轨迹.

想象一下玩极限运动的人, 就是那种踩着滑板上下翻飞的场景. 明白王羲之为什么字“逸少”了吧.

我们现在已经无法看到古代人写字的过程, 只能从他们留下的痕迹里去猜想精彩的极限运动过程. 但现代的书法作品不同, 现代有录像啊, 可以从录像里直接看到一个人写字的全过程.

以下的分析是理工科定性或半定量分析, 不涉及到任何主观感受, 是我最爱的 机械的、生硬的、可重复的 分析.

阅读更多…

AI 4 Med 笔记(1.1)胸片诊断

第一门课叫AI For Medical Diagnosis, 也就是用于诊断的AI. 有三周的课程

用于诊断一般就是图像识别, 看胸片、眼底照片、CT、核磁. 其中MRI是3D数据, 其他一般是二维.

诊断问题一般就是二分类, 有病或者没病.

二分类的loss很简单:

L(X,y)=

  • -log(P(Y=1|X)) if y==1
  • -log(P(Y=0|X)) if y==0

就是把卷积神经网络CNN最后一步的激活函数设成sigmoid, 得到一个在[0,1]之间的概率, 对这个数字求-log.

阅读更多…