{
  "source_file": "0930",
  "source_platform": "个人博客",
  "author": "Christopher Olah / colah's blog",
  "title_listed": "Deconvolution and Checkerboard Artifacts",
  "keywords": "反卷积,棋盘伪影,GAN",
  "domain": "图像处理",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "http://distill.pub/2016/deconv-checkerboard/",
  "publish_date": "2016-10",
  "corpus_stage": "预训练/SFT",
  "notes": "反卷积与棋盘伪影问题（Distill）",
  "id": "d3170b5a8f4f",
  "collected_at": "2026-10-02T14:28:19",
  "title": "Deconvolution and Checkerboard Artifacts",
  "body_markdown": "Distill\nAbout\nPrize\nSubmit\nDeconvolution and Checkerboard Artifacts\nAugustus Odena\nGoogle Brain\nVincent Dumoulin\nUniversité de Montréal\nChris Olah\nGoogle Brain\nOct. 17\n2016\nCitation:\nOdena, et al., 2016\nWhen we look very closely at images generated by neural networks, we often see a strange checkerboard pattern of artifacts. It’s more obvious in some cases than others, but a large fraction of recent models exhibit this behavior.\nRadford, et al., 2015\n[1]\nSalimans et al., 2016\n[2]\nDonahue, et al., 2016\n[3]\nDumoulin, et al., 2016\n[4]\nMysteriously, the checkerboard pattern tends to be most prominent in images with strong colors.\n  What’s going on? Do neural networks hate bright colors? The actual cause of these artifacts is actually remarkably simple, as is a method for avoiding them.\nDeconvolution & Overlap\nWhen we have neural networks generate images, we often have them build them up\n  from low resolution, high-level descriptions.\n  This allows the network to describe the rough image and then fill in the details.\nIn order to do this, we need some way to go from a lower resolution image to a higher one.\n  We generally do this with the\ndeconvolution\noperation.\n  Roughly, deconvolution layers allow the model to use every point\n  in the small image to “paint” a square in the larger one.\n(Deconvolution has a number of interpretations and different names, including “transposed convolution.”\n  We use the name “deconvolution” in this article for brevity.\n  For excellent discussion of deconvolution, see\n[5, 6]\n.)\nUnfortunately, deconvolution can easily have “uneven overlap,”\n  putting more of the metaphorical paint in some places than others\n[7]\n.\n  In particular, deconvolution has uneven overlap when the kernel size (the output window size) is not divisible by the stride (the spacing between points on the top).\n  While the network could, in principle, carefully learn weights to avoid this\n  — as we’ll discuss in more detail later —\n  in practice neural networks struggle to avoid it completely.\nThe overlap pattern also forms in two dimensions.\n  The uneven overlaps on the two axes multiply together,\n  creating a characteristic checkerboard-like pattern of varying magnitudes.\nIn fact, the uneven overlap tends to be more extreme in two dimensions!\n  Because the two patterns are multiplied together, the unevenness gets squared.\n  For example, in one dimension, a stride 2, size 3 deconvolution has some outputs with twice the number of inputs as others,\n  but in two dimensions this becomes a factor of four.\nNow, neural nets typically use multiple layers of deconvolution when creating images,\n  iteratively building a larger image out of a series of lower resolution descriptions.\n  While it’s possible for these stacked deconvolutions to cancel out artifacts,\n  they often compound, creating artifacts on a variety of scales.\nStride 1 deconvolutions —\n  which we often see as the last layer in successful models (eg.\n[2]\n)\n  — are quite effective at dampening artifacts.\n   They can remove artifacts of frequencies\n  that divide their size, and reduce others artifacts of frequency less than their\n  size. However, artifacts can still leak through, as seen in many recent models.\nIn addition to the high frequency checkerboard-like artifacts we observed above,\n  early deconvolutions can create lower-frequency artifacts,\n  which we’ll explore in more detail later.\nThese artifacts tend to be most prominent when outputting unusual colors.\n  Since neural network layers typically have a bias\n  (a learned value added to the output) it’s easy to output the average color.\n  The further a color — like bright red — is away from the average color,\n  the more deconvolution needs to contribute.\nOverlap & Learning\nThinking about things in terms of uneven overlap is — while a useful framing —\n  kind of simplistic. For better or worse, our models learn weights for their deconvolutions.\nIn theory, our models could learn to carefully write to unevenly overlapping positions so that the output\n  is evenly balanced.\nThis is a tricky balancing act to achieve, especially when one has multiple channels interacting.\n  Avoiding artifacts significantly restricts the possible filters, sacrificing model capacity.\n  In practice, neural networks struggle to learn to completely avoid these patterns.\nIn fact, not only do models with uneven overlap not learn to avoid this,\n  but models with even overlap often learn kernels that cause similar artifacts!\n  While it isn’t their default behavior the way it is for uneven overlap,\n  it’s still very easy for even overlap deconvolution to cause artifacts.\nCompletely avoiding artifacts is still a significant restriction on filters,\n  and in practice the artifacts are still present in these models, although they seem milder.\n  (See\n[4]\n,\n  which uses stride 2 size 4 deconvolutions, as an example.)\nThere are probably a lot of factors at play here.\n  For example, in the case of Generative Adversarial Networks (GANs), one issue may be the discriminator and its gradients\n  (we’ll discuss this more later).\n  But a big part of the problem seems to be deconvolution.\n  At best, deconvolution is fragile because it very easily represents artifact creating functions, even when the size is carefully chosen.\n  At worst, creating artifacts is the default behavior of deconvolution.\nIs there a different way to upsample that is more resistant to artifacts?\nBetter Upsampling\nTo avoid these artifacts, we’d like an alternative to regular deconvolution (“transposed convolution”).\n  Unlike deconvolution, this approach to upsampling shouldn’t have artifacts as its default behavior.\n  Ideally, it would go further, and be biased against such artifacts.\nOne approach is to make sure you use a kernel size that is divided by your stride,\n  avoiding the overlap issue.\n  This is equivalent to “sub-pixel convolution,” a technique which has recently\n  had success in image super-resolution\n[8]\n.\n  However, while this approach helps, it is still easy for deconvolution to fall into creating artifacts.\nAnother approach is to separate out upsampling to a higher resolution from convolution to compute features.\n  For example, you might resize the image (using\nnearest-neighbor interpolation\nor\nbilinear interpolation\n) and then do a convolutional layer.\n  This seems like a natural approach, and roughly similar methods have worked well in image super-resolution (eg.\n[9]\n).\nBoth deconvolution and the different resize-convolution approaches are linear operations, and can be interpreted as matrices.\n  This a helpful way to see the differences between them.\n  Where deconvolution has a unique entry for each output window, resize-convolution is implicitly weight-tying in a way that discourages high frequency artifacts.\nWe’ve had our best results with nearest-neighbor interpolation, and had difficulty making bilinear resize work.\n  This may simply mean that, for our models, the nearest-neighbor happened to work well with hyper-parameters optimized for deconvolution.\n  It might also point at trickier issues with naively using bilinear interpolation, where it resists high-frequency image features too strongly.\n  We don’t necessarily think that either approach is the final solution to upsampling, but they do fix the checkerboard artifacts.\nCode\nResize-convolution layers can be easily implemented in TensorFlow using\ntf.image.resize_images()\n. For best results, use\ntf.pad()\nbefore doing convolution with\ntf.nn.conv2d()\nto avoid boundary artifacts.\nImage Generation Results\nOur experience has been that nearest-neighbor resize followed by a convolution works very well, in a wide variety of contexts.\nOne case where we’ve found this approach to help is Generative Adversarial Networks. Simply switching out the standard deconvolutional layers for nearest-neighbor resize followed by convolution causes artifacts of different frequencies to disappear.\nDeconv in last two layers.\nOther layers use resize-convolution.\nArtifacts of frequency 2 and 4.\nDeconv only in last layer.\nOther layers use resize-convolution.\nArtifacts of frequency 2.\nAll layers use resize-convolution.\nNo artifacts.\nIn fact, the difference in artifacts can be seen before any training occurs.\n  If we look at the images the generator produces, initialized with random weights,\n  we can already see the artifacts:\nDeconvolution in last two layers.\nArtifacts prior to any training.\nDeconvolution only in last layer.\nArtifacts prior to any training.\nAll layers use resize-convolution.\nNo artifacts before or after training.\nThis suggests that the artifacts are due to this method of generating images, rather than adversarial training.\n  (It also suggests that we might be able to learn a lot about good generator design without the slow feedback cycle of training models.)\nAnother reason to believe these artifacts aren’t GAN specific is that we see them in other kinds of models, and have found that they also go away when we switch to resize-convolution upsampling.\n  For example, consider\nreal-time artistic style transfer\n[10]\nwhere a neural net is trained to directly generate style-transferred images.\n  We’ve found these to be vulnerable to checkerboard artifacts (especially when the cost doesn’t explicitly resist them).\n  However, switching deconvolutional layers for resize-convolution layers makes the artifacts disappear.\nUsing deconvolution.\nHeavy checkerboard artifacts.\nUsing resize-convolution.\nNo checkerboard artifacts.\nForthcoming papers from the Google Brain team will demonstrate the benefits of this technique\n  in more thorough experiments and state-of-the-art results.\n  (We’ve chosen to present this technique separately because we felt it merited more detailed discussion, and because it cut across multiple papers.)\nArtifacts in Gradients\nWhenever we compute the gradients of a convolutional layer,\n  we do deconvolution (transposed convolution) on the backward pass.\n  This can cause checkerboard patterns in the gradient,\n  just like when we use deconvolution to generate images.\nThe presence of high-frequency “noise” in image model gradients is\n  already known in the feature visualization community, where it’s a major challenge.\n  Somehow, feature visualization methods must compensate for this noise.\nFor example, DeepDream\n[11]\nseems to cause destructive interference between artifacts in a number of ways,\n  such as optimizing many features simultaneously, and optimizing at many offsets and scales.\n  In particular, the “jitter” of optimizing at different offsets cancels out some of the checkerboard artifacts.\nDeepDream only applying the neural network to a fixed position.\nSevere artifacts.\nDeepDream applying the network to a different position each step.\nReduced artifacts.\n(While some of the artifacts are our standard checkerboard pattern,\n  others are a less organized high-frequency pattern.\n  We believe these to be caused by max pooling.\n  Max pooling was previously linked to high-frequency artifacts in\n[12]\n.)\nMore recent work in feature visualization (eg.\n[13]\n),\n  has explicitly recognized and compensated for these high-frequency gradient components.\n  One wonders if better neural network architectures could make these efforts unnecessary.\nDo these gradient artifacts affect GANs?\n  If gradient artifacts can affect an image being optimized based on a neural networks gradients in feature visualization,\n  we might also expect it to affect the family of images parameterized by the generator as they’re optimized by the discriminator in GANs.\nWe’ve found that this does happen in some cases.\n  When the generator is neither biased for or against checkerboard patterns,\n  strided convolutions in the discriminator can cause them.\nDiscriminator has stride 2 convolution in first layer.\nStrong frequency 2 artifacts.\nDiscriminator has regular convolution in first layer.\nVery mild artifacts.\nIt’s unclear what the broader implications of these gradient artifacts are.\n  One way to think about them is that some neurons will get many times the gradient of their neighbors, basically arbitrarily.\n  Equivalently, the network will care much more about some pixels in the input than others, for no good reason.\n  Neither of those sounds ideal.\nIt seems possible that having some pixels affect the network output much more than others may exaggerate adversarial counter-examples.\n  Because the derivative is concentrated on small number of pixels,\n  small perturbations of those pixels may have outsized effects.\n  We have not investigated this.\nConclusion\nThe standard approach of producing images with deconvolution — despite its successes! — has some conceptually simple issues that lead to artifacts in produced images.\n  Using a natural alternative without these issues causes the artifacts to go away\n  (Analogous arguments suggest that standard strided convolutional layers may also have issues).\nThis seems like an exciting opportunity to us!\n  It suggests that there is low-hanging fruit to be found in carefully thinking through neural network architectures, even ones where we seem to have clean working solutions.\nIn the meantime, we’ve provided an easy to use solution that improves the quality of many approaches to generating images with neural networks. We look forward to seeing what people do with it, and whether it helps in domains like audio, where high frequency artifacts would be particularly problematic.\nAcknowledgments\nWe are very grateful to Shan Carter for his wonderful improvements to the first interactive diagram, design advice, and editorial taste.\n  We’re also very grateful to David Dohan for providing us with an example of strided convolutions in discriminators causing artifacts\n  and to Mike Tyka who originally pointed out the connection between jitter and artifacts in DeepDream to us.\nThank you also to Luke Vilnis, Jon Shlens, Luke Metz, Alex Mordvintsev, and Ben Poole for their feedback and encouragement.\nThis work was made possible by the support of the\nGoogle Brain\nteam. Augustus Odena’s work was done as part of the\nGoogle Brain Residency Program\n. Vincent Dumoulin did this while visiting the Brain Team as an intern.\nAuthor Contributions\nAugustus and Chris recognized the connection between deconvolution and artifacts. Augustus ran the GAN experiments. Vincent ran the artistic style transfer experiments. Chris ran the DeepDream experiments, created the visualizations and wrote most of the article.\nReferences\nUnsupervised representation learning with deep convolutional generative adversarial networks\n[PDF]\nRadford, A., Metz, L. and Chintala, S., 2015. arXiv preprint arXiv:1511.06434.\nImproved techniques for training gans\n[PDF]\nSalimans, T., Goodfellow, I., Zaremba, W., Cheung, V., Radford, A. and Chen, X., 2016. Advances in Neural Information Processing Systems, pp. 2226—2234.\nAdversarial Feature Learning\n[PDF]\nDonahue, J., Krahenbuhl, P. and Darrell, T., 2016. arXiv preprint arXiv:1605.09782.\nAdversarially Learned Inference\n[PDF]\nDumoulin, V., Belghazi, I., Poole, B., Lamb, A., Arjovsky, M., Mastropietro, O. and Courville, A., 2016. arXiv preprint arXiv:1606.00704.\nA guide to convolution arithmetic for deep learning\n[PDF]\nDumoulin, V. and Visin, F., 2016. arXiv preprint arXiv:1603.07285.\nIs the deconvolution layer the same as a convolutional layer?\n[PDF]\nShi, W., Caballero, J., Theis, L., Huszar, F., Aitken, A., Ledig, C. and Wang, Z., 2016. arXiv preprint arXiv:1609.07009.\nConditional generative adversarial nets for convolutional face generation\n[PDF]\nGauthier, J., 2014. Class Project for Stanford CS231N: Convolutional Neural Networks for Visual Recognition, Winter semester, Vol 2014.\nReal-time single image and video super-resolution using an efficient sub-pixel convolutional neural network\n[PDF]\nShi, W., Caballero, J., Huszar, F., Totz, J., Aitken, A.P., Bishop, R., Rueckert, D. and Wang, Z., 2016. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 1874—1883.\nDOI: 10.1109/cvpr.2016.207\nImage super-resolution using deep convolutional networks\n[PDF]\nDong, C., Loy, C.C., He, K. and Tang, X., 2014. arXiv preprint arXiv:1501.00092.\nPerceptual losses for real-time style transfer and super-resolution\n[PDF]\nJohnson, J., Alahi, A. and Fei-Fei, L., 2016. arXiv preprint arXiv:1603.08155.\nInceptionism: Going deeper into neural networks\n[HTML]\nMordvintsev, A., Olah, C. and Tyka, M., 2015. Google Research Blog. Retrieved June, Vol 20.\nGeodesics of learned representations\n[PDF]\nHenaff, O.J. and Simoncelli, E.P., 2015. arXiv preprint arXiv:1511.06394.\nDeepDreaming with TensorFlow\n[link]\nMordvintsev, A., 2016.\nUpdates and Corrections\nView all changes\nto this article since it was first published. If you see a mistake or want to suggest a change, please\ncreate an issue on GitHub\n.\nCitations and Reuse\nDiagrams and text are licensed under Creative Commons Attribution\nCC-BY 2.0\n, unless noted otherwise, with the\nsource available on GitHub\n. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: “Figure from …”.\nFor attribution in academic contexts, please cite this work as\nOdena, et al., \"Deconvolution and Checkerboard Artifacts\", Distill, 2016. http://doi.org/10.23915/distill.00003\nBibTeX citation\n@article{odena2016deconvolution,\n  author = {Odena, Augustus and Dumoulin, Vincent and Olah, Chris},\n  title = {Deconvolution and Checkerboard Artifacts},\n  journal = {Distill},\n  year = {2016},\n  url = {http://distill.pub/2016/deconv-checkerboard},\n  doi = {10.23915/distill.00003}\n}\nUnsupervised representation learning with deep convolutional generative adversarial networks\n[PDF]\nA. Radford, L. Metz, S. Chintala.\narXiv preprint arXiv:1511.06434. 2015.\nImproved techniques for training gans\n[PDF]\nT. Salimans, I. Goodfellow, W. Zaremba, V. Cheung, A. Radford, X. Chen.\nAdvances in Neural Information Processing Systems, pp. 2226—2234. 2016.\nAdversarial Feature Learning\n[PDF]\nJ. Donahue, P. Krahenbuhl, T. Darrell.\narXiv preprint arXiv:1605.09782. 2016.\nAdversarially Learned Inference\n[PDF]\nV. Dumoulin, I. Belghazi, B. Poole, A. Lamb, M. Arjovsky, O. Mastropietro, A. Courville.\narXiv preprint arXiv:1606.00704. 2016.\nA guide to convolution arithmetic for deep learning\n[PDF]\nV. Dumoulin, F. Visin.\narXiv preprint arXiv:1603.07285. 2016.\nIs the deconvolution layer the same as a convolutional layer?\n[PDF]\nW. Shi, J. Caballero, L. Theis, F. Huszar, A. Aitken, C. Ledig, Z. Wang.\narXiv preprint arXiv:1609.07009. 2016.\nConditional generative adversarial nets for convolutional face generation\n[PDF]\nJ. Gauthier.\nClass Project for Stanford CS231N: Convolutional Neural Networks for Visual Recognition, Winter semester, Vol 2014. 2014.\nImproved techniques for training gans\n[PDF]\nT. Salimans, I. Goodfellow, W. Zaremba, V. Cheung, A. Radford, X. Chen.\nAdvances in Neural Information Processing Systems, pp. 2226—2234. 2016.\nAdversarially Learned Inference\n[PDF]\nV. Dumoulin, I. Belghazi, B. Poole, A. Lamb, M. Arjovsky, O. Mastropietro, A. Courville.\narXiv preprint arXiv:1606.00704. 2016.\nReal-time single image and video super-resolution using an efficient sub-pixel convolutional neural network\n[PDF]\nW. Shi, J. Caballero, F. Huszar, J. Totz, A.P. Aitken, R. Bishop, D. Rueckert, Z. Wang.\nProceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 1874—1883. 2016.\nDOI: 10.1109/cvpr.2016.207\nImage super-resolution using deep convolutional networks\n[PDF]\nC. Dong, C.C. Loy, K. He, X. Tang.\narXiv preprint arXiv:1501.00092. 2014.\nPerceptual losses for real-time style transfer and super-resolution\n[PDF]\nJ. Johnson, A. Alahi, L. Fei-Fei.\narXiv preprint arXiv:1603.08155. 2016.\nInceptionism: Going deeper into neural networks\n[HTML]\nA. Mordvintsev, C. Olah, M. Tyka.\nGoogle Research Blog. Retrieved June, Vol 20. 2015.\nGeodesics of learned representations\n[PDF]\nO.J. Henaff, E.P. Simoncelli.\narXiv preprint arXiv:1511.06394. 2015.\nDeepDreaming with TensorFlow\n[link]\nA. Mordvintsev.  2016.\nDistill\nis dedicated to clear explanations of machine learning\nAbout\nSubmit\nPrize\nArchive\nRSS\nGitHub\nTwitter\nISSN 2476-0757",
  "metadata": {
    "title": "Deconvolution and Checkerboard Artifacts",
    "description": null,
    "keywords": null,
    "author": null,
    "og:type": "article",
    "og:title": "Deconvolution and Checkerboard Artifacts",
    "og:description": "When we look very closely at images generated by neural networks, we often see a strange checkerboard pattern of artifacts.",
    "og:url": "http://distill.pub/2016/deconv-checkerboard",
    "og:image": "http://distill.pub/2016/deconv-checkerboard/thumbnail.jpg",
    "og:locale": "en_US",
    "og:site_name": "Distill",
    "twitter:card": "summary_large_image",
    "twitter:title": "Deconvolution and Checkerboard Artifacts",
    "twitter:description": "When we look very closely at images generated by neural networks, we often see a strange checkerboard pattern of artifacts.",
    "twitter:url": "http://distill.pub/2016/deconv-checkerboard",
    "twitter:image": "http://distill.pub/2016/deconv-checkerboard/thumbnail.jpg",
    "twitter:image:width": "560",
    "twitter:image:height": "295",
    "article:published": "2016-10-17",
    "article:created": "Mon Oct 17 2016 16:00:00 GMT-0400 (Eastern Daylight Time)",
    "article:modified": "Tue May 22 2018 14:19:55 GMT-0400 (Eastern Daylight Time)",
    "article:author": "Chris Olah"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [
    {
      "file": "attachments/d3170b5a8f4f/code/body-000.txt",
      "chars": 111,
      "language": "text"
    },
    {
      "file": "attachments/d3170b5a8f4f/code/body-001.txt",
      "chars": 284,
      "language": "text"
    }
  ],
  "images": [
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_dcgan.png",
      "bytes": 9792,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-bbdff5d28a8af9ea850c.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_dcgan.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_dcgan_contrast.png",
      "bytes": 24370,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-17b27cf2dc137fa534cf.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_dcgan_contrast.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_salimans.png",
      "bytes": 40864,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-533f586b86bc1656dbe1.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_salimans.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_donahue.png",
      "bytes": 10526,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-a2133ab47d5b5d132282.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_donahue.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_dumoulin.png",
      "bytes": 6364,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-ac0fb9f4e2fe9a7e53c5.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_sample_dumoulin.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/upsample_LearnedConvUneven.svg",
      "bytes": 10219,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-583f5a32f2ee63745a32.svg",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/upsample_LearnedConvUneven.svg",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/upsample_LearnedConvEven.svg",
      "bytes": 8420,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-7c7879822642f3d10b55.svg",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/upsample_LearnedConvEven.svg",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/upsample_DeconvTypes.svg",
      "bytes": 61305,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-878fe99f9fafc5ac42ca.svg",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/upsample_DeconvTypes.svg",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_two_deconv_boat.png",
      "bytes": 3341,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-5cf32e0b5093e2f9c74a.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_two_deconv_boat.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_two_deconv_deer.png",
      "bytes": 3664,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-b69eb39cc986ed0d855d.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_two_deconv_deer.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_two_deconv_prototype_plane.png",
      "bytes": 3900,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-d60b77c50f5a1b636336.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_two_deconv_prototype_plane.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_two_deconv_bird.png",
      "bytes": 3701,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-e328f8b3ffeab1dec389.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_two_deconv_bird.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_one_deconv_boat.png",
      "bytes": 3658,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-3e3a598e6244c9882f0c.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_one_deconv_boat.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_one_deconv_deer.png",
      "bytes": 3598,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-5a5faa09d14a3464fc96.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_one_deconv_deer.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_one_deconv_prototype_plane.png",
      "bytes": 3987,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-76305b3f99c8b72806c6.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_one_deconv_prototype_plane.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_one_deconv_bird.png",
      "bytes": 3573,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-729da1e884b42903b408.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_one_deconv_bird.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_zero_deconv_boat.png",
      "bytes": 3240,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-11dc41c42ed9451a0d9d.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_zero_deconv_boat.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_zero_deconv_deer.png",
      "bytes": 3249,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-af332213821a32189ff9.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_zero_deconv_deer.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_zero_deconv_prototype_plane.png",
      "bytes": 3199,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-1304da58b056c51f06a9.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_zero_deconv_prototype_plane.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/fix_zero_deconv_bird.png",
      "bytes": 2933,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-dcd3d8e230aefde5b57f.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/fix_zero_deconv_bird.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_two_0.png",
      "bytes": 3583,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-3c84f0f75c1f93f405a1.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_two_0.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_two_1.png",
      "bytes": 3610,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-eae241dfa93267fbc2ad.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_two_1.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_one_0.png",
      "bytes": 3565,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-eaaffcc501595b5226ce.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_one_0.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_one_1.png",
      "bytes": 3595,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-e96be41dfe96990e3c45.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_one_1.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_zero_1.png",
      "bytes": 2443,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-cbea37cbb025eda874a5.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_zero_1.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_zero_2.png",
      "bytes": 2417,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-4b9504e13a5c188d674d.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/im_rand_zero_2.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/style_artifacts.png",
      "bytes": 57436,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-6dbf158957085be646b5.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/style_artifacts.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/style_clean.png",
      "bytes": 42994,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-7b8423a0dcd7f74ba713.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/style_clean.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/deepdream_full_gitter_0x0.png",
      "bytes": 297926,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-b9936065c2a9e6d8096d.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/deepdream_full_gitter_0x0.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/deepdream_full_gitter_8x8.png",
      "bytes": 279408,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-5c51d4c101a9c990338e.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/deepdream_full_gitter_8x8.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride2_0.png",
      "bytes": 1947,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-28e2f733d411e4fb7e61.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride2_0.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride2_1.png",
      "bytes": 2448,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-3255180aca9a7e96da0e.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride2_1.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride2_2.png",
      "bytes": 2243,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-b65dcbd60476c3c1c692.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride2_2.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride1_1.png",
      "bytes": 2315,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-cc3206da74c9bef18296.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride1_1.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride1_2.png",
      "bytes": 2435,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-45eb75623372283349bf.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride1_2.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride1_0.png",
      "bytes": 1811,
      "reused": false,
      "local_path": "attachments/d3170b5a8f4f/images/body-1f36574340608b835dd9.png",
      "src": "https://distill.pub/2016/deconv-checkerboard/assets/discrim_stride1_0.png",
      "alt": "",
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [],
  "links": [
    {
      "href": "https://distill.pub/",
      "label": "Distill",
      "type": "a"
    },
    {
      "href": "https://distill.pub/about/",
      "label": "About",
      "type": "a"
    },
    {
      "href": "https://distill.pub/prize/",
      "label": "Prize",
      "type": "a"
    },
    {
      "href": "https://distill.pub/journal/",
      "label": "Submit",
      "type": "a"
    },
    {
      "href": "http://g.co/brain",
      "label": "Google Brain",
      "type": "a"
    },
    {
      "href": "http://vdumoulin.github.io/",
      "label": "Vincent Dumoulin",
      "type": "a"
    },
    {
      "href": "https://mila.umontreal.ca/en/",
      "label": "Université de Montréal",
      "type": "a"
    },
    {
      "href": "http://colah.github.io/",
      "label": "Chris Olah",
      "type": "a"
    },
    {
      "href": "https://en.wikipedia.org/wiki/Nearest-neighbor_interpolation",
      "label": "nearest-neighbor interpolation",
      "type": "a"
    },
    {
      "href": "https://en.wikipedia.org/wiki/Bilinear_interpolation",
      "label": "bilinear interpolation",
      "type": "a"
    },
    {
      "href": "https://www.tensorflow.org/versions/r0.11/api_docs/python/image.html",
      "label": "tf.image.resize_images()",
      "type": "a"
    },
    {
      "href": "https://www.tensorflow.org/versions/r0.11/api_docs/python/array_ops.html",
      "label": "tf.pad()",
      "type": "a"
    },
    {
      "href": "https://www.tensorflow.org/versions/r0.11/api_docs/python/nn.html",
      "label": "tf.nn.conv2d()",
      "type": "a"
    },
    {
      "href": "https://research.google.com/teams/brain/",
      "label": "Google Brain",
      "type": "a"
    },
    {
      "href": "https://research.google.com/teams/brain/residency/",
      "label": "Google Brain Residency Program",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1511.06434.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1606.03498.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1605.09782.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1606.00704.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1603.07285.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1609.07009.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "http://www.foldl.me/uploads/papers/tr-cgans.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1609.05158.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://doi.org/10.1109/cvpr.2016.207",
      "label": "DOI: 10.1109/cvpr.2016.207",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1501.00092.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1603.08155.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://research.googleblog.com/2015/06/inceptionism-going-deeper-into-neural.html",
      "label": "[HTML]",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1511.06394.pdf",
      "label": "[PDF]",
      "type": "a"
    },
    {
      "href": "https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/deepdream/deepdream.ipynb",
      "label": "[link]",
      "type": "a"
    },
    {
      "href": "https://github.com/distillpub/post--deconv-checkerboard/compare/ee0c32dc45f999dd8b32028bcfe2887560852861...9e00fef4eaa87c3fd604808e673b107861145c53",
      "label": "View all changes",
      "type": "a"
    },
    {
      "href": "https://github.com/distillpub/post--deconv-checkerboard/issues/new",
      "label": "create an issue on GitHub",
      "type": "a"
    },
    {
      "href": "https://creativecommons.org/licenses/by/2.0/",
      "label": "CC-BY 2.0",
      "type": "a"
    },
    {
      "href": "https://github.com/distillpub/post--deconv-checkerboard",
      "label": "source available on GitHub",
      "type": "a"
    },
    {
      "href": "http://distill.pub/about/",
      "label": "About",
      "type": "a"
    },
    {
      "href": "http://distill.pub/journal/",
      "label": "Submit",
      "type": "a"
    },
    {
      "href": "http://distill.pub/prize/",
      "label": "Prize",
      "type": "a"
    },
    {
      "href": "http://distill.pub/archive/",
      "label": "Archive",
      "type": "a"
    },
    {
      "href": "http://distill.pub/rss.xml",
      "label": "RSS",
      "type": "a"
    },
    {
      "href": "https://github.com/distillpub",
      "label": "GitHub",
      "type": "a"
    },
    {
      "href": "https://twitter.com/distillpub",
      "label": "Twitter",
      "type": "a"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:52:35Z",
  "source_url": "http://distill.pub/2016/deconv-checkerboard/",
  "papers": [
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1511.06434.pdf",
      "bytes": 7457198,
      "reused": false,
      "local_path": "papers/repair/acba31430a1d10daf99d.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1606.03498.pdf",
      "bytes": 2346786,
      "reused": false,
      "local_path": "papers/repair/6e7eb6d03a889233c95c.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1605.09782.pdf",
      "bytes": 5938452,
      "reused": false,
      "local_path": "papers/repair/5dae220c86ecf1fb7ccd.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1606.00704.pdf",
      "bytes": 4353783,
      "reused": false,
      "local_path": "papers/repair/b5e0d452b21b0308236c.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1603.07285.pdf",
      "bytes": 913752,
      "reused": false,
      "local_path": "papers/repair/b61fe9cb2654d748de68.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1609.07009.pdf",
      "bytes": 875076,
      "reused": false,
      "local_path": "papers/repair/53d6505093d27e6f2656.pdf"
    },
    {
      "status": "ok",
      "url": "http://www.foldl.me/uploads/papers/tr-cgans.pdf",
      "bytes": 1986510,
      "reused": false,
      "local_path": "papers/repair/8252d59496c04680c9b1.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1609.05158.pdf",
      "bytes": 3464490,
      "reused": false,
      "local_path": "papers/repair/61b4213677199533a283.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1501.00092.pdf",
      "bytes": 10894358,
      "reused": false,
      "local_path": "papers/repair/aedd98c8350d55bf1830.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1603.08155.pdf",
      "bytes": 10284657,
      "reused": false,
      "local_path": "papers/repair/b72b3621acb826b5d652.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1511.06394.pdf",
      "bytes": 1117913,
      "reused": false,
      "local_path": "papers/repair/53aca141623e4bb4f02e.pdf"
    }
  ],
  "actual_video_files": [],
  "body_chars": 20125,
  "expected_body_images": 36,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/d3170b5a8f4f/pages/source.html",
  "local_html": "attachments/d3170b5a8f4f/pages/article.html",
  "body_base_path": "attachments/d3170b5a8f4f/pages/",
  "body_markdown_path": "attachments/d3170b5a8f4f/pages/article.md"
}