Indicode.io
In December 2020, I co-founded Indicode.io with my friends Nick & Eryl to improve manufacturing quality control through deep learning. Our goal was to create a defect detection system that could work with manufacturers’ existing hardware while leveraging deep learning to identify issues. After two years of development and market exploration, we made the difficult decision to wind down the company.
Our Technical Journey
Initial Prototyping with Autoencoders
We started with autoencoders as anomaly detectors, training on synthetic data to mimic real-world scenarios. Autoencoders were an accessible first step, but we quickly noticed their limitations. Although they could detect certain types of anomalies, they didn’t generalize well to diverse manufacturing defects, which led us to reevaluate our approach.
Moving to Advanced Anomaly Detection with PaDiM
To address these challenges, we explored more sophisticated anomaly detection models, eventually selecting PaDiM (Patch Distribution Modeling) due to its effective use of the Mahalanobis distance in detecting anomalies. PaDiM operates by calculating this distance from a multivariate Gaussian distribution, allowing for more accurate anomaly detection. However, open-source versions of PaDiM weren’t optimized for our use case—they required storing every incoming sample’s latent representation and only calculated the multivariate Gaussian at the end of training, creating a substantial memory bottleneck.
Incremental Variance Calculation: To make PaDiM more efficient for edge devices, I enhanced the model by implementing an incremental approach to calculating the Gaussian parameters. This eliminated the need to store every sample, significantly reducing memory usage and enabling real-time processing on limited hardware.
Building the Hardware Demo Platform
While refining our model, we also developed a hardware demo platform that incorporated third-party industrial cameras and specialized lighting. This platform became a powerful tool to demonstrate our system in real-world conditions to potential buyers. By integrating with existing industrial equipment, we could showcase our technology’s potential in action, building credibility and creating a tangible experience for skeptical prospects.
Model Optimization and Edge Deployment
A major challenge for us was ensuring that our models could operate efficiently on consumer-grade hardware. We chose to deploy on Intel NUC i3 8th gen devices, which are affordable and widely available. I utilized ONNX to compress and optimize the PaDiM models, achieving inference times of 50ms or less. This optimization allowed our solution to run effectively within existing manufacturing workflows, removing the need for costly hardware upgrades.
By optimizing our models for edge deployment, we provided a highly accessible solution for manufacturers with limited IT infrastructure.
The Indicode Web Application
To streamline defect detection and provide a comprehensive solution for users, we developed a web application using Django, PyTorch Lightning, Celery, and DigitalOcean. This platform enabled users to manage their defect detection data, train models, and deploy them seamlessly.
Key Features of the Platform
Data Management: Users could upload, organize, and preprocess their defect detection datasets directly on the platform. This functionality simplified the data pipeline, making it easier for users to prepare their data for training and testing models without needing extensive technical knowledge.
Model Training and Deployment: Leveraging PyTorch Lightning for scalability and ease of experimentation, we integrated training pipelines directly into the application. Users could initiate and monitor training jobs, view model performance metrics, and, once satisfied, deploy models to production with just a few clicks.
Real-time Defect Detection Statistics: Once deployed, models could connect back to the web application, allowing manufacturers to view live statistics on defect detection. This integration provided a centralized dashboard for monitoring, making it easy for users to track model performance in real time, assess accuracy, and analyze potential improvements.
Task Queue Management with Celery: Using Celery allowed us to handle training tasks asynchronously, which was critical for performance. This queue-based approach enabled users to run multiple processes simultaneously.
The application offered an end-to-end experience for users, allowing them to train, deploy, and monitor models without needing to leave the platform. By building this comprehensive system, we addressed the need for both model management and real-time analytics, creating a valuable tool that could grow with users’ needs.
Where We Stumbled
Despite our technical progress, entering the manufacturing industry proved more difficult than anticipated:
Long Sales Cycles: What we thought would be 3-month sales cycles stretched into 6+ months of conversations and demonstrations.
Trust Deficit: Manufacturers were hesitant to work with an unknown startup, even when our technology showed promise.
Misaligned Incentives: Production managers had little motivation to change their existing processes, often seeing potential disruption as a greater risk than the potential benefits.
PoC Paralysis: We were frequently stuck in proof-of-concept projects that rarely converted into long-term partnerships.
Key Lessons Learned
Reflecting on our journey, several critical lessons became clear:
Sell Before Building: Too much time was spent perfecting our platform before securing solid customer commitments. Sales and customer validation should have been our focus from the beginning.
Direct Outreach is Crucial: We could have benefited from a more aggressive direct outreach approach, building trust early in the sales process.
Be Willing to Take Initial Losses: One of our biggest mistakes was not being willing to take a loss on an initial client to build credibility. A reference customer would have been invaluable.
Avoid Pre-optimization: We found ourselves over-engineering for hypothetical customer needs rather than focusing on features critical for sales.
Technical Growth
The Indicode.io project taught me a lot about:
- Building production Django applications
- Deploying ML models on-premises
- Creating pitch decks and financial projections
- B2B sales in the manufacturing sector
Tech Stack
Frontend & UI
Backend & Storage
Infrastructure
Conclusion
Although Indicode didn’t succeed, it reshaped my understanding of building startups, particularly in a complex field like manufacturing. While good technology is essential, having a market-ready product requires a deep understanding of customer needs and sales processes. Despite the hurdles, I’m proud of what we achieved with Indicode.io and the lessons it provided for future projects.