FastViT 论文阅读
1. 概述
论文地址:arxiv
代码地址:ml-fastvit
FastViT 是苹果公司在 ICCV 2023上发表的网络结构设计的论文,在速度和精度上取得比较好的折衷,速度上既能和MobileOne这种轻量级网络匹敌,精度上也不输PoolFormer、ConvNeXt等比较新的大网络结构。
论文地址:arxiv
代码地址:ml-fastvit
FastViT 是苹果公司在 ICCV 2023上发表的网络结构设计的论文,在速度和精度上取得比较好的折衷,速度上既能和MobileOne这种轻量级网络匹敌,精度上也不输PoolFormer、ConvNeXt等比较新的大网络结构。
用Python跑有大量数据的任务的时候,启用多进程加速效果明显。但因为我之前在使用Python的多进程库时总遇到卡住的问题,后来对这块避而远之,总是用别的方法来加速。最近发现OpenMMLab的一些库提供了多进程并行的函数功能,简单好用。比如一个简单的toy例子,OpenCV读图像,resize然后保存,在8个CPU核的 Mac 上,加速比能达到3.4倍(45ms vs 13ms),也就是以前要跑3个多小时的任务,现在1个小时就能搞定,省了不少时间,更多实际例子也证明了这个函数的加速效果,还是挺实用的。这里写个教程,希望也能方便到别的有同样需要的人,当然同类型的库应该也有很多,这里只是取一瓢饮。
前些天 Meta 公司发布了 DINOv2 视觉预训练模型。DINOv2 能够高效地提出图像中的特征,提取的特征可以直接用于像分类等任务,而且只需要一个简单的线性层就能取得比较好的结果。
为了展示 DINOv2 强大的特征提取能力, Meta 提供了一个在线 Demo,上传一张图片,就能从一些艺术画作中检索出最相似的作品。
拿随手拍的照片体验后,DINOv2 特征提取能力确实强大,能够准确地理解图片中的语义信息。
由于 DINOv2 预训练模型是开源的,因为基于它来测试实际的效果是可行的。比如,我想找到相册中跟某张照片最相似的图片,就可以用 DINOv2 来测试照片和相册中所有照片的特征,然后计算相册中照片特征与测试照片最相近的那一张,就是我想要的。
整体思路是很简单直接的,经过一天的开发,终于完成了一个相对完善的Python工具 dinov2_retrieval,能够检索若干张图片在测试数据集中最相似的图。
写完后拿最近拍的一些随机照片跑了一下,检索结果还是挺不错的。最左边是测试图片,右边的5张图是在[Caltech 256](Caltech 256)数据集中检索得到的top5相似的图像:
通过和ResNet50预训练模型提取的特征做检索对比,发现 DINOv2 提取的特征还是更准确一些,检索结果也更好。
后面部分详细说说这个工具 dinov2_retrieval 的使用。
git diff 可以用来比较在git仓库中的两次提交或两个文件的diff,常见用法如下:
1 | # 显示当前代码与最新commit的代码之间的差别 |
所有上述命令后面都可以加一个目录或文件路径来只显示这个目录或文件中的区别:
1 | git diff /path/to/folder |
C++ 17 引入了std::optional,表示一个可能有值的对象(没有值时就是默认的std::nullopt
),例如这个例子中,std::optional 对象 even_value,如果is_even
为真的话就是128,否则就是默认值std::nullopt
:
1 | #include <iostream> |
其实std::optional的作用和Python里面的None
比较像,例如上面的例子用Python来写就是这样:
1 | is_even = True |
在这篇文章中,我们对如何使用Libtorch进行MNIST分类模型的训练和测试进行详细描述。首先会浏览官方MNIST示例,然后对其进行模块化重构,为后续别的模型的训练提供 codebase。
由于Libtorch中包含很多和Pytorch中没有的类型,所以看Libtorch代码的时候时常会遇到不了解的函数或者类,这时候可以在这里查找对应的类的实现,了解其作用。Libtorch C++ 代码中的注释虽然不多但基本够用了。
这里列举一些常见的类的代码路径,方便查询:
Homebrew 是 macOS 下的默认的包管理器,不需要sudo权限就可以安装包,比较好用。
不过用brew install
安装包时有个问题,它默认会先执行brew update
来更新brew的版本。但由于brew 的源国内访问比较慢,常常brew update
执行耗时比较久,影响每次安装包的体验。
解决办法是设置HOMEBREW_NO_AUTO_UPDATE
环境变量为1,这样每次brew install
时跳过更新brew的步骤,实际体验安装包速度提升明显。
可以添加下面的语句到你的.bashrc或.zshrc中,重启shell即生效:
1 | export HOMEBREW_NO_AUTO_UPDATE=1 |
在使用Python 命令或者 Python的命令行工具的时候,一个痛点是没有补全。比如python -m
后面输入包名字,就没有提示,每次想运行一个http server的时候,都需要搜索一下http服务的包名。另外,像pip,pipx等命令也没有提示,使用不太方便。
偶然看到argcomplete这个库,按tab键就可以给Python的命令行添加自动补全,简直是使用Python的一个神器。
具体来说,argcomplete有下面的特点
下面具体展开怎么对已有的工具启用自动补全,以及如何让自己的Python包支持argcomplete。