hermosayhl / CNN

C++ inplementation of CNN(Cnnvolutional Neural Network) for image classification
82 stars 30 forks source link

简介

2022年初,写的一个简单的 CNN 卷积神经网络训练的 demo,当前版本只是为了验证神经网络前向和反向传播,加深个人理解,暂不涉及高性能优化及模型部署等,目前也只写了 CPU 上的简单实现,后续有计划推出 CPU 优化版本以及 GPU 版本(基于 CUDA)。

知乎博客:https://zhuanlan.zhihu.com/p/468100301

image-20230208205425138

主要实现了一些基础层

还有训练流程

还有张量 Tensor 结构的定义、借助 gradCAM 原理可视化等。

环境

【注意】:

如果是 MSVC 做编译器,可以编译一个,也可以直接下载官方编译好的 OpenCV。如果在 Windows 上选择 gcc 做编译器,一般从头编译一个,下面是一个简单的编译流程,关闭了诸多选项(如果 ffmpeg 下载不了,也可以把 WITH_FFMPEG 置为 OFF)。

mkdir build
cd build
# 编译选项
cmake .. -G "MinGW Makefiles"  -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=./install -D ENABLE_FAST_MATH=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=OFF -D BUILD_opencv_python_tests=OFF -D BUILD_opencv_python_bindings_generator=OFF -D BUILD_JAVA=OFF -D BUILD_opencv_java_bindings_generator=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_opencv_world=OFF -D OPENCV_ENABLE_NONFREE=OFF -D OPENCV_GENERATE_SETUPVARS=OFF -D WITH_OPENCL_D3D11_NV=OFF -D WITH_MSMF=OFF -D WITH_CUDA=OFF -D WITH_FFMPEG=OFF
# 构建
mingw32-make -j4
mingw32-make install
# 把 build/install/x64/bin 路径添加到环境变量中, 确保能正确链接

Start

Cmake

进入 cpu 目录,创建构建目录、生成目录

mkdir build_cmake
mkdir bin
cd build

执行 CMake,生成 Makefiles

cmake .. -G "MinGW Makefiles"

添加 -G "MinGW Makefiles" 是因为我电脑上有 MSVC,会自动优先使用 MSVC,但我更喜欢用 GCC,因此需要加这一条,如果在 linux 上,可以不加这条。

编译构建

# Windows + GCC
mingw32-make -j4
# Linux + GCC
make -j4

我执行的是上一条命令,在 bin 目录下即可看到生成的三个文件

image-20230208212620325

点击 train.exe 即可训练模型

image-20230208213513653

点击 inference.exe ,加载训练好的模型,并对单张图像做推理

image-20230208213627060

点击 gradCAM.exe,尝试 CNN 可视化效果

image-20230208213713076

Xmake

Xmake 是最近接触的一款很方便的构建工具,构建速度也很快,十分模块化,推荐使用。

先创建 build 目录

mkdir build

指定 mingw 路径(注意修改),很容易检测成 Anaconda 的 mingw

xmake g --mingw=F:\liuchang\environments\TDM-GCC

使用 mingw 工具链

xmake f -p mingw

构建所有的目标,则

xmake build

构建其中特定的一个目标 cnn_train

xmake build cnn_train

运行目标 cnn_train

xmake run cnn_train

重新编译

xmake -r

【MSVC】如果电脑有 visual studio 环境,直接 xmake,不指定 mingw,修改完 opencv 路径之后,紧接着 build、run。

【GCC】如果是在 Linux 上,一般有 gcc-10 以上,也是直接 xmake,不用指定,同 MSVC