Mini
苹果发布iMac Mini,体积小巧,性能强劲 #生活常识# #科技新品#
目录 引言一、Mini - Omni 模型诞生的背景二、Mini - Omni 模型的主要特点三、Mini - Omni 模型的架构解析四、Mini - Omni 模型的训练方法五、Mini - Omni 模型的应用前景六、Mini - Omni 模型本地部署安装1. 创建新的conda环境2. 克隆仓库代码3. 安装mini-omni依赖4. 安装ffmpeg5. 启动服务6. 运行 gradio 演示 结语引言
在当今人工智能飞速发展的时代,多模态交互成为了新的研究热点与发展趋势。从单纯的文本交互到图像、语音等多模态信息的融合处理,AI 正在不断突破界限。其中,语音多模态模型在智能语音助手、智能客服等领域具有巨大的应用潜力。而 Mini - Omni 模型的出现,为语音多模态领域带来了新的活力与机遇。
一、Mini - Omni 模型诞生的背景
随着大模型技术的蓬勃发展,全球 AI 领域已经步入了多模交互的新纪元。2024 年 5 月 OpenAI 推出多模态模型 GPT4O 之后,语音文本多模态大模型的研究热度持续攀升。然而,现有的语音对话系统存在着一些亟待解决的问题。例如,很多模型无法有效地理解语音中的非文本信息,导致交互体验不够流畅和智能。同时,AI 回复迟缓的实时性问题也在很大程度上限制了语音交互系统在一些对实时性要求较高场景中的应用。在这样的背景下,Mini - Omni 模型应运而生,它旨在解决这些关键问题,为语音多模态交互领域开辟新的道路。
二、Mini - Omni 模型的主要特点
实时语音到语音能力Mini - Omni 具备强大的实时语音到语音的交互能力。用户可以直接通过语音与模型进行自然流畅的对话,模型会实时输出语音响应。这种实时性和语音交互的便捷性,使得用户与模型之间的交互变得更加高效和自然,无论是在日常生活还是在专业领域的应用中都具有极大的优势。
文本和音频同时生成该模型的一个独特之处在于它能够同时生成文本和音频。这种“边想边说”的能力确保了对话流程的连贯性和流畅性。在交互过程中,模型一边生成准确的文本信息,一边将其转化为自然的音频输出,让用户可以在听到语音的同时,也能查看对应的文本内容,极大地提高了信息传递的效率和用户体验。
流式音频输出Mini - Omni 支持流式音频输出,这对于那些对实时性要求较高的交互应用场景来说是至关重要的。例如在实时语音通话、在线客服等场景中,模型能够实时地将生成的音频片段输出,减少用户等待时间,提供更加流畅和自然的交互体验。
批量推理它还具备高效的批量推理能力。通过“音频到文本”和“音频到音频”的批量推理方法,Mini - Omni 能够在短时间内处理大量的音频数据,进一步提升了模型的性能和响应速度。这种批量推理能力在处理大规模语音数据时具有明显的优势,可以有效地提高系统的整体效率。
三、Mini - Omni 模型的架构解析
Mini - Omni 模型基于 Qwen 2 - 0.5b 架构构建,Qwen 2 - 0.5b 是一种具有 24 个模块、内部维度为 896 的 Transformer 架构。在此基础上,模型结合了 Whisper - small 编码器来有效地处理语音输入。在输出侧,音频采用离散编码的方式,通过音频解码头和文本解码头同时进行文本和语音的解码。然后,将两者的表征进行特征融合作为下一步的输入。这种独特的架构设计使得模型能够高效地处理语音和文本信息,实现了多模态信息的无缝融合和交互。
四、Mini - Omni 模型的训练方法
“Any Model Can Talk”训练框架Mini - Omni 提出了“Any Model Can Talk”的训练框架,该框架分为三个关键阶段。
首先是模态对齐阶段,在这个阶段主要是增强文本模型理解和生成语音的能力。通过特定的算法和数据处理方式,让模型能够更好地理解语音信息,并将其与文本信息进行有效的对齐和融合。
其次是适应训练阶段,主要训练模型在给定音频输入时的文本推理能力。通过大量的音频数据和对应的文本数据进行训练,让模型能够快速准确地从音频中提取关键信息,并进行合理的文本推理。
最后是多模态微调阶段,在这个阶段使用全面的数据对整个模型进行微调。通过对模型的各个参数进行精细调整,使模型具备更加出色的语音交互能力,同时尽可能地保留原始模型的推理能力,确保模型在多模态交互场景下的性能和稳定性。
训练过程中的数据处理在训练过程中,模型使用了多个语音识别数据集来建立基础的语音能力。这些数据集涵盖了不同类型的语音样本和场景,为模型提供了丰富的训练素材。同时,还使用了其他相关数据集来保留文本准确性和进行多模态交互训练,确保模型在处理文本和多模态信息时的准确性和高效性。
五、Mini - Omni 模型的应用前景
作为首个开源的端到端实时语音多模态模型,Mini - Omni 为语音交互领域的研究和应用提供了新的可能性。
在智能语音助手领域,它可以提供更加自然流畅的语音交互体验,让用户可以更加方便快捷地获取信息和完成各种操作。无论是查询天气、设置提醒还是进行智能家居控制等操作,Mini - Omni 都能提供高效的语音交互服务。
在智能客服领域,它的实时语音到语音能力和批量推理能力可以有效地提高客服效率和服务质量。客服人员可以通过更加自然的语音交互与客户进行沟通,快速解决客户问题,提高客户满意度。
在语音交互游戏等场景中,Mini - Omni 也有着广阔的应用前景。它可以为游戏玩家提供更加沉浸式的语音交互体验,让玩家可以通过语音指令更加方便地控制游戏角色和完成游戏任务。
六、Mini - Omni 模型本地部署安装
1. 创建新的conda环境
conda create -n omni python=3.10 conda activate omni 12
2. 克隆仓库代码
git clone https://github.com/gpt-omni/mini-omni.git 1
下载完成如下:
3. 安装mini-omni依赖
cd mini-omni pip install -r requirements.txt 12
安装如下:
4. 安装ffmpeg
sudo apt update sudo apt-get install ffmpeg 12
安装如下:
5. 启动服务
注意要提前切换到mini-omni环境(conda activate omni)
cd mini-omni python3 server.py --ip '0.0.0.0' --port 60808 12
服务启动如下:
6. 运行 gradio 演示
API_URL=http://0.0.0.0:60808/chat python3 webui/omni_gradio.py 1
注意:如果启动omni_gradio报错如下:
/root/miniconda3/lib/python3.10/site-packages/gradio/analytics.py:106: UserWarning: IMPORTANT: You are using gradio version 4.42.0, however version 4.44.1 is available, please upgrade. -------- warnings.warn( ERROR: Exception in ASGI application Traceback (most recent call last): File "/root/miniconda3/lib/python3.10/site-packages/pydantic/type_adapter.py", line 270, in _init_core_attrs self._core_schema = _getattr_no_parents(self._type, '__pydantic_core_schema__') File "/root/miniconda3/lib/python3.10/site-packages/pydantic/type_adapter.py", line 112, in _getattr_no_parents raise AttributeError(attribute) AttributeError: __pydantic_core_schema__ During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/root/miniconda3/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 406, in run_asgi result = await app( # type: ignore[func-returns-value] File "/root/miniconda3/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ return await self.app(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/fastapi/applications.py", line 1054, in __call__ await super().__call__(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/starlette/applications.py", line 113, in __call__ await self.middleware_stack(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/starlette/middleware/errors.py", line 187, in __call__ raise exc File "/root/miniconda3/lib/python3.10/site-packages/starlette/middleware/errors.py", line 165, in __call__ await self.app(scope, receive, _send) File "/root/miniconda3/lib/python3.10/site-packages/gradio/route_utils.py", line 766, in __call__ await self.simple_response(scope, receive, send, request_headers=headers) File "/root/miniconda3/lib/python3.10/site-packages/gradio/route_utils.py", line 782, in simple_response await self.app(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 62, in __call__ await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app raise exc File "/root/miniconda3/lib/python3.10/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/root/miniconda3/lib/python3.10/site-packages/starlette/routing.py", line 715, in __call__ await self.middleware_stack(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/starlette/routing.py", line 735, in app await route.handle(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/starlette/routing.py", line 288, in handle await self.app(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/starlette/routing.py", line 76, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "/root/miniconda3/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app raise exc File "/root/miniconda3/lib/python3.10/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/root/miniconda3/lib/python3.10/site-packages/starlette/routing.py", line 73, in app response = await f(request) File "/root/miniconda3/lib/python3.10/site-packages/fastapi/routing.py", line 291, in app solved_result = await solve_dependencies( File "/root/miniconda3/lib/python3.10/site-packages/fastapi/dependencies/utils.py", line 658, in solve_dependencies ) = await request_body_to_args( # body_params checked above File "/root/miniconda3/lib/python3.10/site-packages/fastapi/dependencies/utils.py", line 883, in request_body_to_args fields_to_extract = get_cached_model_fields(first_field.type_) File "/root/miniconda3/lib/python3.10/site-packages/fastapi/_compat.py", line 658, in get_cached_model_fields return get_model_fields(model) File "/root/miniconda3/lib/python3.10/site-packages/fastapi/_compat.py", line 284, in get_model_fields return [ File "/root/miniconda3/lib/python3.10/site-packages/fastapi/_compat.py", line 285, in <listcomp> ModelField(field_info=field_info, name=name) File "<string>", line 6, in __init__ File "/root/miniconda3/lib/python3.10/site-packages/fastapi/_compat.py", line 110, in __post_init__ self._type_adapter: TypeAdapter[Any] = TypeAdapter( File "/root/miniconda3/lib/python3.10/site-packages/pydantic/type_adapter.py", line 257, in __init__ self._init_core_attrs(rebuild_mocks=False) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/type_adapter.py", line 135, in wrapped return func(self, *args, **kwargs) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/type_adapter.py", line 277, in _init_core_attrs self._core_schema = _get_schema(self._type, config_wrapper, parent_depth=self._parent_depth) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/type_adapter.py", line 95, in _get_schema schema = gen.generate_schema(type_) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 655, in generate_schema schema = self._generate_schema_inner(obj) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 908, in _generate_schema_inner return self._annotated_schema(obj) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 2028, in _annotated_schema schema = self._apply_annotations(source_type, annotations) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 2107, in _apply_annotations schema = get_inner_schema(source_type) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_schema_generation_shared.py", line 83, in __call__ schema = self._handler(source_type) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 2189, in new_handler schema = metadata_get_schema(source, get_inner_schema) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 2185, in <lambda> lambda source, handler: handler(source) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_schema_generation_shared.py", line 83, in __call__ schema = self._handler(source_type) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 2088, in inner_handler schema = self._generate_schema_inner(obj) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 929, in _generate_schema_inner return self.match_type(obj) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 1029, in match_type return self._match_generic_type(obj, origin) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 1058, in _match_generic_type return self._union_schema(obj) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 1378, in _union_schema choices.append(self.generate_schema(arg)) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 655, in generate_schema schema = self._generate_schema_inner(obj) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 929, in _generate_schema_inner return self.match_type(obj) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 1038, in match_type return self._unknown_type_schema(obj) File "/root/miniconda3/lib/python3.10/site-packages/pydantic/_internal/_generate_schema.py", line 558, in _unknown_type_schema raise PydanticSchemaGenerationError( pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for <class 'starlette.requests.Request'>. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. For further information visit https://errors.pydantic.dev/2.9/u/schema-for-unknown-type 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
解决办法:
先更新gradio版本
pip install gradio --upgrade -i https://mirrors.cloud.tencent.com/pypi/simple 1
再执行
API_URL=http://0.0.0.0:60808/chat python3 webui/omni_gradio.py 1
启动成功如下:
体验测试
打开浏览器,访问地址:http://localhost:7860/
注意:更多相关资料请查看https://github.com/gpt-omni/mini-omni
结语
综上所述,Mini - Omni 模型在语音多模态交互领域展现出了强大的实力和巨大的应用潜力。它的实时语音到语音能力、文本和音频同时生成能力、流式音频输出能力以及高效的批量推理能力等特点,使其在智能语音助手、智能客服、语音交互游戏等多个领域都有着广泛的应用前景。同时,其独特的模型架构和训练方法也为语音多模态模型的研究和发展提供了新的思路和方法。随着技术的不断发展和完善,我们有理由相信 Mini - Omni 模型将在未来的语音多模态交互领域发挥更加重要的作用,为人们的生活和工作带来更多的便利和创新。希望更多的研究人员和开发者能够关注和深入研究 Mini - Omni 模型,共同推动语音多模态交互领域的发展与进步。
更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践 其他专栏可以查看博客主页
作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方二维码,加入技术交流群,开启编程探索之旅。
精心准备500本编程经典书籍、AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!
网址:Mini https://www.yuejiaxmz.com/news/view/549370
相关内容
圣诞风mini碱水包(面包挂件制作)Mini新发了一辆“阳光房”,开它出门=自备客厅
小而有料 五款MINI厨房收纳案例
探索未来家居控制中心:Mini Graph Card for Home Assistant
北京·24HOURS共享共乐MINI生活中心
驾驭熊猫mini,迸发青春能量,都市出行省心省力!
全智能化家居+智能化社区=智慧MINI国际
别怕塞车,熊猫mini带你开启快乐通勤模式!
智能生活助手小米小爱音箱mini 音箱界的高材生
双11百吋电视新观察:Mini LED、AI当道,Vidda引领