https://github.com/ntedgi/node-efficientnet
tensorflowJS implementation of EfficientNet 🚀
https://github.com/ntedgi/node-efficientnet
classification deep-learning efficientnet efficientnet-model hacktoberfest image-classification image-recognition imagenet mobilenet pretrained-models tensorflow tfjs
Last synced: 8 months ago
JSON representation
tensorflowJS implementation of EfficientNet 🚀
- Host: GitHub
- URL: https://github.com/ntedgi/node-efficientnet
- Owner: ntedgi
- License: mit
- Created: 2020-12-26T17:05:02.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2024-02-15T00:52:38.000Z (almost 2 years ago)
- Last Synced: 2025-03-28T19:08:35.549Z (8 months ago)
- Topics: classification, deep-learning, efficientnet, efficientnet-model, hacktoberfest, image-classification, image-recognition, imagenet, mobilenet, pretrained-models, tensorflow, tfjs
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/node-efficientnet
- Size: 62.2 MB
- Stars: 260
- Watchers: 4
- Forks: 36
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-list-for-developers - Node Efficientnet
README
# TensorflowJS EfficientNet
  [](https://codecov.io/gh/ntedgi/node-efficientnet)
[](https://www.codacy.com/gh/ntedgi/node-efficientnet/dashboard?utm_source=github.com&utm_medium=referral&utm_content=ntedgi/node-efficientnet&utm_campaign=Badge_Grade)
[](https://repl.it/github/ntedgi/node-efficientnet)
[](https://gitter.im/node-efficientnet/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
This repository contains a tensorflowJs implementation of **EfficientNet**,
an object detection model trained on [ImageNet](http://www.image-net.org/) and can detect [1000 different objects](https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt).
EfficientNet a lightweight convolutional neural network architecture achieving the [state-of-the-art accuracy with an order of magnitude fewer parameters and FLOPS](https://arxiv.org/abs/1905.11946), on both ImageNet and
five other commonly used transfer learning datasets.
The codebase is heavily inspired by the [TensorFlow implementation](https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet).

#
## 👏 Supporters
### ↳ Stargazers
[](https://github.com/ntedgi/node-efficientnet/stargazers)
### ↳ Forkers
[](https://github.com/ntedgi/node-efficientnet/network/members)
## Multilingual status
| locale | status | translate by 👑 |
|:-------:|:--------------------------:|:------------------------------------------:|
| `en` | ✅ | |
| `zh` | ✅ | [@luoye-fe](https://github.com/luoye-fe) |
| `es` | ✅ | [@h383r](https://github.com/h383r) |
| `ar` | ✅ | [@lamamyf](https://github.com/lamamyf) |
| `ru` | ✅ | [@Abhighyaa](https://github.com/Abhighyaa) |
| `he` | ✅ | [@jhonDoe15](https://github.com/jhonDoe15) |
| `fr` | ✅ | [@burmanp](https://github.com/burmanp) |
| `other` | ⏩ (need help, PR welcome ) | |
## Table of Contents
1. [Just Want to Play With The Model](#how-i-run-this-project-locally-)
2. [Installation](#installation)
3. [API](#api)
4. [Examples](#examples)
5. [Usage](#usgae)
6. [About EfficientNet Models](#about-efficientnet-models)
7. [Models](#models)
8. [Multilingual status](#multilingual-status)
## How I Run This Project Locally ?
- clone this repository
- Just Want to Play ?
- At the root project go to playground directory, Run: `docker-compose up`
- Navigate to http://localhost:8080
## Usage:
EfficientNet has 8 different model checkpoints each checkpoint as different input layer resolution
for larger input layer resolution, the greater the accuracy and the running time is slower.
for example lets take this images:
Model
Prediction
EfficientNetB0
('Giant panda',83.607) , ( 'Skunk',11.61) , ('hog',4.772)
EfficientNetB7
('Giant panda',90.406) , ( 'American black bear',7.07) , ('Badger',2.5192)
Model
Prediction
EfficientNetB3
('goldfish, Carassius auratus',82.5) , ( 'starfish, sea star',9.26) , ('corn'',7.33)
EfficientNetB7
('goldfish, Carassius auratus',97.5) , ( 'starfish, sea star',1.46) , ('corn'',0.93)
Model
Prediction
EfficientNetB0
('Sports Car',88.02) , ( 'racing car',6.647) , ('car wheel',5.32)
EfficientNetB7
('Sports Car',87.68) , ( 'convertible'',7.831) , ('car wheel',4.485)
Model
Prediction
EfficientNetB0
('revolver',85.52) , ( 'assault rifle',9.85) , ('rifle',4.6197)
EfficientNetB7
('revolver',88.13) , ( 'rifle',8.29) , ('assault rifle',3.56)
#
## Installation
```node
npm i --save node-efficientnet
```
## API
### `EfficientNetCheckPointFactory.create(checkPoint: EfficientNetCheckPoint, options?: EfficientNetCheckPointFactoryOptions): Promise`
Example: to create an efficientnet model you need to pass `EfficientNetCheckPoint`
(available checkpoint [B0..B7]) each one of them represent different model
```javascript
const {
EfficientNetCheckPointFactory,
EfficientNetCheckPoint,
} = require("node-efficientnet");
const model = await EfficientNetCheckPointFactory.create(
EfficientNetCheckPoint.B7
);
const path2image = "...";
const topResults = 5;
const result = await model.inference(path2image, {
topK: topResults,
locale: "zh",
});
```
Of course, you can use local model file to speed up loading
You can download model file from [efficientnet-tensorflowjs-binaries](https://github.com/ntedgi/efficientnet-tensorflowjs-binaries), please keep the directory structure consistent, just like:
```
local_model
└── B0
├── group1-shard1of6.bin
├── group1-shard2of6.bin
├── group1-shard3of6.bin
├── group1-shard4of6.bin
├── group1-shard5of6.bin
├── group1-shard6of6.bin
└── model.json
```
```javascript
const path = require("path");
const {
EfficientNetCheckPointFactory,
EfficientNetCheckPoint,
} = require("node-efficientnet");
const model = await EfficientNetCheckPointFactory.create(
EfficientNetCheckPoint.B7,
{
localModelRootDirectory: path.join(__dirname, "local_model"),
}
);
const path2image = "...";
const topResults = 5;
const result = await model.inference(path2image, {
topK: topResults,
locale: "zh",
});
```
#
## Examples
download files from remote and predict using model
```js
const fs = require("fs");
const nodeFetch = require("node-fetch");
const {
EfficientNetCheckPointFactory,
EfficientNetCheckPoint,
} = require("node-efficientnet");
const images = ["car.jpg", "panda.jpg"];
const imageDir = "./samples";
const imageDirRemoteUri =
"https://raw.githubusercontent.com/ntedgi/node-EfficientNet/main/samples";
if (!fs.existsSync(imageDir)) {
fs.mkdirSync(imageDir);
}
async function download(image, cb) {
const response = await nodeFetch.default(`${imageDirRemoteUri}/${image}`);
const buffer = await response.buffer();
fs.writeFile(`${imageDir}/${image}`, buffer, cb);
}
EfficientNetCheckPointFactory.create(EfficientNetCheckPoint.B2)
.then((model) => {
images.forEach(async (image) => {
await download(image, () => {
model.inference(`${imageDir}/${image}`).then((result) => {
console.log(result.result);
});
});
});
})
.catch((e) => {
console.error(e);
});
```
output :
```js
[
{ label: "sports car, sport car", precision: 88.02440940394301 },
{
label: "racer, race car, racing car",
precision: 6.647441678387659,
},
{ label: "car wheel", precision: 5.3281489176693295 },
][
({
label: "giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca",
precision: 83.60747593436018,
},
{ label: "skunk, poleca", precision: 11.61300759424677 },
{
label: "hog, pig, grunter, squealer, Sus scrofa",
precision: 4.779516471393051,
})
];
```
#
## About EfficientNet Models
EfficientNets rely on AutoML and compound scaling to achieve superior performance without compromising resource efficiency. The [AutoML Mobile framework](https://ai.googleblog.com/2018/08/mnasnet-towards-automating-design-of.html) has helped develop a mobile-size baseline network, **EfficientNet-B0**, which is then improved by the compound scaling method to obtain EfficientNet-B1 to B7.
#
EfficientNets achieve state-of-the-art accuracy on ImageNet with an order of magnitude better efficiency:
- In high-accuracy regime, EfficientNet-B7 achieves the state-of-the-art 84.4% top-1 / 97.1% top-5 accuracy on ImageNet with 66M parameters and 37B FLOPS. At the same time, the model is 8.4x smaller and 6.1x faster on CPU inference than the former leader, [Gpipe](https://arxiv.org/abs/1811.06965).
- In middle-accuracy regime, EfficientNet-B1 is 7.6x smaller and 5.7x faster on CPU inference than [ResNet-152](https://arxiv.org/abs/1512.03385), with similar ImageNet accuracy.
- Compared to the widely used [ResNet-50](https://arxiv.org/abs/1512.03385), EfficientNet-B4 improves the top-1 accuracy from 76.3% of ResNet-50 to 82.6% (+6.3%), under similar FLOPS constraints.
#
## Models
The performance of each model variant using the pre-trained weights converted from checkpoints provided by the authors is as follows:
| Architecture | @top1\* Imagenet | @top1\* Noisy-Student |
| -------------- | :--------------: | :-------------------: |
| EfficientNetB0 | 0.772 | 0.788 |
| EfficientNetB1 | 0.791 | 0.815 |
| EfficientNetB2 | 0.802 | 0.824 |
| EfficientNetB3 | 0.816 | 0.841 |
| EfficientNetB4 | 0.830 | 0.853 |
| EfficientNetB5 | 0.837 | 0.861 |
| EfficientNetB6 | 0.841 | 0.864 |
| EfficientNetB7 | 0.844 | 0.869 |
**\*** - topK accuracy score for converted models (imagenet `val` set)
---
```ts
if (this.repo.isAwesome || this.repo.isHelpful) {
Star(this.repo);
}
```