Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java基础-封装、继承、多态

Java基础-封装、继承、多态

作者头像
越陌度阡
发布于 2024-05-24 07:07:08
发布于 2024-05-24 07:07:08
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

Java是一门面向对象非常好的语言,拥有面向对象的三个基本特征:封装、继承、多态。

1. 什么是封装?

封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

1.1. 封装的规则

1. 将类的某些信息隐藏在类的内部,不允许外部程序直接访问;

2. 通过该提供的方法来实现对隐藏信息的操作和访问;

1.2. 封装的步骤

1. 修改属性为私有设为private;

2. 创建getter和setter方法,设为public用于属性的读写;

3. 在gettter和setter方法中加入属性控制语句,用于对属性的合法进行判断;

1.3. 封装的实现

1. 封装一个学生类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Student {

    private String name;
    private int age;

    // 获取学生姓名
    public String getName() {
        return name;
    }
    // 设置学生姓名
    public void setName(String name) {
        this.name = name;
    }

    // 获取学生年龄
    public int getAge() {
        return age;
    }

    // 设置学生年龄
    public void setAge(int age) {
        this.age = age;
    }

    // 无参构造函数
    public Student(){


    }

    // 有参构造函数
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

}

2. 调用学生类实例化对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class StudentTest {
    public static void main(String[] args){
        // 实例化一学生
        Student student = new Student();
        // 设置学生姓名
        student.setName("aiguangyuan");
        // 设置学生年龄
        student.setAge(30);
    }
}

2. 什么是继承?

继承是面向对象的三大特性之一,可以使子类具有父类的属性和方法,还可以在子类中重新定义、追加属性和方法。当多个类中存在相同的属性和方法,使用继承模式将每个子类相同代码直接抽取出来放到父类中。

2.1. 继承的相关概念及实现

1. 父类:也被称为基类、超类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;

public class Parent {

    protected   String name;
    protected   int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

2. 子类:也被称为派生类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;

public class Son extends Parent{
    public void  work(){
        System.out.println("我是"+this.name+",今年"+this.age+"岁,我正在写代码");
    }
}

3. 写一个类进行测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;

public class Test {

    public static void main(String[] args) {

        Son son = new Son();

        son.setAge(20);
        son.setName("Mark");

        int age = son.getAge();
        String name = son.getName();

        System.out.println(age);
        // 20
        System.out.println(name);
        // Mark
        son.work();
        // 我是Mark,今年20岁,我正在写代码

    }
}
2.2. 继承的优缺点

1. 继承的优点

提高了代码的复用性,多个类相同的成员属性和方法可以放到一类中;

提高了代码的复用性,如果方法的代码需要修改,只需修改一处即可;

2. 继承的缺点;

继承让类与类之间产生了关系,类的耦合性也增加了,当父类发生变化时,子类也不得不跟着变化,削弱了子类的独立性;

2.3. 继承中变量的访问规则

1. 首先在子类局部范围中查找;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Son extends Parent{
    public int age = 20;
    public void show(){
         int age = 22;
         System.out.println("当前的年龄为:"+age);
         // 当前的年龄为:22
    }
}

2. 如果子类局部范围中查找没有,就在子类成员范围查找;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Son extends Parent{
    public int age = 20;
    public void show(){
         // int age = 22;
         System.out.println("当前的年龄为:"+age);
         // 当前的年龄为:20
    }
}

3. 如果在子类局部范围和子类成员范围查找都没有,就在父类成员查找;

父类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Parent {
    public  int age = 18;
    public  int height = 175;
    public  int weight = 120;
}

子类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Son extends Parent{
    // public int age = 20;
    public void show(){
         // int age = 22;
         System.out.println("当前的年龄为:"+age);
         // 当前的年龄为:18
    }
}

4. 子类局部范围中访问子类成员范围使用this;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Son extends Parent{
    public int age = 20;
    public void show(){
         int age = 22;
         System.out.println("当前的年龄为:"+this.age);
         // 当前的年龄为:20
    }
}

5. 子类局部范围中访问父类成员范围使用super;

父类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Parent {
    public  int age = 18;
    public  int height = 175;
    public  int weight = 120;
}

子类中使用父类成员:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Son extends Parent{
    public int age = 20;
    public void show(){
         int age = 22;
         System.out.println("当前的年龄为:"+super.age);
         // 当前的年龄为:18
    }
}
2.4. 继承中构造方法的访问规则

子类中所有的构造方法默认都会访问父类中的无参构造方法。

因为子类会继承父类中的数据,所以子类初始化之前,需要对父类进行初始化。

每个子类构造方法的第一句默认都是super()。

如果父类中没有无参构造方法,只有带参构造方法,怎么办?

1. 父类中自己单独定义一个无参构造方法;

2. 通过super关键字显示调用父类的有参构造方法;

父类如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.temp;
public class Parent {
    // 父类中没有无参构造方法
    public Parent(int age){
        System.out.println("父类中的有参构造方法,参数为:"+age);
    }
}

子类如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.temp;
public class Son extends Parent{
    public Son(){
        // 父类中没有无参构造函数,通过super调用父类有参构造函数
        super(48);
        System.out.println("儿子类的无参构造方法");
    }
    public Son(int age){
        // 父类中没有无参构造函数,通过super调用父类有参构造函数
        super(48);
        System.out.println("儿子类的有参构造方法,参数为:"+age);
    }
}
2.5. 继承中的成员方法访问规则

1. 首先在子类范围中查找;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.study;
public class Son extends Parent {
    public void study(){
        System.out.println("我是儿子,我很热爱学习");
    }
}

以上是一个儿子类,他继承了父类,里面有一个study方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.study;
public class Test {
    public static void main(String[] args) {
        Son son = new Son();
        son.study();
        // 我是儿子,我很热爱学习
    }
}

当实例化儿子对象时,调用study方法,首先调用儿子类里面的study方法。

2. 如果在子类中查找没有,就在父类成员查找;

父类如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.study;
public class Parent {
    public void study(){
        System.out.println("我是父亲,我很热爱学习");
    }
}

子类如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.study;
public class Son extends Parent {
    
}

结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.study;
public class Test {
    public static void main(String[] args) {
        Son son = new Son();
        son.study();
        // 我是父亲,我很热爱学习
    }
}

3. 如果父类和子类中都没有则会报错;

2.6. 继承中访问关键字的总结

1. this代表本类对象的引用;

2. super代表父类存储空间的标识,可以理解为父类对象的引用;

2.7. 继承中的方法覆写

当子类中出现了和父类一模一样的方法,该方法中需要父类的功能,而又有自己独特的内容,这样就可以通过覆写父类的方法,这样既延续了父类的功能,又定义了自己的内容。

父类如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.temp;
public class Phone {
    public  void call(String name){
        System.out.println(name+"手机可以拨打电话");
    }
}

子类如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.temp;
public class NewPhone extends Phone{
    @Override // 此注解代表覆写
    public  void  call(String name){
        System.out.println("华为手机支持视频通话");
        super.call(name);
    }
}

结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.temp;
public class TestPhone {
    public static void main(String[] args) {
        NewPhone newPhone = new NewPhone();
        newPhone.call("诺基亚");
        // 华为手机支持视频通话
        // 诺基亚手机可以拨打电话
    }

}

方法重写注意事项:

1. 私有的方法不能被重写,因为父类中的私有方法子类不能被继承;

2. 子类方法访问权限不能比父类低,可以大于也可以等于,其中公有大于默认,默认大于私有;

2.8. 继承中的权限修饰符

Java中有四种权限修饰符,其中三种有访问权限修饰符,分别为private、public和protected,还有一种不带任何修饰符。

1. private:Java语言中对访问权限限制最窄的修饰符,一般称之为私有的。被其修饰的的类、属性及方法只能被该类的对象访问,其子类不能访问,更不允许跨包访问;

2. default:即不加任何访问修饰符,通常称为默认访问模式。该模式下,只允许在同一个包中进行访问;

3. protect:介于public和private之间的一种访问修饰符,一般称之为保护模式。被其修饰的类、属性及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问;

4. public:Java中访问限制最宽的修饰符,一般称之为公有的。被其修饰的类、属性及方法不仅可以跨类该问,还可以跨包访问;

2.9. 多层继承

在C++语言中,是可以同时继承两个父类的,但是在Java中只支持单继承,如果要继承两个父类,需要分两次分别继承,即多层继承。

3. 什么是多态?

多态是面向对象的三大特征之一,即同一个对象,在不同的时刻表现出来不同的形态。

3.1. 多态的前提和实现

1. 有继承或实现的关系;

2. 子类有对父类的方法进行重写;

3. 父类的引用来自子类对象;

父类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.temp;
public class AnimalParent {
    public  void  eat(){
        System.out.println("这是动物父类中的吃方法");
    }
}

子类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.temp;
public class Dog  extends AnimalParent{
    @Override
    public void  eat(){
        System.out.println("狗类重写了父类的吃方法");
    }
}

多态实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.temp;

public class AnimalDemo {
    public static void main(String[] args) {

        // 子类的引用来自子类
        // Dog dog = new Dog();
        // dog.eat();

        // 父类的引用来自子类
        AnimalParent animalParent = new Dog();
        animalParent.eat();
        // 狗类重写了父类的吃方法
    }
}
3.2. 多态的访问特点

成员变量:编译看左边,执行看左边;

成员方法:编译看左边,执行看右边;

为什么成员变量和成员方法的访问不一样呢?

这是因为成员方法有重写,而成员变量是没有的。

父类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class AnimalParent {
    public int age = 40;
    public  void  eat(){
        System.out.println("我是动物父类中的吃方法");
    }
}

子类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Dog extends AnimalParent{
    public int age = 20;
    public  int weight = 40;
    @Override
    public void eat() {
        System.out.println("我是狗类中的吃方法");
    }

    public  void  show(){
        System.out.println("当前显示的是狗类");
    }
}

执行示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class AnimalDemo {
    public static void main(String[] args) {

        AnimalParent animalParent = new Dog();

        // System.out.println(animalParent.weight);
        // 编译报错,因为左边的animalParent没有wight属性,所以也无法执行

        // animalParent.show();
        // 编译报错,因为左边的animalParent没有show方法

        animalParent.eat();
        // 执行成功,因为右边的Dog类中有eat方法
    }
}
3.3. 多态的访问优点和缺点

多态的好处:提高了程序的扩展性。

具体的体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参操作。

定义动物父类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class AnimalParent {
    public  void  eat(){
        System.out.println("我是动物父类中的吃方法");
    }
}

定义子类的狗类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Dog extends AnimalParent{
    @Override
    public void eat() {
        System.out.println("我是狗类,我在吃屎");
    }
}

定义子类的猫类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Cat extends AnimalParent{
    @Override
    public void eat() {
        System.out.println("我是猫类,我在吃鱼");
    }
}

定义动物的操作类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;

public class AnimalOperate {

    //public  void  useCatEat(Cat cat){
    //    cat.eat();
    //}
    //public  void  useDogEat(Dog dog){
    //    dog.eat();
    //}
    //

    // 定义方法的时候,使用父类型作为参数,
    public  void  useAnimal(AnimalParent animalParent){
        animalParent.eat();
    }
    
}

执行示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;

public class AnimalDemo {
    public static void main(String[] args) {

        // 调用动物操作类
        AnimalOperate animalOperate = new AnimalOperate();


        // 调用猫类中的useCatEat方法
        //animalOperate.useCatEat(new Cat());
        // 我是猫类,我在吃鱼

        // 调用狗类中的useDogEat方法
        //animalOperate.useDogEat(new Dog());
        // 我是狗类,我在吃屎


        // 在使用的时候,使用具体的子类型参操作。

        animalOperate.useAnimal(new Cat());
        // 我是猫类,我在吃鱼
        animalOperate.useAnimal(new Dog());
        // 我是狗类,我在吃屎

        
    }
}

多态的弊端:不能使用子类的特有功能。

3.4. 多态中的转型

1. 向上转型,从子类到父类,父类引用指向子类对象,也是Java中默认的存在方式;

2. 向下转型,从父类到子类,父类引用转为子类对象,这种方式只能显示的强转;

定义父类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class AnimalParent {
    public  void  eat(){
        System.out.println("我是动物父类中的吃方法");
    }
}

定义子类狗类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;
public class Dog extends AnimalParent{
    @Override
    public void eat() {
        System.out.println("我是狗类,我在吃屎");
    }
    public void showDog(){
        System.out.println("我是小狗");
    }
}

执行示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package aiguangyuan.test;

public class AnimalDemo {
    public static void main(String[] args) {

        Dog dog1 = new Dog();
        dog1.showDog();
        // 我是小狗

        // 多态中,编译阶段是看左边,执行是看右边,向上转型,从子到父
        AnimalParent parent = new Dog();

        // parent中没有showDog方法,如果想调用该方法需要向下转型,从父到子
        Dog dog2 = (Dog) parent;
        dog2.showDog();
        // 我是小狗

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
论文解读 - 统一的多模态理解和生成模型综述(上)
近年来,多模态理解模型和图像生成模型都取得了显著的进步。尽管各自取得了成功,这两个领域却独立发展,形成了独特的架构范式:基于自回归的架构主导了多模态理解,而基于扩散的模型则成为图像生成的基石。最近,人们越来越关注开发能够整合这些任务的统一框架。GPT-4的新能力正是这一趋势的体现,突显了统一的可 能性。然而,两个领域的架构差异带来了重大挑战。为了清晰地概述当前的统一努力,论文提供了一份全面的综述,旨在指导未来的研 究。首先,论文介绍多模态理解和文本到图像生成模型的基础概念和最新进展。接下来,论文回顾现有的统一模型,将其分为三大架构 范式:基于扩散、基于自回归以及融合自回归和扩散机制的混合方法。对于每一类,论文分析了相关工作引入的结构设计和创新。此 外,论文还编制了针对统一模型的数据集和基准测试,为未来的探索提供资源。最后,论文讨论了这一新兴领域面临的关键挑战,包括 令牌策略、跨模态注意力和数据问题。由于该领域仍处于早期阶段,论文预计会迅速取得进展,并将定期更新此综述。论文的目标是激 发进一步的研究,并为社区提供有价值的参考。
合合技术团队
2025/05/29
1100
论文解读 - 统一的多模态理解和生成模型综述(上)
AI绘画新思路:国产开源50亿参数新模型,合成可控性、质量实现飞跃
机器之心报道 机器之心编辑部 在 AI 绘画领域,很多研究者都在致力于提升 AI 绘画模型的可控性,即让模型生成的图像更加符合人类要求。前段时间,一个名为 ControlNet 的模型将这种可控性推上了新的高峰。大约在同一时间,来自阿里巴巴和蚂蚁集团的研究者也在同一领域做出了成果,本文是这一成果的详细介绍。 论文地址:https://arxiv.org/pdf/2302.09778v2.pdf 项目地址:https://github.com/damo-vilab/composer 近年来,在大数据上学习
机器之心
2023/03/29
4220
AI绘画新思路:国产开源50亿参数新模型,合成可控性、质量实现飞跃
文字生成图片综述 - plus studio
根据文字生成图像,是近几年大模型领域和多模态比较热门的研究。以NovelAI,waifu等为代表的二次元模型极大地拓展了 stable diffusion [5][24]模型和生态的想象空间。例如原本做AIGC生成小说的NovelAI推出了自己的二次元图像生成模型,基于 SD 算法框架和 Danbooru 二次元图库数据集进行训练和优化。像 NovelAI 这类的二次元模型对于用户输入的描述词的专业程度要求较高,也由社区自发整理了大量的魔典(prompt).精确控制图像的生成也是AI绘画的一个发展方向,各种可以控制人物动作,位置的方法[10][13][19]被提出.最近openai也开源了他们最新的研究Consistency Models[20] ,可以1s内生成多张图片。此外,stable diffusion也被用在了3d模型的生成方面,例如 dreamfusion[25],Point-E[26] 等。
plus sign
2024/02/28
6930
文字生成图片综述 - plus studio
多模态新王登基!OpenAI发布DALL·E 2,生成图像「指哪打哪」
---- 新智元报道   编辑:LRS 【新智元导读】大艺术家重磅升级!最近OpenAI发布升级版DALL·E 2,不仅分辨率提升了4倍,准确率更高,业务也更广了:除了生成图像,还能二次创作! 2021年1月,OpenAI放了一个大招:DALL-E模型,让自然语言和图像成功牵手,输入一段不管多离谱的文本,都能生成图片! 比如经典的「牛油果形状的扶手椅」,还有新奇生物「一个长颈鹿乌龟」。 当时看着已经够神奇了吧? 时隔一年,OpenAI结合另一个多模态模型CLIP,发布了第二个版本DALL·E 2!
新智元
2022/04/11
5110
多模态新王登基!OpenAI发布DALL·E 2,生成图像「指哪打哪」
缩小规模,OpenAI文本生成图像新模型GLIDE用35亿参数媲美DALL-E
从年初 OpenAI 刷屏社区的 DALL-E 到英伟达生成逼真摄影的 GauGAN2,文本生成图像可谓是今年大火的一个研究方向。现在 OpenAI 又有了新的进展——35 亿参数的新模型 GLIDE。
机器之心
2021/12/27
8710
缩小规模,OpenAI文本生成图像新模型GLIDE用35亿参数媲美DALL-E
DALL·E-2是如何工作的以及部署自己的DALL·E模型
DALL·E-2可以通过自然语言的描述创建现实的图像。Openai发布了dall·e-2的Beta版。在本文中,我们将仔细研究DALL·E-2的原始研究论文,并了解其确切的工作方式。由于并没有开放源代码, Boris Dayma等人根据论文创建了一个迷你但是开源的模型Dall·E Mini(命名为Craiyon),并且在craiyon.com上提供了一个DEMO。
deephub
2022/11/11
3.2K0
DALL·E-2是如何工作的以及部署自己的DALL·E模型
AI绘画Imagen大力出奇迹生成图像
Imagen通过创新的设计,摈弃了需要预训练视觉-语言模型的繁琐步骤,直接采用了T5等大规模语言模型作为文本编码器,与扩散模型有机结合,完成了从文本到图像的直接关联映射。
Dlimeng
2023/12/27
4290
AI绘画Imagen大力出奇迹生成图像
DALL-E 2的工作原理原来是这样!
CLIP+修改版GLIDE双管齐下。 作者 | Ryan O'Connor 编译丨王玥 编辑 | 陈彩娴 OpenAI的模型DALL-E 2于本月初发布,刚一亮相,便在图像生成和图像处理领域卷起了新的风暴。 只需要给到寥寥几句文本提示,DALL-E 2就可以按文本指示生成全新图像,甚至能将毫不相关的物体以看似合理的语义方式组合在一起。 比如用户输入提示“一碗汤是另一个次元的入口”后,DALL-E 2便生成了以下的魔幻图片。 “一碗汤是另一个次元的入口” 图源:https://openai.com/dal
AI科技评论
2022/04/21
1.3K0
DALL-E 2的工作原理原来是这样!
简洁、生动,图解「老画师」DALL-E 2的工作原理
选自assemblyai 作者:Ryan O'Connor 机器之心编译 编辑:蛋酱 效果惊艳的 DALL-E 2,到底是怎么工作的? 2022 年 4 月初,OpenAI 的开创性模型 DALL-E 2 登场,为图像生成和处理领域树立了新的标杆。只需输入简短的文字 prompt,DALL-E 2 就可以生成全新的图像,这些图像以语义上十分合理的方式将不同且不相关的对象组合起来,就像通过输入 prompt「a bowl of soup that is a portal to another dimensi
机器之心
2022/04/24
1.4K0
简洁、生动,图解「老画师」DALL-E 2的工作原理
万字长文 | Sora技术解析报告
在深度学习革命之前,传统的图像生成技术依赖于基于手工创建特征的纹理合成和纹理映射等方法。这些方法在生成复杂而生动的图像方面能力有限。
NewBeeNLP
2024/03/07
1.6K0
万字长文 | Sora技术解析报告
多模态自然语言处理最新进展
近三年来,基于 Transformer 和自监督预训练的语言模型取得了非常瞩目的成绩。这些模型通过自回归、降噪自编码器、对比学习等自监督学习任务,能够从海量的单语或者多语语料中学习到语言的通用表示,然后通过微调等方式适配到各种各样的下游任务上去,例如问答、文本生成、机器翻译等。
澜舟科技
2022/08/18
7270
多模态自然语言处理最新进展
万字深度好文!视觉-语言(VL)智能:任务、表征学习和大型模型
编译丨Jocelyn 编辑丨陈彩娴 本文对视觉-语言(VL)智能按时间顺序进行了全面调研,并将这一领域的发展总结为三个阶段: 第一个阶段是2014-2018年,其间,专门的模型被设计用于不同的任务。第二个时代是2019-2021年,在此期间,通过使用有着高质量标签的VL数据集进行预训练,神经网络模型能够学习视觉和语言的联合表征。最后,随着2021年CLIP的出现,第三个时代开始了,此时研究人员寻求在更大的弱标签数据集上预训练VL模型,并通过VL预训练获得性能强大的基于零样本或少样本的视觉模型。 我们相信这
AI科技评论
2022/03/31
6750
万字深度好文!视觉-语言(VL)智能:任务、表征学习和大型模型
Stable Diffusion v1v2 解读
是图像编码器和文本编码器的组合,其训练过程可以简化为拍摄图像和文字说明,使用两个编码器对数据分别进行编码,然后使用余弦距离比较结果嵌入,刚开始训练时,即使文本描述与图像是相匹配的,它们之间的相似性肯定也是很低的。随着模型的不断更新,在后续阶段,编码器对图像和文本编码得到的嵌入会逐渐相似。通过在整个数据集中重复该过程,并使用大 batch size 的编码器,最终能够生成一个嵌入向量,其中狗的图像和句子「一条狗的图片」之间是相似的。就像在 word2vec 中一样,训练过程也需要包括不匹配的图片和说明的负样本,模型需要给它们分配较低的相似度分数。
iResearch666
2023/09/13
1.7K0
Stable Diffusion v1v2 解读
Transformer再胜Diffusion!谷歌发布新一代文本-图像生成模型Muse:生成效率提升十倍
---- 新智元报道   编辑:LRS 【新智元导读】谷歌带着更强大的图像生成模型来了,依然Transformer! 最近谷歌又发布了全新的文本-图像生成Muse模型,没有采用当下大火的扩散(diffusion)模型,而是采用了经典的Transformer模型就实现了最先进的图像生成性能,相比扩散或自回归(autoregressive)模型,Muse模型的效率也提升非常多。 论文链接:https://arxiv.org/pdf/2301.00704.pdf 项目链接:https://muse-mod
新智元
2023/02/24
8670
Transformer再胜Diffusion!谷歌发布新一代文本-图像生成模型Muse:生成效率提升十倍
卧剿,6万字!30个方向130篇!CVPR 2023 最全 AIGC 论文!一口气读完。
最近,扩散模型在图像生成方面取得了巨大的成功。然而,当涉及到布局生成时,由于图像通常包含多个物体的复杂场景,如何对全局布局图和每个详细对象进行强大的控制仍然是一个具有挑战性的任务。
公众号机器学习与AI生成创作
2023/08/22
4.4K1
卧剿,6万字!30个方向130篇!CVPR 2023 最全 AIGC 论文!一口气读完。
推理速度比Stable Diffusion快2倍,生成、修复图像谷歌一个模型搞定,实现新SOTA
机器之心报道 机器之心编辑部 图像生成领域越来越卷了! 文本到图像生成是 2022 年最火的 AIGC 方向之一,被《science》评选为 2022 年度十大科学突破。最近,谷歌的一篇文本到图像生成新论文《Muse: Text-To-Image Generation via Masked Generative Transformers》又引起高度关注。 论文地址:https://arxiv.org/pdf/2301.00704v1.pdf 项目地址:https://muse-model.github.i
机器之心
2023/03/29
3990
推理速度比Stable Diffusion快2倍,生成、修复图像谷歌一个模型搞定,实现新SOTA
文本生成图像工作简述4--扩散模型、自回归模型、生成对抗网络的对比调研
基于近年来图像处理和语言理解方面的技术突破,融合图像和文本处理的多模态任务获得了广泛的关注并取得了显著成功。
中杯可乐多加冰
2024/04/21
1.6K0
文本生成图像工作简述1--概念介绍和技术梳理
基于深度学习的机器学习方法已经在语音、文本、图像等单一模态领域取得了巨大的成功,而同时涉及到多种输入模态的多模态机器学习研究有巨大的应用前景和广泛的研究价值,成为了近年来的研究热点。
中杯可乐多加冰
2024/04/18
6890
叫板DALL·E 2,预训练大模型做编码器,谷歌把文字转图像模型卷上天
点击上方↑↑↑“OpenCV学堂”关注我来源:公众号 机器之心  授权 OpenAI:DALL・E 2 就是最好的。谷歌:看下我们 Imagen 生成的柴犬? 多模态学习近来受到重视,特别是文本 - 图像合成和图像 - 文本对比学习两个方向。一些模型因在创意图像生成、编辑方面的应用引起了公众的广泛关注,例如 OpenAI 的文本转图像模型 DALL・E、英伟达的 GauGAN。现在,来自谷歌的研究者也在这一方向做出了探索,提出了一种文本到图像的扩散模型 Imagen。 Imagen 结合了 Transfor
OpenCV学堂
2022/05/25
6340
叫板DALL·E 2,预训练大模型做编码器,谷歌把文字转图像模型卷上天
Jay Alammar再发新作:超高质量图解Stable Diffusion,看完彻底搞懂「图像生成」原理
---- 新智元报道   编辑:LRS 【新智元导读】小白都能看懂的Stable Diffusion原理! 还记得火爆全网的图解Transformer吗? 最近这位大佬博主Jay Alammar在博客上对大火的Stable Diffusion模型也撰写了一篇图解,让你从零开始彻底搞懂图像生成模型的原理,还配有超详细的视频讲解! 文章链接:https://jalammar.github.io/illustrated-stable-diffusion/ 视频链接:https://www.youtube.
新智元
2023/02/24
1.2K0
Jay Alammar再发新作:超高质量图解Stable Diffusion,看完彻底搞懂「图像生成」原理
推荐阅读
相关推荐
论文解读 - 统一的多模态理解和生成模型综述(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验