HomiKetalys / gd32ai-modelzoo

Provide deployable deep learning models on gd32
MIT License
25 stars 2 forks source link

关于RGB565转换成RGB888的问题 #3

Closed mzxxyg closed 2 months ago

mzxxyg commented 3 months ago

1

image 大佬您好,请问为什么要把RGB565转换成RGB888呢,是因为Yolo FastestV2需要这种格式吗?转换成RGB888后运算量是不是增加了?

2

image 请问这个img_type和step代表什么呢?我看原例程里面是img_type的值是“0”,是代表图片格式为“RGB565”么,那step为2是不是因为RGB565是两个字节代表一个像素?

3

image 这一块为什么要这么计算呢?网络或图像处理要求的是 BGR 顺序么?

4

image 这个bias的值-128有什么特殊意义吗?

期待您的回复,非常感谢!

HomiKetalys commented 3 months ago

image 大佬您好,请问为什么要把RGB565转换成RGB888呢,是因为Yolo FastestV2需要这种格式吗?转换成RGB888后运算量是不是增加了? image 请问这个img_type和step代表什么呢?我看原例程里面是img_type的值是“0”,是代表图片格式为“RGB565”么,那step为2是不是因为RGB565是两个字节代表一个像素? image 这一块为什么要这么计算呢?

期待您的回复,非常感谢!

@mzxxyg 因为一般图像的卷积神经网络模型的输入要么是图像灰度图,要么是图像的RGB(或者其他颜色空间)彩色图,训练时也采用这种图像格式输入,所以模型推理时需要按训练时的图像格式输入图像。你提到的img_type目前确实是表示RGB565,step为2即表示两个字节代表一个像素。img_type主要用于以后的图像格式拓展。 image 这一部分是因为目前使用的推理框架其内存排布为HWC,这个输入数组相当于是这样定义的array[H][W][C],所以对于第i行第j列像素的第k通道的下标为iCW+j*C+k。 image 模型是用int8格式量化的,输入也需要进行int8量化,bias=-128是根据量化后的模型的输入的量化系数确定的。

mzxxyg commented 3 months ago

image 大佬您好,请问为什么要把RGB565转换成RGB888呢,是因为Yolo FastestV2需要这种格式吗?转换成RGB888后运算量是不是增加了? image 请问这个img_type和step代表什么呢?我看原例程里面是img_type的值是“0”,是代表图片格式为“RGB565”么,那step为2是不是因为RGB565是两个字节代表一个像素? image 这一块为什么要这么计算呢? 期待您的回复,非常感谢!

@mzxxyg 因为一般图像的卷积神经网络模型的输入要么是图像灰度图,要么是图像的RGB(或者其他颜色空间)彩色图,训练时也采用这种图像格式输入,所以模型推理时需要按训练时的图像格式输入图像。你提到的img_type目前确实是表示RGB565,step为2即表示两个字节代表一个像素。img_type主要用于以后的图像格式拓展。 image 这一部分是因为目前使用的推理框架其内存排布为HWC,这个输入数组相当于是这样定义的array[H][W][C],所以对于第i行第j列像素的第k通道的下标为i_C_W+j*C+k。 image 模型是用int8格式量化的,输入也需要进行int8量化,bias=-128是根据量化后的模型的输入的量化系数确定的。

1

感谢回复,请问在训练的python代码中是在哪里指定了RGB565或者RGB888?能否帮忙截个图?我现在部署进去图像卡的有点厉害,想着优化一下输入,减少下运算量。

2 还是上面那个问题,

image 我不太明白为什么是BGR通道顺序?而不是RGB?

HomiKetalys commented 3 months ago

image 大佬您好,请问为什么要把RGB565转换成RGB888呢,是因为Yolo FastestV2需要这种格式吗?转换成RGB888后运算量是不是增加了? image 请问这个img_type和step代表什么呢?我看原例程里面是img_type的值是“0”,是代表图片格式为“RGB565”么,那step为2是不是因为RGB565是两个字节代表一个像素? image 这一块为什么要这么计算呢? 期待您的回复,非常感谢!

@mzxxyg 因为一般图像的卷积神经网络模型的输入要么是图像灰度图,要么是图像的RGB(或者其他颜色空间)彩色图,训练时也采用这种图像格式输入,所以模型推理时需要按训练时的图像格式输入图像。你提到的img_type目前确实是表示RGB565,step为2即表示两个字节代表一个像素。img_type主要用于以后的图像格式拓展。 image 这一部分是因为目前使用的推理框架其内存排布为HWC,这个输入数组相当于是这样定义的array[H][W][C],所以对于第i行第j列像素的第k通道的下标为i_C_W+j*C+k。 image 模型是用int8格式量化的,输入也需要进行int8量化,bias=-128是根据量化后的模型的输入的量化系数确定的。

1

感谢回复,请问在训练的python代码中是在哪里指定了RGB565或者RGB888?能否帮忙截个图?我现在部署进去图像卡的有点厉害,想着优化一下输入,减少下运算量。

2 还是上面那个问题,

image 我不太明白为什么是BGR通道顺序?而不是RGB?

@mzxxyg 对于第1点,在训练中并不建议用RGB565,因为如果你要指定两个输入通道的话,对于RGB565来说强行分成两个字节会破坏颜色的语义,即G颜色通道的信息会被合并到R通道与B通道中,相似的颜色在这种情况下,其余弦距离可能会被拉的很大,卷积神经网络可能会认为相似的颜色是不同颜色,从而导致网络不拟合。而且要用RGB565的格式作为输入的话,要修改的地方比较多。另一方面,只改变输入的通道数并不能明显降低计算量,计算量主要受图像分辨率,和网络各层通道数影响。你可以尝试降低图像分辨率来减少计算量,不过这对于目标检测类的任务会有较大的性能损失。对于第2点,因为YoloFastestV2的作者使用的opencv读取图像,opencv读取的图像通道顺序默认是BGR,而一般RGB和BGR顺序下的网络性能差别不大,我也就没有对通道顺序进行修改。

mzxxyg commented 3 months ago

image 大佬您好,请问为什么要把RGB565转换成RGB888呢,是因为Yolo FastestV2需要这种格式吗?转换成RGB888后运算量是不是增加了? image 请问这个img_type和step代表什么呢?我看原例程里面是img_type的值是“0”,是代表图片格式为“RGB565”么,那step为2是不是因为RGB565是两个字节代表一个像素? image 这一块为什么要这么计算呢? 期待您的回复,非常感谢!

@mzxxyg 因为一般图像的卷积神经网络模型的输入要么是图像灰度图,要么是图像的RGB(或者其他颜色空间)彩色图,训练时也采用这种图像格式输入,所以模型推理时需要按训练时的图像格式输入图像。你提到的img_type目前确实是表示RGB565,step为2即表示两个字节代表一个像素。img_type主要用于以后的图像格式拓展。 image 这一部分是因为目前使用的推理框架其内存排布为HWC,这个输入数组相当于是这样定义的array[H][W][C],所以对于第i行第j列像素的第k通道的下标为i_C_W+j*C+k。 image 模型是用int8格式量化的,输入也需要进行int8量化,bias=-128是根据量化后的模型的输入的量化系数确定的。

1

感谢回复,请问在训练的python代码中是在哪里指定了RGB565或者RGB888?能否帮忙截个图?我现在部署进去图像卡的有点厉害,想着优化一下输入,减少下运算量。

2 还是上面那个问题,

image 我不太明白为什么是BGR通道顺序?而不是RGB?

@mzxxyg 对于第1点,在训练中并不建议用RGB565,因为如果你要指定两个输入通道的话,对于RGB565来说强行分成两个字节会破坏颜色的语义,即G颜色通道的信息会被合并到R通道与B通道中,相似的颜色在这种情况下,其余弦距离可能会被拉的很大,卷积神经网络可能会认为相似的颜色是不同颜色,从而导致网络不拟合。而且要用RGB565的格式作为输入的话,要修改的地方比较多。另一方面,只改变输入的通道数并不能明显降低计算量,计算量主要受图像分辨率,和网络各层通道数影响。你可以尝试降低图像分辨率来减少计算量,不过这对于目标检测类的任务会有较大的性能损失。对于第2点,因为YoloFastestV2的作者使用的opencv读取图像,opencv读取的图像通道顺序默认是BGR,而一般RGB和BGR顺序下的网络性能差别不大,我也就没有对通道顺序进行修改。

好的 感谢大佬

zxzxzxzxzxzxzxzxzxzxzx commented 3 months ago

from common_utils.utils import tfOrtModelRuner 您好,请问一下这个包要如何配置呢?我是conda的环境

HomiKetalys commented 3 months ago

from common_utils.utils import tfOrtModelRuner 您好,请问一下这个包要如何配置呢?我是conda的环境

@zxzxzxzxzxzxzxzxzxzxzx 这个就是本项目中的工具文件夹,你执行前需要将项目根目录加入PYTHONPATH image

zxzxzxzxzxzxzxzxzxzxzx commented 3 months ago

非常感谢您的解答,问题已经解决啦。我们目前正在探索在yolofastv2训练自己数据集的模型,然后部署到GD32H757ZM中,你的项目给我们提供了一个很棒的思路,我们会给您一键三连大大。