1 00:00:00,000 --> 00:00:02,040 Hi, I'm Katie Doroshek. 2 00:00:02,040 --> 00:00:05,160 I am coming from the University of Washington from the Paul G. 3 00:00:05,160 --> 00:00:21,540 Allen School of Computer Science and Engineering with the Molecular Information Systems Lab, where we are really interested in doing interesting things with storing information in DNA and different types of sensing that kind of appeals to the DIY audience a little bit. 4 00:00:21,540 --> 00:00:36,460 So the project that I'm going to talk about today is called Porcupine, which is doing rapid and robust tagging of physical objects using DNA with highly separable nanopore signatures, or in a little bit more accessible terms, we tag stuff with DNA and we use nanopores. 5 00:00:36,460 --> 00:00:38,920 That's really all we're talking about here. 6 00:00:39,880 --> 00:00:45,400 So when we're talking about molecular tags, we are using DNA to identify physical objects. 7 00:00:45,400 --> 00:00:58,900 This is kind of in, could be in the same world as QR codes and RFID tags, but essentially we want to be able to tag an object with DNA, ship it or store it somewhere, and then be able to read it back on the other side and say, is this the same object? 8 00:00:59,360 --> 00:01:00,720 What's the information in the tag? 9 00:01:00,720 --> 00:01:02,020 Or is it completely wrong? 10 00:01:02,360 --> 00:01:05,680 And some applications of this include tracking and provenance. 11 00:01:05,680 --> 00:01:11,560 So you might have a high value item that you want to be able to make sure it's the same at the beginning and end of the transaction. 12 00:01:12,400 --> 00:01:15,080 Secret exchange and counterfeit detection. 13 00:01:15,280 --> 00:01:21,580 So maybe you've got a set of pills and you only want to be able to sample a few of them at a time. 14 00:01:21,780 --> 00:01:23,980 You could do that with a system like this. 15 00:01:25,680 --> 00:01:30,760 And we ended up using the Nanopore MinION device to detect these molecular tags. 16 00:01:30,840 --> 00:01:39,080 Some of our system requirements were that we wanted this to be DIY end-to-end by non-experts and not require a full biolab. 17 00:01:39,080 --> 00:01:46,160 I myself am a computer scientist and this is something that I can do with maybe a little bit of supervision, so it's not too challenging. 18 00:01:46,420 --> 00:01:51,720 And we wanted to be able to generate arbitrary tags on demand without having to do more DNA synthesis. 19 00:01:51,820 --> 00:02:06,900 This is one of the most expensive parts of encoding information when using DNA and so if we can do that ahead of time and just be able to copy it instead of having to generate new DNA for every piece of new information, that can save a lot of cost. 20 00:02:07,720 --> 00:02:12,960 We wanted to be able to decode quickly and accurately and also use minimal special equipment. 21 00:02:12,960 --> 00:02:17,280 So the Nanopore really fits pretty well with this kind of application. 22 00:02:19,820 --> 00:02:26,900 One challenge for typical sequencers is that they're often inaccessible to pretty much everybody except for very, very well-funded labs. 23 00:02:27,000 --> 00:02:34,900 These cost anywhere from tens to hundreds of thousands of dollars, which doesn't necessarily mean that they're bad, but it's just not very useful for DIY. 24 00:02:35,160 --> 00:02:38,000 And they're pretty large, they sit on a big bench top. 25 00:02:38,000 --> 00:02:46,780 I'm sure many of you have seen them before, but it's really hard to compare to this candy bar-sized device that can just be plugged into your laptop. 26 00:02:48,320 --> 00:02:51,200 And here's a picture of it plugged into a laptop. 27 00:02:51,300 --> 00:02:58,740 All the things that you need to run this are very small, like pipettes, a small centrifuge, so it doesn't require the whole lab. 28 00:02:59,080 --> 00:03:05,500 And just to briefly run over how this works, I took this diagram from a Nature article. 29 00:03:05,720 --> 00:03:19,260 Basically, there is this thin membrane that is present with little nanoscale pores, and there's an ionic current that is being run across this thing, and the current is being measured over time. 30 00:03:19,440 --> 00:03:27,800 And then the DNA is prepared such that there is an enzyme that will unwind the DNA for you, and it will flow through this pore. 31 00:03:27,860 --> 00:03:38,900 As the DNA gets unwound and is flying through, the current changes a little bit, and so you can go back and tell what DNA was in the pore based on what the current looks like. 32 00:03:38,900 --> 00:03:48,780 There's this little diagram in this corner here that shows basically different ionic current traces for each base. 33 00:03:48,800 --> 00:04:01,100 Now typically these will all be concatenated together, and we'll go back up to this open channel state, but it's really just a time series of ionic current measurements instead of actually directly reading the bases. 34 00:04:04,060 --> 00:04:17,900 So when we are creating a molecular tag within porcupine, what we start out with is just like any other digital tag, any RFID tag or QR code or anything, it's basically just digital information, a bunch of bits and ones and zeros. 35 00:04:18,300 --> 00:04:21,940 And each different bit is assigned a different type of DNA. 36 00:04:21,940 --> 00:04:30,340 So what will happen is you've got physically a little vial of this particular set of molecular bits that we call them. 37 00:04:30,460 --> 00:04:38,520 So when you have a bit that is one, you'll pipette that bit into the molecular tag mixture, and if it's zero, you completely leave it out. 38 00:04:38,520 --> 00:04:43,180 So we're really encoding information via presence or absence of these different types of DNA. 39 00:04:44,040 --> 00:04:54,080 Then we will apply this tag mixture to an object when dehydrated, ship it or store it somewhere, and then rehydrate the molecular tag using a buffer solution. 40 00:04:54,080 --> 00:04:59,460 We'll then load it into MinION and read it out using some software that we created. 41 00:05:01,060 --> 00:05:08,800 When we are actually creating these molecular tags, we're not just encoding the information directly, we've kind of got a step in there that is adding some error correction. 42 00:05:08,800 --> 00:05:21,440 So we have a digital tag that's a little bit shorter, code word that's longer, that has some additional bits in order to add some error correction, which I'll talk about more later, but then we are going to the molecular bits and the molecular tag. 43 00:05:23,820 --> 00:05:30,480 And a single molecule is made of a unique sequence and a specific length. 44 00:05:30,480 --> 00:05:36,080 So this is the part that lets us create more bits without having to sequence to create more DNA. 45 00:05:36,200 --> 00:05:45,000 So we have our barcode sequence at the very beginning of the strand, then a spacer, and then another barcode sequence and a sequencing adapter. 46 00:05:45,200 --> 00:05:51,800 And typically when encoding information in DNA, the information is recorded throughout the entire strand. 47 00:05:52,120 --> 00:05:59,180 And so I often get asked, why wouldn't you take advantage of the incredible density of DNA to make this happen? 48 00:05:59,760 --> 00:06:05,280 And really this comes down to creating more bits without having to synthesize more DNA. 49 00:06:05,280 --> 00:06:19,680 We start out with our nice little well plate of 96 sequences, and if we just add two different lengths, we have 192 mole bits without ever having to go back to ask IDT for more short strands for us. 50 00:06:20,880 --> 00:06:26,640 And then the second part of it is that having this unique identifiable region means that we can avoid base calling. 51 00:06:27,240 --> 00:06:34,540 So when we turn this complicated nanopore signal into bases, it takes a very, very long time and it's very complex. 52 00:06:34,900 --> 00:06:42,880 And that is the largest source of the error in the pipeline for working with nanopore data, where we actually have a much simpler problem. 53 00:06:42,880 --> 00:06:48,260 We're not trying to identify any DNA, just the DNA that we know is already there. 54 00:06:48,260 --> 00:06:53,560 So we can turn this into a classification problem instead of a decoding problem. 55 00:06:53,560 --> 00:06:57,480 That saves a lot of time and increases our accuracy pretty dramatically. 56 00:06:59,720 --> 00:07:03,940 And we design molecular bits to have distinct nanopore signals. 57 00:07:04,300 --> 00:07:08,920 We do this using a tool called Scrappy that is produced by Oxford Nanopore itself. 58 00:07:08,920 --> 00:07:16,860 So we can give it a sequence, it will produce a theoretical signal, and then this is the actual nanopore signal. 59 00:07:16,860 --> 00:07:18,840 And we didn't really cherry-pick one of these. 60 00:07:18,840 --> 00:07:31,840 They kind of all look similar, maybe a little bit stretched or narrower, but this allows us to really be able to design these sequences to look different, which makes our problem a lot easier. 61 00:07:33,120 --> 00:07:37,520 When we are designing these sequences, we're using an evolutionary process. 62 00:07:37,520 --> 00:07:39,700 We're starting out with an initial batch of them. 63 00:07:39,700 --> 00:07:47,660 We throw our 90 sticks in our virtual well plate, simulate what they look like, and then compute how different they are. 64 00:07:47,660 --> 00:07:56,960 And we will then start an evolutionary process where we shuffle them, mutate them, and then make sure that we're improving things. 65 00:07:56,960 --> 00:08:02,100 It's kind of like a guess and check method that will make these look visually different. 66 00:08:03,540 --> 00:08:11,140 And basically the lighter colors here are more similar, so they look like similar swiggles. 67 00:08:11,140 --> 00:08:16,600 And then you can see that this guy looks very different from this after this full process here. 68 00:08:18,220 --> 00:08:24,480 I don't want to pretend like this is the first time anybody has come up with anything that is working with raw nanopore data. 69 00:08:24,960 --> 00:08:28,980 There's in particular a group that is working with demultiplexing. 70 00:08:29,120 --> 00:08:43,380 And for anybody unfamiliar, multiplexing is a tool that is used to add barcodes on to a sample so that any reads that you get back out on the other side can be associated with a particular sample. 71 00:08:43,380 --> 00:08:50,760 And then at the end you can go separate things out and make it so that you are only working on your one sample at a time. 72 00:08:51,080 --> 00:09:04,800 And what they've done in this case is taken the barcodes that Oxford Nanopore has produced for multiplexing, they found a subset of them, and then can identify those using the raw nanopore signal. 73 00:09:05,900 --> 00:09:16,540 One challenge that they have is that they didn't have the ability to design them specifically to identify them later, meaning that they are working with a much more challenging problem than we are. 74 00:09:17,300 --> 00:09:21,320 But it's a pretty cool tool and it's been very useful for folks. 75 00:09:22,740 --> 00:09:30,080 And then another one, it's currently you can't just go buy multiplexing barcodes for RNA. 76 00:09:30,380 --> 00:09:35,640 And so there's a group that developed four barcodes that they could then identify, which is really similar to what we're doing. 77 00:09:35,640 --> 00:09:39,560 We kind of developed it independently, but it is a similar process. 78 00:09:42,060 --> 00:09:46,360 However, and the way that all of these work is kind of classifying them similarly. 79 00:09:46,360 --> 00:09:52,520 We're trying to just identify what little barcode is present in the individual reads. 80 00:09:52,780 --> 00:10:06,740 Our training data, we label the squiggles using sequencing data and then spread all the bits across a bunch of different runs, then test data with half of the bits, and we ended up using a five-layer CNN with a fully connected layer and softmax. 81 00:10:06,740 --> 00:10:13,340 And this is all stuff that I'm happy to answer more questions about in greater detail later if desired. 82 00:10:14,840 --> 00:10:17,740 Our classification accuracy is very high. 83 00:10:17,740 --> 00:10:23,560 And the only reason that I actually say this is to show you that identifying mole bits is a totally non-issue. 84 00:10:23,560 --> 00:10:28,100 Our training accuracy is like 99.9 something, validation 97.7. 85 00:10:28,100 --> 00:10:34,440 It's kind of to the point where it's not really an issue for us to be able to identify the mole bits. 86 00:10:34,440 --> 00:10:40,660 However, identifying what the tag is based on the mole bits can be a little bit more challenging. 87 00:10:41,780 --> 00:10:50,000 Now that we have our sandbox, we've got our molecular bits and we have a way to read them, the question is what should we encode and how should we encode it? 88 00:10:50,000 --> 00:10:59,420 We have our 96 bits and we have kind of our framework where we might want to expand our digital tag, but we have to think about how we might want to do that. 89 00:11:00,280 --> 00:11:05,920 The most naive encoding scheme of course is mapping one digital bit to one molecular bit. 90 00:11:06,240 --> 00:11:11,300 And this is of course not ideal because one bit error means that you completely get the entire tag wrong. 91 00:11:11,680 --> 00:11:15,540 And so we want to add some error correction as alluded to previously. 92 00:11:16,200 --> 00:11:21,840 What we'll do is we'll reserve some bits for the tag and then use the rest of them to correct errors. 93 00:11:22,040 --> 00:11:32,540 And in our case we picked a 32-bit message and then multiplied by a 32 by 96 random generator matrix to produce a code word which then gets put in the molecular tag. 94 00:11:32,860 --> 00:11:41,440 And this allows us to get up to 18 bits wrong, which is an enormous amount without ever worrying about whether we're going to get the tag wrong. 95 00:11:41,680 --> 00:11:44,320 This is something that can also be chosen depending on the application. 96 00:11:44,320 --> 00:11:49,080 It's just an example that we have for basically our paper that we wrote. 97 00:11:49,080 --> 00:11:55,980 But if you wanted to take these 96 bits and use them in another way, there's nothing that would stop anybody from doing that. 98 00:11:58,120 --> 00:12:05,420 So just to briefly walk through encoding an actual message here because it's a little bit hard to kind of to connect the two. 99 00:12:05,420 --> 00:12:07,880 We'll start out with our digital tag here. 100 00:12:07,880 --> 00:12:12,760 We've got, we've encoded, we had to encode our molecular information systems lab of course. 101 00:12:13,580 --> 00:12:16,500 And then we added our bits for the code word. 102 00:12:16,860 --> 00:12:21,580 Then we'll go through the process of actually encoding and sequencing and doing all the wet lab stuff. 103 00:12:21,720 --> 00:12:26,460 And then what we'll get back out of the sequencing machine is a set of read counts. 104 00:12:26,460 --> 00:12:31,760 So how many, how many times did we observe that particular molecular bit? 105 00:12:32,100 --> 00:12:38,340 And then we have to decide like at what point do we want to set it to one, but at what point do we want to set it to zero? 106 00:12:38,640 --> 00:12:44,020 So we have a threshold here where anything that is above this line we'll set to one and below it is zero. 107 00:12:44,040 --> 00:12:46,320 And then we get a few incorrect bits. 108 00:12:46,320 --> 00:12:47,640 This is okay. 109 00:12:47,640 --> 00:12:51,820 We have fewer than our 18, so we'll still decode correctly. 110 00:12:51,820 --> 00:12:56,860 But we also realize that there's kind of a large variation in read counts here. 111 00:12:56,920 --> 00:12:58,880 And we found that this was reproducible. 112 00:12:58,900 --> 00:13:00,300 Still cannot figure out why. 113 00:13:00,300 --> 00:13:05,280 I'm more than happy to talk to people about why this might be happening because we've tried a million things. 114 00:13:05,860 --> 00:13:13,620 But it's reproducible so we're able to rescale the counts and essentially what happens is that we get no bit errors after doing that. 115 00:13:13,760 --> 00:13:17,580 And we recover our final, final decoded message here. 116 00:13:19,660 --> 00:13:26,120 So our final results, we are talking about how long does it take to actually decode a message. 117 00:13:26,120 --> 00:13:27,280 Do you need to run this for hours? 118 00:13:27,280 --> 00:13:28,220 Overnight? 119 00:13:28,320 --> 00:13:28,920 Seconds? 120 00:13:28,920 --> 00:13:29,700 Minutes? 121 00:13:29,700 --> 00:13:36,060 And so what we have here is on the x-axis we've got our sequencing runtime in seconds in the log scale. 122 00:13:36,060 --> 00:13:39,860 And then we've got our code word distance over here. 123 00:13:39,880 --> 00:13:45,100 So you can imagine that in reality you could possibly get all 96 bits wrong. 124 00:13:45,100 --> 00:13:55,060 However, because we have used error correcting codes, the maximum or the minimum distance between all of them is 18 bits. 125 00:13:55,060 --> 00:14:02,460 So if you get 19 bits wrong, in some cases you'll actually get a totally different code word. 126 00:14:02,460 --> 00:14:08,880 So in this context with the error correction, the maximum number of bits can be anywhere from like 18 to 20-ish. 127 00:14:09,860 --> 00:14:23,200 And so what we have here is, as expected, as your sequencing runtime goes down, or as your sequencing runtime increases, the chance of you getting the message wrong goes down because you've absorbed enough reads to be really confident. 128 00:14:23,240 --> 00:14:30,400 Each x here is an incorrect decoding and then our dashed line is guaranteed correct decoding with error correction. 129 00:14:32,360 --> 00:14:41,520 And we are able to decode with only about 10 seconds of data, which is really nice because with nanopore sequencing you can just stop at any point. 130 00:14:41,520 --> 00:14:46,520 You don't have to keep running this for hours and hours because the process doesn't require you to do that. 131 00:14:46,520 --> 00:14:51,260 It's just physical strands flowing through this membrane. 132 00:14:52,320 --> 00:14:58,020 And what this means is that we can do pretty close to real-time reading. 133 00:14:59,360 --> 00:15:03,560 Another cool thing is that we've made the molecular tags shelf-stable. 134 00:15:03,560 --> 00:15:09,840 This is really important for basically any kind of application you can think of where you'd want to tag something for more than a few minutes. 135 00:15:10,640 --> 00:15:19,280 You want to be able to ship or store your object, but then afterwards we can rehydrate it and then read it, and that has been a crucial part of this. 136 00:15:19,280 --> 00:15:23,660 So we'll prepare this take for sequencing immediately after assembling the tag. 137 00:15:23,720 --> 00:15:36,520 This is a step that takes about one to two hours, so we are front-loading all the lab work on the writing side, meaning when you go to read it you don't have to spend hardly any time at all, like seconds. 138 00:15:37,440 --> 00:15:46,860 We also sent a tag in the mail and just through regular mail like USPS to California and we could recover everything after about four weeks. 139 00:15:46,900 --> 00:15:55,880 I'm not sure what the upper bound is on how long these things will last, but we basically got the same sample back that we sent. 140 00:15:55,880 --> 00:16:14,440 So I think there's a lot of work to be done and figuring out what are the bounds on what kind of surfaces these things can be attached to and how long they will last, but initial results are kind of promising for these being actually stable. 141 00:16:15,200 --> 00:16:23,420 And then because we're attaching the sequencing adapter ahead of time, the part that's actually doing the unwinding of the DNA, you can't get any contamination. 142 00:16:23,420 --> 00:16:31,000 It's just not possible to happen after that process is completed because you have to have that adapter in order for it to be read. 143 00:16:31,300 --> 00:16:40,460 And so putting it on a surface means that you could have someone's like environmental DNA or anything and it will still mostly read out fine. 144 00:16:42,120 --> 00:16:47,600 Another big question I get is like, okay cool, but what can we actually use this for? 145 00:16:47,620 --> 00:17:01,080 And we haven't really explored the extent of what kinds of surfaces or anything that this could be used on, but we can think of things that are traditionally difficult to tag with QR codes and RFID codes and such. 146 00:17:01,400 --> 00:17:05,560 This might include things like liquids, maybe food with some safety testing. 147 00:17:05,560 --> 00:17:10,040 We make no claims about it actually being safe for food without testing. 148 00:17:10,260 --> 00:17:12,560 Paper and commodities. 149 00:17:12,760 --> 00:17:19,780 So maybe you have a supply chain where you want to take everything and then only read back a few of them. 150 00:17:20,080 --> 00:17:25,420 You can really amortize the cost because reading is going to be the highest cost in this process. 151 00:17:26,860 --> 00:17:30,880 And there's some prior work that demonstrates some DNA encapsulation methods. 152 00:17:30,880 --> 00:17:40,080 These methods add some time and effort to the process, but they could be used to further extend the life past what this would normally live on its own for. 153 00:17:41,560 --> 00:17:48,540 So in summary, we have our molecular tagging system that uses our DNA to tag physical objects. 154 00:17:49,000 --> 00:18:00,900 The design uses an evolutionary model for nanopore orthogonal sequences, making them look visually as different as possible and essentially trying to make our classification problem easier. 155 00:18:01,260 --> 00:18:03,420 And then we classify using a CNN. 156 00:18:03,560 --> 00:18:12,580 We will encode and decode using our random generator matrix, but again, agnostic to any type of encoding that you want to use. 157 00:18:12,580 --> 00:18:15,740 And we can get readout with less than 10 seconds of data. 158 00:18:16,360 --> 00:18:22,040 Future work might be like using a generative model to design these instead of an evolutionary model that's a guess and check. 159 00:18:22,300 --> 00:18:36,640 And also considering these different kinds of encoding and decoding methods that might be able to take advantage of different parts of the known error in the system, which we haven't really done at all. 160 00:18:37,140 --> 00:18:44,140 Another thing to consider, especially because this is a security-minded conference, is what kind of security this actually provides. 161 00:18:44,320 --> 00:18:49,760 And one nice thing is that DNA is invisible. 162 00:18:49,760 --> 00:18:55,500 However, security by obfuscation is not always the right kind of security. 163 00:18:55,500 --> 00:19:04,040 It can be good in some circumstances, but you're never going to fool anybody who's really dedicated to getting access to this just by making it invisible. 164 00:19:04,540 --> 00:19:19,980 And so there are applications where this would be useful and maybe not, and I'm really curious if anybody has thoughts on maybe this sparked some kind of interesting application that we haven't thought of yet. 165 00:19:21,260 --> 00:19:30,540 I also just wanted to give a really quick plug for the other things that our lab is doing, because I think it's really cool and I only work on a very small segment of this. 166 00:19:30,940 --> 00:19:46,340 Our lab works primarily on something called DNA data storage, where we're trying to store information in DNA and read it back later, but not in terms of presence or absence, but actually encoding information in the bases of the DNA. 167 00:19:46,520 --> 00:19:55,920 And this has been pretty far developed, but still, the writing aspect is very expensive. 168 00:19:55,920 --> 00:20:02,560 The cheapest I've ever seen DNA for is like seven cents per base, which is astronomical when you consider large volumes of DNA. 169 00:20:03,240 --> 00:20:09,860 And that's been a pretty large barrier, but it's part of our, I think, what's a really cool, cool idea. 170 00:20:10,500 --> 00:20:11,740 DNA security. 171 00:20:11,740 --> 00:20:14,080 So this is part of our lab called CyBioSecurity. 172 00:20:14,080 --> 00:20:22,680 One paper that came out recently was talking about the GenBank system and some of the security implications. 173 00:20:22,680 --> 00:20:32,000 You also have microfluidic automation, so how do you abstract away some of the tedious parts of working in the lab, and then DNA circuits. 174 00:20:32,300 --> 00:20:37,780 And of course, nanopore sensing is what I personally work on. 175 00:20:38,800 --> 00:20:46,920 And with that, I will wrap up and I'm happy to take any questions in the live Q&A after the session. 176 00:20:46,920 --> 00:20:48,140 Thank you.