这篇文章讲解: 采用华为云最新推出的Flexus云服务器X实例部署YOLOv3算法,完成图像分析、目标检测。
随着计算机视觉技术的飞速发展,深度学习模型如YOLOv3在图像识别和目标检测领域展现出了卓越的性能。为了满足日益增长的数据处理需求,本项目利用华为云最新推出的Flexus云服务器X实例的强大计算能力,部署YOLOv3算法以实现高效的图像分析与指定目标检测功能。通过将先进的算法与高性能云计算资源相结合,不仅能够处理大规模图像数据集,还能够保证实时性和准确性,这对于智能监控、自动驾驶等应用场景至关重要。
考虑到实际应用中对于灵活性和服务化的需求,在服务器上开发了一套后端程序,该程序提供了HTTP接口,允许外部客户端通过简单的API调用来上传图片。服务器端接收到请求后,将自动执行目标检测流程,并将分析结果反馈给客户端。这种方式极大地简化了客户端的应用开发流程,使得无需深入了解复杂的图像处理细节即可享受到高效的目标检测服务。此架构不仅增强了系统的可访问性,也为未来的扩展和维护提供了便利。
华为云Flexus云服务器X实例是由国家科技进步奖获得者、华为公司Fellow及华为云首席架构师顾炯炯牵头研发的一款创新性云服务器。该实例基于华为的擎天QingTian架构、瑶光云脑和盘古大模型等核心技术,是业界首款应用驱动的柔性算力云服务器,适用于高科技、零售、金融、游戏等多个行业的通用工作负载场景,如网络应用、数据库、虚拟桌面、分析索引、微服务及持续集成/持续部署(CI/CD)等。
传统的云服务器通常只提供固定的CPU和内存规格,无法精准匹配用户的实际资源需求,导致资源利用效率低下。相比之下,华为云Flexus X实例提供了更为灵活的算力配置,支持超过100种不同的CPU与内存配比,最高可达到3:1的比例,从而更好地适应各种业务应用的需求。
Flexus X实例不仅在性能方面表现出色,还内置了智能应用调优算法,结合华为技术专家多年积累的经验,在基础模式下,其GeekBench单核及多核跑分可达业界同规格独享型实例的1.6倍。在性能模式下,Flexus X实例的性能超过了同类C系/G系/R系及S系旗舰型云主机的标准。
Flexus X实例还配备了X-Turbo加速技术和大模型底层智能调度技术,为关键业务应用提供加速功能。例如,在Flexus X实例上部署的MySQL、Redis和Nginx等应用,其性能最高可达业界同规格独享型实例的6倍(MySQL性能),长期运行时也能保持2倍的性能优势。
Flexus X实例在定价策略上定位于经济型级别,但其性能表现却超越了旗舰级云主机。通过动态业务画像规格优化等技术,用户在将业务从本地服务器或其他云服务提供商迁移到Flexus X实例时,可以节省高达30%的算力成本,从而实现业务的全面提速和效能提升,享受到云基础设施的显著改进体验。
YOLO(You Only Look Once)算法是一种用于实时物体检测的深度学习框架,它改变了传统目标检测方法中逐步细化的过程,通过一次性地对整个图像进行预测来直接生成边界框和类别概率,从而显著提高了检测速度。与传统的基于区域提议(如R-CNN系列算法)的方法不同,YOLO将目标检测视为一个回归问题,直接从输入图像到边界框坐标和类别标签进行映射,这使得YOLO能够在保持较高检测精度的同时,实现极快的检测速度。
YOLO的核心优势在于其独特的检测方式。它将输入图像分割成固定大小的网格,并且每个网格负责预测出现在该网格内的对象。每个网格单元会生成一组边界框及其对应的置信度分数,其中置信度表示该边界框内存在某个特定类别的对象的概率。这种方法确保了模型可以同时处理多个对象,并且能够有效地检测小尺寸的对象,这是许多其他检测框架所难以做到的。
随着时间的发展,YOLO经历了多个版本的迭代,从最初的YOLOv1到后来的YOLOv2、YOLOv3以及更先进的YOLOv4和YOLOv5等版本。每一个新版本都在前一版本的基础上进行了改进,提高了检测精度和速度。例如,YOLOv3引入了多尺度特征融合,可以在不同的尺度上进行检测,从而提升了小物体的检测效果;而YOLOv4则进一步优化了网络结构,采用了更强大的骨干网络,并结合了一系列最新的改进技术,如Mish激活函数、SPP模块等,使得其在速度和精度之间达到了更好的平衡。
YOLO算法因其高效的速度和良好的检测性能,在自动驾驶、安防监控、无人机影像分析等多个领域得到了广泛的应用。它的设计理念强调实时性和实用性,使其成为构建实时视觉系统的理想选择。
客户端应用程序采用Qt框架开发,为用户提供一个直观且高效的界面,以便实时采集摄像头图像并调用服务器上部署的YOLO算法完成图像的目标分类检测。Qt是一个跨平台的应用程序开发框架,以其丰富的图形用户界面组件和强大的网络通信功能著称,非常适合用于开发此类需要图形展示与网络交互的应用程序。
客户端的主要功能包括实时视频流的捕获与显示。通过集成Qt的多媒体模块,客户端可以轻松地与各种类型的摄像头进行连接,捕捉实时视频流,并在界面上呈现给用户。用户可以通过简单的操作启动或停止视频捕获,调整摄像头参数,如分辨率和帧率,以适应不同的使用场景。
在视频流捕获的基础上,客户端还实现了与服务器的无缝对接。当客户端捕获到视频帧后,会将其发送至预先配置好的服务器地址。服务器端运行着之前部署的YOLO目标检测算法,接收到来自客户端的图像数据后,将对其进行处理,识别出图像中的各类目标,并计算出相应的边界框和类别标签。处理完成后,服务器会将包含检测结果的数据包回传给客户端。
客户端接收到检测结果后,会在视频画面上叠加相应的边界框和标签信息,直观地显示出识别出的目标类型及其位置。这一过程几乎是在实时进行的,使得用户能够立即看到目标检测的效果。这样的功能对于监控应用特别有用,可以帮助用户迅速识别出视频流中的关键信息。
客户端提供附加功能,比如保存带有检测结果的图像、记录视频片段,以及根据用户的偏好设置自定义的检测阈值或目标类别过滤等。通过这样的设计,客户端不仅能够满足基本的目标检测需求,还能根据具体的应用场景进行灵活的定制,提高用户体验和系统的实用性。
Qt制作的界面,运行目标检测的结果:
链接:https://www.huaweicloud.com/
在官网首页的轮播图里可以看到,有Flexus云服务器的宣传。这是华为云匠心打造的下一代跃级产品,面向中低负载场景,性能倍增、体验跃级的服务器。
在产品页面,也可以看到Flexus云服务的选项,点击进去选购服务器。
链接:https://www.huaweicloud.com/product/flexus.html
在选购页面可以看到服务器推广器件,1年36块钱。 每个月的流量是100G,对于一些访问量不高的服务器或者测试用是非常合适的。
当前我要选择的服务器是:Flexus云服务器X实例 ,点击Flexus系列产品,选择X实例。Flexus云服务器X实例符合:柔性算力,六倍性能,旗舰体验,覆盖高科技、零售、金融、游戏等行业大多数通用工作负载场景。
针对时延敏感型业务请选择靠近您业务的区域,以降低网络时延,提高访问速度;针对和存量云产品有内网互通需求的业务,请选择和存量产品相同的区域。
我这选择ubuntu系统,用来搭建服务器。这个根据自己的情况选择,自己适合那一种就选择哪一种。
我选择150G大小。
设置好服务器的名字(如果你有多个服务器,为了自己好区别)和系统的登录密码。
云备份这个不买。有需要自己可以购买。
购买成功。
创建成功之后,邮箱会收到提示的。
链接:https://console.huaweicloud.com/ecm
在控制台可以看到服务器的详情。
点击服务器的名称,可以进去到详情页面。
填入设置好的密码。
登录成功。
自带的在浏览器里运行,每次需要打开浏览器,文件也不方便上传下载。
所以,这里开发阶段,我采用的 FinalShell登录到服务器。
新建SSH连接,输入连接信息。
登录成功。
接下来就可以进行开发了。
YOLO算法官网介绍:https://pjreddie.com/darknet/yolo/
You only look once (YOLO) is a state-of-the-art, real-time object detection system. On a Pascal Titan X it processes images at 30 FPS and has a mAP of 57.9% on COCO test-dev.
You Only Look Once (YOLO) 是最先进的实时目标检测系统。在 Pascal Titan X 上,它以 30 FPS 处理图像,并且在 COCO 测试开发上的 mAP 为 57.9%。
Comparison to Other Detectors
YOLOv3 is extremely fast and accurate. In mAP measured at .5 IOU YOLOv3 is on par with Focal Loss but about 4x faster. Moreover, you can easily tradeoff between speed and accuracy simply by changing the size of the model, no retraining required!
与其他探测器的比较
YOLOv3 非常快速且准确。在 mAP 中,测量结果为 0.5 IOU YOLOv3 与 Focal Loss 相当,但速度快约 4 倍。此外,只需更改模型的大小即可轻松在速度和准确性之间进行权衡,无需重新训练!
(1)安装darknet
root@flexusx-1a58:~# mkdir yolov3
root@flexusx-1a58:~# cd yolov3/
root@flexusx-1a58:~# git clone https://github.com/pjreddie/darknet
root@flexusx-1a58:~# cd darknet
root@flexusx-1a58:~# make
注意,如果clone失败,多测几次就行了。
下载完成:
编译过程中:
编译完成:
(2)下载权重文件
root@flexusx-1a58:~# wget https://pjreddie.com/media/files/yolov3.weights
yolov3.weights 是 YOLOv3 网络训练得到的权重文件,存储了神经网络中每个层次的权重和偏置信息。
在cfg/目录下已经包含了yolov3对应的配置文件。
下载过程:
(3)运行detector
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
运行输出的信息:
layer filters size input output
0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0.299 BFLOPs
1 conv 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1.595 BFLOPs
.......
105 conv 255 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 255 0.353 BFLOPs
106 detection
truth_thresh: Using default '1.000000'
Loading weights from yolov3.weights...Done!
data/dog.jpg: Predicted in 0.029329 seconds.
dog: 99%
truck: 93%
bicycle: 99%
检测分类:
root@flexusx-1a58:~/yolov3/darknet# ./darknet detect cfg/yolov3.cfg yolov3.weights data/horses.jpg
识别结果:
识别的结果可以直接打开。
person
bicycle
car
motorbike
aeroplane
bus
train
truck
boat
traffic light
fire hydrant
stop sign
parking meter
bench
bird
cat
dog
horse
sheep
cow
elephant
bear
zebra
giraffe
backpack
umbrella
handbag
tie
suitcase
frisbee
skis
snowboard
sports ball
kite
baseball bat
baseball glove
skateboard
surfboard
tennis racket
bottle
wine glass
cup
fork
knife
spoon
bowl
banana
apple
sandwich
orange
broccoli
carrot
hot dog
pizza
donut
cake
chair
sofa
pottedplant
bed
diningtable
toilet
tvmonitor
laptop
mouse
remote
keyboard
cell phone
microwave
oven
toaster
sink
refrigerator
book
clock
vase
scissors
teddy bear
hair drier
toothbrush