当前位置: 首页 > article >正文

李宏毅机器学习2022-HW8-Anomaly Detection

文章目录

  • Task
  • Baseline
  • Report
    • Question2
  • Code Link

Task

异常检测Anomaly Detection

在这里插入图片描述

将data经过Encoder,在经过Decoder,根据输入和输出的差距来判断异常图像。training data是100000张人脸照片,testing data有大约10000张跟training data相同分布的人脸照片(label 0),还有10000张不同分布的照片(anomaly, label 1),每张照片都是(64,64,3),.npy file

以训练集的前三张照片为例,auto-encoder的输入和输出如下:

在这里插入图片描述

Baseline

Auto-encoder model一共有五种模型

  • fcn: fully-connected network
  • cnn: convolutional network
  • VAE
  • Resnet
  • Multi-encoder autoencoder
    • encoder(fcn+fcn+fcn)+decoder(fcn)
    • encoder(cnn+cnn+cnn)+decoder(cnn)
    • encoder(fcn+fcn+conv)+decoder(fcn)

通过FCN+调节超参数的方式可以轻易的达到strong,Resnet也是但是Multi-encoder的方式表现并不好,也许是我处理方式有问题,具体代码可以参考GitHub中的文件

Report

Question2

Train a fully connected autoencoder and adjust at least two different element of the latent representation. Show your model architecture, plot out the original image, the reconstructed images for each adjustment and describe the differences.

import matplotlib.pyplot as plt
# sample = train_dataset[random.randint(0,100000)]
sample = train_dataset[0]
print("sample shape:{}".format(sample.size()))
sample = sample.reshape(1,3,64,64)

model.eval()
with torch.no_grad():
    img = sample.cuda()
            
    # 只调整fcn中的latent representation的其中两维,其他模型都是正常输出
    if model_type in ['res']:
        output = model(img)
        output = decoder(output)
        print("res output shape:{}".format(output.size()))
        output = output[0] # 第一个重建图像,当然只有一个图像
        
    if model_type in ['fcn']:
        img = img.reshape(img.shape[0], -1)
        x = model.encoder(img)
        x[0][2] = x[0][2]*3
        output = model.decoder(x)
        print("fcn output shape:{}".format(output.size()))
        output = output.reshape(3,64,64)
        
    if model_type in ['vae']:
        output = model(img)
        print("vae output shape:{}".format(output.size()))
        output = output[0][0] # output[0]是重建后的图像,output[0][0]重建后的第一个图像
        
    if model_type in ['cnn']:
        output = model(img)[0]
        
    print("output shape:{}".format(output.size()))
       
sample = sample.reshape(3,64,64)   

# 创建画布
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 5))

# plt sample image
axes[0].imshow(transforms.ToPILImage()((sample+1)/2)) #imshow的输入(H,W,C)
axes[0].axis('off')
axes[0].annotate('sample input', xy=(0.5, -0.15), xycoords='axes fraction',ha='center', va='center')
# plt output image
axes[1].imshow(transforms.ToPILImage()((output+1)/2))
axes[1].axis('off')
axes[1].annotate('sample output', xy=(0.5, -0.15), xycoords='axes fraction',ha='center', va='center')

plt.show()

在这里插入图片描述

Code Link

具体代码在Github


http://www.kler.cn/news/328246.html

相关文章:

  • 云手机可以解决TikTok运营的哪些问题?
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL67
  • 人工智能_机器学习099_PCA数据降维算法_SVD分解矩阵原理002_酉矩阵_共轭矩阵_全矩阵_符号翻转_奇异值分解代码实现---人工智能工作笔记0224
  • 使用OpenAI最新模型o1的6种方式,总有一种适合你!
  • docker pull 超时的问题如何解决
  • git直接推送项目到仓库
  • DDL 超时,应该如何解决 | OceanBase 用户问题集萃
  • 10.1 Linux_并发_进程基本知识
  • 如何解决 Docker 下载 mcr.microsoft.com 镜像慢的办法
  • ERROR [internal] load metadata for docker.io/library/openjdk:8
  • Spring Cloud Gateway接入WebSocket:实现实时通信
  • 详解代理模式-【静态代理与JDK动态代理】(非常的斯国一)
  • GO语言中make与new的区别
  • AI文本生成UI稿神器Galileo,程序员做独立开发必备
  • 【Linux-基础IO】如何理解Linux下一切皆文件磁盘的介绍
  • 链表的底层实现(Java版)(单向,双向,循环)
  • 2024年云南省职业院校技能大赛-云计算应用
  • ECMAScript标准
  • 【Android 14源码分析】Activity启动流程-1
  • 15分钟学 Python 第31天 :Web Scraping
  • java通过redis完成幂等性操作
  • Invalid row number (65536) outside allowable range (0..65535)
  • thinkphp6开发的通用网站系统源码
  • UI设计师面试整理-问题应对策略
  • Python从入门到高手4.1节-掌握条件控制语句
  • Rockchip RK3588 Android SDK编译方法
  • JWT(JSON Web Token)的介绍
  • 物理学基础精解【41】
  • 上位机图像处理和嵌入式模块部署(软硬结合才是嵌入式的精髓)
  • Elasticsearch基础_2.数据类型