-->

高空安全带算法实现

1. 项目背景

由于项目中用到安全带识别算法,所以进行了比较粗略的安全带识别算法的实现,经过我们的资料查阅发现安全帽的识别算法比较普遍,但是安全带的算法比较少,但也不能说没有,几篇罢了,现将实现过程记录如下;

需求:每次传入算法一张图片(或者三维数组),经过算法处理后传出一张图片(或者三维数组)

2. 初次实现(版本1.0)

源码来源:https://github.com/ymzis69/gddw_track3

初始文件来源(冠军初始数据):https://aistudio.baidu.com/aistudio/datasetdetail/93034

DetectoRS的COCO预训练模型来源:https://download.openmmlab.com/mmdetection/v2.0/detectors/detectors_htc_r101_20e_coco/detectors_htc_r101_20e_coco_20210419_203638-348d533b.pth

权重文件:https://pan.baidu.com/s/1atTqjpRrFKhRGoVDP5RLHg
(密码:isdo)

数据的存放格式如下:
image

最后环境就只能靠自己去安装了,个人建议电脑内存不高不要玩,因为我记得光基础数据加上权重就近15g

对了,有一点要注意:
init() got an unexpected keyword argument 'label_smoothing'

这个报错原因是由于你自己安装了mmdet,而没有使用项目自带的mmdet包,我是直接将mmdet文件夹改为了mm,但是好像没有太大用处,后来是大佬将没用的代码都注释掉了,仅留了有用的部分

运行的过程按照githut上的运行就可以,当然会报很多错,我记得最后我的报错是cuda(显卡)不能使用,最后用的CPU实现,这个环境中的CPU与gpu的问题最后是大佬解决的,所以。。。。。。。。我就不解释了
CUDA错误:
image

最后代码:
链接:https://pan.baidu.com/s/1GDteh44MbR86HDFmRNc0xA?pwd=8q28
提取码:8q28

使用说明:修改3test_b.json(这个文件为参照github原文,运行test.sh或者train.sh生成)
image

最后效果:3test_b.json里为文件名,图片的宽与高等属性生成到tool文件下show_dir下图片
image

效果图:

image

image

参考文章:https://github.com/ymzis69/gddw_track3

结论:项目太大,底层源码不好理解,可以用于生成效果图,不建议加入项目,因为耗时长,接入复杂

3. 进阶实现(版本2.0)

进阶过程,仔细研究代码,不断挖掘深层代码(挖了7-8层才找到),解析每一步要做的事情

解读(原文链接:https://github.com/ymzis69/gddw_track3):

整体分为两个模块:训练(train.sh)与推理

训练模块(生成算法模型):

image

1、激活环境:在conda环境里安装包,安装过程不在赘述,不过注意一下与torch相关的包要求版本一致

2、赋权:这个直接用命令,如果不行,就把所有权限给他

3、运行训练脚本(train.sh)进行训练:可以直接运行bash train.sh命令,也可以在命令行里直接运行train.sh内代码,另外由于路径问题,可以都放进同一个包里,然后改下路径

image
错误原因:1、csv文件中没有你最新上传的图片,可以将csv中的文件改为自己上传的图片 2、dist_train.sh路径存在问题,应该改为./dist_train.sh

image
错误原因:1、dist_train.sh文件中的train.py应改为相对于当前文件的相对路径 2、好像是torch版本还是分布式问题,反正需要项目中nn.parallel.DistributedDataParallel()最后传个true,或者去环境的包里加一个true,之前用过一次,后来又出了,但是还好对算法影响不大
参考文章:
https://blog.csdn.net/weixin_44790486/article/details/110290650

总之bash train.sh中生成epoch_12_dist.pth模型就够用了

推理模块(根据模型生成csv,csv转json,根据json在图片上运行算法):

image

环境上述已经激活,就无需再次激活,可以直接运行test.sh,如果报权限错误就可以再运行他的赋权命令

这里test.sh一运行就会报没有mmdet的包,但实际上mmdet使用的是算法项目中的mmdet文件,不理解为什么不起作用,不过影响不大。。。。。因为我可以将mmdet内所需的方法直接复制进去,或者直接将mmdet内文件复制进code下

解决:直接在命令行运行test.sh内代码(主要是以tools/test.py为主要运行文件):

# 将测试图片的csv转换成json标注格式
python data_process/testb2json.py

# 在第一块显卡进行推理
CUDA_VISIBLE_DEVICES=0 python ./tools/test.py ./configs/detectoRS_r101.py ../user_data/model_data/epoch_12_dist.pth --format-only

1、运行testb2json.py,将csv转为json格式
image

这个报错肯定就是读取不到图片了,我查了一下,我这是有个3_images文件夹,然后文件夹下有1文件夹和1.jpg,我怀疑是有文件夹的原因,或者冲突,换成3_images/1就没问题了

posted @ 2023-04-12 12:18  ꧁ʚ星月天空ɞ꧂  阅读(124)  评论(0)    收藏  举报