第一章式(1-16)应为:
页21,行6:
“用卷积和下采样的组合来取代转置卷积” ->
“用卷积和上采样的组合来取代转置卷积”, 感谢读者YuDongSir 的勘误
页28:
“因此,下采样层(平均地化层)” ->
“因此,下采样层(平均池化层)”,感谢读者 silencht 的勘误
页64,表2-7:
data = np.ones和data = np.eye ->
data = torch.ones和data = torch.eye, 感谢读者YuDongSir 的勘误
页107, 代码块中:
0,1,2,3号特征图应为原分辨率的1/32, 1/16, 1/8, 1/4,因为conv1的stride等于2,感谢读者YuDongSir 的勘误
页172,173命令改动:
因为mmdetection改变模型命名规则,模型下载应为:
mim download mmdet --config yolov3_mobilenetv2_8xb24-320-300e_coco --dest .
模型测试命令应为:
python demo/image_demo.py demo/demo.jpg yolov3_mobilenetv2_8xb24-320-300e_coco.py --weights yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth --out-dir output --device cuda
如果.pth文件找不到,则换成完整路径,感谢读者YuDongSir 的勘误
本代码库中的代码将在本书上市后继续更新和改进,包括适配更新的版本,修改bug,对书中的错漏之处进行勘误,甚至根据读者要求添加新功能。代码库中的代码可以直接训练和调试,代码亦可以用于商业用途。
gitee代码库(暂不可用):https://gitee.com/vision-adas/code
代码库的文件内容如下:
- chapter2:PyTorch示例代码,包括一个用于示例的Jupyter Notebook和一个基本的图像分类示例
- chapter4: Yolo目标检测和TorchVision目标检测库的训练代码
- chapter5: 语义分割的训练代码
- chapter6: 无监督单目深度估计的训练代码
- chapter7: 目标检测和语义分割多任务网络的训练代码
- chapter8: 模型导出脚本以及LibTorch、TensorRT的模型部署C++代码
- configs: 一些项目配置文件
- detection_torchvision: 用于TorchVision目标检测模型训练的复制代码,来自TorchVision官方代码库的Reference文件。
- lib: 一些公用的类
- requirements.txt: 用于配置CPU版PyTorch的配置文件
- requirements_gpu.txt: 用于配置GPU版PyTorch的配置文件
配置的环境为 Python3.8+Pytorch2.0.0+TorchVision0.15.0+CPU
- 下载安装Anaconda后,执行以下代码新建一个虚拟环境:
conda create -n book python=3.8
- 环境建立成功后激活环境:
conda acrtivate book
- 安装依赖项
pip install -r requirements.txt
- 检查是否成功
cd chapter2
python train.py
Onedrive下载链接:https://1drv.ms/u/s!AiFavgbAhwpFb4H9uUxemMHQlbg
下载后得到一个munich_dataset.zip的1.7GB大小文件,将文件解压至data文件夹:
unzip munich_dataset.zip -d data
文件夹结构为
-
data
- camera
- detections
- seg
- seg_simple
在代码库的根目录下,执行以下命令即可开始训练Yolo:
PYTHONPATH=. python chapter4/train_yolo.py
执行以下命令即可开始训练TorchVision提供的FasterRCNN:
PYTHONPATH=. python chapter4/det_demo_torchvision.py
在代码库的根目录下,执行以下命令即可开始训练语义分割模型:
PYTHONPATH=. python chapter5/train_seg.py
在代码库的根目录下,执行以下命令即可开始无监督单目深度模型的训练:
PYTHONPATH=. python chapter6/train_depth.py
在代码库的根目录下,执行以下命令即可开始训练Yolo和语义分割多任务模型:
PYTHONPATH=. python chapter7/train_multitask.py
部署模型之前,请先完成第七章多任务网络模型的训练,得到训练好的pth模型文件。
打开chapter8/deploy_multitask.py文件,进行以下设置:
- 将第七章的训练文件夹路径设置为model_folder
- 默认使用最后一个epoch的模型,也就是50.pth,若epoch数不为50,则将50.pth改为最后一个epoch的模型文件名。
- 设置训练模型的设备,"cpu"或"cuda:0"
- 设置输出文件的保存路径
执行以下命令进行模型导出:
PYTHONPATH=. python chapter8/deploy_multitask.py
从 download.pytorch.org/libtorch/cpu/ 页面下载LibTorch 2.0.1 的CPU版本,解压至 chapter8/infer_torch 文件夹
按照顺序执行以下命令编译执行LibTorch模型
cd chapter8
docker build -t vision .
cd ..
docker run -v $(pwd):/workspace -w /workspace -it vision bash
cd chapter8/infer_torch/
mkdir build
cd build
make
cd ..
mkdir seg_pred
./build/torch_inference
如果因为网络问题导致docker镜像编译时间过长,请尝试从百度盘下载docker镜像并离线加载:
链接:https://pan.baidu.com/s/1oygq5e8BQ3M_o_ErOoWzpA?pwd=nit3 提取码:nit3
cd chapter8
docker load -i vision.tar
cd ..
docker run -v $(pwd):/workspace -w /workspace -it vision bash
cd chapter8/infer_torch/
mkdir build
cd build
make
cd ..
mkdir seg_pred
./build/torch_inference
执行完成后seg_pred文件夹中应出现推理输出的语义分割图。
由于本书示例的Docker镜像是TensorRT的镜像,因此无需安装TensorRT,可以直接按顺序执行以下命令:
docker run --gpus all -v $(pwd):/workspace -w /workspace -it vision bash
cd chapter8/infer_trt/
mkdir build
cd build
make
cd ..
mkdir seg_pred
./build/trt_inference