1.前言
从1956年AI概念的提出至今,人工智能技术已发展了60多年,22年12月底ChatGPT的横空出世使得生成式AI的全球爆火,ChatGPT的火爆出圈,也相继出现了文心一言、Midjourney等创新性的 AI 产品,互联网掀起的 AI 风暴可以说已经席卷了全球。
一系列AI产品的出现当然引起了诸多的关注,年初我也作为一名AI小白进入了AI领域,通过时长近一年的学习和实践,总算对深度学习和计算机视觉方面有一定的了解了,这更加坚定了我继续努力探索AI世界的信心,我觉得努力就会有回报。下面我将通过项目经验进行我的年度总结与心得分享。
2.项目总结与心得
年初准备进行学习AI的时候,恰巧碰到遇到学校也开设了这门选修课程,自然是非常高兴的参加了课程的学习。通过自己和学习小组的共同决定,我们选择了深度学习和计算机视觉方向进行了学习,并且也进行了实践,对于一个AI小白来说效果还是不错的。
深度学习和计算机视觉是AI领域两个比较核心的模块,是相互关联的,也经常一起被用于实际问题中,我们小组课题是研发一款影响识别功能的方案。可能是比较感兴趣的原因,我们课下也经常一起学习探讨,共同进步。下面大致总结项目中的一些知识。
我们的设计思路是,第一步先进行数据收集和与处理工作。
影像识别一般就包括一些医学影像,比如X射线,MRI等等影像数据,这些数据很好获得,我们小组是去学校附近的医院进行沟通,获得了一些废弃的影像数据等,或者从网络拉去也可,方式多样。收集数据后进行数据的标注,比如疾病部位或是异常情况,作为深度学习算法的训练标签。之后就是预处理工作,这里设计的比较复杂,包括去噪,归一化,裁剪等等操作,也是比较耗时的部分,结束后材料用于深度模型的训练。这里也应用到了计算机视觉的一些知识,令人印象深刻的就是系统可以自动提取影像特征。
这里我简单演示如何进行MRI影像数据的标注和预处理。
ini复制代码import numpy as npimport cv2
#标注
def annotate_image(image, annotations):
annotated_image = image.copy()
for annotation in annotations:
#在影像上绘制矩形边界框
x, y, w, h = annotation
cv2.rectangle(annotated_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
return annotated_image
#预处理
def preprocess_image(image):
#使用高斯滤波去噪
denoised_image = cv2.GaussianBlur(image, (3, 3), 0)
#将像素值映射到[0, 1]范围
normalized_image=cv2.normalize(denoised_image,None,0,1,cv2.NORM_MINMAX, dtype=cv2.CV_32F)
#根据需要进行裁剪操作
cropped_image = normalized_image[100:300, 100:300]
return cropped_image
#加载原始影像数据
image = cv2.imread('mri_image.jpg', 0)
#标注数据
annotations = [(50, 50, 100, 100), (200, 200, 150, 150)]
annotated_image = annotate_image(image, annotations)
#预处理数据
preprocessed_image = preprocess_image(image)
#显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Annotated Image', annotated_image)
cv2.imshow('Preprocessed Image', preprocessed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
实践远远比我们设计时困难,这也是很正常的。毕竟从实践过程中我也通过排除困难学习到了新的东西。然后是是我们学习的主题,深度学习了。我们选择了最常用的卷积神经网络(CNN),它是一个非常经典的深度学习模型,在处理图像数据方面表现也十分优异。通过使用数据对深度模型进行训练后,通过迭代模型参数,就能更准确的学习图像特征并进行一些诊断预测了。说起来几笔带过的过程,其实也花了不少精力,但是快有成果的时候,总能激励我们更加努力。
在模型部署和优化方面,我们选择了 Distribution of OpenVINO™工具套件来进行模型的部署,并且利用Intel® VTune™ Profiler对深度学习模型进行了性能优化,提高了计算效率。
大致步骤:
1.安装Intel® Distribution for Python和Intel® oneAPI Base Toolkit,确保安装适合的CPU的优化库和驱动程序。
2.使用Intel® VTune™ Profiler对深度学习模型进行性能分析,以识别瓶颈并调整参数。
ini复制代码import tensorflow as tffrom tensorflow.keras import layers, modelsfrom keras.applications.vgg16 import VGG16import numpy as npfrom PIL import Imageimport time
#加载
vgg_model = VGG16(weights='imagenet')
#输入数据
img_path = 'test.jpg'
img = Image.open(img_path)
img = img.resize((224, 224))
x = np.asarray(img)
x = np.expand_dims(x, axis=0)
#进行性能分析with tf.device('/CPU:0'):
start_time = time.time()
preds = vgg_model.predict(x)
end_time = time.time()
这里我们的项目使用预训练的VGG16模型,并对测试图片进行了推理,同时还使用了Intel® VTune™ Profiler进行了简单的性能分析。VTune Profiler挺强大的,可以使用VTune Profiler的各种分析工具来分析CPU使用情况、内存使用情况、I/O使用情况等,并识别瓶颈以便调整参数,推荐大家调优使用。
最后,我们进行了一些其他的工作,包括将学习模型集成到一些诊断系统中,设计了一些交互界面的交互逻辑等等,并进行了功能方面的验证。
我觉得有些东西是要通过实践经历才能有所体会,比如说我们收集影像数据等进行一些资源密集型的任务时,也要进行相关专业的学习,这也能提升我们的知识和经验,进行专业的交叉和融合;还有在模型训练和优化时,也不光会遇到我们预想的结果,往往要根据实际的情况进行训练和优化,这是纸上谈兵所不能比拟的;系统集成的时候,又要考虑系统稳定性与用户的体验等问题。总之,想要透彻的学习好一项知识,掌握理论仅仅只是开始~唯有实践能帮助我们熟练运用!
3.结语
上周我们小组提交了方案文档和训练模型,效果还不错,听老师说结课后还可以带我们搞搞其他的项目,非常期待又能学到新东西了。通过这个项目的实操,确实带给人不小的进步,我也深刻体会到了通过深度学习和计算机视觉的相互结合,能使得计算机能更加精确地理解和处理图像信息,也能应用到更多的领域。由于篇幅有限,没有给出一些核心代码等详细设计,有兴趣的小伙伴也可留言,我们共同学习,一起进步。
最后,我在思考AI如此强大的同时,也明白了虽然是站在”巨人”的肩膀上,也要更努力才能有更好的成果!2023转瞬即逝,期待2024AI会再有改变世界的创举,你我将一起见证!