mirror of
https://github.com/Ascend/ascend_community_projects.git
synced 2025-12-24 10:40:55 +08:00
update
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 行李箱安检
|
||||
## 1 介绍
|
||||
|
||||
本项目利用 YOLOX 目标检测框架,对安检X光图象中的不同类目标进行检测,将检测得到的不同类的目标用不同颜色的矩形框标记。输入一幅图像,可以检测得到图像中大部分类别目标的位置。本方案使用在 SDANet and PIDray dataset 数据集上训练得到的 YOLOX 模型进行目标检测,数据集中共包含 12 个目标类,可以对警棍、老虎钳、榔头、充电宝、剪刀、扳手、枪支、子弹、喷罐、手铐、小刀、打火机以上目标进行检测。
|
||||
本项目利用 YOLOX 目标检测框架,对安检X光图像中的不同类目标进行检测,将检测得到的不同类的目标用不同颜色的矩形框标记。输入一幅图像,可以检测得到图像中大部分类别目标的位置。本方案使用在 SDANet and PIDray dataset 数据集上训练得到的 YOLOX 模型进行目标检测,数据集中共包含 12 个目标类,可以对警棍、老虎钳、榔头、充电宝、剪刀、扳手、枪支、子弹、喷罐、手铐、小刀、打火机以上目标进行检测。
|
||||
|
||||
### 1.1 支持的产品
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
### 1.4 代码目录结构与说明
|
||||
|
||||
本工程名称为 Luggage-checker,工程目录如下所示:
|
||||
本工程名称为 Luggage-Checker,工程目录如下所示:
|
||||
```
|
||||
.
|
||||
├── build.sh
|
||||
@@ -88,7 +88,7 @@ YOLOX 的后处理插件接收模型推理插件输出的特征图,该特征
|
||||
|
||||
该项目适用于x光安检图象的监测,对单个清晰目标图像、高分辨率图像、大量目标图像、存在部分遮挡图象有较好的检测效果,对于存在大量遮挡的图象有轻微漏检现象,只支持jpg格式图象。
|
||||
|
||||
但是在以下几种情况下,检测效果不够理想:
|
||||
在以下几种情况下,检测效果不够理想:
|
||||
1.在对某些尖锐物品,如剪刀和刀具,形状重合度较高,容易出现重复鉴别的情况,但是不影响实际应用时对危险物品的判别。
|
||||
2.由于训练集中包含的隐蔽性较高的样例以及角度特殊的样例图片较少,对于此类物品进行辨识置信度较低。
|
||||
|
||||
@@ -135,11 +135,11 @@ ascend-toolkit-path: CANN 安装路径
|
||||
|
||||
1)加预处理
|
||||
```
|
||||
atc --model=best.onnx --framework=5 --output=./yolox_pre_post --output_type=FP32 --soc_version=Ascend310 --input_shape="images:1, 3, 640, 640" --insert_op_conf=./python/models/aipp-configs/yolox_bgr.cfg
|
||||
atc --model=best.onnx --framework=5 --output=./yolox_pre_post --output_type=FP32 --soc_version=Ascend310 --input_shape="images:1, 3, 640, 640" --insert_op_conf=./aipp-configs/yolox_bgr.cfg
|
||||
```
|
||||
2)不加预处理
|
||||
```
|
||||
atc --model=best.onnx --framework=5 --output=./yolox_pre_post --output_type=FP32 --soc_version=Ascend310 --input_shape="images:1, 3, 640, 640"
|
||||
atc --model=best.onnx --framework=5 --output=./yolox_nopre_post --output_type=FP32 --soc_version=Ascend310 --input_shape="images:1, 3, 640, 640"
|
||||
```
|
||||
注:两种方法区在于对之后的图片是否进行缩放,会导致验证精度不同。
|
||||
|
||||
@@ -176,8 +176,25 @@ python3 nopre_post.py
|
||||
|
||||
## 5. 精度测试
|
||||
|
||||
1. 下载COCO VAL 2017[验证数据集]和[标注文件](https://github.com/bywang2018/security-dataset),并保存在项目目录``python/test/data``下,此文件夹下的组织形式应如下图所示:
|
||||
|
||||
1. 下载COCO VAL 2017[验证数据集和标注文件](https://github.com/bywang2018/security-dataset),此数据集文件夹组织形式如下图所示
|
||||
|
||||
```
|
||||
pidray
|
||||
├── annotations
|
||||
│ ├── xray_test_easy.json
|
||||
│ ├── xray_test_hard.json
|
||||
│ ├── xray_test_hidden.json
|
||||
│ └── xray_train.json
|
||||
├── easy
|
||||
├── hard
|
||||
├── hidden
|
||||
└── train
|
||||
```
|
||||
其中,easy,hard,hidden,train中存放的都是png格式的图片
|
||||
|
||||
将hard文件夹和annotations中的xray_test_hard.json文件保存在项目目录``python/test/data``下,其中将hard文件夹名改成val2017,xray_test_hard.json改成instances_val2017.json此文件夹下的组织形式应如下图所示:
|
||||
|
||||
|
||||
```
|
||||
├── annotations
|
||||
│ └── instances_val2017.json
|
||||
@@ -197,7 +214,7 @@ python3 parse_coco.py --json_file=data/annotations/instances_val2017.json --img_
|
||||
3. 进入``python/Main``路径,运行命令:
|
||||
```
|
||||
python3 eval_pre_post.py
|
||||
python3 noeval_pre_post.py
|
||||
python3 eval_nopre_post.py
|
||||
```
|
||||
若运行成功,会在``python/test`` 路径下生成 test_pre_post(test_nopre_post) 文件夹,该目录下包含有每张图像上的检测结果的 txt 文件。
|
||||
|
||||
@@ -212,6 +229,7 @@ python3 map_calculate.py --npu_txt_path="./test_nopre_post"
|
||||
<img src="./images/result_map.png">
|
||||
<br>
|
||||
</center>
|
||||
挑选的是hard中的图片验证精度,精度为31.68%与源项目精度31.82%误差为0.14%。精度对齐。
|
||||
|
||||
注:在pipeline中加图像预处理后验证结果与原框不同的原因为:YOLOX的图像预处理中,Resize方式为按长边缩放,而Mindx SDK默认使用dvpp的图像解码方式,没有按长边缩放的方法,因此本项目将"resizeType"属性设置为 "Resizer_KeepAspectRatio_Fit",这样会导致精度下降。
|
||||
我们同时给出了一套不加图像预处理的推理流程,见上文,不加预处理流程精度结果与源项目可以保持一致。
|
||||
|
||||
@@ -16,11 +16,10 @@
|
||||
set -e
|
||||
CURRENT_PATH="$( cd "$(dirname "$0")" ;pwd -P )"
|
||||
|
||||
|
||||
POSTPROCESS_FOLDER=(
|
||||
/postprocess/
|
||||
)
|
||||
cp postprocess/build/libYoloxPostProcess.so ${MX_SDK_HOME}/lib/modelpostprocessors/
|
||||
chmod 640 postprocess/build/libYoloxPostProcess.so
|
||||
chmod 640 python/models/yolox_eval.cfg
|
||||
chmod 640 python/models/coco.names
|
||||
|
||||
@@ -31,10 +30,12 @@ for path in ${POSTPROCESS_FOLDER[@]};do
|
||||
echo -e "Failed to build postprocess plugin ${path}"
|
||||
FLAG=1
|
||||
}
|
||||
cp build/libYoloxPostProcess.so ${MX_SDK_HOME}/lib/modelpostprocessors/
|
||||
chmod 640 build/libYoloxPostProcess.so
|
||||
done
|
||||
|
||||
|
||||
if [ ${FLAG} -eq 1 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef YOLOX_YOLOXPOSTPROCESS_H
|
||||
#define YOLOX_YOLOXPOSTPROCESS_H
|
||||
#include "MxBase/PostProcessBases/ObjectPostProcessBase.h"
|
||||
namespace default_values {
|
||||
namespace DefaultValues {
|
||||
// 回归框坐标和预测得分
|
||||
const float LOGIT_AND_SCORE = 5;
|
||||
const float DEFAULT_OBJECTNESS_THRESH = 0.3;
|
||||
@@ -33,7 +33,7 @@ namespace default_values {
|
||||
};
|
||||
}
|
||||
// YOLOX继承ObjectPostProcessBase
|
||||
namespace mx_base {
|
||||
namespace MxBase {
|
||||
class YoloxPostProcess : public MxBase::ObjectPostProcessBase {
|
||||
public:
|
||||
YoloxPostProcess() = default;
|
||||
|
||||
Reference in New Issue
Block a user