github下载地址:https://github.com/Megvii-BaseDetection/YOLOX 安装apex:
参考 linux:

为了性能和完整的功能,建议通过CUDA和c++扩展来安装Apex
 
$ git clone https://github.com/NVIDIA/apex
$ cd apex
$ pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
 
Apex 同样支持 Python-only build (required with Pytorch 0.4) via
 
$ pip install -v --no-cache-dir ./

Windows:

Windows支持是实验性的,建议使用Linux。
 
如果你能在你的系统上从源代码构建Pytorch,采用pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" .
 
pip install -v --no-cache-dir .(没有CUDA/ c++扩展)更可能有效。
 
如果您已经在Conda环境中安装了Pytorch,请确保在相同的环境中安装Apex。

服务器下跑yolox(比较简单)

1、准备数据集:

2.修改配置文件:

文件地址YOLOX-main\yolox\exp\yolox_base.py

android的apex文件夹不能push_pytorch

android的apex文件夹不能push_Apex_02


android的apex文件夹不能push_python_03


3、修改exp/example/yolox_voc/yolox_voc_s.py文件

android的apex文件夹不能push_深度学习_04


android的apex文件夹不能push_Windows_05

修改yolox/data/dataloading中

android的apex文件夹不能push_pytorch_06


修改yolox/data/datasets/voc_classes.py

android的apex文件夹不能push_Apex_07

加入数据集

数据集格式如下:

android的apex文件夹不能push_python_08

需要放在datasets目录下哦

train

训练yolox_s的命令行:

python train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 32 --fp16 -o -c weights/yolox_s.pth

如果我想训练yolox_l、yolox_m…怎么办?

方法1

android的apex文件夹不能push_Windows_09


可以在exps文件下的yolox_voc文件下新建文件…例如想训练yolox_l,新建文件yolox_voc_l.py,复制yolox_voc_s的内容,修改如下:

android的apex文件夹不能push_深度学习_10

只修改这里就好了。
训练命令:

python train.py -f exps/example/yolox_voc/yolox_voc_l.py -d 1 -b 32 --fp16 -o -c weights/yolox_l.pth

android的apex文件夹不能push_Windows_11


方法2

yolox/exp/build.py中写好了name

android的apex文件夹不能push_pytorch_12

python train.py -n yolox-nano -d 1 -b 32

Windows下跑yolox

首先介绍下我的pytorch版本为1.7.0,因此该版本相较于刚出的yolox一定会有很多问题,那么总结下问题:
1.silu问题,pytorch1.7是没有silu的,因此全部换成relu,一般yolox/models/network_block.py有、yolox_head.py有、yolo_pafpn.py…记不清了,哪里报错就去哪里就可。开始想添加silu的代码的,但是发现要修改的地方好多,就放弃了哈哈哈。
2.报错

RuntimeError: Providing a bool or integral fill value without setting the optional `dtype` or `out` arguments is currently unsupported. In PyTorch 1.7, when `dtype` a
nd `out` are not set a bool fill value will return a tensor of torch.bool dtype, and an integral fill value will return a tensor of torch.long dtype.

RuntimeError:当前不支持在未设置可选’dtype’或’out’参数的情况下提供布尔值或整数填充值。

在yolo_head.py文件中,修改如下:

android的apex文件夹不能push_pytorch_13


后面想加入Transformer的时候遇到了错误:

Input image size (6464) doesn’t match model (448448).
也就是训练时输入成了64,但是我的exp中yolox_base已经修改好了,后面调试代码发现:utils/model_utils.py中,这里的输入为64,改掉这里即可。

android的apex文件夹不能push_python_14

检测框中文显示

但是,我们目前的检测物体中,中文的受众面更广,直接采用该代码会出现乱码现象:

android的apex文件夹不能push_pytorch_15

为此调整代码:
找到YOLOX-main\yolox\utils\visualize.py
修改第40行代码

def vis(img, boxes, scores, cls_ids, conf=0.5, class_names=None):

    for i in range(len(boxes)):
        box = boxes[i]
        cls_id = int(cls_ids[i])
        score = scores[i]
        if score < conf:
            continue
        x0 = int(box[0])
        y0 = int(box[1])
        x1 = int(box[2])
        y1 = int(box[3])

        color = (_COLORS[cls_id] * 255).astype(np.uint8).tolist()
        text = '{}:{:.1f}%'.format(class_names[cls_id], score * 100)
        txt_color = (0, 0, 0) if np.mean(_COLORS[cls_id]) > 0.5 else (255, 255, 255)
        font = cv2.FONT_HERSHEY_SIMPLEX

        txt_size = cv2.getTextSize(text, font, 0.4, 1)[0]
        cv2.rectangle(img, (x0, y0), (x1, y1), color, 2)

        txt_bk_color = (_COLORS[cls_id] * 255 * 0.7).astype(np.uint8).tolist()
        cv2.rectangle(
            img,
            (x0, y0 + 1),
            (x0 + txt_size[0] + 1, y0 + int(1.5*txt_size[1])),
            txt_bk_color,
            -1
        )

        #打印汉字
        img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
        # font=plt.rcParams['font.sans-serif'] = ['SimHei']
        font = ImageFont.truetype('STFANGSO.TTF', 10, encoding="utf-8")
        draw = ImageDraw.Draw(img_pil)
        draw.text((x0, y0), text, txt_color, font=font)
        img = cv2.cvtColor(np.asarray(img_pil), cv2.COLOR_RGB2BGR)
        # cv2.putText(img, text, (x0, y0 + txt_size[1]), font, 0.4, txt_color, thickness=1)

    return img

输入:

python demo.py image -n yolox-s -c /path/to/your/yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [gpu]

android的apex文件夹不能push_Windows_16

补充:
后续yolox的部署和测试可以看下面这个:
yolox的部署和测试 以及yolox系列的模型可视化:
yolox的模型可视化包括nano