1. 课程学习
本节课主要对于大白AI课程:https://mp.weixin.qq.com/s/STbdSoI7xLeHrNyLlw9GOg
《Pytorch 模型推理及多任务通用范式》课程中的第五节课进行学习。
本课程的重点有:
- YOLOx的代码逻辑
2. 作业题目
2.1必做题:
(1) 自己找 2 张其他图,用 Yoloxs 进行目标检测,并注明输入尺寸和两个阈值。
回答:模型输入尺寸为640*640;用的是默认阈值,分别为:conf_threshold = 0.5;nms_threshold = 0.45。
其中,第二张图的预测效果不太好,原因是原数据集中不包含灯笼这个类别。

2.2思考题:
(1) Yolox_s:用 time 模块和 for 循环,对”./images/1.jpg”连续推理 100 次,统计时
间开销。有 CUDA 的同学,改下代码:self.device=torch.device(‘cuda’),统计时间
开销。
- 在笔记本电脑上:
- CPU推理一次的时间为:0.7890233993530273
- CPU推理一百次的时间为:5393.394060134888
- 在服务器上:
- CPU推理一次的时间为:0.2662944793701172
- CPU推理一百次的时间为:21.945040225982666
- cuda推理一次的时间为:0.09559869766235352
- cuda推理一百次的时间为:4.940690994262695
(2) 有 CUDA 的同学,分别用 Yolox_tiny、Yolox_s、Yolox_m、Yolox_l、Yolox_x
对”./images/1.jpg”连续推理 100 次,统计时间开销。
| backbone | 超参数 | 输入图像大小 | 一次推理 | (预热)一百次推理 | |
|---|---|---|---|---|---|
| depth | width | ||||
| YOLO_tiny | 0.33 | 0.375 | (416*416) | 0.08016562461853027 | 3.2968997955322266 |
| YOLO_tiny | 0.33 | 0.375 | (640*640) | 0.09565949440002441 | 5.143733263015747 |
| YOLO_s (课程自带权重) |
0.33 | 0.5 | (640*640) | 0.09559869766235352 | 4.940690994262695 |
| YOLO_s | 0.33 | 0.5 | (640*640) | 0.10831403732299805 | 5.057199954986572 |
| YOLO_m | 0.67 | 0.75 | (640*640) | 0.10130953788757324 | 5.1331257820129395 |
| YOLO_l | 1 | 1 | (640*640) | 0.13942837715148926 | 5.811894655227661 |
| YOLO_x | 1.33 | 1.25 | (640*640) | 0.1416170597076416 | 6.333220958709717 |
3、课程内容
- YOLOx的推理流程:
- 数据预处理
- 利用mosaic、mix做数据增广或者不做数据增广,获取对应的图像和标签。
- 构建一个模型输入大小的、像素值均为114的mask。
- 将预测图像等比例放缩至长边为640后,将缩放后的图放在mask的左上角。
- 转float32、转rgb、归一化与标准化、换通道数(hwc——>chw)
- 用np.newaxis扩维,拼成batch。此后再转为tensor
- note:
- 需记录resize的大小,用于将检测框的位置返回至原图。
- 如果想要提高模型对小物体的检测效果,可以按stride倍调整input_size。
- 数据进网络
- 在导入模型和加载模型权重时需要核实类别数;
- YOLO的训练代码在保存模型时,除了模型权重,还保存了优化器(optimizer)的信息。在推理时,只需要载入权重信息。
- 数据后处理
- head结构
- 由multi-scale分成三个不同宽高尺寸的feature map(依次是8080,4040,20*20),每个feature map连接一个decoupled head;
- 每个decoupled head再出三个分支:cls_pred, obj_pred, reg_pred分别用于预测类别、是否为物体、anchor的偏移量(后面需要将其进行转换为原图上的位置,以中心点和宽高表示)。
- 最后concat为一个tensor进行输出。
- head结构
- 数据预处理
4、心得体会
(1) 这次课程对你的帮助有哪些?技术上、学习方法上、思路上等都行,随意发挥。
课程对思路上有帮助。在接触深度学习两年的时间里,大概了解模型训练到使用需要做什么,但是又不能很系统的将它们做好归纳。课程给了一个较清晰的框架,确实满足了以后接触到新代码的学习思路。
(2) 对课程的优化改进有什么建议?内容上、流程上、形式上等都行,随意发挥。
- 课程的部分需要有一定基础,是否可以课前的必备知识清单;
- 部分课程内容是否可以用语音或者短视频的方式进行教学,可能比大段文字更好理解;
- 课程的问题是否还能更有引导性?如果只是找几张照片,重新跑一下代码的这种学习效果检测方法不够有引导性。
(3) 最好可以附上自己所处的阶段,比如:学生,接触 AI 一年;
在职,接触AI两年。平常的工作内容更多的是做数据工程。
