运行目标检测样例
yolov3模型对输入图片进行预测推理,并将结果打印到输出图片上。本章节以在“/home”目录下获取sample仓代码为例。
样例输入:原始图片jpg文件。
样例输出:带推理结果的jpg文件。
获取样例
操作步骤如下:
- 以root用户登录服务器。
- 选择相应的安装包命令安装依赖(以CentOS和Ubuntu系统为例)。
- Ubuntu执行如下命令安装。
apt-get install git
- CentOS执行如下命令安装。
yum install git
- Ubuntu执行如下命令安装。
- 在服务器任意目录下(如“/home”)执行如下命令获取sample仓代码。
git clone https://gitee.com/ascend/samples.git
如果返回类似以下回显信息:
fatal: unable to access 'https://gitee.com/ascend/samples.git/': server certificate verification failed. CAfile: none CRLfile: none
则执行git config --global http.sslVerify "false"命令关闭证书检验,再执行git clone https://gitee.com/ascend/samples.git命令获取sample仓代码。
准备模型
- 执行如下命令安装Python依赖。
pip3 install attrs psutil
- 在sample仓代码所在目录下,执行如下命令进入“样例目录”。
cd samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture
下文中的“样例目录”均指“samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture”目录
- 进入“样例目录/model”目录,获取yolov3原始模型。
cd model wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/Yolov3/yolov3.caffemodel --no-check-certificate wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/Yolov3/yolov3.prototxt --no-check-certificate wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/YOLOV3_coco_detection_picture/aipp_nv12.cfg --no-check-certificate
- 配置环境变量。
source /usr/local/Ascend/ascend-toolkit/set_env.sh
- 模型转换。
执行npu-smi info命令查看芯片名称,如下图所示,则该设备芯片名为Ascend310P3。
在“样例目录/model”目录下,执行如下命令转换模型。其中“--soc_version”参数值(如下加粗内容所示)根据查询的实际芯片名称(以“Ascend310P3”为例)填写:
atc --model=yolov3.prototxt --weight=yolov3.caffemodel --framework=0 --output=yolov3 --soc_version=Ascend310P3 --insert_op_conf=aipp_nv12.cfg
- --model:原始模型文件路径。
- --weight:权重文件路径。
- --framework:原始框架类型。0:表示Caffe;1:表示MindSpore;3:表示TensorFlow;5:表示ONNX。
- --output:生成的yolov3.om文件存放在“样例目录/model”目录下。建议使用命令中的默认设置。
- --soc_version:昇腾AI处理器的版本。
- --insert_op_conf:cfg文件路径。
安装依赖
请用户参见安装opencv安装。
部署和运行样例
- 在“样例目录/src”目录下,执行如下命令打开CMakeLists.txt文件。
vi CMakeLists.txt
在“include_directories”参数中加入头文件路径,在“link_directories”参数中加入库文件路径(以“/usr/local/lib”为例,请用户以实际路径替换),如下加粗内容所示:
# Header path include_directories( $ENV{INSTALL_DIR}/runtime/include/ ../inc/ /usr/local/include/opencv4 ) if(target STREQUAL "Simulator_Function") add_compile_options(-DFUNC_SIM) endif() # add host lib path link_directories( $ENV{INSTALL_DIR}/runtime/lib64/stub /usr/local/lib )
- 在“样例目录/src”目录下,执行如下命令,修改“object_detect.cpp”文件。
vi object_detect.cpp
将参数“CV_LOAD_IMAGE_UNCHANGED”移除或注释,如下加粗内容所示(修改位置可执行:333命令查找):
void ObjectDetect::DrawBoundBoxToImage(vector<BBox>& detectionResults, const string& origImagePath) { cv::Mat image = cv::imread(origImagePath); // , CV_LOAD_IMAGE_UNCHANGED for (int i = 0; i < detectionResults.size(); ++i) { cv::Point p1, p2; p1.x = detectionResults[i].rect.ltX; p1.y = detectionResults[i].rect.ltY; p2.x = detectionResults[i].rect.rbX; p2.y = detectionResults[i].rect.rbY; cv::rectangle(image, p1, p2, g_colors[i % g_colors.size()], g_lineSolid); cv::putText(image, detectionResults[i].text, cv::Point(p1.x, p1.y + g_labelOffset), cv::FONT_HERSHEY_COMPLEX, g_fountScale, g_fontColor); } string folderPath = "./output"; if (NULL == opendir(folderPath.c_str())) { mkdir(folderPath.c_str(), 0775); } int pos = origImagePath.find_last_of("/"); string filename(origImagePath.substr(pos + 1)); stringstream sstream; sstream.str(""); sstream << "./output/out_" << filename; cv::imwrite(sstream.str(), image); }
- 配置环境变量。
- 以运行用户在任意目录下执行vi ~/.bashrc命令,打开.bashrc文件,在文件最后一行后面添加如下内容。
以CANN的默认安装路径“/usr/local/Ascend”为例,用户请根据CANN的实际安装路径配置。
export CPU_ARCH=`arch` export THIRDPART_PATH=/usr/local/Ascend/thirdpart/${CPU_ARCH} #代码编译时链接samples所依赖的相关库文件 export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest
- 执行:wq!命令保存文件并退出。
- 执行source ~/.bashrc命令使其立即生效。
- 以运行用户在任意目录下执行vi ~/.bashrc命令,打开.bashrc文件,在文件最后一行后面添加如下内容。
- 在“样例目录”下创建样例相关依赖文件夹。
mkdir -p ${THIRDPART_PATH}
- 拷贝common文件到样例相关依赖路径中。
# ${samples}表示样例所在目录(如“/home”) cp -r ${samples}/samples/common ${THIRDPART_PATH} # 命令示例 cp -r /home/samples/common ${THIRDPART_PATH}
- 在“样例目录/scripts”目录下,执行以下命令,执行编译脚本,开始样例编译。
bash sample_build.sh
- 在“样例目录/scripts”目录下,执行运行脚本,开始运行样例。
bash sample_run.sh
- 运行完成后,会在“样例目录/out/output”目录下生成推理后的图片,用户可将图片下载至本地,显示对比结果如下所示。
父主题: 运行样例