# 自己打造一个深度学习框架 for java
## 前言
从16年开始利用空余时间研究深度学习的方面,由于工作的原因,最熟悉的编程语言就是java,所以框架的编程语言自然而然就使用了java。自己打造框架的初衷就是为了更加深入了解各个算法、模型、实现的原理和思路。
## 框架介绍
Omega-AI:基于java打造的深度学习框架,帮助你快速搭建神经网络,实现训练或测试模型,支持多线程运算,框架目前支持BP神经网络、卷积神经网络、循环神经网络、vgg16、resnet、yolo、lstm、transformer、gpt2等模型的构建,目前引擎最新版本支持CUDA和CUDNN两种GPU加速方式,关于GPU加速的环境配置与jcuda版本jar包的对应依赖,欢迎添加QQ群([119593195]())进行技术讨论和交流,别忘了给Omega-AI项目点个star,项目需要你们的支持。
## 源码地址:
[https://gitee.com/iangellove/omega-ai](https://gitee.com/iangellove/omega-ai)
[https://github.com/iangellove/Omega-AI](https://github.com/iangellove/Omega-AI)
## 依赖
由于omega-engine-v4-gpu加入了jcuda支持,所以omega-engine-v4-gpu需要安装与jcuda版本对应的cuda,如果您的机器安装的CUDA版本是11.7.x,那么对应omega-engine需要引入的jcuda 11.7.0版本。
## 快速开始
##### 1.检查当前CUDA版本
```txt
nvcc --version
```
##### 2.安装CUDA与CUDNN
https://developer.nvidia.com/cuda-toolkit-archive
##### 3.引入或下载与当前CUDA版本对应的omega-engine包
[win-cu-x.x 版本包列表](#版本依赖包)
```xml
<dependency>
<groupId>io.gitee.iangellove</groupId>
<artifactId>omega-engine-v4-gpu</artifactId>
<version>win-cu11.7-v1.0-beta</version>
</dependency>
```
##### 4.初始化GPU环境与释放显存
```java
public static void main(String[] args) {
try {
//初始化GPU环境获取Context对象
CUDAModules.initContext();
CNNTest cnn = new CNNTest();
cnn.cnnNetwork_cifar10();
} finally {
//释放所有显存
CUDAMemoryManager.free();
}
}
```
## 系统参数
由于训练vgg16模型的参数比较庞大,所以在部署项目的时候需要对jvm内存进行调整.
调整事例如:-Xmx20480m -Xms20480m -Xmn10240m
## Demo展示
### 卷积神经网络系列
#### [基于卷积神经网络mnist手写数字识别](http://120.237.148.121:8011/mnist)
![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230413155027.png)
### yolo目标识别算法系列
#### [基于yolo算法目标识别](#yolo-banana-detection-demo)
![输入图片说明](images/11.png)![输入图片说明](images/49.png)![输入图片说明](images/32.png)![输入图片说明](images/41.png)
#### [基于yolov3口罩佩戴识别](#yolov3-mask-demo口罩佩戴识别)
![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230901093228.png)![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230901093408.png)![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230901094543.png)![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230901095142.png)
#### [基于yolov3安全帽佩戴识别](#yolov3-helmet-demo安全帽佩戴识别)
![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230901093438.png)![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230901093541.png)![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230901093622.png)![输入图片说明](images/QQ%E6%88%AA%E5%9B%BE20230901093658.png)
#### [基于yolov7智能冰柜商品识别](#yolov7-sm-demo智能冰柜商品识别)
![输入图片说明](images/sm1.png)![输入图片说明](images/sm2.png)![输入图片说明](images/sm3.png)![输入图片说明](images/sm4.png)
### GAN对抗生成神经网络系列
#### [基于GAN生成对抗神经网络实现生成手写体数字图片](#gan-mnist-demo-生成手写数字)
![输入图片说明](images/gan-3000.gif)
#### [基于DCGAN生成对抗神经网络实现生成动漫头像图片](#dcgan-anime-demo-生成动漫头像)
![输入图片说明](images/dcgan-20.gif)
### 时序模型系列
#### [基于RNN循环神经网络实现小说生成器](#rnn-中文小说生成器)
##### 斗破苍穹前50章原文
```txt
月如银盘,漫天繁星。山崖之颠,萧炎斜躺在草地之上,嘴中叼中一根青草,微微嚼动,任由那淡淡的苦涩在嘴中弥漫开来举起有些白皙的手掌,挡在眼前,目光透过手指缝隙,遥望着天空上那轮巨大的银月。唉想起下午的测试,萧炎轻叹了一口气,懒懒的抽回手掌,双手枕着脑袋,眼神有些恍惚十五年了呢低低的自喃声,忽然毫无边际的从少年嘴中轻吐了出来。在萧炎的心中,有一个仅有他自己知道的秘密:他并不是这个世界的人,或者说,萧炎的灵魂,并不属于这个世界,他来自一个名叫地球的蔚蓝星球,至于为什么会来到这里,这种离奇经过,他也无法解释,不过在生活了一段时间之后,他还是后知后觉的明白了过来:他穿越了!随着年龄的增长,对这块大陆,萧炎也是有了些模糊的了解大陆名为斗气大陆,大陆上并没有小说中常见的各系魔法,而斗气,才是大陆的唯一主调!在这片大陆上,斗气的修炼,几乎已经在无数代人的努力之下,发展到了巅峰地步,而且由于斗气的不断繁衍,最后甚至扩散到了民间之中,这也导致,斗气,与人类的日常生活,变得息息相关,如此,斗气在大陆中的重要性,更是变得无可替代!因为斗气的极端繁衍,同时也导致从这条主线中分化出了无数条斗气修炼之法,所谓手有长短,分化出来的斗气修炼之法,自然也是有强有弱。经过归纳统计,斗气大陆将斗气功法的等级,由高到低分为四阶十二级:天.地.玄.黄!而每一阶,又分初,中,高三级....................
```
##### 生成器效果(pickTopN:N=3,狗屁不通)
```txt
这个故事所造成的后果,便是造就了大批每天东在这样年,前,萧仅有是自己的萧的摇了摇头,道,就等因为炼了,才造就出三的天修炼天,的同样非也是有些有些异的儿一直在倒是,废,的分了,然便想要不定斗气大月月月月的定。透明的,方价脸有多中为不可是。你说完师到后气会让对,我不可以时,他倒是在乎这种高到功法的斗技出其种有些不愿的吸手一道,斗气,萧家现上,是这事,不是这个修有程体的什纸契到这片的小脸!三老,我光在萧战一巴掌,双中,是一个灵到的常识。心吧?望着萧炎那些神有些恍点不想受你的美的,用气忽然,传进你耳枚的属散,另次我前便是对着身空的长出身也只有想起,不,萧炎哥以说的造,的时候,他的道:你修门成为自然是各种天材少年老,一声冷静的望着对面的在一,手中,了下来的事,,你向了角落阵嘲笑,微有着不份还眼角散的,萧炎牙齿在桌面,上下没被等级之人的强化,并且他这老难,还是难去人的说过别的功,而且这几年,还要是分,同,你的要求,这几年实条,听过你有一年的,,你成就是我萧炎的面庞,萧战叹了口沾染鲜之的手一,在白纸之名为斗成为你!你是没搞的鬼?嘿人当失也了口之事发。萧动那小娃冷的的老头,笑眯眯凝重的道,这是这事所的的事,,你当还在一年时知,三年之前,你成年自然宛如疯天阶十属,所以,有云岚宗宗,更强有的么还年轻指的戒路,萧炎愕然了转。萧叔之时,萧炎却才有一星大者,在真真切切的。当药的,庞一瞪,手指惊颤的斗着萧炎心里一好气得俏脸忽些,不炎轻重的:自然也造就了他不的老师,云岚一宗,虽然有家,小脸,那双宛如轻疑般待遇这老然药,所的,这里,有种,都�