图像分割的评价指标
TP TN FP FN
The following are the 4 basic terminologies you need to know.
True Positives (TP): when the actual value is Positive and predicted is also Positive.
True Negatives (TN): when the actual value is Negative and prediction is also Negative.
False Positives (FP): When the actual is negative but prediction is Positive. Also known as the Type 1 error.
False Negatives (FN): When the actual is Positive but the prediction is Negative. Also known as the Type 2 error.
OA, Overall Accuracy, ...
Python Config
简介
使用 Python 编写一些深度学习算法时,经常会涉及到大量超参数的配置。通过 Python 的两个标准库,ml_collections 和 dataclasses,可以实现对这些配置进行管理。
ml_collections
ml_collections 是一个 Python 库,主要用于管理实验配置,其中的 ConfigDict 是一个核心工具。ConfigDict 提供了一种结构化的、易于管理的方式来定义和操作配置。它类似于 Python 的字典,但增强了功能,以便更方便地进行深度学习实验或其他场景中的配置管理。
1234567891011121314from ml_collections import ConfigDictdef get_config() -> ConfigDict: config = ConfigDict() config.model = ConfigDict() config.model.type = 'ResNet' config.model.num_layers = 50 config.optimizer = ...
Python 格式化时间
datetime
在 Python 中使用 datetime 库可以获取当前时间
12345678from datetime import datetime# 获取当前时间now = datetime.now()# 格式化时间为指定格式formatted_time = now.strftime("%Y-%m-%d %H:%M:%S %p")print(formatted_time) # 2024-12-09 20:34:41 PM
其中各个字母的含义如下
%Y - 年份(四位数,例如 2024)
%m - 月份(两位数,例如 01 到 12)
%d - 日期(两位数,例如 01 到 31)
%H - 小时(24 小时制,两位数,例如 00 到 23)
%I - 小时(12 小时制,两位数,例如 01 到 12)
%M - 分钟(两位数,例如 00 到 59)
%S - 秒数(两位数,例如 00 到 59)
%p - 上下午标识(AM 或 PM)
Python Logging
参考
logging — Python 的日志记录工具{target="_blank"}
通过 logging 调用
123456789101112131415161718192021222324import loggingdef main() -> None: # logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s", datefmt="%Y-%m-%d %H:%M:%S") # logging.basicConfig(level=logging.WARNING) logging.debug("This is a debug message.") logging.info("This is a in ...
Python 类型提示
简介
Python 的类型提示(Type Hints)是在 Python 3.5 中正式引入的,作为 PEP 484 – Type Hints 的一部分。它是一种在代码中显式声明变量、参数、返回值等的类型信息的方式。它对代码运行没有实际影响,只是作为一种可选的静态类型标注,意在为开发者提供变量、参数和返回值的类型信息,方便代码阅读。
可以把类型提示当作一种注释,就是告诉开发者这个变量“应该”是提示的类型,但是 python 编译器本身不做类型检查,即便代码运行时这个变量不是标注的类型,也不会有任何提示。
普通变量的类型提示
在创建变量时可以进行类型提示
123x: int = 1y: float = 1.0z: str = "hello"
还可以对一些自定义的数据类型进行提示
1234import numpyimport torchx: numpy.ndarray = numpy.array([1, 2, 3])y: torch.tensor = torch.tensor([1, 2, 3])
函数参数和返回值类型
在函数定义中,可以为参数和返回值添加类型提示:
1 ...
关于image的shape是CxHxW还是HxWxC
H×W×C Or C×H×W
123456789101112131415from PIL import Imageimport numpy as npfrom torchvision import transformsimage_path = r"path/to/image"mask_path = r"path/to/mask"img = Image.open(image_path) # size: (width, height)mask = Image.open(mask_path) # size: (width, height)np_img = np.array(img) # shape: (height, width, 3)np_mask = np.array(img) # shape: (height, width, 3)ts_img = transforms.PILToTensor()(img) # shape: torch.Size([3, height, width])ts_mask = transforms.PILToTensor ...
Flask如何接收数据
简介
本篇文章将介绍使用 Python Flask 库搭建的后端程序,如何与前端程序进行数据通信。一方面介绍如何使用 Python requests 库发送 post 请求,另一方面介绍如何使用 JavaScript fetch 方法发送 post 请求。此外,详细地展示在 Flask 中如何接受数据,数据格式的转换与解码等。
requests.post
requests.post | requests docs
使用 requests 库的 post 方法进行数据传输时有非常多的可选参数,它的函数声明如下:
123456789101112131415161718(function) def post( url: str | bytes, data: _Data | None = None, json: Any | None = None, *, params: _Params | None = ..., headers: _HeadersMapping | None = ..., cookies: CookieJar | _TextMappi ...
cv2如何处理RGB和BGR
RGB vs BGR
使用 np.array 创建一张 255×255 的 RGB 值为 [255, 0, 0] 的红色图像,类型为 np.ndarray。使用 cv2.imwrite 方法保存这张图片为 red.png,在本地 red.png 显示为蓝色,它的 RGB 值为 [0, 0, 255]。再使用 cv2.imread 方法读取这张图片,得到的新图像的 RGB 值为 [255, 0, 0]。
1234567891011121314import cv2import numpy as npcolor = np.array([255, 0, 0]) # R:255, G:0, B:0 -> Redimage = np.ones(shape=[255, 255, 1], dtype=np.uint8) * color.reshape([1, 1, -1])print(f"image.shape: {image.shape}")# image.shape: (255, 255, 3)cv2.imwrite(filename="re ...
AdblockPlus 过滤规则
过滤规则
AdBlock DNS Filters | GitHub
Learn how to write filters (English only) | AdblockPlus
在 AdblockPlus>Advanced 中编写自定义的过滤规则,可以屏蔽掉网页中的广告、页面块等一些 HTML 标签块。
例如这个示例中的前 3 条规则
123bilibili.com##.right-bottom-bannerbilibili.com##.ad-floor-expbilibili.com##.ad-report
这 3 条规则是基于 CSS 选择器 中的 class 选择器选择 HTML 标签进行屏蔽的。它们表示的意思是屏蔽掉 bilibili.com 下的所有 class 属性中包含 right-bottom-banner,ad-floor-exp 或 ad-report 的标签。
在 Google 浏览器中,可以通过右键 > inspect (F12)来检查页面中的 HTML 块用于查询需要屏蔽的标签的 class 属性值。
还可以基于 id 选择器进行选择 ...
关于反向传播的实现
AutoGrad
forward
考虑一个简单的情形——复合函数的反向传播。例如考虑 f(⋅)=(⋅)2f(\cdot) = (\cdot)^2f(⋅)=(⋅)2 和 g(⋅)=e(⋅)g(\cdot) = e^{(\cdot)}g(⋅)=e(⋅) 的复合函数
y=f(g(f(x)))=(ex2)2y = f(g(f(x))) = (e^{x^2})^2
y=f(g(f(x)))=(ex2)2
如何通过反向传播计算 ∂y/∂x\partial{y} / \partial{x}∂y/∂x。
首先我们考虑正向 forward 的过程,对于一个输入 x 经过复合函数后得到输出 y:
x→1(⋅)2x2=a→2e(⋅)ea=b→3(⋅)2b2=yx \xrightarrow[1]{(\cdot)^2} x^2 = a \xrightarrow[2]{e^{(\cdot)}} e^{a} = b \xrightarrow[3]{(\cdot)^2} b^2 = y
x(⋅)21x2=ae(⋅)2ea=b(⋅)23b2=y
在复合函数 forward 的过程中会产生很多临时的“中间结果”,我 ...