doctest 用法简介

概述

doctest 是 python 系统库中用于交互式会话例子测试的工具,用于搜索以 >>> 开头的语句,并且将其作为Python命令,对结果进行测试。

这个工具可以方便地用于检测自己写的库是否有bug,例如某些函数功能可能发生改变,借此工具可以方便地对代码中的示例语句进行测试。

Read More

C++中的string_view

C++17标准库里面引入了轻量级的只读字符串表示类型string_view,用来替代const char*const string&,在传入函数的时候减小内存开销(因为string_view类只包含字符串的指针和字符串的长度值,开销小于string类型)。

Read More

python虚拟环境管理工具venv教程

0. 概述

Python有各种各样的系统包和第三方开发的包,让我们的开发变得异常容易。不过也引入了一个问题,不同代码需要的包版本可能是不一样的,所以常常回出现这种情况,为了代码B修改了依赖包的版本,代码B能work了,之前使用的代码A就没法正常工作了。因此常常需要对不同的代码设置不同的Python虚拟环境。venv是Python自带的虚拟环境管理工具,使用很方便,这里简单记录一下使用方法。

Read More

2020年终总结

2020流水记录

新的一年又开始了,记录一下2020年发生的一些事情,作为对这不平凡的一年的简单的回顾。

1月14日,农历腊月二十,我和彤彤在我家结婚了,作为主人翁参与其中,是一种很神奇却很美好的感觉,结婚的大小事情都是爸妈和村里的亲戚邻居一起来做的,很感谢爸妈亲戚邻居们的付出,让寒冬里面的腊月二十热闹而温暖。

关于结婚几天发生的事情,我写了一些流水账记录,不过后面没有完全写完,等有空了再回忆回忆,完全写完再发出来吧,也算是给自己一个交代。

总之非常感谢所有人的帮助和支持。

Read More

NumPy的C++替代NumCpp使用教程

NumPy提供了很多开箱即用的函数,用处非常大,所以写C++的时候,让人无比怀念,要是有一个替代版本,就太好了。最近搜索发现, NumCpp 这是我想要的,而且因为是 Header-only的库,因此使用时不需要编译,直接添加到头文件包含目录即可,使用很方便。不过NumCpp使用了boost库,需要进行一些下载和配置,这里记录一下。

Read More

detectron2 使用总结

概述

  1. detectron2 大部分代码都需要GPU
  2. detectron2 主要是用于检测和分割的代码框架,像分类这种任务的代码暂时没有
  3. 官方示例有一些是基于Colab的,需要科学上网才能访问

    安装依赖

    1
    2
    3
    4
    5
    sudo pip install -U torch==1.4+cu100 torchvision==0.5+cu100 -f https://download.pytorch.org/whl/torch_stable.html
    sudo pip install cython pyyaml==5.1 --ingnore-installed

    # 安装 cocoapi
    sudo pip install -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
    其中cocoapi 需要从GitHub下载代码,如果安装太慢,可以先clone下代码,再进PythonAPI子目录,运行setup.py安装:
    1
    2
    3
    git clone https://github.com/cocodataset/cocoapi.git
    cd cocoapi/PythonAPI
    sudo python3 setup.py install

安装 detectron2

这里直接安装编译好的二进制文件。

1
sudo pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu100/index.html

如果文件下载太慢或者超时,可以手动在浏览器里面下载好文件,再用下面的命令安装(假设下载的whl文件是xxx.whl):

1
sudo pip install xxx.whl

安装完后,打开 Python 命令行,执行下面的命令,如果不报错,说明安装成功:

1
import detectron2

测试

为了测试,需要下载 detectron2 的源代码,基于 demo/demo.py 进行简单的测试:

1
2
git clone https://github.com/facebookresearch/detectron2
python3 detectron2/demo/demo.py --config-file detectron2/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input ~/test.jpg --opts MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl

注意上述代码需要在 detectron2 的 git 仓库外面执行,否则会报错。
测试时输入支持单张图片、多张图片、单个图片文件夹、网络摄像头以及视频文件,每种情况参数设置如下:

1
2
3
4
5
6
7
8
9
10
# 单张图片
--input test.jpg
# 多张图片
--input test1.jpg test2.jpg test3.jpg
# 单个图片文件夹
--input imgs/*.jpg
# 网络摄像头
--webcame
# 视频文件
--video-input test.mp4

``–opts MODEL.WEIGHTS表示测试用的模型参数,可以是一个本地目录,也可以是一个detectron2://`开头的一个模型路径,这时会先下载模型到本地再测试:

1
2
3
4
# 使用本地的模型参数
--opts MODEL.WEIGHTS ./model_final_f10217.pkl
# 使用网络模型地址
--opts MODEL.WEIGHTS ./model_final_f10217.pkl

模型的名字可以在 Model Zoo 查看。

训练

训练代码参考 tools/train_net.py,目前Detection看。

一些代码分析

  1. DefaultTrainer 是针对目前常用的Detection设置而写的一个类,为了不用修改太多就直接复现最佳结果。但另一方面,由于有比较多的假设情况,因此通用性有所降低
  2. SimpleTrainer 是 DefaultTrainer 的父类,限制条件更少,对于做新的研究任务,作者推荐继承 SimpleTrainer 来修改
  3. 代码支持多机多卡多进程,基于 Pytorch 的多级多卡代码写了一些wrapper
  4. 代码注释很完善,而且其中很多是给用户怎么基于现在代码进行修改来跑新的网络、做新的任务,有些地方说的很细致,这一点很棒

一些资源

  1. 文档
  2. Git 仓库

加速国内访问 Arxiv 论文的一些方法

arxiv 的 PDF 下载速度很慢,下面是一些加速方法。

命令行直接下载

我们知道可以用wget命令下载一些网络文件, 不过arxiv 上的论文使用wget下载时需要加参数--user-agent=Lynx,速度才能较快,下面是使用的例子:

1
wget --user-agent=Lynx https://arxiv.org/pdf/1911.05722.pdf

上述命令需要在Linux或者WSL的命令行中执行。

修改网址

一种方法是将https://arxiv.org改成 http://xxx.itp.ac.cn,后面内容不变,速度飞快。
还有一种方式是将https://arxiv.org改成http://cn.arxiv.org,后面网址内容不变,不过这个方法有时候并不work,因此推荐上一种方法。

更多方法可以参考知乎上的这个问题