1. 课程学习

本节课主要对于大白AI课程:https://mp.weixin.qq.com/s/STbdSoI7xLeHrNyLlw9GOg
《Pytorch 模型推理及多任务通用范式》课程中的第五节课进行学习。
本课程的重点有:

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进行输出。

4、心得体会

(1) 这次课程对你的帮助有哪些?技术上、学习方法上、思路上等都行,随意发挥。
课程对思路上有帮助。在接触深度学习两年的时间里,大概了解模型训练到使用需要做什么,但是又不能很系统的将它们做好归纳。课程给了一个较清晰的框架,确实满足了以后接触到新代码的学习思路。
(2) 对课程的优化改进有什么建议?内容上、流程上、形式上等都行,随意发挥。

  1. 课程的部分需要有一定基础,是否可以课前的必备知识清单;
  2. 部分课程内容是否可以用语音或者短视频的方式进行教学,可能比大段文字更好理解;
  3. 课程的问题是否还能更有引导性?如果只是找几张照片,重新跑一下代码的这种学习效果检测方法不够有引导性。

(3) 最好可以附上自己所处的阶段,比如:学生,接触 AI 一年;
在职,接触AI两年。平常的工作内容更多的是做数据工程。