Counting trees with drones
For a client working in the forestry business, we designed and developed a solution to help them monitor their tree-planting projects. The ultimate goal was to create an AI engine to continuously inspect the growth of the new trees and most importantly assess their survival rate. The solution also showcases the new frontiers in the agriculture industry – agritech.
We built a software engine that made it possible to use images taken by drones to detect and count young trees with the accuracy of 90%+.
Drones flying over the area produced hundreds of 4K images. We used them to build a data set which became a foundation for neural networks training. We initially trained the network for 3000 epochs which helped us detect around 221 trees per picture (initial results). Expanding the training to 9000 epochs let us increase the number of found trees to 285 trees, translating into accuracy of 92-95% (depending on the area).
Benefits for the customer
- Ability to perform analytics using the images generated by drones and find problematic areas
- Significantly reduce the time of analyzing large areas
We started off by analyzing the data we were able to collect with a help of drones flying over the area. They produced hundreds of 4K images. So the natural first step for us was to review the pictures and process them to build a data set which would become a foundation for neural networks training. Due to the high resolution of the images, we decided to split the single 4K images into the set of smaller images. In fact, that allowed us to avoid resizing of the images, and hence to maintain an appropriate quality of the training data. Once we accomplished that, we started with the DarkNet framework to train our deep learning engine. The deep neural network which we used consisted of 27 layers, including 22 convolution layers an 5 max pooling layers. The next step was to train the network and optimize it for efficiency. Despite many things like ensuring the proper flow of data thru the network, the key challenge was to obtain a set of weights that would help us configure the network and get best possible accuracy. The network was receiving transformed images produced by drones, analyzing them and tagging the young trees. We initially trained the network for 3000 epochs which helped us detect around 221 trees per picture (initial results). Expanding the training to 9000 epochs let us increase the number of found trees to 285 trees, translating into accuracy of 92-95% (depending on the area).
The solution addresses the key pains of the IoT applications:
- Enable Scalability
(Decentralizes AI services & makes it easier to expand the IoT ecosystems)
- Enable near-real-time AI experience
(By using the modern low power, high performance, small form factor accelerators)
- Solve round-trip latencies
(Deploying AI directly on the device enables making on-the-spot decisions)
- Eliminate intermittent connectivity related issues
(No need for sending the data from the device to external AI services and waiting for results)
- Reduce costs of bandwidth
(AI-enabled devices pre-process the data and send the results to external services vs raw data)
- Data can stay locally on the device
(Having AI on the device allows for sending the data to external storages selectively)
See the video here.