栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

YOLO炼丹法则(第十周学习记录)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

YOLO炼丹法则(第十周学习记录)

文章目录
      • 目标检测
      • 卷积神经网络为什么能够分类?
        • 预训练
      • 区域卷积神经网络 R-CNN
      • Fast R-CNN
      • Faster R-CNN
      • YOLOv1
        • 代码训练
          • Windows安装Opencv
        • 训练过程
        • Pytorch版本复现的代码:https://github.com/abeardear/pytorch-YOLO-v1
      • YOLOv2
        • 锚框
      • YOLOv3
        • 官方代码测试(C版本)
        • Python版本
      • YOLOv4
      • YOLOv5
        • 代码训练
      • 何恺明新作 MAE!!! Masked Autoencoders Are Scalable Vision Learners
      • Transformer &&& Attention机制
      • CoLab
      • 蒙特卡罗树搜索
      • 文献阅读
          • 推荐学习资料

目标检测
  • 目标检测:从图像中检测并定位特定的多个目标
  • 在卷积神经网络中进行目标检测的思路:先推荐候选区域,再利用卷积网络对候选区域分类

卷积的通俗理解

卷积神经网络为什么能够分类?
  • 生物学:我们利用眼睛将看到的景象成像在视网膜上,视网膜把光学信号转换成电信号,传递到大脑的视觉皮层,视觉皮层是大脑中负责处理视觉信号的部分,视觉皮层具有层次结构,从视网膜传来的信号首先到达初级视觉皮层,即V1皮层。V1皮层简单神经元对一些细节、特定方向的图像信号敏感。V1皮层处理之后,将信号传导到V2皮层。V2皮层将边缘和轮廓信息表示成简单形状,然后由V4皮层中的神经元进行处理,它颜色信息敏感。复杂物体最终在IT皮层被表示出来。

1981 年的诺贝尔医学奖,颁发给了 David Hubel、TorstenWiesel,以及 Roger
Sperry。他们的主要贡献,是发现了人的视觉系统的信息处理是分级的。
从低级的V1区提取边缘特征,再到V2区的形状或者目标的部分等,再到更高层,整个目标、目标的行为等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表示越来越抽象,越来越能表现语义或者意图。而抽象层面越高,存在的可能猜测就越少,就越利于分类。

  • 数学:卷积神经网络可以看成是上面这种机制的简单模仿。它由多个卷积层构成,每个卷积层包含多个卷积核,用这些卷积核从左向右、从上往下依次扫描整个图像,得到称为特征图(feature map)的输出数据。网络前面的卷积层捕捉图像局部、细节信息,有小的感受野,即输出图像的每个像素只利用输入图像很小的一个范围。后面的卷积层感受野逐层加大,用于捕获图像更复杂,更抽象的信息。经过多个卷积层的运算,最后得到图像在各个不同尺度的抽象表示。简单来说,从我的理解来看,属于降维打击,相当于从高维看低维,例如,我们从三维视角看二维物体,就能获取二维的信息全貌,二维动物看一维动物,也能获取全貌,卷积神经网络就是不断提高维度,然后俯视低维信息,就能从不同高维的角度获取低维的各种信息,所以卷积处理图像卷着卷着就变得越来越抽象,只剩下很多抽象点,变得越来越模糊。
  • 人脑的学习过程:光信号、声音信号等输入,经过大脑的神经网络处理,就能存储信号或者输出信号,例如:小时候学习物体识别时,就是相当于家人告诉你这是苹果(图像标注),你记住了,或者用英语apple,你也记住了,从联想进行记忆存储,于是你看到苹果就知道这是苹果了(卷积运算模拟人脑),再后来学习了梨子与苹果的区别,就能区分苹果与梨子的区别,这就是人脑的分类。
  • 卷积神经网络学习过程:首先, 利用图像标注好的信息,从这些框框信息中,进行图像的卷积运算,就能抽象出高维信息,高维信息从不同维度,又能提取到不同的图像信息,然后 进行训练后,得到一个模型,利用模型,再进行实体检测,这个卷积神经网络就能进行分类,完成相应功能。
  • 卷积公式:
预训练

在图片分类任务中,对于层级的CNN结构来说,不同层学到的图像特征是不一样的,越浅层所学到的特征越通用,越深层所学到的特征和具体任务关联性就越强,因此,首先在大规模图片数据上预先获取“通用特征”,再找到特殊特征 ,相当于先学好普通话,再去学方言。

区域卷积神经网络 R-CNN
  • 关键模块:区域推荐,特征提取和区域分类。
  • 检测过程:
  1. 输入一张图像
  2. 自底向上提取大约2000个推荐区域并变换为固定大小(选择性搜索),
  3. 用CNN计算每个推荐区域的特征
  4. 用类别相关线性支持向量机(SVM)对推荐区域进行分类。
  • 缺点:训练过程阶段多;训练时空费用大;目标检测速度慢。
  • 优点:检测精度高
Fast R-CNN

采用了共享卷积计算的策略。

  • 检测过程:输入图像和感兴趣区域(RoI)先经过卷积池化处理产生卷积特征图,再经过RoI池化层处理得到固定大小的特征图,之后被全连接层映射成特征向量。对于每个RoI都有两个输出向量:softmax概率和边框回归偏移。(该结构利用多任务损失进行端到端的训练)-------使用了一个预训练过的深层卷积网络来初始化生成图像列表和RoI列表。
    缺点:没有克服区域推荐算法的瓶颈问题。
Faster R-CNN
  • 关键模块:产生区域推荐的RPN(区域推荐网络:与检测网络共享整幅图像的卷积特征,从而产生无代价的区域推荐);使用推荐区域的Fast R-CNN检测器。
  • RPN采用了“注意力”机制,告诉Fast R-CNN模块应该看哪些地方。

YOLO v.s Faster R-CNN:

  1. 统一网络:YOLO没有显示求取region proposal的过程。Faster R-CNN中尽管RPN与fast rcnn共享卷积层,但是在模型训练过程中,需要反复训练RPN网络和fast rcnn网络.相对于R-CNN系列的"看两眼"(候选框提取与分类),YOLO只需要Look Once.

  2. YOLO统一为一个回归问题,而R-CNN将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题)。

YOLOv1

核心思想:将整张图片作为网络的输入(类似于Faster-RCNN),直接在输出层对BBox的位置和类别进行回归。

  • YOLO原意:你只需要看一次。 这种方法的提出是将目标检测(定位和目标分类)设置为一个回归问题,包括对多个边框和相关类别概率的回归,它只用一个神经网络和一次评价,就能直接从输入的整幅图像预测边框和类别概率。
  • YOLO的网络结构是在GoogLeNet的基础上建立起来的。

yolo将输入图像划分为 S×S的网格,物体的中心落在哪一个网格内,这个网格就负责预测该物体的置信度,类别以及位置。
网络最后的输出是 S×S×30的数据块,yolov1是含有全连接层的,这个数据块可以通过reshape得到。也就是说,输出其实已经丢失了位置信息(在v2,v3中用全卷积网络,每个输出点都能有各自对应的感受野范围)。这么一看,yolov1根据每张图像的目标label,编码出一个 S×S×30 的数据块,然后让卷积网络去拟合这个target,简单粗暴。

  • 网络结构:
    平铺式的网络结构,24层卷积层 + 2 层全连接层。
    预训练分类阶段输入大小:224x224
    检测训练阶段输入大小:448x448

V1的网络结构在分类网络的基础上改进,v1的结构很简单,在v2,v3中,或者其他检测网络中,普遍会用特征层跨层连接融合,分层检测不同尺度大小目标的思路,可能是考虑浅层特征语义信息不充分,而小目标在深层特征图丢失的问题。

  • 检测过程:
  1. 输入SXS网格
  2. 调整图像大小
  3. 将图片送入到卷积神经网络中进行预测
  4. 限定边框+置信得分 类别概率地图 相当于 进行非极大值抑制(找到得分最高的框框)
  5. 得到检测结果框
  • 非极大值抑制,来抑制那些冗余的框: 抑制的过程是一个迭代-遍历-消除的过程。
    (1)将所有框的得分排序,选中最高分及其对应的框。
    (2)遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除。
    (3)从未处理的框中继续选一个得分最高的,重复上述过程。
  • IOU:Intersection over Union 交并比

参考:https://www.cnblogs.com/xiongzihua/p/9315183.html

https://zhuanlan.zhihu.com/p/73606306?from_voters_page=true

代码训练

官方指导测试链接:https://pjreddie.com/darknet/yolov1/

  1. 首先下载darknetgithub
  2. 下载后使用切换到主目录进行编译 终端下输入 make
  3. make命令windows系统默认没有,所以需要安装cygwin这个软件,官网链接,选择适合版本下载即可。
  4. 注意,安装时基本都是默认,在选择安装包时,要选择gcc , g++ , gdb, make 这几个关键包,否则下载好再安装也很麻烦,网上也没找到相关资料。
  5. 下载好yolov1.weights后,直接按照官网教程测试即可。、

安装前参考这个博客:https://www.cnblogs.com/jackkwok/p/9045890.html

如图所示,可以看到完整的YOLOv1的网络结构。

Windows安装Opencv 训练过程

官方教程给的VOC2007和VOC2012,选择VOC2007数据集进行训练。

bug:

55张图片就变成Nan了,查阅后,修改

成功啦:

Pytorch版本复现的代码:https://github.com/abeardear/pytorch-YOLO-v1

下图均来自:https://www.bilibili.com/video/BV1DS4y1R7zd?p=2
up主说的前景概率解释:


除此之外:还用了dropout防止过拟合

YOLOv2

原文


YOLOv2在v1的基础上,去掉了全连接层,在每一个卷积层后边都添加了一个批一化层(batch normalization),并且对每一批数据都做了归一化的预处理,这两个改变就可以提升了算法的速度。




yolov2损失函数参考:(论文里没有提到)
https://zhuanlan.zhihu.com/p/56079893

锚框

推荐:https://zhuanlan.zhihu.com/p/63024247
https://www.jianshu.com/p/38c9f3570079
锚框,就是目标检测算法中,以锚点为中心,由算法预定义的多个不同长宽比的先验框

锚框的长宽比训练数据集中的对象大小选择,YOLOv3算法中的锚框的长宽比是算法作者通过分析COCO数据集中对象长宽比,通过K-Mean估计得到的。锚框的长宽比是一个在已有数据集上的先验值,是一个超参数,可以在模型的配置文件中配置。

YOLOv3

论文:Feature Pyramid Networks for Object Detection :FPN论文
caffe代码实现:https://github.com/unsky/FPN
参考:http://www.51zixue.net/deeplearning/685.html




官方代码测试(C版本)

按照官网训练即可,不过还是要注意训练文件一定要改为训练集,否则出现nan等报错,应该是过拟合了。bug:

Python版本

https://github.com/ultralytics/yolov3

python版本一定是3.7.0及以上的,否则白配置半天,没找到conda中修改python环境的办法,找到的也比较麻烦,不值得参考

conda create -n yolov3 python=3.7.0
conda activate yolov3
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes

pip install -r requirements.txt

conda install pytorch torchvision torchaudio cudatoolkit=11.3

pip下载文件时出现:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb0 in position 17: invalid start byte
解决方案
先按照控制台打印的,更新pip版本,再试试,如果还是出现,参考这个回答:
https://stackoverflow.com/questions/25036897/pip-install-unicodedecodeerror

然后出现另外一个bug:
ERROR: Could not find a version that satisfies the requirement pycocotools>=2.0 (from versions: 2.0.0, 2.0.1, 2.0.2a1, 2.0.2)
ERROR: No matching distribution found for pycocotools>=2.0

Best Answer:

pip  debug --verbose

控制台会出现:

重点找到Compatible tags意思是该系统可兼容的标签:
然后找到 https://pypi.tuna.tsinghua.edu.cn/simple/pycocotools-windows/或者你需要的whl文件链接
下载对应的文件链接即可,然后下载好,直接pip install 该文件即可

bug:
Collecting package metadata (repodata.json): failed
UnavailableInvalidChannel: The channel is not accessible or is invalid.
channel name: anaconda/cloud
channel url: https://mirrors.ustc.edu.cn/anaconda/cloud
error code: 404
You will need to adjust your conda configuration to proceed.
Use conda config --show channels to view your configuration’s current state,
and use conda config --show-sources to view config file locations.

解决办法:
conda config --remove-key channels
重新配置镜像源

YOLOv4

推荐:
https://blog.csdn.net/qq_42412214/article/details/119763036?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-8.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-8.no_search_link

https://zhuanlan.zhihu.com/p/150127712
https://zhuanlan.zhihu.com/p/143747206
https://zhuanlan.zhihu.com/p/143747206

YOLOv5

推荐:https://blog.csdn.net/didiaopao/category_11321656.html?spm=1001.2014.3001.5482
https://zhuanlan.zhihu.com/p/172121380

代码训练 何恺明新作 MAE!!! Masked Autoencoders Are Scalable Vision Learners Transformer &&& Attention机制 CoLab 蒙特卡罗树搜索 文献阅读 推荐学习资料
  1. 推荐看《机器学习的数学》–雷明
  2. YOLO讲解:https://www.bilibili.com/video/BV1DS4y1R7zd?p=1
  3. 推荐在线求导网站:https://www.derivative-calculator.net
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529908.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号