start	end	text
0	5160	Hi, I'm Katie Doroshek. I am coming from the University of Washington from the Paul G.
5160	10180	Allen School of Computer Science and Engineering with the Molecular Information Systems Lab,
10180	15180	where we are really interested in doing interesting things with storing information in DNA and
15180	22360	different types of sensing that kind of appeals to the DIY audience a little bit. So the project
22360	26800	that I'm going to talk about today is called Porcupine, which is doing rapid and robust
26800	32160	tagging of physical objects using DNA with highly separable nanopore signatures, or in
32280	36800	a little bit more accessible terms, we tag stuff with DNA and we use nanopores. That's
36800	42500	really all we're talking about here. So when we're talking about molecular tags, we are
42500	48320	using DNA to identify physical objects. This is kind of in, could be in the same world
48320	53940	as QR codes and RFID tags, but essentially we want to be able to tag an object with DNA,
53940	57380	ship it or store it somewhere, and then be able to read it back on the other side and
57380	62540	say, is this the same object? What's the information in the tag? Or is it completely wrong? And
62540	66900	some applications of this include tracking and provenance. So you might have a high value
66900	70580	item that you want to be able to make sure it's the same at the beginning and end of
70580	77720	the transaction. Secret exchange and counterfeit detection. So maybe you've got a set of pills
77720	82620	and you only want to be able to sample a few of them at a time. You could do that with
82700	89500	a system like this. And we ended up using the Nanopore MinION device to detect these
89500	95020	molecular tags. Some of our system requirements were that we wanted this to be DIY end-to-end
95020	101040	by non-experts and not require a full biolab. I myself am a computer scientist and this
101040	106160	is something that I can do with maybe a little bit of supervision, so it's not too challenging.
106420	110800	And we wanted to be able to generate arbitrary tags on demand without having to do more DNA
110800	116260	synthesis. This is one of the most expensive parts of encoding information when using DNA
116260	121080	and so if we can do that ahead of time and just be able to copy it instead of having
121080	126900	to generate new DNA for every piece of new information, that can save a lot of cost.
127720	132960	We wanted to be able to decode quickly and accurately and also use minimal special equipment.
132960	141240	So the Nanopore really fits pretty well with this kind of application. One challenge for
141240	144640	typical sequencers is that they're often inaccessible to pretty much everybody except
144640	149820	for very, very well-funded labs. These cost anywhere from tens to hundreds of thousands
149820	153880	of dollars, which doesn't necessarily mean that they're bad, but it's just not very useful
153880	159060	for DIY. And they're pretty large, they sit on a big bench top. I'm sure many of you have
159060	164620	seen them before, but it's really hard to compare to this candy bar-sized device that
164620	171200	can just be plugged into your laptop. And here's a picture of it plugged into a laptop.
171300	176140	All the things that you need to run this are very small, like pipettes, a small centrifuge,
176140	182300	so it doesn't require the whole lab. And just to briefly run over how this works, I took
182300	189700	this diagram from a Nature article. Basically, there is this thin membrane that is present
189700	194600	with little nanoscale pores, and there's an ionic current that is being run across this
194600	201440	thing, and the current is being measured over time. And then the DNA is prepared such that
201440	207800	there is an enzyme that will unwind the DNA for you, and it will flow through this pore.
207860	214400	As the DNA gets unwound and is flying through, the current changes a little bit, and so you
214400	219320	can go back and tell what DNA was in the pore based on what the current looks like. There's
219320	227320	this little diagram in this corner here that shows basically different ionic current traces
227320	232280	for each base. Now typically these will all be concatenated together, and we'll go back up to
232280	238520	this open channel state, but it's really just a time series of ionic current measurements instead
238520	247720	of actually directly reading the bases. So when we are creating a molecular tag within porcupine,
247720	254180	what we start out with is just like any other digital tag, any RFID tag or QR code or anything,
254180	259180	it's basically just digital information, a bunch of bits and ones and zeros. And each different
259180	265180	bit is assigned a different type of DNA. So what will happen is you've got physically a little
265180	272400	vial of this particular set of molecular bits that we call them. So when you have a bit that is one,
272400	277780	you'll pipette that bit into the molecular tag mixture, and if it's zero, you completely leave
277780	282400	it out. So we're really encoding information via presence or absence of these different types of
282400	289400	DNA. Then we will apply this tag mixture to an object when dehydrated, ship it or store it
289400	295140	somewhere, and then rehydrate the molecular tag using a buffer solution. We'll then load it into
295140	302580	MinION and read it out using some software that we created. When we are actually creating
302580	306500	these molecular tags, we're not just encoding the information directly, we've kind of got a step
306500	311220	in there that is adding some error correction. So we have a digital tag that's a little bit shorter,
311220	315900	code word that's longer, that has some additional bits in order to add some error correction,
315900	321440	which I'll talk about more later, but then we are going to the molecular bits and the molecular tag.
323820	330940	And a single molecule is made of a unique sequence and a specific length. So this is the
330940	336740	part that lets us create more bits without having to sequence to create more DNA. So we have
336740	342920	our barcode sequence at the very beginning of the strand, then a spacer, and then another barcode
342920	348980	sequence and a sequencing adapter. And typically when encoding information in DNA, the information
348980	354960	is recorded throughout the entire strand. And so I often get asked, why wouldn't you take advantage
354960	362360	of the incredible density of DNA to make this happen? And really this comes down to creating
362360	368000	more bits without having to synthesize more DNA. We start out with our nice little well plate of
368000	373440	96 sequences, and if we just add two different lengths, we have 192 mole bits without ever
373440	382480	having to go back to ask IDT for more short strands for us. And then the second part of it
382480	387760	is that having this unique identifiable region means that we can avoid base calling. So when we
387760	393240	turn this complicated nanopore signal into bases, it takes a very, very long time and it's very
393240	399560	complex. And that is the largest source of the error in the pipeline for working with
399560	403720	nanopore data, where we actually have a much simpler problem. We're not trying to identify
403720	411020	any DNA, just the DNA that we know is already there. So we can turn this into a classification
411020	416480	problem instead of a decoding problem. That saves a lot of time and increases our accuracy pretty
416480	425520	dramatically. And we design molecular bits to have distinct nanopore signals. We do this using a tool
425520	431760	called Scrappy that is produced by Oxford Nanopore itself. So we can give it a sequence, it will
431760	437360	produce a theoretical signal, and then this is the actual nanopore signal. And we didn't really
437360	443040	cherry-pick one of these. They kind of all look similar, maybe a little bit stretched or narrower,
443040	450020	but this allows us to really be able to design these sequences to look different, which makes
450020	456440	our problem a lot easier. When we are designing these sequences, we're using an evolutionary
456440	461620	process. We're starting out with an initial batch of them. We throw our 90 sticks in our virtual
461620	468860	well plate, simulate what they look like, and then compute how different they are. And we will then
468860	475840	start an evolutionary process where we shuffle them, mutate them, and then make sure that we're
475840	481080	improving things. It's kind of like a guess and check method that will make these look visually
481080	490540	different. And basically the lighter colors here are more similar, so they look like similar
490540	495920	swiggles. And then you can see that this guy looks very different from this after this full process
495920	501740	here. I don't want to pretend like this is the first time anybody has come up with anything that
501740	507460	is working with raw nanopore data. There's in particular a group that is working with
507460	514760	demultiplexing. And for anybody unfamiliar, multiplexing is a tool that is used to add
514760	521600	barcodes on to a sample so that any reads that you get back out on the other side can be associated
521600	527300	with a particular sample. And then at the end you can go separate things out and make it so that you
527300	533200	are only working on your one sample at a time. And what they've done in this case is taken
533860	540000	the barcodes that Oxford Nanopore has produced for multiplexing, they found a subset of them,
540000	547800	and then can identify those using the raw nanopore signal. One challenge that they have is that they
547800	553360	didn't have the ability to design them specifically to identify them later, meaning that they are
553360	559240	working with a much more challenging problem than we are. But it's a pretty cool tool and
559240	566940	it's been very useful for folks. And then another one, it's currently you can't just go buy
568220	572420	multiplexing barcodes for RNA. And so there's a group that developed four barcodes that they
572420	576620	could then identify, which is really similar to what we're doing. We kind of developed it
576620	579560	independently, but it is a similar process.
582060	586600	However, and the way that all of these work is kind of classifying them similarly. We're
586600	593240	trying to just identify what little barcode is present in the individual reads. Our training
593240	597780	data, we label the squiggles using sequencing data and then spread all the bits across a bunch
597780	604420	of different runs, then test data with half of the bits, and we ended up using a five-layer CNN with
604700	608580	a fully connected layer and softmax. And this is all stuff that I'm happy to answer more questions
608580	617960	about in greater detail later if desired. Our classification accuracy is very high. And the
617960	622260	only reason that I actually say this is to show you that identifying mole bits is a totally
622260	628900	non-issue. Our training accuracy is like 99.9 something, validation 97.7. It's kind of to the
628900	635780	point where it's not really an issue for us to be able to identify the mole bits. However,
636920	640660	identifying what the tag is based on the mole bits can be a little bit more challenging.
641780	646580	Now that we have our sandbox, we've got our molecular bits and we have a way to read them,
646580	652480	the question is what should we encode and how should we encode it? We have our 96 bits and we
652480	657880	have kind of our framework where we might want to expand our digital tag, but we have to think about
657880	664180	how we might want to do that. The most naive encoding scheme of course is mapping one digital
664180	669120	bit to one molecular bit. And this is of course not ideal because one bit error means that you
669120	674600	completely get the entire tag wrong. And so we want to add some error correction as alluded to
674600	680440	previously. What we'll do is we'll reserve some bits for the tag and then use the rest of them
680440	686820	to correct errors. And in our case we picked a 32-bit message and then multiplied by a 32 by 96
686820	692540	random generator matrix to produce a code word which then gets put in the molecular tag.
692860	698640	And this allows us to get up to 18 bits wrong, which is an enormous amount without ever worrying
698640	703400	about whether we're going to get the tag wrong. This is something that can also be chosen depending
703400	709080	on the application. It's just an example that we have for basically our paper that we wrote.
709080	713820	But if you wanted to take these 96 bits and use them in another way, there's nothing that
713820	721760	would stop anybody from doing that. So just to briefly walk through encoding an actual message
721760	726900	here because it's a little bit hard to kind of to connect the two. We'll start out with our digital
726900	731820	tag here. We've got, we've encoded, we had to encode our molecular information systems lab
731820	737920	of course. And then we added our bits for the code word. Then we'll go through the process
737920	743320	of actually encoding and sequencing and doing all the wet lab stuff. And then what we'll get back
743320	749680	out of the sequencing machine is a set of read counts. So how many, how many times did we observe
749680	755500	that particular molecular bit? And then we have to decide like at what point do we want to set it to
755500	760800	one, but at what point do we want to set it to zero? So we have a threshold here where anything
760800	766320	that is above this line we'll set to one and below it is zero. And then we get a few incorrect bits.
766320	773180	This is okay. We have fewer than our 18, so we'll still decode correctly. But we also realize
773180	778880	that there's kind of a large variation in read counts here. And we found that this was reproducible.
778900	783100	Still cannot figure out why. I'm more than happy to talk to people about why this might be happening
783100	789100	because we've tried a million things. But it's reproducible so we're able to rescale the counts
789100	795800	and essentially what happens is that we get no bit errors after doing that. And we recover our final,
795800	804820	final decoded message here. So our final results, we are talking about how long does it take to
804820	810580	actually decode a message. Do you need to run this for hours? Overnight? Seconds? Minutes? And so what
810580	816060	we have here is on the x-axis we've got our sequencing runtime in seconds in the log scale.
816060	822300	And then we've got our code word distance over here. So you can imagine that in reality you
822300	830160	could possibly get all 96 bits wrong. However, because we have used error correcting codes,
830160	838060	the maximum or the minimum distance between all of them is 18 bits. So if you get 19 bits wrong,
838060	843480	in some cases you'll actually get a totally different code word. So in this context with
843480	848880	the error correction, the maximum number of bits can be anywhere from like 18 to 20-ish.
849860	855880	And so what we have here is, as expected, as your sequencing runtime goes down,
855880	860020	or as your sequencing runtime increases, the chance of you getting the message wrong goes
860020	864720	down because you've absorbed enough reads to be really confident. Each x here is an incorrect
864720	870400	decoding and then our dashed line is guaranteed correct decoding with error correction.
872360	878680	And we are able to decode with only about 10 seconds of data, which is really nice because
878680	883220	with nanopore sequencing you can just stop at any point. You don't have to keep running this
883220	887260	for hours and hours because the process doesn't require you to do that. It's just physical
887980	896300	strands flowing through this membrane. And what this means is that we can do pretty close to
896300	903560	real-time reading. Another cool thing is that we've made the molecular tags shelf-stable.
903560	907320	This is really important for basically any kind of application you can think of where
907320	912080	you'd want to tag something for more than a few minutes. You want to be able to ship or store
912080	918160	your object, but then afterwards we can rehydrate it and then read it, and that has been a crucial
918160	923660	part of this. So we'll prepare this take for sequencing immediately after assembling the tag.
923720	929060	This is a step that takes about one to two hours, so we are front-loading all the lab work
929540	933940	on the writing side, meaning when you go to read it you don't have to spend
933940	941640	hardly any time at all, like seconds. We also sent a tag in the mail and just through regular
941640	946860	mail like USPS to California and we could recover everything after about four weeks.
946900	952920	I'm not sure what the upper bound is on how long these things will last, but we basically
952920	959320	got the same sample back that we sent. So I think there's a lot of work to be done
959320	967960	and figuring out what are the bounds on what kind of surfaces these things can be attached
967960	973260	to and how long they will last, but initial results are kind of promising for these being
973260	978620	actually stable. And then because we're attaching the sequencing adapter ahead of time, the part
978620	983900	that's actually doing the unwinding of the DNA, you can't get any contamination. It's just not
983900	989820	possible to happen after that process is completed because you have to have that adapter in order for
989820	995860	it to be read. And so putting it on a surface means that you could have someone's like environmental
995860	1004000	DNA or anything and it will still mostly read out fine. Another big question I get is like,
1004000	1010740	okay cool, but what can we actually use this for? And we haven't really explored the extent of what
1010740	1015920	kinds of surfaces or anything that this could be used on, but we can think of things that are
1015920	1022680	traditionally difficult to tag with QR codes and RFID codes and such. This might include things
1022680	1028220	like liquids, maybe food with some safety testing. We make no claims about it actually being safe
1028220	1036460	for food without testing. Paper and commodities. So maybe you have a supply chain where you want
1036460	1041740	to take everything and then only read back a few of them. You can really amortize the cost
1041740	1048340	because reading is going to be the highest cost in this process. And there's some prior work that
1048340	1054180	demonstrates some DNA encapsulation methods. These methods add some time and effort to the process,
1054180	1060080	but they could be used to further extend the life past what this would normally live on its own for.
1061560	1068540	So in summary, we have our molecular tagging system that uses our DNA to tag physical objects.
1069000	1074180	The design uses an evolutionary model for nanopore orthogonal sequences, making them
1074180	1078880	look visually as different as possible and essentially trying to make our classification
1078880	1086140	problem easier. And then we classify using a CNN. We will encode and decode using our
1086140	1092580	random generator matrix, but again, agnostic to any type of encoding that you want to use.
1092580	1098060	And we can get readout with less than 10 seconds of data. Future work might be like using a
1098060	1103180	generative model to design these instead of an evolutionary model that's a guess and check.
1103820	1108580	And also considering these different kinds of encoding and decoding methods that might be
1108580	1114780	able to take advantage of different parts of the known error in the system, which we haven't really
1114780	1120980	done at all. Another thing to consider, especially because this is a security-minded conference,
1120980	1129760	is what kind of security this actually provides. And one nice thing is that DNA is invisible.
1129760	1136200	However, security by obfuscation is not always the right kind of security. It can be good in
1136200	1140940	some circumstances, but you're never going to fool anybody who's really dedicated to
1140940	1147020	getting access to this just by making it invisible. And so there are applications where
1147020	1151920	this would be useful and maybe not, and I'm really curious if anybody has thoughts on
1153180	1159980	maybe this sparked some kind of interesting application that we haven't thought of yet.
1161260	1166340	I also just wanted to give a really quick plug for the other things that our lab is doing,
1166340	1170540	because I think it's really cool and I only work on a very small segment of this.
1170940	1175500	Our lab works primarily on something called DNA data storage, where we're trying to store
1175500	1182100	information in DNA and read it back later, but not in terms of presence or absence,
1182100	1189420	but actually encoding information in the bases of the DNA. And this has been pretty far developed,
1190060	1198320	but still, the writing aspect is very expensive. The cheapest I've ever seen DNA for is like
1198320	1202560	seven cents per base, which is astronomical when you consider large volumes of DNA.
1203240	1208640	And that's been a pretty large barrier, but it's part of our, I think, what's a really cool,
1208640	1214560	cool idea. DNA security. So this is part of our lab called CyBioSecurity. One paper that
1214560	1222680	came out recently was talking about the GenBank system and some of the security implications.
1222680	1228860	You also have microfluidic automation, so how do you abstract away some of the tedious parts
1228860	1236780	of working in the lab, and then DNA circuits. And of course, nanopore sensing is what I personally
1236780	1244940	work on. And with that, I will wrap up and I'm happy to take any questions in the live Q&A after
1244940	1248140	the session. Thank you.
