FaceBoxes.PyTorch代码应用到自己数据遇到的坑

FaceBoxes,顾名思义,它本来是用来进行人脸检测(不是人脸识别),并且解决识别小脸的问题。

FaceBoxes是基于SSD、通过anchor密集采样策略,对浅层feature map检测的小尺度目标,其对应anchor做更加密集的anchor采样,使得特征金字塔不同feature map层的anchor有相同的采样密度,在CPU端实时。

其代码地址:FaceBoxes.PyTorch
此处,我是将这个代码用于训练自己的数据(需要是单类的才可以,我这里训练的不是人脸),然后在代码运行的时候出现了下面一些问题:

☕trian.py

1. AssertionError: Invalid device id

在这里插入图片描述

ngpudefault值改成1

2. FileNotFoundError: [Errno 2] No such file or directory:’./data/WIDER_FACE\annotations\61_Street_Battle_streetfight_61_894.xml’

在这里插入图片描述
将此处的路径改成绝对路径,并且将/改成\\

3. 查无xml文件

此时需要根据自己的数据,制作img_list.txt文件,文件种每行为图片名和xml文件名
对应的代码如下,直接放在项目里,将其中的路径改成你自己的即可:

# 在data/WIDER_FACE下生成img_list.txt文件,每行为图图片名和对应的xml名
import os
import random

xmlfilepath = 'B:/FaceBoxes.PyTorch-master/data/WIDER_FACE/annotations/'  # xml文件路径
imgfilepath = 'B:/FaceBoxes.PyTorch-master/data/WIDER_FACE/images/'  # 图片路径
txtsavepath = 'B:/FaceBoxes.PyTorch-master/data/WIDER_FACE'  # txt文件最后保存路径
total_xml = os.listdir(xmlfilepath)  # 所有的xml文件名列表
total_img = os.listdir(imgfilepath)  # 所有的img文件名列表

num = len(total_xml)  # 图片个数
list = range(num)

ftxt = open(txtsavepath + '/img_list.txt', 'w')
for i in list:
    xmlname = total_img[i] + ' ' + total_xml[i] + '\n'
    ftxt.write(xmlname)

ftxt.close()

4. KeyError: Caught KeyError in DataLoader worker process 0. KeyError: ‘shuguo’(此处两个错误)

在这里插入图片描述
wider_voc.py中的第14行,将图示位置改成自己的标签名字即可

☕test.py

1. ModuleNotFoundError: No module named ‘utils.nms.cpu_nms’

在这里插入图片描述
在这里插入图片描述
utils/nms中的cpu_nms.pyx(Linux下运行的)文件转换成pyd文件(Windows下运行的)
在项目里新建一个pyx2pyd.py文件,代码如下

import sys
import numpy as np

A = sys.path.insert(0, "..")
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext

# ext_module = cythonize("TestOMP.pyx")
ext_module = Extension(
    "cpu_nms",
    ["cpu_nms.pyxc"],  # 更改为自己想要转换的.pyx文件
    extra_compile_args=["/openmp"],
    extra_link_args=["/openmp"],
)

setup(
    cmdclass={
    
    'build_ext': build_ext},
    ext_modules=[ext_module],
    # 注意这一句一定要有,不然只编译成C代码,无法编译成pyd文件
    include_dirs=[np.get_include()]
)

然后在cmd中输入命令

python pyx2pyd.py build_ext --inplace

转换完成后,发现还需要转换gpu_nms.pyx文件,但是出现下面的错误
在这里插入图片描述
可是没有找到解决办法,要原地爆炸了,于是放弃转换这个了
直接在nms_wrapper.py文件中做如下图修改
在这里插入图片描述
test.py文件中做如下修改
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42946328/article/details/108750115