pip下载速度太慢,国内镜像:
国内镜像解决pip下载太慢https://blog.csdn.net/weixin_51995286/article/details/113972534
在线卷积计算器:
在线卷积计算器http://www.sqflash.com/cal.html
网络学习
IOU:
机器学习知识总结 —— 11. 关于目标检测中的IoU是什么https://blog.csdn.net/poisonchry/article/details/122134314?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167776186916800188539960%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167776186916800188539960&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-4-122134314-null-null.142%5Ev73%5Einsert_down2,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=IOU&spm=1018.2226.3001.4187
YOLO v3 网络结构计算和解析
YOLOv3网络结构和解析https://blog.csdn.net/dz4543/article/details/90049377yolov3网络结构https://blog.csdn.net/qq_37602161/article/details/120187810?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167764072716800225552255%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167764072716800225552255&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-120187810-null-null.142%5Ev73%5Einsert_down2,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=yolov3%20%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84%E8%AE%B2%E8%A7%A3&spm=1018.2226.3001.4187
YOLO v3整体流程讲解(细节涉及较少)
YOLO V3整体流程https://blog.csdn.net/qq_43581224/article/details/118382593?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167757215116800215064768%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167757215116800215064768&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-118382593-null-null.142%5Ev73%5Einsert_down2,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=yolov3&spm=1018.2226.3001.4187
YOLOV3 关于设置生成anchorbox,Boundingbox边框回归的过程解读
YOLO v2和V3 关于设置生成anchorbox,Boundingbox边框回归的个人理解https://blog.csdn.net/shenkunchang1877/article/details/105648111YOLOv3的anchor box的理解、计算以及训练的误差计算
【论文理解】理解yolov3的anchor、置信度和类别概率https://blog.csdn.net/weixin_43384257/article/details/100974776
思考1:一个grid cell有那么多的anchor box,那么预测时,bounding box是如何选择的?
该grid cell里的所有anchor box与检测物体的ground truth box进行IOU计算,选择最终IOU结果最大的那个anchor box
那么预测框bounding box就会以该anchor box作为回归偏移的基础。
YOLO v3 损失函数的计算
【论文理解】yolov3损失函数https://blog.csdn.net/weixin_43384257/article/details/100986249?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167765259416800215084471%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167765259416800215084471&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-100986249-null-null.142%5Ev73%5Einsert_down2,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=yolov3%20%E6%8D%9F%E5%A4%B1%E5%80%BC&spm=1018.2226.3001.4187
YOLO v1网络结构计算
Yolov1-pytorch版 论文、原理及代码实现https://blog.csdn.net/wjytbest/article/details/116116966CNN中feature map、卷积核、卷积核个数、filter、channel的解读
CNN中feature map、卷积核、卷积核个数、filter、channelhttps://blog.csdn.net/xiewenbo/article/details/96509195
代码学习参考
Github代码学习文章:
睿智的目标检测26——Pytorch搭建yolo3目标检测平台https://blog.csdn.net/weixin_44791964/article/details/105310627以及该作者的b站视频:
Pytorch 搭建自己的YOLO3目标检测平台(Bubbliiiing 深度学习 教程)https://www.bilibili.com/video/BV1Hp4y1y788?p=7&vd_source=65c9204c97b8b1867c1d577ee29c3fc1
Darknet53部分:
【YOLOv3 net】YOLOv3网络结构及代码详解https://blog.csdn.net/weixin_45377629/article/details/124080087
博主的nets目录下的darknet.py代码对应的就是实现下图红框里的内容:
整体的代码还是比较容易理解的
通过提取出来的特征获得预测结果:
博主的nets目录下的yolo.py代码对应的就是实现下图红框里的内容:
对先验框进行调整(对先验框进行调整的过程叫做解码):
对应的是博主utils文件夹下的utils_bbox.py文件
该文件下的DecodeBox()一次只能对一个特征层进行解码,因此对三个特征层解码的话就需要三次调用该函数。
【YOLOv3 decode】YOLOv3中解码理解decode_boxhttps://blog.csdn.net/weixin_45377629/article/details/124144913
预测过程(非极大抑制NMS)详解:
对应的是博主utils文件夹下的utils_bbox.py文件里的non_max_suppression函数
速览过程:
预测结果prediction,其shape为 torch.size([batch_size, num_anchors, 5 + num_classes])
其中num_anchors就是所有的预测框:
大小为(13x13+26x26+52x52)x3=10647
prediction是有batchsize维度的。
而image_pred为预测结果信息,shape: torch.size([10647,25])
image_pred[[左上x, 左上y, 右下x, 右下y, 先验框是否包含物体的置信度, 类别0, 类别1, ...], ...]
有了预测的结果,就需要对预测结果进行处理,
第一步确定每个预测框预测的结果,
也就是每个预测框在num_classes个类别(num_classes预测的类别数)里预测最好的那个种类
class_conf, class_pred的shape分别是:
class_conf(种类置信度): torch.size([10647,1]):[num_anchors, 1]
class_pred(所属类别): torch.size([10647,1]):[num_anchors, 1]
class_pred记录了10647个框的预测类别
class_conf就记录了其预测类别的概率。
第二步,通过置信度对预测框进行第一轮的筛选
简单来说就是把低于置信度阈值的框筛掉。
当然真正的置信度是image_pred第4列预测分数(框内是否有物体)
和 class_conf第0列(class_conf只有一列)种类置信度得分 相乘
得到置信度分数,和设定的阈值进行比较。
筛选完了之后就只剩下几十个框
这里以筛选最后为29个为例:
conf_mask shape: torch.size([29,25]) 第一轮筛选后的29个预测框以及其框的信息
class_conf shape: torch.size([29,1]) 前面已经介绍过了,这里只剩下29个而已
class_pred shape: torch.size([29,1]) 同理这里只被筛到了29个
最后一步就是通过非极大抑制NMS进行筛选:
简单来说:非极大抑制就是先筛选出一定区域内同一种类得分最大的框,
然后将其同种类的框进行交并比IOU的计算,如果交并比大于一定的阈值,那么就将其他同类的框给忽略掉。
具体细节可以继续看代码。
【YOLOv3 NMS】YOLOv3中的非极大值抑制https://blog.csdn.net/weixin_45377629/article/details/124202975?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167781247616800211550847%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167781247616800211550847&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-3-124202975-null-null.142%5Ev73%5Econtrol,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=yolov3%E9%9D%9E%E6%9E%81%E5%A4%A7%E6%8A%91%E5%88%B6&spm=1018.2226.3001.4187
后面的训练和检测博主都讲的很清楚了。
博主写的常见问题也可以在这里有一定的解答:
神经网络学习小记录-番外篇——常见问题汇总https://blog.csdn.net/weixin_44791964/article/details/107517428?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167789808816800226535530%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167789808816800226535530&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-107517428-null-null.blog_rank_default&utm_term=%E8%B0%83%E7%94%A8%E8%A7%86%E9%A2%91%E6%A3%80%E6%B5%8B&spm=1018.2226.3001.4450YOLO v3暂时是初略地接触了一下。
部分函数调用方法解析:
Pytorch中tensor.view().permute().contiguous()函数理解
tensor索引[..., 0]
np.transpose()函数详解
np.expand_dims 小白详解
torch.from_numpy(ndarray) 功能及举例