【IntelCup】-07-18
收尾今天阅读了一下emo-net的论文,梳理一下这篇文章:
提到的关键点主要有:
面部关键点的检测
面部中心集中的检测
模型蒸馏方法:学生、教师模型
有一些指标:
RMSE:均方根误差
SAGR:Sign agreement
PCC:皮尔森相关系数
CCC:一致相关系数
模型的样子:
暂时没有调好图床,先放一个论文链接:Estimation of continuous valence and arousal levels from faces in naturalistic conditions | Nature Machine Intelligence
【IntelCup】-07-16
部署yolov5今天在自己的工程里面部署了yolov5,总体比较顺利。中间卡住的地方主要是:
cv2读取图片的时候要看一下是否读取图片成功,目前因为图片都是以缓存的形式保存在文件中,有注意有一边图片还没有写好,另一边就需要读取的情况,这时候需要做一个判断,防止出现读入图片无效,引发错误的情况发生。
12345img = cv2.imread(src_img) if img is None: print("图片读取失败") else: img_res, det_res = self.yolo_detector.detect(img, cls, thresh)
【ZYNQ7010】-01-BreathLed
概述这个整一个简单的活,做一个呼吸灯。怎么实现呢?现在没有这个定时器的PWM辅助,就需要造出一个PWM来控制LED,本质上是一个PWM的实现。(这里默默地想到了第一次在TI的开发板上实现呼吸灯的方法,直接用两个for循环,很粗暴但是作为第一个自己写的程序,现在想起来还是蛮有意思的)
实现思路这里可以用一个简单的状态机来控制,一共有四个LED,每个LED循环呼吸,直观来看需要8个状态(3位的状态)。现在我们来梳理一下这个逻辑。
分析一下,可知需要1个计数控制PWM的占空比,4个时钟信号,一个主频率,另外三个分频得到控制PWM的频率,占空比信号变化的频率和控制完成一次呼吸的频率。
有了硬件,接下来描述一下逻辑,首先是使用分频得到稳定的呼吸频率(1Hz),PWM频率(100kHz)。在前半个呼吸周期中(0.5s),PWM占空比逐渐增大到100%,在后半个周期中,减小到0%,中途通过改变控制PWM占空比的计数器(先递增,后递减)来实现。
所以最关键的是这个占空比计数器应当如何变化:已知芯片的内部频率是50MHz,因此,这里占空比计数器应当从0变化到500(经过0.5s),再从500变化到0 ...
【IntelCup】-07-15
增加YoLov5检测功能目前能够识别人脸和情绪,在学习过程中,希望检测环境中的手机等电子设备的使用情况,来评估整体学习环境。
目前想法是将图片载入yolov5网络中进行识别,但是可能会存在一个检测到物品后的标记框颜色跳动的问题。暂时想到的解决办法是将标记的颜色设定为特定顺序,避免在持续跳动的问题(可能依然会存在识别物体发生变化时,颜色闪烁的情况)。
模型部署模型导入debug模型部署中,首先遇到的一个问题还是python导入包的问题,不太明白为什么有时候又检测不到包了。
实际的问题是这样的:有一个如下的文件的目录:
12345678910111213141516171819202122232425262728293031323334353637383940414243│ demo.py│├─models│ │ common.py│ │ experimental.py│ │ yolo.py│ │ yolov5l.yaml│ │ yolov5m.yaml│ │ yolov5s.yaml│ │ yolov5x.yaml│ ││ └─__pycache__│ ...
【IntelCup】-07-12-AND-07-13
多个窗口QTDesigner
PyQt5快速上手基础篇6-QStackedWidget实现导航布局_物联网客栈的博客-CSDN博客_qtdesigner stacked widgetpyqt
pyqt无法在顶层画画,原因找到了。实际上不是不能在顶层画画,而是事件的触发机制不正确,子控件默认是不会触发event的,应该给他安装事件过滤器,然后传递会父类进行处理。
实现代码如下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051import PyQt5.QtCorefrom PyQt5.Qt import *from main_gui import Ui_MainWindowimport sysclass Thread(QThread): move_point = pyqtSignal(int, int) def __init__(self): super(Thread, self).__init__() s ...
【IntelCup】-07-06
函数修饰器@[python函数修饰器(decorator) - 世有因果知因求果 - 博客园 (cnblogs.com)](https://www.cnblogs.com/kidsitcn/p/9413273.html#:~:text=python语言本身具有丰富的功能和表达语法,其中修饰器是一个非常有用的功能。 在设计模式中,decorator能够在无需直接使用子类的方式来动态地修正一个函数,类或者类的方法的功能。,当你希望在不修改函数本身的前提下扩展函数的功能时非常有用。 简单地说,decorator就像一个wrapper一样,在函数执行之前或者之后修改该函数的行为,而无需修改函数本身的代码,这也是修饰器名称的来由。)
函数修饰器是用来套函数的,从下至上依次调用:
123456789101112131415161718192021222324252627def p_decorate(func): def func_wrapper(name): return "<p>{0}</p>".format(fun ...
【IntelCup】-07-05
读源码
https://github.com/Javacr/PyQt5-YOLOv5.git
源码的写法是将Thread和Ui分成两个类分别进行编写,逻辑清楚;常常在传参数的时候发现有 | 符号,一查发现就是一个或运算罢(python ‘|‘(竖线)与‘or’标识符在逻辑布尔运算时的不同(运算优先级)_hzy15610046011的博客-CSDN博客_python中竖杠什么意思)。
数据可视化Conda install 和 Pip 的区别:Anaconda | Understanding Conda and Pip
PyQt教程:PyQt5图形界面入门教程(第一篇) (xdbcb8.com)
例子:
Javacr/PyQt5-YOLOv5: YOLOv5检测界面-PyQt5实现 (github.com)
当YOLO遇上PyQt 【临时抱佛脚必备系列】_哔哩哔哩_bilibili
【IntelCup】-07-04
PyQT界面搭建消息框debug
TypeError: Cannot create a consistent method resolution
原因是同时继承了子类和父类
python报错——TypeError: Cannot create a consistent method resolution_张喵喵是小仙女的博客-CSDN博客
PyCharm查看方法:
Pycharm中查看函数参数、用法等相关信息的方法_华墨1024的博客-CSDN博客_pycharm查看函数说明
设置label长宽
Python PyQt Qlabel调整大小 | 码农家园 (codenong.com)
调用opencv函数没有定义
在PyCharm中使用openCV函数时没有函数提示或没有函数引导_Qcecream的博客-CSDN博客_pycharm中opencv没有提示
解决opencv / cv2 没有代码提示的问题_再游于北方知寒的博客-CSDN博客
使用QImage需要注意长宽信息1234img_rgb = cv2.cvtColor(im0, cv2.COLOR_BGR2 ...
【IntelCup】-07-02
OpenVINO
Get Started — OpenVINO™ documentation — Version(latest)
上述网站包括了各个工具的介绍和使用方法的说明,还有安装方法
OpenVINO中的各个组件的作用:
Model Optimizer Developer 将模型转换为OpenVINO能够使用的模型
Open Model Zoo 有一些预训练完成的模型
OpenVINO Notebooks 应该和Jupyter差不多
OpenVINO Runtime 跑模型
Install Intel® Distribution of OpenVINO™ Toolkit from PyPI Repository — OpenVINO™ documentation — Version(latest)
数据压缩:
Compression of a Model to FP16 — OpenVINO™ documentation — Version(latest)
优化后训练:
Optimizing models post-training — OpenVINO™ document ...
【IntelCup】-07-01
神经网络学习
《Python神经网络编程》
基本的神经网络简单的神经网络就是通过一层一层(输入层、隐藏层、输出层)的矩阵运算,中间将加权后的输入用sigmoid函数$\frac{1}{1+e^{-x}}$(书中也称激活函数)映射,将得到的输出送入到下一层。
基本的反馈思想调节神经网络的链接权重当输出值和期望值有误差时,将误差作为反馈,调节网络中的链接权重,并且权重越大应当调节的效果越大。
使用矩阵乘法进行反向传播误差这种方法是通过实际直观知道的输出误差,反向推导得到上一层(中间层或叫隐藏层的误差),尝试用矩阵的方式描述这一过程就成为过程矢量化。
首先,通过观察误差来源,列出方程,然后写成矩阵形式;接着,进行归一化处理,得到反向传播的误差举证是前面描述的链接权重矩阵的转置。
使用梯度下降法确定调节链接权重矩阵系数的方向构建误差函数(误差的2次方),使用梯度下降法(求一阶偏导数)得到调整系数方向,大梯度使用大步长调整,小梯度使用小步长调整,直到满足精度要求。
记住优化的方向是负梯度方向(下降)。
构建训练的数据需要注意的问题
激活函数的输出范围是0~1,因此,不应当设置一个大于1的目标值 ...