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: 24 days 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 (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-02-15T00:52:38.000Z (about 1 year ago)
- Last Synced: 2025-03-28T19:08:35.549Z (25 days 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-for-beginners - Node Efficientnet
- fucking-awesome-for-beginners - 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);
}
```