Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

室内定位技术笔记

发表于 2022-06-18

在室内环境无法使用卫星定位时,使用室内定位技术作为卫星定位的辅助定位,解决卫星信号到达地面时较弱、不能穿透建筑物的问题。最终定位物体当前所处的位置。常见的室内无线定位技术还有:Wi-Fi、蓝牙、红外线、超宽带、RFID、ZigBee、动作捕捉 和超声波。

参考链接

  1. 一文看懂UWB室内定位技术,by 马毅煌.
  2. 室内定位,by 百度百科.
  3. 8种室内RTLS(实时定位)技术对比,by 万间云.

国际会议口头报告及提问范例

发表于 2022-06-14 | 更新于 2022-06-18

最近需要在国际会议上口头报告,赶紧研究一下。

PPT制作技巧

总的原则是:学术报告的PPT应该老老实实,简化形式,内容至上。

  • 白底黑字。学术报告的PPT一般不使用背景和模板。
  • 中文字体用黑体,英文字体用Arial。
  • PPT第一页是报告题目(居中),报告人的姓名,单位及时间。
  • 提纲不能写成研究背景、实验部分、结果与讨论、结论和致谢(等于什么都没说)。提纲应该重点突出报告内容之间的逻辑关系。
  • PPT每一页都要有目录标题和小标题。
  • PPT除标题页外都要加页码,方便观众提问,也方便自己定位。
  • 颜色“无必要,不使用”。
  • 使用动画要慎重。
  • 大段文字是PPT的大忌。文字应该能省则省,给出关键的数据和结论即可。
  • 检查细节。
  • 一页PPT只讲一件事。展示的内容都要讲,不讲的不要放,避免分散观众注意力。
  • 守时是纪律,超时是大忌。
  • 尽快切入主题,研究背景不要超过3页。
  • 不要幽默。
  • 论文里的图片不要直接复制粘贴,因为论文中的图片多数是几张小图拼在一起的,建议拆开成几页PPT,每页只讲一件事(去掉abcd)。
  • PPT中线条、箭头、方框、注释“无必要,不使用”。
  • 致谢的内容包括导师、合作者和基金。
  • 致谢之后可以放几页补充材料(Appendix),以备提问环节使用。
  • PPT做完以后换台电脑播放一下。
  • PPT是为演讲服务的。

口头报告技巧

参考链接

  1. 国际学术会议英文口头报告(Oral presentation)常用语句,by 凯鲁嘎吉.
  2. 国际学术会议英文提问环节的回答范例,by 凯鲁嘎吉.
  3. 怎样做好学术 PPT?,by zhihu.
  4. “How to present a papers at an academic conferences”,by editing.

计算机图像处理演示

发表于 2022-06-09

图像处理的演示。

参考链接

  1. LENA.JS,by Davidson Fellipe.

OpenCV学习笔记

发表于 2022-05-31 | 更新于 2022-07-10

背景提取

当观察场景的是一个固定的相机,背景几乎保持不变。在这种情况下,感兴趣的元素是在场景中运动的物体。我们将这些运动的物体称为前景,为了提取出这些前景物体,我们需要对背景建模,然后将当前帧的模型与背景模型进行比较,以检测前景物体。

运动前景对象的有效检测对于对象跟踪、目标分类、行为理解等后期处理至关重要。区分前景对象,关键的一个问题是:确定一个非常合适的背景。背景从象素的角度来理解,每一个象素就是有可能是前景点,也有可能是背景点,那么我们就要防止背景中误进入原属于前景点的对象,目前有几种常用的方法,但分别有利弊。

具体请参考OpenCV视频篇——背景/前景提取。

固定背景提取法

根据视频序列动态建立背景

均值法、中值法、滑动均值滤波、单高斯

帧间差分法

背景就是上一帧图像。每一帧与上一帧进行差分运算。

优点:速度较快,稳定性较好。

缺点:可能出现物体的“空洞现象”,空洞是由于某一大型运动物体,它的两帧之间存在象素十分接近的重合部分,所以导致这部分被差分剪去了。

混合高斯法

参考连接

  1. OpenCV-Python图像乘法运算cv2.multiply函数详解及像素值溢出归一化处理,by LaoYuanPython.
  2. OpenCV各版本差异与演化,从1.x到4.0,by 日拱一卒.
  3. 主成分分析(PCA)原理详解.
  4. 图像与滤波,by 阮一峰.
  5. OpenCV—python 视频分析背景提取与前景提取,by SongpingWang.
  6. OpenCV视频篇——背景/前景提取,by WaitFoF.
  7. 40. 如何消除摄影中的运动模糊?,by Wang Hawk.
  8. 基于opencv对高空拍摄视频消抖处理_js君-程序员ITS401,by its401.
  9. 马尔科夫随机场(MRF)在深度学习图像处理中的应用-图像分割、纹理迁移,by OLDPAN.
  10. 图像去噪(噪声)的主要算法,by 工程之家.
  11. opencv2中的背景/前景分离(类BackgroundSubtractor),by 阳光下的Smiles.
  12. 混合高斯背景建模原理及实现,by taotao1233.
  13. 【OpenCV学习系列】之Background Subtraction,by AutoSleep.
  14. OpenCV —数据持久化: FileStorage类的数据存取操作与示例,by iracer.
  15. OpenCV中InputArray和OutputArray使用方法,by Curnane.
  16. 图像处理之灰色图转化为RGB图像,by llh_1178.
  17. 几何中心,by wikipedia.
  18. C++ vector 删除符合条件的元素,by 旭东.

双目测距笔记

发表于 2022-05-27

双目测距实际操作分4个步骤:相机标定——双目校正——双目匹配——计算深度信息。

参考链接

  1. 一篇文章认识《双目立体视觉》,by 一颗小树x.
  2. 双目视觉测距原理,数学推导及三维重建资源,by Naruto_Q.

nginx静态资源服务器配置方法

发表于 2022-05-19 | 更新于 2022-05-20

为提供静态资源web服务,安装好nginx后,进入nginx安装目录的conf目录下,修改nginx.conf文件,配置如下:

1
2
3
4
5
6
server {
listen 88;
server_name localhost;
# root /home/ubuntu/static/;
root D:/PortableApp/nginx-1.21.6/test;
}

参考链接

  1. nginx静态资源服务器简单配置,by wllllllllllllllll.

树莓派设备上编译tensorflow源代码

发表于 2022-05-18 | 更新于 2022-05-25

对 TensorFlow Raspbian package 进行交叉编译 (cross-compiling)。 交叉编译使用的平台与部署平台不同。 相较于在 Raspberry Pi 使用有限的 RAM 和相对较慢的处理器,我们更加建议在 Linux ,macOS 或 Windows 等功能更强大的主机上构建TensorFlow。

宿主机 (host) 设置

安装 Docker

为了简化依赖关系管理,构建脚本使用 Docker 来创建虚拟 Linux 开发环境进行编译。通过执行以下操作来验证您的 Docker 是否安装成功: docker run –rm hello-world。

具体安装过程请参考如何在 Ubuntu 20.04 上安装和使用 Docker。

Docker使用方法

以 koa-demos 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。

1
2
git clone https://github.com/ruanyf/koa-demos.git
cd koa-demos

编写 Dockerfile 文件

首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容。

1
2
3
.git
node_modules
npm-debug.log

上面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。

然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。

1
2
3
4
5
FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000

创建 image 文件

有了 Dockerfile 文件以后,就可以使用docker image build命令创建 image 文件了。

1
2
3
$ docker image build -t koa-demo .
# 或者
$ docker image build -t koa-demo:0.0.1 .

如果运行成功,就可以看到新生成的 image 文件koa-demo了。

1
docker image ls

生成容器

docker container run命令会从 image 文件生成容器。

1
2
3
$ docker container run -p 8000:3000 -it koa-demo /bin/bash
# 或者
$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash

下载 Tensorflow 源代码

使用 Git 克隆 TensorFlow:

1
2
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

默认为 master 分支。您还可以签出要构建的 release 分支:

1
git checkout branch_name  # r1.9, r1.10, etc.

交叉编译源代码

交叉编译 TensorFlow 源代码,从而构建一个基于 ARM 指令的 Python pip 包。构建脚本启动 Docker 容器以进行编译。

生成tensorflow构建环境的Docker映像

使用如下命令获得所需Docker映像:

1
2
3
4
5
6
git clone https://github.com/lhelontra/tensorflow-on-arm.git
cd tensorflow-on-arm/build_tensorflow/

# 修改Dockerfile.bullseye,加上代理
# ENV http_proxy=http://x.x.x.x:xx https_proxy=http://x.x.x.x:xx
docker build -t tf-arm -f Dockerfile.bullseye .

启动容器

使用如下命令:

1
docker run -it -v /tmp/tensorflow_pkg/:/tmp/tensorflow_pkg/ --env TF_PYTHON_VERSION=3.8 tf-arm ./build_tensorflow.sh configs/<conf-name> # rpi.conf, rk3399.conf ...

交叉编译tensorflow

使用如下命令交叉编译tensorflow:

1
2
3
4
5
6
7
8
9
10
11
12
# Docker容器内设置全局代理
export http_proxy=http://x.x.x.x:xx
export https_proxy=http://x.x.x.x:xx


# 交叉编译tensorflow
cd build_tensorflow/
chmod +x build_tensorflow.sh
TF_PYTHON_VERSION=3.7 ./build_tensorflow.sh <path-of-config> [noclean]

# Copying files from Docker container to host
sudo docker cp 820e780536b6:/tmp/tensorflow_pkg/tensorflow-2.3.0-cp37-none-linux_armv7l.whl ./

参考链接

  1. 在树莓派设备上编译 tensorflow 源代码 ,by tensorflow.
  2. Docker 入门教程,by 阮一峰.
  3. 如何在 Ubuntu 20.04 上安装和使用 Docker,by 雪梦科技.
  4. Ubuntu 20.04系统下更改apt源为阿里源,by 一缕诗风.
  5. docker:containerd.io docker-ce-cli docker-ce 的区别,by 非正经研究生.
  6. [Why does “drm:vmw_host_log [vmwgfx]] ERROR Failed to send host log message” show up and what can I do to fix it?](https://unix.stackexchange.com/questions/502540/why-does-drmvmw-host-log-vmwgfx-error-failed-to-send-host-log-message-sh),by stackexchange.
  7. 交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别,by 左手牛奶,右手面包.
  8. 基于源代码为树莓派设备构建 TensorFlow,by Spoony.
  9. Docker — 从入门到实践,by yeasy.
  10. 史上讲解最好的 Docker 教程,从入门到精通(建议收藏的教程),by 周辰晨.
  11. Docker篇之镜像打标签tag,by 听说唐僧不吃肉.
  12. Docker容器内设置全局代理,by Liao.
  13. Bazel入门:编译C++项目,by Elaine_Bao.

树莓派中配置tensorflow运行环境

发表于 2022-05-16 | 更新于 2022-05-26

本文记录在树莓派3B+上配置tensorflow运行环境的过程。

准备工作

  • 16G的microsd卡
  • 读卡器
  • 系统映像,如果使用官方的镜像烧录工具,就不需要准备

烧录系统

请参考树莓派操作系统镜像烧录方法指南。

或者使用官方的系统映像烧录工具Raspberry Pi Imager, 烧录最新的树莓派操作系统。注意,烧录前配置使用ssh密码登录,并配置连接好wifi。建议不要使用最新的树莓派操作系统,而是选择legacy,debian10。

启动系统后使用如下命令连接系统:

1
2
3
4
# ssh登录系统
ssh pi@192.168.1.232
# 登录后配置启动vnc服务
sudo raspi-config

配置系统

tensorflow环境配置

1
2
3
4
5
python3 -m venv tf2_api_env
source tf2_api_env/bin/activate
pip install -r requirements.txt
# 在树莓派下安装tensorflow,执行如下命令
pip install --no-deps tensorflow_aarch64-2.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

下载TensorFlow Models

TensorFlow Model Garden。TensorFlow 模型花园是一个存储库,为 TensorFlow 用户提供了许多不同的最先进 (SOTA) 模型和建模解决方案的实现。我们旨在展示建模的最佳实践,以便 TensorFlow 用户可以充分利用 TensorFlow 进行研究和产品开发。

1
git clone https://github.com/tensorflow/models

安装TensorFlow Models中的Object Detection 模块

配置目标检测API目录,以便python能找到object detect api。使用pth文件,将object detect模块的路径添加到python模块的搜索路径中。在python安装目录的Lib\site-packages下创建tensorflow.pth文件,在其中添加Object Detection API文件路径:

1
2
3
4
5
# 创建tensorflow.pth文件,输入如下内容
J:\tensorflow\models
J:\tensorflow\models\research
J:\tensorflow\models\research\object_detection
J:\tensorflow\models\research\slim

安装Protobuf,生成python语言的消息协议

安装Protobuf的过程具体参考TensorFlow2.x目标检测API安装配置步骤详细教程 Object Detection API with TensorFlow2.x 。

1
2
cd models/research/
protoc/bin/protoc object_detection/protos/*.proto --python_out=.

修改源

可选。请参考修改树莓派3B+的软件源-Raspbian(stretch)。

配置dhcp

可选。使用命令sudo leafpad /etc/dhcpcd.conf,修改dhcp配置文件,配置使用静态ip。

1
2
3
4
interface wlan0
static ip_address=192.168.3.169/24
static routers=
static domain_name_servers=

扩充分区

可选。请参考解决树莓派磁盘没有占满整个sd卡的方法。

上网配置

可选。

1
2
sudo apt-get install proxychains
sudo leafpad /etc/proxychains.conf

安装pyenv

可选,重点是安装python3.7。在linux操作系统中:

1
2
wget  https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer
bash pyenv-installer

使用命令leafpad .bashrc打开.bashrc文件,在其末尾输入如下内容:

1
2
3
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

安装python 3.7.3:

1
2
3
4
5
6
7
8
9
10
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-test

# pyenv install build failed:Fatal: You must get working getaddrinfo() function
PYTHON_CONFIGURE_OPTS="--disable-ipv6" proxychains pyenv install 3.7.3
pyenv global 3.7.3
pyenv rahash

python -m pip install --upgrade pip

使用含tensorflow环境的Docker映像

可选。使用如下命令在树莓派上安装docker:

1
2
3
4
5
curl -fsSL https://get.docker.com -o get-docker.sh
Sudo sh get-docker.sh
# 将非root用户添加到docker组
sudo usermod -aG docker ${USER}
groups ${USER}

使用如下命令下载含tensorflow环境的docker映像:

1
docker pull armswdev/tensorflow-arm-neoverse:r22.05-tf-2.8.0-eigen

使用如下命令启动docker容器:

1
2
# 注意-v等所有选项必须在image之前
docker run -it --rm --name tf2_api_test -v /home/pi/tensorflow:/home/pi/tensorflow armswdev/tensorflow-arm-neoverse:r22.05-tf-2.8.0-eigen

具体使用过程请参考TensorFlow Serving with Docker 。

模型测试

传输模型

配置环境

可选。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建虚拟环境
python3 -m venv tf2_api_env
source tf2_api_env/bin/activate
# 下载并安装tensorflow 2.2
gdown https://drive.google.com/uc?id=11mujzVaFqa7R1_lB7q0kVPW22Ol51MPg
pip install --proxy=X.X.X.X:X tensorflow-2.2.0-cp37-cp37m-linux_armv7l.whl
# 安装tensorflow_io, object-detection需要
git clone https://github.com/tensorflow/io.git
cd io
git checkout v0.15.0
pip install -e .
# 安装object-detection
# From within TensorFlow/models/research/
cp object_detection/packages/tf2/setup.py .
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple/
# or
pip install object_detection -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 安装opencv
sudo apt-get install libatlas-base-dev
pip install opencv-python

测试模型

1
2
3
4
5
6
7
8
9
10
11
12
# 进入虚拟环境
source tf2_api_env/bin/activate
# 测试图像处理
python image_process_test.py
# 测试视频处理
python video_read_test.py
# 测试摄像头
python camera_open_test.py
# 测试图像目标检测
python object_detection_plot.py
# 测试视频目标检测
python object_detection_camera.py

参考链接

  1. Installing Latest Tensor flow and Keras on RASPBERRY PI,by Abhishek c.
  2. Unable to uninstall programs using sudo pip,by askubuntu.
  3. Installing TensorFlow 2.3.0 for Raspberry Pi3+/4 (Debian Buster),by Cawin Chan.
  4. 树莓派开启wifi热点,by zsssj.
  5. 修改树莓派3B+的软件源-Raspbian(stretch),by codeantenna.
  6. 磁盘分区——主分区、扩展分区、逻辑分区,by ITCHN.
  7. 解决树莓派磁盘没有占满整个sd卡的方法,by ourkix.
  8. centos下python环境搭建,by bigtiger1648.
  9. Linux/树莓派raspbian 32/64查看,by Yew1168.
  10. ModuleNotFoundError: No module named ‘cv2’ (安装cv2),by weixin_39450145.
  11. TensorFlow Serving with Docker ,by tensorflow.
  12. Docker的volumes踩坑,by lyer.

树莓派连接访问方法

发表于 2022-05-11 | 更新于 2022-05-13

给树莓派3B安装好系统后,接下来就是访问树莓派了。主要有三种方法:

鼠标键盘显示器法

USB转串口连接法

请参考树莓派学习之USB转串口

无线网络连接法

如果存在树莓派连接好wifi后无法上网的问题,请参考树莓派 3B+/4B 连接“手机热点“或“WiFi“ 后无法上网(必解)

有线网络直连法

请参考树莓派使用网线直连电脑的方法。

参考文献

  1. 树莓派使用网线直连电脑的方法,by 晒月亮的孩子.
  2. 树莓派3B无显示屏安装系统及远程登录,by 晒月亮的孩子.
  3. 树莓派学习之USB转串口,by jackhuang.
  4. Raspberry Pi (树莓派) 更换源 - stretch 版本,by 佩奇er.
  5. 树莓派安装pyenv,by 穆琪的博客.
  6. 树莓派上的上网,by 子实.
  7. 树莓派 3B+/4B 连接“手机热点“或“WiFi“ 后无法上网(必解),by wjd956574941.

TensorFlow对象检测API测试

发表于 2022-04-30 | 更新于 2022-05-31

最近想研究一下红外图像的对象检测算法,于是先拿TensorFlow对象检测API学习一下。

准备工作

准备工作主要有:

pyenv安装python 3.9.6。

1
2
pyenv install 3.9.6
pyenv global 3.9.6

创建虚拟环境

在windows系统中,使用如下命令:

1
2
3
4
5
6
7
8
9
10
# 使用venv
python -m venv tf2_api_env
.\tf2_api_env\Scripts\activate
deactivate

# 使用virtualenv
pip install virtualenv
pyenv exec virtualenv tf2_api_env
.\tf2_api_env\Scripts\activate
deactivate

在Linux系统中,使用如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用pyenv

# 创建虚拟环境
pyenv virtualenv tf2_api_env
# 激活虚拟环境
pyenv activate tf2_api_env

# 使用venv

# 创建虚拟环境
python3 venv tf2_api_env
# 激活虚拟环境
source tf2_api_env/bin/activate

安装ipython,方便测试

1
2
# 进入虚拟环境
pip install ipython -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装tensorflow

安装非GPU版本tensorflow

1
2
3
# 如果没有独立GPU
pip install tensorflow==2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install protobuf~=3.20.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装GPU版本tensorflow

如果机器上有nvidia的显卡,则安装tensorflow的gpu版本,具体步骤如下:

第一步,安装tensorflow-gpu。

1
2
# 如果有独立GPU
pip install tensorflow-gpu==2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn

第二步,安装CUDA与cuDNN。

  • 安装CUDA11.2。CUDA的版本由tensorflow-gpu的版本确定。具体请参考在 Windows 环境中从源代码构建。本步骤在有nvidia独立显卡的前提下执行。
  • 安装CUDNN v8.1文件。CUDNN的版本由tensorflow-gpu的版本确定。具体请参考在 Windows 环境中从源代码构建。本步骤在有nvidia独立显卡的前提下执行。

第三步,测试tensorflow能否识别使用nvidia gpu。

1
2
3
4
5
6
7
8
9
10
11
12
import tensorflow as tf
# GPU测试
gpu_device_name = tf.test.gpu_device_name()
print(gpu_device_name)

from tensorflow.python.client import device_lib

# 列出所有的本地机器设备
local_device_protos = device_lib.list_local_devices()

# 只打印GPU设备
[print(x) for x in local_device_protos if x.device_type == 'GPU']

tensorflow环境测试

1
2
3
4
5
6
7
# tensorflow环境测试
import tensorflow as tf
print(tf.__version__)
print(tf.__path__)

# 测试tensorflow
python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

安装TensorFlow Models

下载TensorFlow Models

TensorFlow Model Garden。TensorFlow 模型花园是一个存储库,为 TensorFlow 用户提供了许多不同的最先进 (SOTA) 模型和建模解决方案的实现。我们旨在展示建模的最佳实践,以便 TensorFlow 用户可以充分利用 TensorFlow 进行研究和产品开发。

1
git clone https://github.com/tensorflow/models

安装TensorFlow Models中的Object Detection 模块

存在两种安装TensorFlow Models中的Object Detection 模块的方法,如下所示:

  • 配置目标检测API目录,以便python能找到object detect api。使用pth文件,将object detect模块的路径添加到python模块的搜索路径中。在python安装目录的Lib\site-packages下创建tensorflow.pth文件,在其中添加Object Detection API文件路径:
1
2
3
4
5
# 创建tensorflow.pth文件,输入如下内容
J:\tensorflow\models
J:\tensorflow\models\research
J:\tensorflow\models\research\object_detection
J:\tensorflow\models\research\slim
  • 安装目标检测API。两种方法二选一即可。
1
2
3
# From within TensorFlow/models/research/
cp object_detection/packages/tf2/setup.py .
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装Protobuf,生成python语言的消息协议

安装Protobuf的过程具体参考TensorFlow2.x目标检测API安装配置步骤详细教程 Object Detection API with TensorFlow2.x 。

1
2
cd models/research/
protoc/bin/protoc object_detection/protos/*.proto --python_out=.

测试tf object detect api,并安装缺失模块。

1
2
3
4
5
6
7
8
9
# 测试tf object detect api
python object_detection/builders/model_builder_tf2_test.py

# 根据上述测试脚本提示,安装缺失模块
pip install tf-slim
pip install scipy
pip install tensorflow_io
pip install matplotlib
pip install pyyaml

开源数据集

数据集是进行深度学习的前提和基础。

Oxford-IIIT 宠物数据集

我们创建了一个包含 37 个类别的宠物数据集,每个类别大约有 200 张图像。这些图像在比例、姿势和照明方面有很大的变化。所有图像都有相关的品种、头部 ROI 和像素级三元图分割的地面实况注释。

具体下载地址请参考Oxford-IIIT 宠物数据集。

COCO数据集

MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。

COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。目前为止有语义分割的最大数据集,提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。

COCO数据集使用

请参考COCO数据集使用。

COCOAPI

完整的COCO数据集有十几个G大小,我们没有必要全部下载下来,只需要下载自己感兴趣的类别图像即可。这时就需要使用COCOAPI。

COCO API 协助加载、解析和可视化 COCO 中的注释。API 支持多种注释格式(请参见数据格式页面)。

  • 下载cocoapi
1
git clone https://github.com/cocodataset/cocoapi.git
  • pythonapi安装

进入COCOAPI的PythonAPI文件夹,输入如下命令:

1
python setup.py build_ext install

安装错误解决方法请参考错误:cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”。

模型训练

准备数据集

注解数据集

安装LabelImg工具

LabelImg 是一个图形图像标注工具。它是用 Python 编写的,并使用 Qt 作为其图形界面。

注释以 PASCAL VOC 格式保存为 XML 文件,这是ImageNet使用的格式。此外,它还支持 YOLO 和 CreateML 格式。

可以从LabelImg的官方存储库labelImg中下载最新的LabelImg工具。

使用K折交叉验证分区数据集

可使用python脚本,请参考partition_dataset.py。

创建标签映射

TensorFlow 需要一个标签映射,即将每个使用的标签映射到一个整数值。此标签图用于训练和检测过程。

下面我们展示一个示例标签映射(例如label_map.pbtxt),假设我们的数据集包含 2 个标签,dogs并且cats:

1
2
3
4
5
6
7
8
9
item {
id: 1
name: 'cat'
}

item {
id: 2
name: 'dog'
}

标签地图文件有扩展.pbtxt名,应该放在training_demo/annotations文件夹内。

创建TensorFlow Records文件

TFRecord 是Google官方推荐的一种数据格式,是Google专门为TensorFlow设计的一种数据格式。通过将训练数据或测试数据打包成TFRecord文件,就可以配合TF中相关的DataLoader / Transformer等API实现数据的加载和处理,便于高效地训练和评估模型。

实际上,TFRecord是一种二进制文件,其能更好的利用内存,其内部包含了多个tf.train.Example, 而Example是protocol buffer(protobuf) 数据标准的实现,在一个Example消息体中包含了一系列的tf.train.feature属性,而 每一个feature 是一个key-value的键值对,其中,key 是string类型,而value 的取值有三种:

  • bytes_list: 可以存储string 和byte两种数据类型。
  • float_list: 可以存储float(float32)与double(float64) 两种数据类型 。
  • int64_list: 可以存储:bool, enum, int32, uint32, int64, uint64 。

重用预训练模型

下载预训练模型

从此处TensorFlow 2 Detection Model Zoo选择预训练模型下载。此处下载SSD ResNet50 V1 FPN 640x640 模型。

重新配置训练管线

修改模型文件夹下的pipeline.config文件,用于训练自己的模型。以SSD ResNet50 V1 FPN 640x640模型的pipeline.config文件为例,具体些修改内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
model {
ssd {
num_classes: 1 // 此时修改模型输出类别数量
image_resizer {
fixed_shape_resizer {
height: 640
width: 640
}
}
...
}
}
train_config {
batch_size: 4 // 根据GPU显卡或内存大小设置合适的批处理大小
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
random_crop_image {
min_object_covered: 0.0
min_aspect_ratio: 0.75
max_aspect_ratio: 3.0
min_area: 0.75
max_area: 1.0
overlap_thresh: 0.0
}
}
...
fine_tune_checkpoint: "J:/tensorflow/workspace/training_demo/pre-trained-models/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8/checkpoint/ckpt-0" // 原模型的checkpoint
num_steps: 25000
startup_delay_steps: 0.0
replicas_to_aggregate: 8
max_number_of_boxes: 100
unpad_groundtruth_tensors: false
fine_tune_checkpoint_type: "detection" // 为目标检测任务修改此处
use_bfloat16: false
fine_tune_checkpoint_version: V2
}
train_input_reader {
label_map_path: "J:/tensorflow/workspace/training_demo/annotations/label_map.pbtxt" // 标签映射文件路径
tf_record_input_reader {
input_path: "J:/tensorflow/workspace/training_demo/annotations/train.record" // 用于训练的tfrecord文件路径
}
}
eval_config {
metrics_set: "coco_detection_metrics"
use_moving_averages: false
}
eval_input_reader {
label_map_path: "J:/tensorflow/workspace/training_demo/annotations/label_map.pbtxt" // 标签映射文件路径
shuffle: false
num_epochs: 1
tf_record_input_reader {
input_path: "J:/tensorflow/workspace/training_demo/annotations/val.record" // 用于验证的tfrecord文件路径
}
}

训练新模型

准备训练模型

将TensorFlow/models/research/object_detection/model_main_tf2.py文件粘贴到training_demo文件夹。该文件是训练和评估新模型的入口文件。

训练模型

使用如下命令开始训练新模型:

1
2
cd J:\tensorflow\workspace\training_demo
python model_main_tf2.py --model_dir J:\tensorflow\workspace\training_demo\models\my_ssd_resnet50_v1_fpn --pipeline_config_path J:\tensorflow\workspace\training_demo\models\my_ssd_resnet50_v1_fpn\pipeline.config

注意:此处参数–model_dir是模型输出目录,除了存在pipeline.config外,应该是空的。*否则将发生错误Pretrained Models number of classes doesnt match own dataset number of classes : Cannot assign to variable。

评估模型

使用如下命令评估训练好的模型:

1
2
cd J:\tensorflow\workspace\training_demo
python model_main_tf2.py --model_dir J:\tensorflow\workspace\training_demo\models\my_ssd_resnet50_v1_fpn --pipeline_config_path J:\tensorflow\workspace\training_demo\models\my_ssd_resnet50_v1_fpn\pipeline.config --checkpoint_dir J:\tensorflow\workspace\training_demo\models\my_ssd_resnet50_v1_fpn

监控训练作业进度

使用如下命令监控模型训练进度:

1
2
cd J:\tensorflow\workspace\training_demo
tensorboard --logdir=models/my_ssd_resnet50_v1_fpn

上面的命令将启动一个新的 TensorBoard 服务器,它(默认)监听你机器的 6006 端口。完成此操作后,转到您的浏览器并http://localhost:6006/在地址栏中输入,然后您应该会看到一个仪表板(如果您的模型刚刚开始训练,可能会显示较少)。

导出训练模型

训练工作完成后,使用如下步骤导出模型:

(1)复制TensorFlow/models/research/object_detection/exporter_main_v2.py脚本并将其直接粘贴到您的training_demo文件夹中。

(2)运行如下命令:

1
2
cd J:\tensorflow\workspace\training_demo
python exporter_main_v2.py --input_type image_tensor --pipeline_config_path .\models\my_ssd_resnet50_v1_fpn\pipeline.config --trained_checkpoint_dir .\models\my_ssd_resnet50_v1_fpn --output_directory .\exported-models\my_ssd_resnet50_v1_fpn

评价指标

对于一个目标检测模型的好坏,总的来说可以从以下三个方面来评估:

  • 分类的精度如何。一般可以用准确度(Accuracy),精度(Precision),召回率(Recall Rate), PR 曲线,AP,mAP等
  • 定位的精度如何。比如 IoU
  • 运行的速度如何。比如 fps,一秒处理几张图。

具体内容请参考目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI)。

参考文献

  1. TensorFlow Object Detection API,by tensorflow.
  2. TensorFlow2.x GPU版安装与CUDA版本选择指南,by Color_Space.
  3. 在 Windows 环境中从源代码构建,by tensorflow.
  4. COCO2014/2017数据集,by THE@JOKER.
  5. TensorFlow2.x目标检测API测试代码使用演示,by Color Space.
  6. TensorFlow2.x目标检测API安装配置步骤详细教程 Object Detection API with TensorFlow2.x ,by Color_Space.
  7. python安装第三方包的安装路径,dist-packages和site-packages区别,by 陈 超.
  8. 用 .pth 文件附加 Python 模块搜索路径,by 隔叶黄莺.
  9. Google Protobuf简明教程,by geekpy.
  10. Tensorflow-GPU: How to Install Tensorflow with NVIDIA CUDA,cuDNN and GPU support on Windows,by Ilekura Idowu.
  11. Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略,by 一个处女座的程序猿.
  12. COCO数据集的标注格式,by Gemfield.
  13. COCO数据集标注详解,by 2044914130.
  14. RLE格式分割标注文件表示,by AIHGF.
  15. TensorFlow 2 Object Detection API tutorial,by github.
  16. TFRecord 简介,by xmfbit.
  17. Using regular expression flags in Python,by John Lekberg.
  18. 错误:cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”,by 点亮~黑夜.
  19. COCO数据集使用,by Meumax-GDUT.
  20. 目标检测数据集PASCAL VOC简介,by arleyzhang.
  21. Building a Toy Detector with Tensorflow Object Detection API,by Priya Dwivedi.
  22. 【Tensorflow】tf.app.run()与命令行参数解析,by TwT520Ly.
  23. 关于TFRecords和tf.Example的使用,by Zessay.
  24. Pandas教程 | 超好用的Groupby用法详解,by 易执.
  25. Pandas组合操作,by lysh1987.
  26. TensorFlow 数据输入格式之 TFRecord,by 逑识.
  27. 使用 Tensorflow Object Detection API 训练自己的模型,by 菁菁者莪.
  28. tensorflow出现显存不足的提示,by 楠仔码头.
  29. 使用COCOAPI操作COCO数据集 遇到的问题 TypeError: ‘numpy.float64’ object cannot be interpreted,by TheOldManAndTheSea.
  30. Pretrained Models number of classes doesnt match own dataset number of classes : Cannot assign to variable,by tensorflow.
  31. Some Python objects were not bound to checkpointed values,by stackoverflow.
  32. 目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI),by kuweicai.
  33. tensorflow2转tflite提示OP不支持的解决方案,by nudt_qxx.
  34. ModuleNotFoundError: No module named ‘gin’,by stackoverflow.
上一页1…171819…54下一页

Jack Huang

537 日志
69 标签
© 2026 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse